// Get today's date
var today = new Date();

// Add month names to an array (to be used with the javascript Date object)
var monthName=new Array(12);
monthName[0]="January";
monthName[1]="February";
monthName[2]="March";
monthName[3]="April";
monthName[4]="May";
monthName[5]="June";
monthName[6]="July";
monthName[7]="August";
monthName[8]="September";
monthName[9]="October";
monthName[10]="November";
monthName[11]="December";

// Add day count to an array (to be used with the javascript Date object)
var dayCount=new Array(12);
dayCount[0]="31";
dayCount[1]="28";
dayCount[2]="31";
dayCount[3]="30";
dayCount[4]="31";
dayCount[5]="30";
dayCount[6]="31";
dayCount[7]="31";
dayCount[8]="30";
dayCount[9]="31";
dayCount[10]="30";
dayCount[11]="31";

// Used to turn off the opposite calendar when the first is clicked.
var blockOpposite = new Array(2);
blockOpposite['Start'] = 'Finish';
blockOpposite['Finish'] = 'Start';

/* This function draws the calendar grid and insert it into the 'pluginWindowCalendarGrid' 
division on the calling page */
function drawCalendarGrid(month,day,year,stage)
{
var today = new Date();

var currentMonth = today.getMonth();
var currentDay = today.getDate();
var currentYear = today.getFullYear();

if (month == 'X')
 { month = currentMonth; }
if (day == 'X')
 { day = currentDay; }
if (year == 'X')
 { year = currentYear; } 

	var tableOpenCode = '<table cellpadding=0 cellspacing=0 border=0 style="border-width:1px 0 1px 1px; border-style:solid; border-color:#808080;"><tr><td>';
	var headerCode = drawCalendarHeader(month,day,year,stage);
	var dateblockCode = drawDateblocks(month,day,year,stage);
	var tableCloseCode = '</td></tr></table>';

	var fullGridCode = tableOpenCode + headerCode + dateblockCode + tableCloseCode;
	
	var divisionToFill = 'pluginWindowCalendarGrid' + stage;
	var divisionOpposite = 'pluginWindowCalendarGrid' + blockOpposite[stage];
	document.getElementById(divisionToFill).style.visibility = 'visible';
	document.getElementById(divisionOpposite).style.visibility = 'hidden';
	document.getElementById(divisionToFill).innerHTML = fullGridCode;
	return; 
}

/* This function draws the top row of the table, showing the month and year and providing links 
to the previous month and the following month */
function drawCalendarHeader(month,day,year,stage)
{
	// get the full name of the month from the provided numeric value
	var monthFull = monthName[month];
	
	// find the numeric value for last month, and maintain the current year
	var lastMonth = month - 1;
	var lastYear = year;
	
	// reset to December of last year if appropriate
		if (lastMonth == -1) { lastMonth = 11; lastYear = lastYear - 1; }

	// find the numeric value for next month, and maintain the current year
	var nextMonth = month + 1;
	var nextYear = year;
	
	// reset to December of last year if appropriate
		if (nextMonth == 12) { nextMonth = 0; nextYear = nextYear + 1; }
		
		
var headerCode = '<table cellpadding=0 cellspacing=0 border=0 width=100%><tr class="calendarHeader"><td valign="top" align="left"><a class="calendarHeader" href="javascript:void(0);" onclick="return drawCalendarGrid(' + lastMonth + ',\'X\',' + lastYear + ',\'' + stage + '\');"> << </a></td><td valign="top" align="center">' + monthFull + ' ' +  year + '</td><td style="border-width:0 1px 0 0; border-style:solid; border-color:#808080;" valign="top" align="right"><a href="javascript:void(0);" class="calendarHeader" onclick="return drawCalendarGrid(' + nextMonth + ',\'X\',' + nextYear + ',\'' + stage + '\');"> >> </a></td></tr></table>';
	return(headerCode);
}

