// styles to use are:
// calBorder, calMonth, calDay, calOtherMonth, calDateOpen, calDateBlocked, calNext, calPrev
// calOtherMonth

// set these values before your call to drawCalendar if you want prev/next buttons
 var imgCalPrevOn;
 var imgCalPrevOff;
 var fncCalPrev;
 var imgCalNextOn;
 var imgCalNextOff;
 var fncCalNext;
 
 // create function called checkCalDate(dtDate) if you want to validate each date
 
 // reset vars to null
 function resetCalVars () {
	imgCalPrevOn = null;
	imgCalPrevOff = null;
	fncCalPrev = null;
	imgCalNextOn = null;
	imgCalNextOff = null;
	fncCalNext = null;
 }


var arMonths = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
var arDays = new Array('S','M','T','W','T','F','S');
var arDaysInMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);



// draws the month for the given date
function drawCalendar(dtDate) {

	
	if (!dtDate) dtDate = new Date();
	// dtToday.getFullYear(), dtToday.getMonth(), (dtToday.getDate() + 1) );
	
	// draw the top section
	var sOut = "";
	sOut += '<div class="calBorder">';
	sOut += '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr>';
	
	// previous month button
	sOut += '<td class="calPrev">';
	var sTemp = "";
	if (imgCalPrevOff) {
		sTemp += '<img src="' + imgCalPrevOff + '" border="0" id="calPrev" ';
		if (imgCalPrevOn)
			sTemp += ' onmouseover="MM_swapImage(\'calPrev\', \'\', \'' + imgCalPrevOn + '\',1);"';
			sTemp += ' onmouseout="MM_swapImgRestore();"';
		sTemp += ' />';
		if (fncCalPrev)
			sTemp = '<a href="javascript:' + fncCalPrev + '">' + sTemp + '</a>';
	}
	else sOut += "&nbsp;";
	sOut += sTemp + '</td>';
	
	// month - year display
	sOut += '<td class="calMonth" nowrap="true">' + arMonths[dtDate.getMonth()] + ' ' + dtDate.getFullYear() + '</td>';
	
	// next month button
	sOut += '<td class="calNext">';
	sTemp = "";
	if (imgCalNextOff) {
		sTemp += '<img src="' + imgCalNextOff + '" border="0" id="calNext" ';
		if (imgCalNextOn)
			sTemp += ' onmouseover="MM_swapImage(\'calNext\', \'\', \'' + imgCalNextOn + '\',1);"';
			sTemp += ' onmouseout="MM_swapImgRestore();"';
		sTemp += ' />';
		if (fncCalNext)
			sTemp = '<a href="javascript:' + fncCalNext + '">' + sTemp + '</a>';
	}
	else sOut += "&nbsp;";
	sOut += sTemp + '</td>';
	
	sOut += '</tr></table>';
	// end top section
	
	// draw daws of week
	sOut += '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr>';
	for (var i=0; i<arDays.length; i++) {
		sOut += '<td class="calDay" align="center">' + arDays[i] + '</td>';
	}
	sOut += '</tr>';
	
	
	// draw the calendar
	var dtFirstDayOfMonth = new Date(dtDate.getFullYear(), dtDate.getMonth(), 1);
	var iDaysInMonth = getDaysInMonth(dtDate);
	var dtLastDayOfMonth = new Date(dtDate.getFullYear(), dtDate.getMonth(), iDaysInMonth );
		
	var dt = new Date(dtDate.getFullYear(), dtDate.getMonth(), 1 );
	
	sOut += '<tr>';
	
	// fill in last month
	if (dtFirstDayOfMonth.getDay() != 0) {
		var iFirstDayOfWeek = getDaysInMonth( new Date(dtDate.getFullYear(), (dtDate.getMonth() - 1), 1) );
		iFirstDayOfWeek = iFirstDayOfWeek - dtFirstDayOfMonth.getDay() + 1;
		for (var i=0; i<dtFirstDayOfMonth.getDay(); i++) {
			sOut += '<td class="calOtherMonth">' + iFirstDayOfWeek + '</td>';
			iFirstDayOfWeek ++;
		}
	}
	
	// fill in this month
	var iCurrentDay = dtFirstDayOfMonth.getDay();
	for (var i=1; i<=iDaysInMonth; i++) {
		var dtCurrentDate = new Date(dtDate.getFullYear(), dtDate.getMonth(), i);
		if ( checkCalDate && checkCalDate(dtCurrentDate) ) 
			sOut += '<td class="calDateOpen">';
		else
			sOut += '<td class="calDateBlocked">';
		sOut += i + '</td>';
		
		iCurrentDay ++;
		if (iCurrentDay == arDays.length) {
			iCurrentDay = 0;
			sOut += '</tr><tr>';
		}
	}
	
	// fill in next month
	if (iCurrentDay > 0 && iCurrentDay < arDays.length) {
		var iNextMonth = 1;
		for (var i=iCurrentDay; i<arDays.length; i++) {
			sOut += '<td class="calOtherMonth">' + iNextMonth + '</td>';
			iNextMonth ++;
		}
		sOut += '</tr>';
	}
	
	sOut += '</table>';	
	sOut += '</div>'; // end calBorder

//alert(sOut);	
	return sOut;

}


function getDaysInMonth(dtDate) {
	var iDays = arDaysInMonth[dtDate.getMonth()];
	if ( dtDate.getMonth() == 1 && 
			( ( (dtDate.getFullYear() % 4) == 0 && (dtDate.getFullYear() % 100) != 0) ||
			  (dtDate.getFullYear() % 400) == 0  ) 
		) {
			iDays = 29;	
	}
	return iDays;
}

