function buildCal(m, y, cM, cH, cDW, cD, brdr)
{
	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" cellspacing="0" style="border:1px solid #000000"><tr align="center">';
	t += '<td colspan="7" align="center" class="'+cH+'">'+mn[m-1]+' - '+y+'</td></tr><tr align="center">';
	for(s=0;s<7;s++)t+='<td class="'+cDW+'">'+"SMTWTFS".substr(s,1)+'</td>';
	t += '</tr><tr align="center">';
	for(i=1;i<=42;i++){
		var x=((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1 : '&nbsp;';
	    var d = x;
		var eventToday = checkForEvents(m,x,y);
		if (x==scanfortoday) //DD added
			x='<span id="today">'+x+'</span>' //DD added
		t+='<td class="'+cD+'">';
		if (eventToday)
			t+='<a onclick="dateSelected(' + m + ', ' + d + ', ' + y +');" style="font-weight:bold;">';
		t+=x;
		if (eventToday)
			t+='</a>';
		t+='</td>';
		if(((i)%7==0)&&(i<36))t+='</tr><tr align="center">';
	}
	return t+='</tr></table></div>';
};

function updateCalendar(aMonth, aYear)
{
	document.getElementById('calendarHolder').innerHTML = buildCal(aMonth , aYear, "main", "month", "daysofweek", "days", 1);
};

function incrementMonth(aMonth)
{
	var newMonth = aMonth;
	if (aMonth == 12)
	{
		newMonth = 1;
	}
	else
	{
		newMonth = newMonth + 1;
	}
	return newMonth;
};

function decrementMonth(aMonth)
{
	var newMonth = aMonth;
	if (aMonth == 1)
	{
		newMonth = 12;
	}
	else
	{
		newMonth = newMonth - 1;
	}
	return newMonth;
};

function checkForEvents(aMonth, aDay, aYear)
{
	var hasEvents = false;
	for(var x = 0; x <= eventArray.length - 1; x++)
	{
		if((eventArray[x][0] == aMonth) && (eventArray[x][1] == aDay) && (eventArray[x][2] == aYear))
		{
			hasEvents = true;
		}
	}
	return hasEvents;
};

function dateSelected(aMonth, aDay, aYear)
{
	var hasEvents = false;
	var mn = ['January','February','March','April','May','June','July','August','September','October','November','December'];
	var daysOfWeek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"];
	var selectedDate = new Date(eval('"' + aDay + " " + mn[aMonth-1] + ", " + aYear + '"'));

	var eventList = "<div style='text-align:center;font-weight:bold;'>" + daysOfWeek[selectedDate.getDay()] + ", " + mn[aMonth-1] + " " + aDay + ", " + aYear + "</div>";
	eventList += "<ul class='list_decorative_dark'>";
	for(var x = 0; x <= eventArray.length - 1; x++)
	{
		if((eventArray[x][0] == aMonth) && (eventArray[x][1] == aDay) && (eventArray[x][2] == aYear))
		{
			eventList += "<li><a href='" + eventArray[x][4] + "'>" + eventArray[x][3] + "</a></li>";
			hasEvents = true;
		}
	}
	if (!hasEvents) {
		eventList += "<li>No scheduled events</li>";
	}
	eventList += "</ul>";
	document.getElementById("daysEvents").innerHTML = eventList;
};

function calendarPreviousMonth() {
	displayMonth=decrementMonth(displayMonth);
	if (displayMonth==12){displayYear=displayYear-1;}
	updateCalendar(displayMonth, displayYear);
	if ((displayYear > curyear) || ((displayMonth > curmonth) && (displayYear == curyear))){
		document.getElementById('prevMonth').style.display='block'; // show left arrow
		dateSelected(displayMonth, 1, displayYear);
	} else {
		document.getElementById('prevMonth').style.display='none'; // hide left arrow
		dateSelected(curmonth, curday, curyear);
	}
}

function calendarNextMonth() {
	displayMonth=incrementMonth(displayMonth);
	if(displayMonth==1){displayYear=displayYear+1;}
	updateCalendar(displayMonth, displayYear);
	document.getElementById('prevMonth').style.display='block';
	dateSelected(displayMonth, 1, displayYear);
}