/* This function draws the dateblock display */
function drawDateblocks(month,day,year,stage)
{

var today = new Date();

var currentMonth = today.getMonth();
var currentDay = today.getDate();
var currentYear = today.getFullYear();
var currentDateString = currentYear.toString() + currentMonth.toString() + currentDay.toString();


	// to allow for fact that javascript starts counting months from 0 rather than 1
	var hrefMonth = month + 1;
	hrefMonth = hrefMonth + '';

	if (hrefMonth.length == 1) { hrefMonth = '0' + hrefMonth; }

	var dateblockCode = '<table cellpadding=0 cellspacing=0 border=0 width=100%><tr class="calendarTopCell"><td align="center">S</td><td align="center">M</td><td align="center">T</td><td align="center">W</td><td align="center">T</td><td align="center">F</td><td align="center" style="border-width:0 1px 0 0; border-style:solid; border-color:#808080;">S</td></tr>';
	
	/* Find the first weekday (Sun, Mon, etc) of the indicated month / year combo 
	(used for determining how many rows we need to draw */
	var findFirstDay = new Date();
	findFirstDay.setFullYear(year,month,1);
	var firstDayIs = findFirstDay.getDay();

	// Now find how many days are in the month
	var numberOfDays = dayCount[month];
	if (month == 1 && year % 4 == 0) // add one to Feb dayCount if indicated year is leap year
		{ numberOfDays++; }
	
	var rowCount = 0; // number of rows to draw
	var rowCode = ''; // the string to hold the code we will draw
	var dateblockCount = 0; // count off each dateblock as we go
	var dateOrdinal = 1; // count off each day of the month as we go
		
	while (rowCount < 6) // we need a maximum of 6 rows in the grid
	{
		rowCode = rowCode + '<tr>'; // open the row
		
		cellCount = 0;
		while (cellCount < 7)
			{
			rowCode = rowCode + '<td class="calendarDateblock" align="right"><div onmouseover="this.className=\'calendarDateblock calendarDateblockHover\'" onmouseout="this.className=\'calendarDateblock\'">';

			// start drawing day ordinals on first weekday of month, stop drawing them after last day
			if (dateblockCount >= firstDayIs &&  dateOrdinal <= numberOfDays) 
			{
				var hrefDay = dateOrdinal;
				hrefDay = hrefDay + '';
				if (hrefDay.length == 1) { hrefDay = '0' + hrefDay; }
				
				var fontWeight = 'font-weight:normal;';
				var thisDateString = year.toString() + month.toString() + dateOrdinal.toString();
				if (thisDateString == currentDateString)
					{
					fontWeight = 'font-weight:bold;';
					}
	
			var dateFillin = hrefMonth + '/' + hrefDay + '/' + year;
			rowCode = rowCode + '<span style="' + fontWeight + '"><a href="javascript:void(0);" class="calendarDateblock" onClick="return setFormDate(\'' + dateFillin + '\',\'' + stage + '\');">' + dateOrdinal + '</a></span>';
			dateOrdinal++;
			}
			else
			{
			rowCode = rowCode + '&nbsp;';
			}
			
			rowCode = rowCode + '</div></td>';
			cellCount++;
			dateblockCount++;
			}
		
		rowCode = rowCode + '</tr>'; // close the row
		
	rowCount++;
	}
	
	dateblockCode = dateblockCode + rowCode;
	
	dateblockCode = dateblockCode + '<tr class="calendarCloseRow"><td colspan=7 align="center" style="border-width:0 1px 0 0; border-style:solid; border-color:#808080;"><a class="calendarCloseRow" href="javascript:void(0);" onClick="return calendarClose(\'' + stage + '\');">close</a></td></tr>';
	
	dateblockCode = dateblockCode + '</table>';
	return(dateblockCode);
}

function calendarClose(stage)
{
	var divisionToFill = 'pluginWindowCalendarGrid' + stage;
	document.getElementById(divisionToFill).style.visibility = 'hidden';
	return; 
}

function setFormDate(date,stage)
{
	var formField = 'date' + stage;
	document.displayEvents[formField].value = date;
	calendarClose(stage);
	return; 
}
