function buildCal(m, y, cM, cH, cDW, cD, brdr)
{
	//now lets get the event attributes that are hidden in the document
	var eventIDs = document.getElementsByName('eventID');
	var eventCatColours = document.getElementsByName('eventCatColour');
	var boxtitle = document.getElementsByName('box_title');
	var boxbody = document.getElementsByName('box_body');
	var eventStartDates = document.getElementsByName('eventStartDate');
	var eventEndDates = document.getElementsByName('eventEndDate');
	var eventStartMonths = document.getElementsByName('eventStartMonth');
	var eventEndMonths = document.getElementsByName('eventEndMonth');
	var legend = document.getElementById('legend').value;
	
	var thisj = 0;
		
	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); //DD replaced line to fix date bug when current day is 31st
	oD.od = oD.getDay()+1; //DD replaced line to fix date bug when current day is 31st

	var todaydate = new Date() //DD added
	var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0 //DD added

	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"><tr align="center">';
	//t += '<td colspan="7" align="center" class="'+cH+'"><a href="#"><img src="images/btn-cal-prev.gif" width="6" height="8" border="0" alt="Previous" onclick="ChangeMonth(\'previous\')" /></a> &nbsp;&nbsp;<a href="departments/hr/departments-hr-employee-calendar.cfm?YR='+ y + '&MN=' + m + '">'+mn[m-1]+' '+y+ '</a>&nbsp;&nbsp;<a href="#"><img src="images/btn-cal-next.gif" width="6" height="8" border="0" alt="Next" onclick="ChangeMonth(\'next\')" /></a>'+'</td></tr><tr align="center">';
	t += '<tr align="center">';
	document.getElementById('monthdisp').innerHTML = mn[m-1]+' '+y;

	for( s=0; s<7; s++)
		t+='<td class="'+cDW+'">'+"SMTWTFS".substr(s,1)+'</td>';
	
	t+='</tr><tr align="left" valign="top">';
	
	for(i=1;i<=42;i++)
	{   
		var IDs = "";
		var blnEvents = false;
		var url="";
		var x=((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1 : '&nbsp;';
		thisj = 0;
		for (j = 0; j < eventIDs.length; j++)
		{
			if ( x >= parseInt(eventStartDates[j].value) && x <= parseInt(eventEndDates[j].value) )
			{
				if (IDs == "")
					IDs = eventIDs[j].value;
				else
					IDs += ',' + eventIDs[j].value;
				url += "<strong style='color: " + boxtitle[j].value + "'>" +  boxbody[j].value + "<br />";
				thisj = j;
				blnEvents = true;
			}
			else
				if ( parseInt(eventStartDates[j].value) > parseInt(eventEndDates[j].value) ) //if the event spans over a couple of months
				{
					if (x >= parseInt(eventStartDates[j].value) && parseInt(eventStartMonths[j].value) == m)
					{
						if (IDs == "")
							IDs = eventIDs[j].value;
						else
							IDs += ',' + eventIDs[j].value;
						url += "<strong style='color: " + boxtitle[j].value + "'>" +  boxbody[j].value + "<br />";
						thisj = j;
						blnEvents = true;
					}
					else
						if (x <= parseInt(eventEndDates[j].value) && parseInt(eventStartMonths[j].value) < m)
						{
							if (IDs == "")
							IDs = eventIDs[j].value;
							else
								IDs += ',' + eventIDs[j].value;
							url += "<strong style='color: " + boxtitle[j].value + "'>" +  boxbody[j].value + "<br />";
							thisj = j;
							blnEvents = true;
						}
				}
				
		}
		url = url.substr(0,url.length-4);
		//url = url.replace(/'/g,"\\\'");
		url = url.replace(/"/g,"");
		clearer = "<div style='clear: both'></div>";
		thedate = x + "/" + m + "/" + y;
		//if (x==15) alert(legend);
		url = '<a title="fade=[on] fadespeed=[0.3] header=['+thedate+'] body=['+legend+url+clearer+']" href="#" onClick="return false;"  style="display: block; height: 14px; text-decoration: none;">' + x + '</a>';
		//if (x==15)
		//	alert(url);
		
		if (x==scanfortoday) //DD added
		{	
			if (blnEvents)
				x = url;
			x='<span id="today">'+x+'</span>' //DD added
		}
		else 
		{
			if (blnEvents)
				x = url;
		}
		if (x == "&nbsp;")
			t+='<td class="'+cD+'" style="background: white">'+x+'</td>';
		else
		{
			if (blnEvents)
				t+='<td class="'+cD+'" style="background: '+eventCatColours[thisj].value+'">'+x+'</td>';
			else
				t+='<td class="'+cD+'">'+x+'</td>';
		}
		if( ((i)%7==0)&&(i<36) )
			t += '</tr><tr align="left" valign="top">';		
	}
	return t+='</tr></table></div>';
}

function ChangeMonth( direction )
{
	//get the current month and yer
	var curmonth = document.getElementById('month').innerHTML; //get current month (1-12)
	var curyear = document.getElementById('year').innerHTML; //get current year
	var calendarDiv = document.getElementById('calendar');
	var nextmonth, nextyear;
	
	if ( direction == "next" )
	{
		if ( curmonth < 12 )
		{
			nextmonth = parseInt(curmonth) + 1;
			nextyear  = curyear;
		}
		else
			if ( curmonth == 12 )
			{
				nextmonth = 1;
				nextyear  = parseInt(curyear) + 1;
			}
	}
	else //direction is 'previous'
	{
		if ( curmonth > 1 )
		{
			nextmonth = parseInt(curmonth) - 1;
			nextyear  = curyear;
		}
		else
			if ( curmonth == 1 )
			{
				nextmonth = 12;
				nextyear  = parseInt(curyear) - 1;
			}
	}	
	//update the hidden spans with the calendar months and year
	document.getElementById('month').innerHTML = nextmonth;
	document.getElementById('year').innerHTML  = nextyear;

	//draw the calendar
	GetEvents(nextmonth, nextyear, "main", "month", "daysofweek", "days", 0);
}

function GetEvents(m, y, cM, cH, cDW, cD, brdr)
{
	  var oXMLHttp = null;
	  var month = document.getElementById('month').innerHTML;
	  var year  = document.getElementById('year').innerHTML;
	  	
	  document.getElementById('calendar').innerHTML = '<table width="235" height="225"><tr><td align="center"><img src="../images/ajax-loader.gif" /></table>';
	  
	  //check if it's mozilla browser and create an XMLHttp request if true.
	  if (window.XMLHttpRequest)
	  {
	      oXMLHttp = new XMLHttpRequest();
	  }
	  //check if it's ie browser and create an XMLHttp request if true.
	  else
	    if (window.ActiveXObject)
	    {
		    oXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	    if (oXMLHttp != null)
	    {
			oXMLHttp.onreadystatechange = function ()
			{
			  	//if the request was successfully loaded (4)
		  		if (oXMLHttp.readyState == 4)
			  	{
			   	 	 //if the request was successfully executed (200)
					 if (oXMLHttp.status == 200)
				  	 {
					  	 document.getElementById('hidden').innerHTML = oXMLHttp.responseText;
						 var calendarDiv = document.getElementById('calendar');
						 calendarDiv.innerHTML = buildCal(m, y, cM, cH, cDW, cD, brdr);
					 }
				 }
			  }
		}
	  oXMLHttp.open("GET", "../cal/getevents.cfm?month=" + month + "&year=" + year, true);
	  oXMLHttp.send(null);
	
}

