﻿var DefaultDateFormat = 'MM/DD/YYYY';
var HideWait = 3;
var Y2kPivotPoint = 76;
var FontSize = 11;
var FontFamily = 'Verdana';
var CellWidth = 25;
var CellHeight = 21;
var ImageURL = 'search/images/calendar.gif';
var NextURL = '/images/search/main/next.gif';
var PrevURL = '/images/search/main/prev.gif';
var CalBGColor = '#ffffff';
var DayBGColor = '#ff9933';
var ZCounter = 100;
var Today = new Date();
var WeekDays = new Array('S', 'M', 'T', 'W', 'T', 'F', 'S');
var MonthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var MonthNames = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var fieldPrefix = new Array();
var fieldPrefixToUse = '';
var startBaseToUse = '';

with (document) {
	writeln('<style>');
	writeln('img.calNavArrow {width:6px;height:10px;}');
	writeln('img.calNextArrow {margin-right:3px;margin-bottom:4px;}');
	writeln('img.calPrevArrow {margin-left:3px;margin-bottom:4px;}');
	writeln('td.calDateInput {letter-spacing:normal;line-height:normal;font-family:' + FontFamily + ',Sans-Serif;font-size:' + FontSize + 'px;}');
	writeln('select.calDateInput {letter-spacing:.06em;font-family:Verdana,Sans-Serif;font-size:11px;}');
	writeln('input.calDateInput {letter-spacing:.06em;font-family:Verdana,Sans-Serif;font-size:11px;}');
	writeln('</style>');
}

function NeighborHover(Cell, Over) {
	if (Over)
		VirtualButton(Cell, false);
	else
		Cell.style.border = 'buttonface 1px solid';
	return true;
}

function DayCellHover(Cell, Over, Color) {
	Cell.style.backgroundColor = (Over) ? DayBGColor : Color;
}

function GetDayCount(SomeYear, SomeMonth) {
	return ((SomeMonth == 1) && ((SomeYear % 400 == 0) || ((SomeYear % 4 == 0) && (SomeYear % 100 != 0)))) ? 29 : MonthDays[SomeMonth];
}

function PickDisplayDay(mm, dd, yy, basename, nextname) {
	if (document.getElementById('' + fieldPrefixToUse + basename + '') == null) {
		HideCalendar(basename);
		return;
	}
	eval('document.getElementById(\'' + fieldPrefixToUse + basename + '\').value =\'' + (++mm) + '/' + dd + '/' + yy + '\'');
	HideCalendar(basename);
	var newMM = 0;
	var newDD = 0;
	var newYY = 0;
	var dayCount1 = GetDayCount(yy, mm - 1);
	if ((dd + 2) > dayCount1) {
		if ((dd + 1) > dayCount1) {
			if (mm + 1 > 12) {
				newMM = 1;
				newDD = 2;
				newYY = yy + 1;
			} else {
				newMM = mm + 1;
				newDD = 2;
				newYY = yy;
			}
		}
		else {
			newDD = 1;
			if (mm + 1 > 12) {
				newMM = 1;
				newYY = yy + 1;
			}
			else {
				newMM = mm + 1;
				newYY = yy;
			}
		}
	}
	else {
		newMM = mm;
		newDD = dd + 2;
		newYY = yy;
	}

	if (nextname != '') {
		eval('document.getElementById(\'' + fieldPrefixToUse + nextname + '\').value =\'' + (newMM) + '/' + newDD + '/' + newYY + '\'');
		eval('if(document.getElementById(\'' + fieldPrefixToUse + nextname + '\').type == \'text\'){ document.getElementById(\'' + fieldPrefixToUse + nextname + '\').select(); document.getElementById(\'' + fieldPrefixToUse + nextname + '\').focus()}');
	}
}

