/****************************************************************
*					TDS Date Picker								*
*																*
*	Created By:		Tom Smith	tsmith@tdscode.com			   	*
*	Created Date:	10/25/2000									*
*																*
*	Modified By:	Tom Smith									*
*	Modified Date:	02/06/2003									*
*	Modified Description:										*
*		Updated a problem with the change month.  This occurred	*
*		when the current date was larger than the next months.	*
*		Example: Today 1-31-2003 would fail when going to Feb	*
*		because Feb only had 28 days.  Also fixed the leap year	*
*		problem. Thanks to Bonny Silva for finding these bugs.	*
*****************************************************************
*	For updated releases/changes visit www.tdscode.com			*
*																*
*	This code may be used freely as long as this header is 		*
*	displayed at the top of this file.							*
*																*
*	The calendar was designed for Netscape 4.x - higher	and		*
*	Internet Explorer 4.x - higher.								*
*																*
*	For instructions on using the calendar in visit 			*
*	www.tdscode.com.  Comments and suggestions are welcome.		*
****************************************************************/

//Global Variables

//Define the different browser types that are supported
var NS4 = (navigator.appName=="Netscape")&&(parseInt(navigator.appVersion)==4);
var NS6 = (navigator.appName=="Netscape")&&(parseInt(navigator.appVersion)==5);
var IE4 = document.all;

//Calendar objects
var calNS4;
var calNS6;
var calIE4;

//Holding Variables
var CALENDAR_HTML = "";
var DISPLAY_DATE = "";
var CURRENT_DATE_FIELD = "";
var HLD_DIV = "";
var BUILT = "no";

//End of Global Variables


//Write out the style sheets
document.write("<style>");
document.write(".txtDay { font-size: 9px; color: " + DAY_FNT_COLOR + "; font-family: arial; text-decoration: none;}");
document.write(".txtMonth { font-size: 11px; color: " + HDR_FNT_COLOR + "; font-family: arial; text-decoration: none;}");
document.write(".tblCalendar { border: 1px solid " + CAL_BOR_COLOR + "; }");
document.write(".tdMonth { padding: 2px; }");
document.write(".tdDayW { padding: 2px; border: 1px solid " + WEEK_BOR_COLOR + "; }");
document.write(".tdDay { padding: 2px; border: 1px solid " + DAY_BOR_COLOR + "; }");
document.write(".btnPrev { font-size: 14px; color: " + PREV_COLOR + "; font-family: webdings; font-weight:bold; text-decoration: none;}");
document.write(".btnNext { font-size: 14px; color: " + NEXT_COLOR + "; font-family: webdings; font-weight:bold; text-decoration: none;}");
document.write("</style>");

//This function is used to display the calendar
function showCalendar(field,date,xPos,yPos)
{

	if (HLD_DIV != date && BUILT == "yes")
	{
		if (NS4)
			calNS4.visibility = 'hidden';
		else if (IE4)
			calIE4.style.visibility = 'hidden';
		else if (NS6)
			calNS6.style.visibility = 'hidden';
		
		BUILT = "no";
		HLD_DIV = date;
	}
	
		
	if (BUILT == "yes")
	{
		if (NS4)
			calNS4.visibility = 'visible';
		else if (IE4)
			calIE4.style.visibility = 'visible';
		else if (NS6)
			calNS6.style.visibility = 'visible';
		return;
	}
	
	//Set the Date field to use
	CURRENT_DATE_FIELD = field;
	
	//Set the Display Date to null
	DISPLAY_DATE = "";
	
	//Build the Calendar
	buildCalendar();
	
	if (!xPos)
		xPos = "";
	if (!yPos)
		yPos = "";
	
	//Display the Calendar on the Web page
	if (NS4)
	{
		calNS4 = new Layer(50,this);
		calNS4.document.write(CALENDAR_HTML);
		calNS4.document.close();
		if (xPos != "" || yPos != "")
		{
			this.calNS4.pageX = xPos;
			this.calNS4.pageY = (yPos - 95);
		}
		else
		{
			this.calNS4.pageX = document.layers[date].pageX;
			this.calNS4.pageY = (document.layers[date].pageY - 95);
		}
		calNS4.visibility = 'visible';
	}
	else if (IE4)
	{
		calIE4 = document.all[date];
		
		calIE4.innerHTML = CALENDAR_HTML;
		
		if (xPos != "" || yPos != "")
		{
			calIE4.style.posLeft = xPos;
			calIE4.style.posTop = yPos;
		}
		calIE4.style.visibility = 'visible';
	}
	else if (NS6)
	{
		calNS6 = document.getElementById(date);
		
		calNS6.innerHTML = CALENDAR_HTML;
		if (xPos != "" || yPos != "")
		{
			calNS6.style.top = yPos;
			calNS6.style.left = xPos;
		}
		calNS6.style.visibility = 'visible';
	}
	
	BUILT = "yes";
}

