var month_array = new Array( "January","February","March","April","May","June","July","August","September","October","November","December" );
var month_days = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

function mousePos(event,coordinate)
{
	if (coordinate == 'x')
	{
		return (event.clientX);
	}
	else if (coordinate == 'y')
	{
		return (event.clientY);
	}
}

function changeToPrevMonth(whichCalendar,month_obj,month,day_obj,day,year_obj,year,date_field_obj)
{
	if (month == 1)
	{
		month = 12;
		year--;
	}
	else
	{
		month--;
	}

	buildCalendar(whichCalendar,month_obj,month,day_obj,day,year_obj,year,date_field_obj);
}

function changeToNextMonth(whichCalendar,month_obj,month,day_obj,day,year_obj,year,date_field_obj)
{
	if (month == 12)
	{
		month = 1;
		year++;
	}
	else
	{
		month++;
	}

	buildCalendar(whichCalendar,month_obj,month,day_obj,day,year_obj,year,date_field_obj);
}

function popupCalendar(whichCalendar,otherCalendar,event)
{
	// Load both calendars
	var calendar = findDOM(whichCalendar);
	var other_calendar = findDOM(otherCalendar);

	if (calendar.style.display == 'none')
	{
		// Make it appear and position it
		calendar.style.position = 'absolute';
		calendar.style.z_index = '1000';
		calendar.style.left = (mousePos(event,'x') + document.body.scrollLeft + 32) + 'px';
		calendar.style.top = (mousePos(event,'y') + document.body.scrollTop) + 'px';

		// Load the appropriate calendar
		if (whichCalendar == 'travel_calendar')
		{
			buildCalendar(whichCalendar,document.Proposal.travel_month,document.Proposal.travel_month.value,
						document.Proposal.travel_day,document.Proposal.travel_day.value,document.Proposal.travel_year,
						document.Proposal.travel_year.value,document.Proposal.required_TravelDate);
		}
		else
		{
			buildCalendar(whichCalendar,document.Proposal.return_month,document.Proposal.return_month.value,
						document.Proposal.return_day,document.Proposal.return_day.value,document.Proposal.return_year,
						document.Proposal.return_year.value,document.Proposal.required_ReturnDate);		
		}

		// Make the other invisible if it is visible
		if (other_calendar.style.display == 'block')
		{
			other_calendar.style.display = 'none';
		}
		
		// Make the target calendar visible
		calendar.style.display = 'block';
	}
	else
	{
		// Poof
		calendar.style.display = 'none';
	}
}