function BehindCal(SelectList, CalLeftX, CalRightX, CalTopY, CalBottomY, ListTopY) {
	var ListLeftX = GetTagPixels(SelectList, 'LEFT');
	var ListRightX = ListLeftX + SelectList.offsetWidth;
	var ListBottomY = ListTopY + SelectList.offsetHeight;
	return (((ListTopY < CalBottomY) && (ListBottomY > CalTopY)) && ((ListLeftX < CalRightX) && (ListRightX > CalLeftX)));
}

function GetTagPixels(StartTag, Direction) {
	var PixelAmt = (Direction == 'LEFT') ? StartTag.offsetLeft : StartTag.offsetTop;
	while ((StartTag.tagName != 'BODY') && (StartTag.tagName != 'HTML')) {
		StartTag = StartTag.offsetParent;
		PixelAmt += (Direction == 'LEFT') ? StartTag.offsetLeft : StartTag.offsetTop;
	}
	return PixelAmt;
}

function FixSelectLists(Over, basename) {
	if (IE) {
		if (Over) {
			hideAllSelects();
		}
		else {
			showAllSelects();
		}
	}
}

function BuildCalendarDays(mm, dd, yy, basename, displayMM, displayYY, nextname) {
	var nextMM = displayMM;
	var nextYY = displayYY;
	if (nextMM == 11) {
		nextMM = 0;
		nextYY++;
	}
	else
		nextMM++;

	var prevMM = displayMM;
	var prevYY = displayYY;
	if (prevMM == 0) {
		prevMM = 11;
		prevYY--;
	}
	else
		prevMM--;

	var HTML = '<table cellspacing="0" cellpadding="0" style="z-index:10;">' + String.fromCharCode(13);
	HTML += '<tr>';
	//month 1 
	HTML += '<td valign="top">';
	HTML += renderMonth(1, displayYY, displayMM, mm, dd, yy, basename, prevMM, prevYY, nextname, nextMM, nextYY);
	HTML += '</td>';

	var prevMM = displayMM;
	var prevYY = displayYY;
	if (prevMM == 0) {
		prevMM = 11;
		prevYY--;
	}
	else
		prevMM--;

	if (nextMM == 0) {
		displayMM = 0;
		displayYY++;
	}
	else
		displayMM++;

	//month 2
	HTML += '<td valign="top" style="background-color:#ffffff;border-left:1px solid #003399">';
	HTML += renderMonth(2, displayYY, displayMM, mm, dd, yy, basename, prevMM, prevYY, nextname, nextMM, nextYY);
	HTML += '</td>';
	HTML += '</tr>';
	HTML += '</table>';

	return HTML += '<table width="' + ((CellWidth * 7) * 2 + 1) + 'px" cellspacing="0" cellpadding="1"><tr><td align="right" style="cursor:pointer;background-color:#c6d7e9;border-top:1px solid #003399;height:22px;color:#003399;font-family:Arial;font-size:11px;text-decoration:underline;" onclick="HideCalendar(\'' + basename + '\')">close window</td></tr></table>';
}

