function buildCal(m, y, cM, cH, cDW, cD, brdr, evnts){
	var mn=['January','February','March','April','May','June','July','August','September','October','November','December'];
	var dim=[31,0,31,30,31,30,31,31,30,31,30,31];

	var oD = new Date(y, m-1, 1);
	oD.od=oD.getDay()+1;

	var todaydate=new Date();
	var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0;

	var scanforevnt = new Array();
	for (i=0;i<evnts.length;i++) {
		var evnt = evnts[i].getEventDate();
		scanforevnt[i]=(y==evnt.getFullYear() && m==evnt.getMonth()+1)? evnt.getDate() : 0;
	}

	dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;
	var t='<div class="'+cM+'"><table class="'+cM+'" cols="7" cellpadding="0" border="'+brdr+'" cellspacing="1" width="195"><tr align="center">';
	t+='<td colspan="7" align="center" class="month"><a class="nav" href="#" onClick="updatecalendar('+Math.max(m-1, 1)+'); return false;">&lt;&lt;&nbsp;</a>'+mn[m-1]+'<a class="nav" href="#" onClick="updatecalendar('+Math.min(m+1, 12)+'); return false;">&nbsp;&gt;&gt;</a></td></tr><tr align="center">';
	for(s=0;s<7;s++)t+='<td class="daysofweek">'+"SMTWTFS".substr(s,1)+'</td>';

	t+='</tr><tr align="center">';

	for (i=1;i<=42;i++) {
		var bg = cD;
		var x=((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1 : '&nbsp;';
		if (x==scanfortoday) {
			x='<span id="today">'+x+'</span>';
			bg='today';
		}	
		for (e=0;e<scanforevnt.length;e++) {
			if (x==scanforevnt[e]) {
				x='<a class="event" href="'+evnts[e].getEventUrl()+'">'+x+'</a>';
				bg = 'event';
			}
		}
		if (x != '&nbsp;')
			t+='<td class="'+bg+'">'+x+'</td>';
		else
			t+='<td class="blanksquare">'+x+'</td>';

		if(((i)%7==0)&&(i<36))t+='</tr><tr align="center">';
	}

	return t+='</tr></table></div>';
}