function buildCalendar(whichCalendar,month_obj,month,day_obj,day,year_obj,year,date_field_obj)
{
	var calendar = findDOM(whichCalendar);

	var theDate = new Date(year,(month-1),01);
	var today = new Date();
	
	var daysInMonth;

	if (theDate.getMonth() == 1 && (theDate.getFullYear() % 4 == 0))
	{
		daysInMonth = 29;
	}
	else
	{
		daysInMonth = month_days[month - 1];
	}

	var calendarCode = '';

	/* Main Calendar Table */
	calendarCode += "<table class=calendar cellspacing=0 cellpadding=0>";

	/* Month Header */
		calendarCode += "<tr>";
			calendarCode += "<td colspan=1 style='width:30px; border:1px; border-style:solid; border-right-style:hidden; border-color:#000000; background:#6A7A9A; text-align:center'>";

			if (
				(theDate.getMonth() > today.getMonth() && theDate.getYear() == today.getYear()) || 
				(theDate.getYear() > today.getYear())
			)
			{
				calendarCode += "<img src='util/left_calendar_arrow.gif' style='cursor:pointer' onClick=changeToPrevMonth('" + whichCalendar + "',document.Proposal." + month_obj.name + "," + month + ",document.Proposal." + day_obj.name + "," + day + ",document.Proposal." + year_obj.name + "," + year + ",document.Proposal." + date_field_obj.name + ")>";
			}
			else
			{
				calendarCode += "&nbsp;";
			}
			
			calendarCode += "</td>";

			calendarCode += "<td class=month_heading colspan=5>";
				calendarCode += month_array[month - 1] + ' ' + year;
			calendarCode += "</td>";
			calendarCode += "<td colspan=1 style='width:30px; border:1px; border-style:solid; border-left-style:hidden; border-color:#000000;  background:#6A7A9A; text-align:center'><img src='util/right_calendar_arrow.gif' style='cursor:pointer'  onClick=changeToNextMonth('" + whichCalendar + "',document.Proposal." + month_obj.name + "," + month + ",document.Proposal." + day_obj.name + "," + day + ",document.Proposal." + year_obj.name + "," + year + ",document.Proposal." + date_field_obj.name + ")></td>";
		calendarCode += "</tr>";
	/* End Month Header */

	/* Weekday Header */
		calendarCode += "<tr>";
			calendarCode += "<td class=weekday_box>S</td>";
			calendarCode += "<td class=weekday_box>M</td>";
			calendarCode += "<td class=weekday_box>T</td>";
			calendarCode += "<td class=weekday_box>W</td>";
			calendarCode += "<td class=weekday_box>T</td>";
			calendarCode += "<td class=weekday_box>F</td>";
			calendarCode += "<td class=weekday_box>S</td>";
		calendarCode += "</tr>";
	/* End Weekday Header */

	/* Days of Month */
		var startDay = theDate.getDay();

		calendarCode += "<tr>";

		var noTR = 0;

		for (i = 0; i < (daysInMonth + startDay); i++)
		{
			if (noTR == 1) { calendarCode += "<tr>"; noTR = 0;}

			if (i < startDay)
			{
				calendarCode += "<td class=blank_calendar_box>";
					calendarCode += "&nbsp;";
			}
			else
			{
				if ((theDate.getMonth()+1) == month_obj.value && ((i - startDay) + 1) == day_obj.value && theDate.getFullYear() == year)
				{
					day_td_param = " style='background:#6A7A9A'";
				}
				else
				{
					day_td_param = " onMouseOver=setDayHighlight('" + whichCalendar + "_day_code_" + i + "',1) onMouseOut=setDayHighlight('" + whichCalendar + "_day_code_" + i + "',0) onClick=setDate('" + whichCalendar + "',document.Proposal." + month_obj.name + "," + month + ",document.Proposal." + day_obj.name + "," + ((i - startDay) + 1) + ",document.Proposal." + year_obj.name + "," + year + ",document.Proposal." + date_field_obj.name + ")";
				}

				calendarCode += "<td id='" + whichCalendar + "_day_code_" + i + "' class=day_box " + day_td_param + ">";
					calendarCode += ((i - startDay) + 1);
			}

			calendarCode += "</td>";

			if ((i+1) % 7 == 0)
			{
				calendarCode += "</tr>";
				var noTR = 1;
			}
		}
		var remainder = ((startDay + daysInMonth) % 7);

		var boxesLeft;
		
		if (remainder == 0)
		{
			boxesLeft = 0;
		}
		else
		{
			boxesLeft = 7 - remainder;
		}
		
		for (j = 0; j < boxesLeft; j++)
		{
			calendarCode += "<td class=blank_calendar_box>&nbsp;</td>";
		}
		
		if (noTR == 0) { calendarCode += "</tr>"; }
	/* End Days of Month */

	/* Calendar Done */
	calendarCode += "</table>";

	calendar.innerHTML = calendarCode;
}

function setDayHighlight(day_id,on_or_off)
{
	var day_box = findDOM(day_id,1);
	
	if (on_or_off == 1)
	{
		day_box.background = '#6A7A9A';
	}
	else
	{
		day_box.background = '#EEEEEE';
	}
}

function setDate(whichCalendar,month_obj,month,day_obj,day,year_obj,year,date_field_obj)
{
	if (month < 10)
	{
		month_obj.value = '0' + month;
	}
	else
	{
		month_obj.value = month;
	}

	if (day < 10)
	{
		day_obj.value = '0' + day;
	}
	else
	{
		day_obj.value = day;
	}

	year_obj.value = year;

	date_field_obj.value = '' + month + '/' + day + '/' + year;

	findDOM(whichCalendar).style.display='none';

	if (whichCalendar == 'travel_calendar' && findDOM('return_date_field').style.display == 'none')
	{
		engageTriggers('required_TravelDate',1);
	}
}