function renderMonth(index, displayYY, displayMM, mm, dd, yy, basename, prevMM, prevYY, nextname, nextMM, nextYY) {
	var FirstDate = new Date(displayYY, displayMM, 1);
	var firstDay = FirstDate.getDay();
	var Rows = 5;
	var dayCount = GetDayCount(displayYY, displayMM);

	if (((dayCount == 31) && (firstDay > 4)) || ((dayCount == 30) && (firstDay == 6)))
		Rows = 6;
	else if ((dayCount == 28) && (firstDay == 0))
		Rows = 4;

	mHTML = '<table width="' + (CellWidth * 7) + 'px" cellspacing="0" cellpadding="0" style="cursor:default;z-index:10;">';
	mHTML += '<td colspan="7">';
	mHTML += '<table width="100%" cellspacing="0" cellpadding="1">';
	mHTML += '<tr style="background-color:#003399;color:#ffffff;font-family:verdana;font-size:11px;font-weight:bold;height:22px;">';
	var yearLabel = displayYY.toString();
	yearLabel = yearLabel.substring(2, 4);
	switch (index) {
		case 1:
			if (displayYY > Today.getFullYear() || displayYY == Today.getFullYear() && displayMM > Today.getMonth()) {
				mHTML += '<td id="StartDate_Previous_ID" onclick="document.getElementById(\'' + basename + '_DayTable_ID\').innerHTML = BuildCalendarDays(' + mm + ',' + dd + ',' + yy + ',\'' + basename + '\',' + prevMM + ',' + prevYY + ',\'' + nextname + '\')"';
				mHTML += ' style="cursor:pointer;" align="left" class="calDateInput" style="height:' + CellHeight + 'px" >';
				mHTML += '<img src="' + PrevURL + '" class="calNavArrow calPrevArrow" alt="Previous" />';
				mHTML += '</td>';
			}
			else
				mHTML += '<td style="height:20px;"><img src="/images/layout/blank.gif" style="width:16px;height:15px;" /></td>';

			mHTML += '<td id="StartDate_Current_ID" align="center" class="calDateInput" style="height:' + CellHeight + 'px" colspan="5">' + MonthNames[displayMM] + ' \'' + yearLabel + '</td>';
			break;
		case 2:
			mHTML += '<td id="StartDate_Current_ID" style="cursor:default" align="center" class="calDateInput" style="height:' + CellHeight + 'px" colspan="5">' + MonthNames[displayMM] + ' \'' + yearLabel + '</td>';
			mHTML += '<td id="StartDate_Next_ID"  style="cursor:pointer;height:20px;" onclick="document.getElementById(\'' + basename + '_DayTable_ID\').innerHTML = BuildCalendarDays(' + mm + ',' + dd + ',' + yy + ',\'' + basename + '\',' + nextMM + ',' + nextYY + ',\'' + nextname + '\')" style="cursor:default;height:20px;" align="right" class="calDateInput" style="height:' + CellHeight + 'px" >';
			mHTML += '<img src="' + NextURL + '" class="calNavArrow calNextArrow" alt="Next" /></td>';
			break;
	}
	mHTML += '</tr>';
	mHTML += '</table>';
	mHTML += '</td>';
	mHTML += '</tr>';
	mHTML += '<tr>';
	for (var w = 0; w < 7; w++)
		mHTML += '<td align="center" class="calDateInput" style="height:' + CellHeight + 'px;width:' + CellWidth + 'px;font-weight:bold;color:#003399">' + WeekDays[w] + '</td>';

	if (document.getElementById('' + fieldPrefixToUse + startBaseToUse + '') != null) {
		eval('thedate = document.getElementById(\'' + fieldPrefixToUse + startBaseToUse + '\').value');
	}
	else {
		useEndDateAsStart = true;
		isStartDate = true;
	}
	mHTML += '</tr>';
	for (var j = 0; j < Rows; j++) {
		mHTML += '<tr>';
		for (var i = 1; i <= 7; i++) {
			Day = (j * 7) + (i - firstDay);
			if ((Day >= 1) && (Day <= dayCount)) {
				displayDD = (Day < 10) ? '0' + Day : Day;
				formatMM = (displayMM + 1 < 10) ? '0' + (displayMM + 1) : displayMM + 1;
				if (!useEndDateAsStart && (thedate == ((displayMM + 1) + '/' + displayDD + '/' + displayYY) || thedate == ((displayMM + 1) + '/' + Day + '/' + displayYY)
                    || thedate == (formatMM + '/' + displayDD + '/' + displayYY) || thedate == (formatMM + '/' + Day + '/' + displayYY))) {
					TextStyle = 'color:white;font-weight:bold;'
					BackColor = DayBGColor;
				}
				else {
					TextStyle = 'color:black;'
					BackColor = CalBGColor;
				}
				if ((displayYY == Today.getFullYear()) && (displayMM == Today.getMonth()) && (Day == Today.getDate()))
					TextStyle += 'border:1px solid #c0c0c0;padding:0px;';
				mHTML += '<td align="center" class="calDateInput"';
				if ((displayYY == Today.getFullYear()) && (displayMM == Today.getMonth())) {
					if (Day < Today.getDate() || (!isStartDate && Date.parse(thedate) > Date.parse((displayMM + 1) + '/' + Day + '/' + displayYY))) {
						TextStyle += 'color:#c3c2c2;';
					}
					else
						mHTML += ' onmouseover="DayCellHover(this,true,\'' + BackColor + '\')" onmouseout="DayCellHover(this,false,\'' + BackColor + '\')" onclick="PickDisplayDay(' + displayMM + ',' + Day + ',' + displayYY + ',\'' + basename + '\',\'' + nextname + '\')" ';
				}
				else {
					if (displayMM < Today.getMonth()) {
						if (displayYY < Today.getFullYear() || (!isStartDate && Date.parse(thedate) > Date.parse((displayMM + 1) + '/' + Day + '/' + displayYY)))
							TextStyle += 'color:#c3c2c2;';
						else
							mHTML += ' onmouseover="DayCellHover(this,true,\'' + BackColor + '\')" onmouseout="DayCellHover(this,false,\'' + BackColor + '\')" onclick="PickDisplayDay(' + displayMM + ',' + Day + ',' + displayYY + ',\'' + basename + '\',\'' + nextname + '\')" ';
					}
					else {
						if (displayYY < Today.getFullYear() || (!isStartDate && Date.parse(thedate) > Date.parse((displayMM + 1) + '/' + Day + '/' + displayYY)))
							TextStyle += 'color:#c3c2c2;';
						else
							mHTML += ' onmouseover="DayCellHover(this,true,\'' + BackColor + '\')" onmouseout="DayCellHover(this,false,\'' + BackColor + '\')" onclick="PickDisplayDay(' + displayMM + ',' + Day + ',' + displayYY + ',\'' + basename + '\',\'' + nextname + '\')" ';
					}
				}
				mHTML += ' style="cursor:default;height:' + CellHeight + 'px;width:' + CellWidth + 'px;' + TextStyle + ';background-color:' + BackColor + '">' + Day + '</td>';
			}
			else
				mHTML += '<td class="calDateInput" style="height:' + CellHeight + 'px">&nbsp;</td>';
		}
		mHTML += '</tr>';
	}
	mHTML += '</table>';

	return mHTML;
}