//This function is used to hide the calendar
function hideCalendar()
{
	if (BUILT == "no")
		return;
		
	if (NS4)
		calNS4.visibility = 'hidden';
	else if (IE4)
		calIE4.style.visibility = 'hidden';
	else if (NS6)
		calNS6.style.visibility = 'hidden';
}

//This function is used to change the Calendar Date
function chgCalendarDate(dspDate)
{
	//Set the Display to the new Date
	DISPLAY_DATE = dspDate;

	//Build the Calendar
	buildCalendar();
	
	//Display the Calendar on the Web page
	if (NS4)
	{
		calNS4.document.write(CALENDAR_HTML);
		calNS4.document.close();
	}
	else if (IE4)
		calIE4.innerHTML = CALENDAR_HTML;
	else if (NS6)
		calNS6.innerHTML = CALENDAR_HTML;
}

//This function is used to change the Date field to the selected calendar date
function chgDate(txtDate)
{
	//Change the Date field
	document.forms[0][CURRENT_DATE_FIELD].value = txtDate;
	
	//Hide the Calendar
	hideCalendar();
}

//This function is used to Build the Calendar
function buildCalendar()
{
	//Define the Month Names and Month Days Array
	monthNames 		= new Array("January","Februrary","March","April","May","June","July","August","September","October","November","Decemeber");
	monthDays 		= new Array(12);
	
	//Entry the Total Days for each Month
	monthDays[0]	= 31;
	monthDays[1]	= 28;
	monthDays[2]	= 31;
	monthDays[3]	= 30;
	monthDays[4]	= 31;
	monthDays[5]	= 30;
	monthDays[6]	= 31;
	monthDays[7]	= 31;
	monthDays[8]	= 30;
	monthDays[9]	= 31;
	monthDays[10]	= 30;
	monthDays[11]	= 31;

	//Determine the Date for the Calendar to Display
	if (DISPLAY_DATE == "")
		calendarDateObj	= new Date();
	else
		calendarDateObj = new Date(DISPLAY_DATE);
	
	//Obtain the Calendar Dates
	calendarDate	= calendarDateObj.getDate();
	calendarDay		= calendarDateObj.getDay();
	calendarMonth	= calendarDateObj.getMonth();
	calendarYear	= calendarDateObj.getYear();
	
	//Obtain Todays Dates
	currentDateObj 	= new Date();
	currentDate 	= currentDateObj.getDate();
	currentDay 		= currentDateObj.getDay();
	currentMonth 	= currentDateObj.getMonth();
	currentYear		= currentDateObj.getYear();
	
	
	//*** Fix - TDS 2-06-2003 ***
	if ((calendarMonth == currentMonth) && (calendarYear == currentYear))
	{
		calendarDate = currentDate;
		calendarDay = currentDay;
	}
	

	
	if (LeapYear(calendarYear))
		monthDays[1] = 29;
	//*** End Fix - 2-06-2003 ***
	
	//Make sure the Year is in the correct century
	calendarYear 	= calendarYear % 100;
	calendarYear 	= ((calendarYear < 50) ? (2000 + calendarYear) : (1900 + calendarYear));


	//Calculate the Blank entries before the 1st of the month
	blankEntry = calendarDate;

	while (blankEntry > 7) 
		blankEntry-= 7;

	blankEntry = calendarDay - blankEntry + 1;
	
	if (blankEntry < 0) 
		blankEntry+= 7;
	
	//Calculate Next Months Date
	nextMonth = (calendarMonth + 2);
	
	if (nextMonth == 13)
	{
		nextMonth = 1;
		nextYear = (calendarYear + 1);
	} 
	else
		nextYear = calendarYear;

	//*** Fix - TDS 2-06-2003 ***
	//nextDate = nextMonth + "/" + currentDate + "/" + nextYear;
	nextDate = nextMonth + "/1/" + nextYear;
	//*** End Fix - 2-06-2003 ***
	
	//Calculate Previous Months Date
	prevMonth = calendarMonth;
	
	if (prevMonth == 0)
	{
		prevMonth = 12;
		prevYear = (calendarYear - 1);
	} 
	else
		prevYear = calendarYear;

	//*** Fix - TDS 2-06-2003 ***
	//prevDate = prevMonth + "/" + currentDate + "/" + prevYear;
	prevDate = prevMonth + "/1/" + prevYear;
	//*** End Fix - 2-06-2003 ***

	//Build the Header for the Calendar
	CALENDAR_HTML = "<table class=\"tblCalendar\" cellpadding=0 cellspacing=0>";
	CALENDAR_HTML += "<tr>";
	CALENDAR_HTML += "<td bgcolor=" + MONTH_BGCOLOR + " align=center class=\"tdMonth\" onMouseOver=mOvr(this,'" + PNI_MOCOLOR + "') onMouseOut=mOut(this,'" + MONTH_BGCOLOR + "') onClick=chgCalendarDate('" + prevDate + "')><a href=javascript:chgCalendarDate('" + prevDate + "')><font class=\"btnPrev\">3</font></a></td>";
	CALENDAR_HTML += "<td bgcolor=" + MONTH_BGCOLOR + " align=center class=\"tdMonth\" colspan=5><font class=\"txtMonth\">" + monthNames[calendarMonth] + " " + calendarYear + "</font></td>";
	CALENDAR_HTML += "<td bgcolor=" + MONTH_BGCOLOR + " align=center class=\"tdMonth\" onMouseOver=mOvr(this,'" + PNI_MOCOLOR + "') onMouseOut=mOut(this,'" + MONTH_BGCOLOR + "') onClick=chgCalendarDate('" + nextDate + "')><a href=javascript:chgCalendarDate('" + nextDate + "')><font class=\"btnNext\">4</font></a></td>";
	CALENDAR_HTML += "</tr>";
	CALENDAR_HTML += "<tr>";
	CALENDAR_HTML += "<td bgcolor=" + WEEK_BGCOLOR + " align=center class=\"tdDayW\"><font class=\"txtDay\">SUN</font></td>";
	CALENDAR_HTML += "<td bgcolor=" + WEEK_BGCOLOR + " align=center class=\"tdDayW\"><font class=\"txtDay\">MON</font></td>";
	CALENDAR_HTML += "<td bgcolor=" + WEEK_BGCOLOR + " align=center class=\"tdDayW\"><font class=\"txtDay\">TUE</font></td>";
	CALENDAR_HTML += "<td bgcolor=" + WEEK_BGCOLOR + " align=center class=\"tdDayW\"><font class=\"txtDay\">WED</font></td>";
	CALENDAR_HTML += "<td bgcolor=" + WEEK_BGCOLOR + " align=center class=\"tdDayW\"><font class=\"txtDay\">THR</font></td>";
	CALENDAR_HTML += "<td bgcolor=" + WEEK_BGCOLOR + " align=center class=\"tdDayW\"><font class=\"txtDay\">FRI</font></td>";
	CALENDAR_HTML += "<td bgcolor=" + WEEK_BGCOLOR + " align=center class=\"tdDayW\"><font class=\"txtDay\">SAT</font></td>";
	CALENDAR_HTML += "</tr>";
	CALENDAR_HTML += "<tr>";

	//Build a blank cell for each Blank Entry before the 1st of the Month
	for (s = 0;s < blankEntry;s++) 
		CALENDAR_HTML += "<td bgcolor=" + DAY_BGCOLOR + " align=center class=\"tdDay\"><font class=\"txtDay\">&nbsp;</font></td>";

	//Start the Day Counter
	dayCount = 1;

	//Loop through until the total days of calendar month have been reached
	while (dayCount <= monthDays[calendarMonth]) 
	{
		//Start a new table row each time through the loop except the first time
		if (dayCount > 1)
			CALENDAR_HTML += "<tr>";
		
		//Start at the next cell after the blank entries and entry the cells across the row.
		for (b = blankEntry;b < 7;b++) 
		{
			//If the Day Counter is greater than the Month total then add blank entries
			if (dayCount <= monthDays[calendarMonth])
			{
				tdProperties = "onClick=chgDate('" + (calendarMonth + 1) + "/" + dayCount + "/" + calendarYear + "') ";
				tdData = "<a href=javascript:chgDate('" + (calendarMonth + 1) + "/" + dayCount + "/" + calendarYear + "')><font class=\"txtDay\">" + dayCount + "</font></a>";
				
				//If the current day is equal to the calendar day and the
				//current month is equal to the calendar month, check the dates
				if ((currentDay == calendarDay) && (currentMonth == calendarMonth))
				{
					//If the day counter is equal to the current date then change the color
					if (dayCount == currentDate)
						tdProperties = tdProperties + "bgcolor=" + CUR_DAY_BGCOLOR + "";
					else 
						tdProperties = tdProperties + "onMouseOver=mOvr(this,'" + DAY_MOCOLOR + "') onMouseOut=mOut(this,'" + DAY_BGCOLOR + "') bgcolor=" + DAY_BGCOLOR + "";
				} 
				else 
					tdProperties = tdProperties + "onMouseOver=mOvr(this,'" + DAY_MOCOLOR + "') onMouseOut=mOut(this,'" + DAY_BGCOLOR + "') bgcolor=" + DAY_BGCOLOR + "";
			} 
			else
			{
				tdProperties = "bgcolor=" + DAY_BGCOLOR;
				tdData = "<font class=\"txtDay\">&nbsp;</font>";
			}
		
			//Build the table cells
			CALENDAR_HTML += "<td align=center class=\"tdDay\" " + tdProperties + ">" + tdData + "</td>";
		
			//Add to the Day counter
			dayCount++;
		}
	
		//End the table row
		CALENDAR_HTML += "</tr>";
		
		//Set the Blank entries to zero
		blankEntry=0;
	}

	//End the table
	CALENDAR_HTML += "<tr>";
	CALENDAR_HTML += "<td bgcolor=" + WEEK_BGCOLOR + " colspan=7 class=\"tdMonth\">&nbsp;</td>";
	CALENDAR_HTML += "</tr>";
	CALENDAR_HTML += "</table>";
	

}

//*** Fix - TDS 2-06-2003 ***
//This fuction checks for the Leap Year
function LeapYear(year) 
{
    if ((year/4)   != Math.floor(year/4))   return false;
    if ((year/100) != Math.floor(year/100)) return true;
    if ((year/400) != Math.floor(year/400)) return false;
    return true;
}
//*** End Fix - 2-06-2003 ***

//This function is used to control the mouse over event.
function mOvr(src,clrOver)
{ 
	if (!src.contains(event.fromElement))
	{ 
		src.style.cursor = 'hand'; 
		src.bgColor = clrOver;
	} 
}

//This function is used to control the mouse out event.
function mOut(src,clrIn)
{ 
	if (!src.contains(event.toElement))
	{ 
		src.style.cursor = 'default'; 
		src.bgColor = clrIn; 
	} 
}