
// EVENTUALLY MAKE THIS A CLASS

//global variables for date-select calendar
var objDate = new Date();
var glbCurrentMonth = objDate.getMonth(); //Integer (0 through 11) representing month to be used in date fields. Starts with current month. Note that January is 0.
var glbCurrentYear = objDate.getFullYear(); //Integer representing year to be used in date fields. Starts with current year. 
var glbMonth = glbCurrentMonth;
var glbYear = glbCurrentYear;
var glbTextBoxName = "";

//********************************************************************************************************************
function hideCalendar()
{
	getElement('myCalendar').style.display = 'none';
	glbMonth = glbCurrentMonth;
	glbYear = glbCurrentYear;
}
//********************************************************************************************************************
function getElement(id) {return document.getElementById(id);}
//********************************************************************************************************************
function changeDate(nDate)
{
	//Get proper textbox to change -- either txtDate or txtDate2
	var myTextbox = getElement(glbTextBoxName);
	myTextbox.value = (glbMonth+1) + "/" + nDate + "/" + glbYear; //We add 1 to glbMonth because month is stored as a number from 0 to 11 [0=January]
	hideCalendar();
}
//********************************************************************************************************************
function nextMonth()
{
	//Increment month (if month is 11 [=December], it becomes 0 and year increments)
	if(glbMonth == 11)
	{
		glbMonth = 0;
		++glbYear;
	}
	else ++glbMonth;

	//Show new calendar
	getElement('myCalendar').innerHTML = createCalendar(glbYear, glbMonth);

}
//********************************************************************************************************************
function prevMonth()
{
	//Decrement month (if month is 0 [=January], it becomes 11 and year decrements)
	if(glbMonth == 0)
	{
		glbMonth = 11;
		--glbYear;
	}
	else --glbMonth;

	//Show new calendar
	getElement('myCalendar').innerHTML = createCalendar(glbYear, glbMonth);

}
//********************************************************************************************************************
function showCalendar(event, nCalendarID)
{
	hideCalendar(); //Hide calendar if shown.
	glbTextBoxName = nCalendarID; // Name of textbox associated with calendar

	var objCalendar = getElement('myCalendar');
	objCalendar.innerHTML = createCalendar(glbYear, glbMonth);

	//Get mouse position and set calendar's top left corner to match the mouse pointer
	objCalendar.style.left = getMouseX(event) + "px";
	objCalendar.style.top = getMouseY(event) + "px";

	//Show calendar
	objCalendar.style.display = 'block'; 
}   
//********************************************************************************************************************
function createCalendar(nYear, nMonth)
{
	var dtFirstDay = new Date(nYear, nMonth, 1);
	var nFirstWeekday = dtFirstDay.getDay();
	var strMonthName = getMonthName(nMonth);
	var nDate = 1;
	var nDaysInMonth = getDaysInMonth(nYear, nMonth);

	var myCalendarHTML = "<span class='monthNav' onclick='prevMonth();'> << </span><span class='calendarTitle'>" + strMonthName + " " + nYear + "</span><span class='monthNav' onclick='nextMonth();'> >> </span></th>"; //Month heading
	myCalendarHTML += "<table border='1'>";
//	myCalendarHTML += "<tr><th colspan='7'><span class='monthNav' onclick='prevMonth();'> << </span>" + strMonthName + " " + nYear + "<span class='monthNav' onclick='nextMonth();'> >> </span></th></tr>"; //Month heading
	myCalendarHTML += "<tr><th>Su</th><th>M</th><th>Tu</th><th>W</th><th>Th</th><th>F</th><th>Sa</th></tr>";  //Day headings

	//----------------------------------------------
	//Create HTML for FIRST ROW of dates in calendar 
	//----------------------------------------------
	myCalendarHTML += "<tr>"; 
	
	var counter = 0;
	while(counter < nFirstWeekday) //BLANKS
	{
		myCalendarHTML += "<td>&nbsp;</td>"; //Leave appropriate number of blank cells for days before the first of the month
		++counter;
	}

	while(counter < 7) //NUMBERS
	{
		myCalendarHTML += "<td class='date' onclick='changeDate(" + nDate + ")'>" + nDate + "</td>"; //Dates 1 through n in first row (n<=7)
		++counter;
		++nDate;
	}
	myCalendarHTML += "</tr>"; //End of first row of dates

	//----------------------------------------------
	//Rows 2, 3, and 4
	//----------------------------------------------
	myCalendarHTML += "<tr><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td></tr>"; 
	myCalendarHTML += "<tr><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td></tr>"; 
	myCalendarHTML += "<tr><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td></tr>"; 


	//------------------------------------------------------------
	//Add another full row if there are at least 7 more days to go
	//------------------------------------------------------------
	if(nDaysInMonth - nDate >= 7) 	myCalendarHTML += "<tr><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td><td class='date' onclick='changeDate(" + nDate + ")'>" + nDate++ + "</td></tr>";


	//----------------------------------------------
	//Last row
	//----------------------------------------------
	myCalendarHTML += "<tr>"; 
	counter = 0;
	while(nDate <= nDaysInMonth) //Last few days
	{
		myCalendarHTML += "<td class='date' onclick='changeDate(" + nDate + ")'>" + nDate + "</td>";
		++nDate;
		++counter;
	}

	while(counter < 7) //Black spaces (needed to make the borders look right)
	{
		myCalendarHTML += "<td>&nbsp;</td>"; 
		++counter;
	}

	myCalendarHTML += "</tr></table>"; 
	myCalendarHTML += "<span class='close' onclick='hideCalendar()'>close</span>"; 

//alert(myCalendarHTML);

	return myCalendarHTML;

}
//********************************************************************************************************************
function getMonthName(nMonth)
{
	var output = "";

	if(nMonth == 0) output = "Jan";
	else if(nMonth == 1) output = "Feb";
	else if(nMonth == 2) output = "Mar";
	else if(nMonth == 3) output = "Apr";
	else if(nMonth == 4) output = "May";
	else if(nMonth == 5) output = "Jun";
	else if(nMonth == 6) output = "Jul";
	else if(nMonth == 7) output = "Aug";
	else if(nMonth == 8) output = "Sep";
	else if(nMonth == 9) output = "Oct";
	else if(nMonth == 10) output = "Nov";
	else if(nMonth == 11) output = "Dec";

	return output;

}
//********************************************************************************************************************
function getDaysInMonth(nYear, nMonth)
{
	var output = 31; //Default output. Works for Jan, Mar, May, Jul, Aug, Oct, Dec

	if(nMonth == 3) output = 30;
	else if(nMonth == 5) output = 30; //April
	else if(nMonth == 8) output = 30; //June
	else if(nMonth == 10) output = 30; //September
	else if(nMonth == 1) //February
	{
		var dtDayAfterFeb28 = new Date(nYear, nMonth, 28 + 1);
		if(dtDayAfterFeb28.getMonth() == 1) output = 29; //If the day after Feb 28 is still in the month of February, then Feb has 29 days (otherwise 28)
		else output = 28;
	}

	return output;
}
//********************************************************************************************************************
function getMouseX(e)
{
	var output = 0; //Default is 0

	if (e.pageX) output = e.pageX;
	else if (e.clientX)
	{
	 if(document.documentElement.scrollLeft) output = e.clientX + document.documentElement.scrollLeft;
	 else output = e.clientX + document.body.scrollLeft;
	}

	return output;
}
//********************************************************************************************************************
function getMouseY(e)
{
	var output = 0; //Default is 0

	if (e.pageY) output = e.pageY;
	else if (e.clientY)
	{
	 if(document.documentElement.scrollTop) output = e.clientY + document.documentElement.scrollTop;
	 else output = e.clientY + document.body.scrollTop;
	}

	return output;
}