var calDiv = document.createElement("div");
var isStartDate = false;
var useEndDateAsStart = false;
function ShowCalendar(basename, nextname, baseCalendarType) {
	for (i = 0; i < fieldPrefix.length; i++) {
		var tmp = document.getElementById(fieldPrefix[i] + basename)
		if (tmp != null) {
			fieldPrefixToUse = fieldPrefix[i];
			break;
		}
	}

	var pixelsTop = 0;
	if (navigator.appName == "Microsoft Internet Explorer")
		pixelsTop = document.documentElement.scrollTop;
	else
		pixelsTop = window.pageYOffset;
	var yAdj = -209 - parseInt(yAdjTop);
	if (!IE) {
		yAdj = yAdj - 5;
	}
	if (pixelsTop > 70) {
		yAdj = 12 + parseInt(yAdjBtm);
		if (IE) {
			yAdj = yAdj + 15;
		}
	}
	switch (baseCalendarType) {
		case "StartDate":
			var startDate_yPos = getTop(document.getElementById('startDateCon' + basename)) + yAdj;
			if (startDate_yPos < pixelsTop) {
				startDate_yPos = 0;
			}
			var startDate_xPos = getLeft(document.getElementById('startDateCon' + basename)) - xAdjLft;
			var Today = new Date();
			calDiv.style.cssText = "position:absolute;z-index:100;top:" + startDate_yPos + "px;left:" + startDate_xPos + "px;";
			calDiv.innerHTML = '<span id="' + basename + '_ID" style="position:absolute;display:none;width:' + ((CellWidth * 7) * 2 + 1) + 'px;background-color:' + CalBGColor + ';border:2px solid #003399;"><span id="' + basename + '_DayTable_ID"></span></span>';
			document.body.appendChild(calDiv);
			isStartDate = true;
			useEndDateAsStart = false;
			startBaseToUse = basename;
			break;
		case "EndDate":
			var endDate_yPos = getTop(document.getElementById('endDateCon' + basename)) + yAdj;
			if (endDate_yPos < pixelsTop) {
				endDate_yPos = 0;
			}
			var endDate_xPos = getLeft(document.getElementById('endDateCon' + basename)) - xAdjLft;
			var Today = new Date();
			calDiv.style.cssText = "position:absolute;z-index:100;top:" + endDate_yPos + "px;left:" + endDate_xPos + "px;";
			calDiv.innerHTML = '<span id="' + basename + '_ID" style="position:absolute;display:none;width:' + ((CellWidth * 7) * 2 + 1) + 'px;background-color:' + CalBGColor + ';border:2px solid #003399;"><span id="' + basename + '_DayTable_ID"></span>';
			document.body.appendChild(calDiv);
			isStartDate = (useEndDateAsStart) ? true : false;
			if (startBaseToUse == '') {
				isStartDate = true;
				useEndDateAsStart = true;
				startBaseToUse = basename;
			}
			break;
	}

	eval('thedate = document.getElementById(\'' + fieldPrefixToUse + basename + '\').value');

	if (document.getElementById(fieldPrefixToUse + basename).value != 'mm/dd/yyyy' && nextname != '' && document.getElementById(fieldPrefixToUse + nextname).value == 'mm/dd/yyyy')
		thedate = document.getElementById(fieldPrefixToUse + basename).value;

	var firstslash = thedate.search('/');
	var mm = thedate.substring(0, firstslash);
	var thedayyear = thedate.substring(firstslash + 1, thedate.length);
	var secondslash = thedayyear.search('/');
	var dd = thedayyear.substring(0, secondslash);
	var yy = thedayyear.substring(secondslash + 1, thedayyear.length);

	if (isNaN(mm) || isNaN(dd) || isNaN(yy)) {
		dd = Today.getDate();
		mm = Today.getMonth();
		yy = Today.getFullYear();
	}

	if (dd > 0 && mm > 0 && yy > 0) {
		if (yy.length == 4 && mm > 0 && mm <= 12) {
			if (dd <= GetDayCount(yy, mm - 1)) {
				mm = --mm;
				yy = yy;
				dd = dd;
			}
			else {
				dd = Today.getDate();
				mm = Today.getMonth();
				yy = Today.getFullYear();
			}
		}
		else {
			dd = Today.getDate();
			mm = Today.getMonth();
			yy = Today.getFullYear();
		}
	}
	else {
		dd = Today.getDate();
		mm = Today.getMonth();
		yy = Today.getFullYear();
	}
	eval('document.getElementById(\'' + basename + '_DayTable_ID\').innerHTML = BuildCalendarDays(mm,dd,yy,basename,mm,yy,nextname)');
	eval('document.getElementById(\'' + basename + '_ID\').style.display = \'inline\'');
	FixSelectLists(true, basename);
	set_yAdj(0, 0);
}

function HideCalendar(basename) {
	if (eval('document.getElementById(\'' + basename + '_ID\') != null'))
		eval('document.getElementById(\'' + basename + '_ID\').style.display = \'none\'');
	FixSelectLists(false, basename);
	set_yAdj(0, 0);
}

var yAdjTop = 0;
var yAdjBtm = 0;
var xAdjLft = 0;
function set_yAdj(top, btm, lft) {
	yAdjTop = top;
	yAdjBtm = btm;
	xAdjLft = lft;
}
