var nextMonthImgSrc = '/skylights/images/button_CalendarArrowR.png';
var prevMonthImgSrc = '/skylights/images/button_CalendarArrowL.png';
if ( document.images )
{
   nextMonthImage = new Image();
   nextMonthImage.src = '/skylights/images/button_CalendarArrowR.png';
   prevMonthImage = new Image();
   prevMonthImage.src = '/skylights/images/button_CalendarArrowL.png';
}

function padLeft(v, c, l) {
	var n = v;
	if (n.length < l) {
		for (i = l - n.length; i > 0; i--) {
			n = c + n;
		}
	}
	return n;
}

function injectWJCalendarValues() {
	var f = document.skylightsForm;
	f.departDay1.value = padLeft(f.departDay1_day.value, "0", 2);
	f.departMonth1.value = f.departYear1_year.value + padLeft(f.departMonth1_month.value, "0", 2);
	
	if (f.departDay2)
	{
		f.departDay2.value = padLeft(f.departDay2_day.value, "0", 2);
		f.departMonth2.value = f.departYear2_year.value + padLeft(f.departMonth2_month.value, "0", 2);
	}
}

function isValidWJCalendarParentDates() {
	var f = document.skylightsForm;
	return isValidYearMonthDate(f.departYear1_year.value, f.departMonth1_month.value, f.departDay1_day.value);
}

function isValidWJCalendarDependantDates() {
	var f = document.skylightsForm;
	return isValidYearMonthDate(f.departYear2_year.value, f.departMonth2_month.value, f.departDay2_day.value);
}

// function to do nothing.
function doNothing() {
}

// Start functions that depend on today variable set prior to execution.
// change these to pass in year.
function setElementCalendarText(date, month, year, elementId) {
	d = parseYearMonthDate(year.value, month.value, date.value);
	if (isNaN(d)) {
		document.getElementById(elementId).innerHTML = "&nbsp;";
	} else {
		document.getElementById(elementId).innerHTML = getUIDateDisplay(d);
	}
}

// validate a form date and month field to a date and return a boolean of pass or fail.
function validateWestJetCalendarDate(minDate, maxDate, formFieldDate, formFieldMonth, formFieldYear) {
	var d = parseYearMonthDate(formFieldYear.value, formFieldMonth.value, formFieldDate.value, today);
	if (!isNaN(d)) {
		if (!isNaN(minDate) && !isNaN(maxDate) && (d < minDate || d > maxDate)) {
			// leaving if anything needs to be done when return date is before depart.
		} else {
			return true;
		}
	}
	return false;
}
// End funtions that depend on today variable to set prior to execution

// private
// used to generate ui display string.
function getUIDateDisplay(d) {
	if (d == null || d.length == 0 || isNaN(d)) {
		return "";
	} else {
		return dayNameArray[d.getDay()] + ", " + d.getDate() + " " + monthNameArray[d.getMonth()] + " " + d.getFullYear();
	}
}

// depends on today to be set in environment
// synchronize the return date with the depart date.
function synchronizeCalendarDate(formFieldDepartDate, formFieldDepartMonth, formFieldDepartYear, formFieldReturnDay, formFieldReturnMonth, formFieldReturnYear, departElementId, returnElementId, parent) {
	if (formFieldReturnYear)  // check to see that the return calendar is defined.  Does not exist for one-way online change.
	{
		departDate = parseYearMonthDate(formFieldDepartYear.value, formFieldDepartMonth.value, formFieldDepartDate.value, today);
		returnDate = parseYearMonthDate(formFieldReturnYear.value, formFieldReturnMonth.value, formFieldReturnDay.value, today);
		if (!isNaN(returnDate) && !isNaN(departDate)) {
			if (returnDate < departDate) {
				alert(dateText.datesOverlap);
									
				if (parent)
				{
					formFieldDepartDate.value = calendarDefDay;
					formFieldDepartMonth.value = calendarDefMonth;
					formFieldDepartYear.value = calendarDefYear;
					document.getElementById(departElementId).innerHTML = "&nbsp;";
				}
				else
				{
					formFieldReturnDay.value = calendarDefDay;
					formFieldReturnMonth.value = calendarDefMonth;
					formFieldReturnYear.value = calendarDefYear;
					document.getElementById(returnElementId).innerHTML = "&nbsp;";
				}
			}
		}
	}
}

// displayMonth is one based
function displaySingleCalendar(imageId, minDate, maxDate, todayDate, hiliteDate, displayMonth, displayYear, selectedDateVarName, additionalJavascript, orientation) {
	var content = getSingleCalendarContent(imageId, minDate, maxDate, todayDate, hiliteDate, displayMonth, displayYear, selectedDateVarName, additionalJavascript, orientation);
	document.getElementById('calendar').innerHTML = content;
}

// displayMonth is one based
function getSingleCalendarContent(imageId, minDate, maxDate, todayDate, hiliteDate, displayMonth, displayYear, selectedDateVarName, additionalJavascript, orientation) {
	var date1 = parseYearMonthDefaultToToday(displayYear, displayMonth, todayDate);
	if (!isNaN(maxDate) && date1.getMonth() == maxDate.getMonth() && date1.getFullYear() == maxDate.getFullYear()) {
		date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
	}
	
	var dayCells = getCalendarContentDayRow(calendarDayNameArray);

	var prevDate = new Date(date1.getFullYear(), date1.getMonth() - 1, 1);
	var nextDate = new Date(date1.getFullYear(), date1.getMonth() + 1, 1);
	var unSeenNextDate = new Date(nextDate.getFullYear(), nextDate.getMonth() + 1, 1);
	
	var regenerateStringPrev = 'displaySingleCalendar("' + imageId + '", ' + getNewDateString(minDate) + ', ' + getNewDateString(maxDate) + ', ' + getNewDateString(todayDate) + ', ' + getNewDateString(hiliteDate) + ', ' + (prevDate.getMonth() + 1) + ', ' + prevDate.getFullYear() + ', \'' + selectedDateVarName + '\', \'' + additionalJavascript + '\', \'' + orientation + '\');resizeDiv(\'calendar\');mouseOverLink(1);document.getElementById("'+ imageId + '").focus();';
	var regenerateStringNext = 'displaySingleCalendar("' + imageId + '", ' + getNewDateString(minDate) + ', ' + getNewDateString(maxDate) + ', ' + getNewDateString(todayDate) + ', ' + getNewDateString(hiliteDate) + ', ' + (nextDate.getMonth() + 1) + ', ' + nextDate.getFullYear() + ', \'' + selectedDateVarName + '\', \'' + additionalJavascript + '\', \'' + orientation + '\');resizeDiv(\'calendar\');mouseOverLink(1);document.getElementById("'+ imageId + '").focus();';
	
	var prev = getCalendarPreviousLink(minDate, todayDate, date1.getMonth() + 1, date1.getFullYear(), regenerateStringPrev);
	var next = getCalendarNextLink(maxDate, todayDate, unSeenNextDate.getMonth(), unSeenNextDate.getFullYear(), regenerateStringNext);
	
	var content = '<table border="0" cellspacing="0" cellpadding="1" class="calendar">\n';
	// Month Header
	content += '<tr valign="top" onclick="javascript: document.getElementById(\'' + imageId + '\').focus();mouseOverLink(1);" onmouseover="mouseOverLink(1);">\n';
	content += '<td class="monthheader">\n';
	content += '<table border="0" cellspacing="0" cellpadding="1" width="100%"><tr align="center" valign="middle">\n';
	content += '<td width="10%">' + prev + '</td>\n';
	content += '<td width="60%"><span align="center" class="monthheader"><b>' + monthNameArray[date1.getMonth()] + ' ' + date1.getFullYear() + '</b></span></td>\n';
	content += '<td width="10%">' + next + '</td>\n';
	content += '</tr></table>\n';
	
	content += '</td>\n';
	content += '</tr>\n';
	//Show Month in New Row
	content += '<tr valign="top" onmouseover="mouseOverLink(1);" class="calendar">\n';
	content += '<td class="calendar">\n';
	content += '<table border="0" cellspacing="0" cellpadding="1">\n';
	content += dayCells + '\n';
	content += getCalendarContentRows(minDate, maxDate, todayDate, hiliteDate, date1.getMonth() + 1, date1.getFullYear(), selectedDateVarName, additionalJavascript);
	content += '</table>\n';
	content += '</td>\n';
	
	//Show the Close row
	content += '<tr valign="top" onmouseover="mouseOverLink(1);" class="calendar">\n';
	content += '<td class="calendarclose" colspan="2" align="center" valign="middle">\n';
	content += '<a href="javascript: hideAllDiv();" class="calendar">';
	content += getCloseTxt(); 
	content += '</a>\n';
	content += '</td>\n';
	content += '</tr>\n';
	content += '</table>\n';

	return content
}

// Generates the html table calendar content rows.  Will be 7 columns wide and
// rows will vary by month
//
// minDate min date to allow selected
// maxDate max date to allow selected
// todayDate today date if parsed month and year are not parsed to a valid date
// hiliteDate date to hilite
// displayMonth one based month, valid values are 1 - 12 this is the month to display (may not be hilite date during navigation)
// displayYear year this is the year to display (may not be hilite date during navigation)
// selectedDateVarName the var name to assign the selected date to
// additionalJavascript javascript that is executed after the selected date var has been set.
//		If you are passing strings into this call, use the double quote instead of the single quote.
function getCalendarContentRows(minDate, maxDate, todayDate, hiliteDate, displayMonth, displayYear, selectedDateVarName, additionalJavascript) {
	var displayDate = parseYearMonthDefaultToToday(displayYear, displayMonth, todayDate);
	var content = "";
	var month = displayDate.getMonth();
	var noOfRows = 6;
	while (displayDate.getMonth() == month) {
		content += '<tr align="center" valign="middle">\n';
		noOfRows -= 1;
		for (i = 0; i < 7; i++) {
			if (displayDate.getMonth() != month) {
				// last row end spacer
				content += '<td colspan="' + (7 - i) + '">&nbsp;</td>\n';
				break;
			}
			if (displayDate.getDate() == 1 && displayDate.getDay() > 0) {
				// first row start spacer
				content += '<td colspan="' + displayDate.getDay() + '">&nbsp;</td>\n';
				i = displayDate.getDay();
			}
			elementStyle = 'calendar';
			if (!isNaN(hiliteDate) && displayDate.getTime() == hiliteDate.getTime()) {
				elementStyle = 'calendarhilite';
			}
			if ((!isNaN(minDate) && !isNaN(maxDate) && displayDate >= minDate && displayDate <= maxDate) || (isNaN(minDate) && !isNaN(maxDate) && displayDate <= maxDate) || (!isNaN(minDate) && isNaN(maxDate) && displayDate >= minDate)) {
				content += '<td><a href="javascript: var ' + selectedDateVarName + ' = new Date(' + displayDate.getFullYear() + ', ' + displayDate.getMonth() + ', ' + displayDate.getDate() + '); ' + additionalJavascript.replace(/"/g, "&quot;") + ' hideAllDiv();" class="' + elementStyle + '">' + displayDate.getDate() + '</a></td>\n';
			} else {
				content += '<td><span class="calendarinvalid">' + displayDate.getDate() + '</span></td>\n';
			}
			displayDate.setDate(displayDate.getDate() + 1);
		}
		content += '</tr>\n';
	}
	for(j =0; j < noOfRows; j++) {
		content += '<tr align="center" valign="middle">\n';
		content += '<td colspan="7">&nbsp;</td>\n';
		content += '</tr>\n';
	}
	return content;
}

// private
function getNewDateString(d) {
	if (d == null || d.length == 0 || isNaN(d)) {
		result = '0/0';
	} else {
		result = 'new Date(' + d.getFullYear() + ', ' + d.getMonth() + ', ' + d.getDate() + ')';
	}
	return result;
}

// private
function getCalendarContentDayRow(dayNameArray) {
	var content = '<tr align="center" valign="middle">';
	for (i = 0; i < 7; i++) {
		content += '<td><span class="calendar"><b>' + dayNameArray[i] + '</b></span></td>';
	}
	content += '</tr>\n';
	return content;
}

// private
// month is one based
// tries to parse the month year defaulting to today then if the link is > min return link
function getCalendarPreviousLink(min, today, month, year, regenerateJavascriptString) {
	date = parseYearMonthDefaultToToday(year, month, today);
	prev = '<span class="monthheader">&nbsp;</span>';
	if (min == null || min.length == 0 || isNaN(min) || (!isNaN(min) && date > min)) {
		prev = '<a href="javascript: ' + regenerateJavascriptString.replace(/"/g, "&quot;") + '" class="monthheader"><img src="/skylights/images/button_CalendarArrowL.png" border="0" align="left"></a>';
	}
	return prev;
}

// private
// month is one based
// tries to parse the month year defaulting to today then if the link is < max return link
function getCalendarNextLink(max, today, month, year, regenerateJavascriptString) {
	date = parseYearMonthDefaultToToday(year, month, today);
	next = '<span class="monthheader">&nbsp;</span>';
	if (max == null || max.length == 0 || isNaN(max) || (!isNaN(max) && date < max)) {
		next = '<a href="javascript: ' + regenerateJavascriptString.replace(/"/g, "&quot;") + '" class="monthheader"><img src="/skylights/images/button_CalendarArrowR.png" border="0" align="right"></a>';
	}
	return next;
}

// month is one based
// always returns a parsed date or today and date is always 1
function parseYearMonthDefaultToToday(year, month, today) {
	d = parseYearMonthDate(year, month, 1);
	if (isNaN(d)) {
		if (isNaN(today)) {
			d = new Date();
			d = new Date(d.getFullYear(), d.getMonth(), 1);
		} else {
			d = new Date(today.getFullYear(), today.getMonth(), 1);
		}
	}
	return d;
}

// month is one based
// always returns a date of start or greater for the given month and date.
function parseMonthDate(month, date, startDate) {
	d = 0/0;
	if (startDate != null && !isNaN(startDate) && startDate.length != 0) {
		s = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());
		var intMonth = parseInt(month, 10);
		var intDate = parseInt(date, 10);
        if (intMonth < s.getMonth() + 1 || (intMonth == s.getMonth() + 1 && intDate < s.getDate()))
		{
			s.setYear(s.getFullYear() + 1);
		}
		d = parseYearMonthDate(s.getFullYear(), month, date);
	}
	return d;
}

// month is one based
function isValidYearMonthDate(year, month, date) {
	return !isNaN(parseYearMonthDate(year, month, date));
}

// month is one based
function parseYearMonthDate(year, month, date) {
	d = 0/0;
	if (isInt(year) && isInt(month) && isInt(date)) {
		d = new Date(parseInt(year, 10), parseInt(month, 10) - 1, parseInt(date, 10));
		if (d.getFullYear() != parseInt(year, 10) || d.getMonth() != parseInt(month, 10) - 1 || d.getDate() != parseInt(date, 10)) {
			d = 0/0;
		}
	}
	return d;
}

// integer test
function isInt(s) {
	var chars = "0123456789";
	if (s == null) {
		return false;
	} else if (!isNaN(s) && s.length != 0) {
		return true;
	} else {
		isInteger = false;
		for (i = 0; i < s.length; i++) {
			if (chars.indexOf(s.charAt(i)) == -1) {
				isInteger = false;
				break;
			} else {
				isInteger = true;
			}
		}
		return isInteger;
	}
}

function displayParentCalendarDiv(imageId, elementId, formName, dateName, monthName, yearName, dependantDateName, dependantMonthName, dependantYearName, dependantElementId, orientation, xOffSet, yOffSet) {
	var dependantDate;
	if(getFormElement(eval('document.' + formName), dependantYearName) && getFormElement(eval('document.' + formName), dependantMonthName) && getFormElement(eval('document.' + formName), dependantDateName))
	{
		dependantDate = parseYearMonthDate(getFormElement(eval('document.' + formName), dependantYearName).value, getFormElement(eval('document.' + formName), dependantMonthName).value, getFormElement(eval('document.' + formName), dependantDateName).value, today);
	}
	if (isNaN(dependantDate))
	{
		dependantDate = maxDate;
	}
	var hiliteDate = parseYearMonthDate(getFormElement(eval('document.' + formName), yearName).value, getFormElement(eval('document.' + formName), monthName).value, getFormElement(eval('document.' + formName), dateName).value, today);
	if (isNaN(hiliteDate)) {
		displaySingleCalendar(imageId, minDate, dependantDate, today, hiliteDate, '', '', 'selectedDate', 'selectParentCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '", "' + dependantDateName + '", "' + dependantMonthName + '", "' + dependantYearName + '", "' + dependantElementId + '");', orientation);
	} else {
		displaySingleCalendar(imageId, minDate, dependantDate, today, hiliteDate, hiliteDate.getMonth() + 1, hiliteDate.getFullYear(), 'selectedDate', 'selectParentCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '", "' + dependantDateName + '", "' + dependantMonthName + '", "' + dependantYearName + '", "' + dependantElementId + '");', orientation);
	}
	mouseOverDivNew('calendar', document.getElementById(imageId), xOffSet, yOffSet, 0 );
}

function reRenderParentCalendarDiv(imageId, elementId, formName, dateName, monthName, yearName, dependantDateName, dependantMonthName, dependantYearName, dependantElementId, orientation) {
	var hiliteDate = parseYearMonthDate(getFormElement(eval('document.' + formName), yearName).value, getFormElement(eval('document.' + formName), monthName).value, getFormElement(eval('document.' + formName), dateName).value, today);
	if (isNaN(hiliteDate)) {
		displaySingleCalendar(imageId, minDate, maxDate, today, hiliteDate, '', '', 'selectedDate', 'selectParentCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '", "' + dependantDateName + '", "' + dependantMonthName + '", "' + dependantYearName + '", "' + dependantElementId + '");', orientation);
	} else {
		displaySingleCalendar(imageId, minDate, maxDate, today, hiliteDate, hiliteDate.getMonth() + 1, hiliteDate.getFullYear(), 'selectedDate', 'selectParentCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '", "' + dependantDateName + '", "' + dependantMonthName + '", "' + dependantYearName + '", "' + dependantElementId + '");', orientation);
	}
}

function changeParentCalendar(dateElement, monthElement, yearElement, elementId, dependantDateElement, dependantMonthElement, dependantYearElement, dependantElementId) {
	synchronizeCalendarDate(dateElement, monthElement, yearElement, dependantDateElement, dependantMonthElement, dependantYearElement, elementId, dependantElementId, true);
	setElementCalendarText(dateElement, monthElement, yearElement, elementId);
	validateWestJetCalendarDate(minDate, maxDate, dateElement, monthElement, yearElement);
}

function selectParentCalendar(elementId, formName, dateName, monthName, yearName, dependantDateName, dependantMonthName, dependantYearName, dependantElementId) {
	getFormElement(eval('document.' + formName), dateName).value = selectedDate.getDate();
	getFormElement(eval('document.' + formName), monthName).value = selectedDate.getMonth() + 1;
	getFormElement(eval('document.' + formName), yearName).value = selectedDate.getFullYear();
	setElementCalendarText(getFormElement(eval('document.' + formName), dateName), getFormElement(eval('document.' + formName), monthName), getFormElement(eval('document.' + formName), yearName), elementId);
	synchronizeCalendarDate(getFormElement(eval('document.' + formName), dateName), getFormElement(eval('document.' + formName), monthName), getFormElement(eval('document.' + formName), yearName), getFormElement(eval('document.' + formName), dependantDateName), getFormElement(eval('document.' + formName), dependantMonthName), getFormElement(eval('document.' + formName), dependantYearName, elementId, dependantElementId, true));
}

function displayDependantCalendarDiv(imageId, elementId, formName, dateName, monthName, yearName, parentDateName, parentMonthName, parentYearName, orientation, xOffSet, yOffSet) {
	var parentDate = parseYearMonthDate(getFormElement(eval('document.' + formName), parentYearName).value, getFormElement(eval('document.' + formName), parentMonthName).value, getFormElement(eval('document.' + formName), parentDateName).value, today);
	if (isNaN(parentDate)) {
		parentDate = minDate;
	}
	var hiliteDate = parseYearMonthDate(getFormElement(eval('document.' + formName), yearName).value, getFormElement(eval('document.' + formName), monthName).value, getFormElement(eval('document.' + formName), dateName).value, today);
	if (isNaN(hiliteDate)) {
		displaySingleCalendar(imageId, parentDate, maxDate, today, hiliteDate, parentDate.getMonth() + 1, parentDate.getFullYear(), 'selectedDate', 'selectDependantCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '");', orientation);
	} else {
		displaySingleCalendar(imageId, parentDate, maxDate, today, hiliteDate, hiliteDate.getMonth() + 1, hiliteDate.getFullYear(), 'selectedDate', 'selectDependantCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '");', orientation);
	}
	mouseOverDivNew('calendar', document.getElementById(imageId), xOffSet, yOffSet, 0 );
}

function reRenderDependantCalendarDiv(imageId, elementId, formName, dateName, monthName, yearName, parentDateName, parentMonthName, parentYearName, orientation) {
	var parentDate = parseYearMonthDate(getFormElement(eval('document.' + formName), parentYearName).value, getFormElement(eval('document.' + formName), parentMonthName).value, getFormElement(eval('document.' + formName), parentDateName).value, today);
	if (isNaN(parentDate)) {
		parentDate = minDate;
	}
	var hiliteDate = parseYearMonthDate(getFormElement(eval('document.' + formName), yearName).value, getFormElement(eval('document.' + formName), monthName).value, getFormElement(eval('document.' + formName), dateName).value, today);
	if (isNaN(hiliteDate)) {
		displaySingleCalendar(imageId, parentDate, maxDate, today, hiliteDate, parentDate.getMonth() + 1, parentDate.getFullYear(), 'selectedDate', 'selectDependantCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '");', orientation);
	} else {
		displaySingleCalendar(imageId, parentDate, maxDate, today, hiliteDate, hiliteDate.getMonth() + 1, hiliteDate.getFullYear(), 'selectedDate', 'selectDependantCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '");', orientation);
	}
}

function changeDependantCalendar(dateElement, monthElement, yearElement, elementId, parentDateElement, parentMonthElement, parentYearElement, parentElementId) {
	synchronizeCalendarDate(parentDateElement, parentMonthElement, parentYearElement, dateElement, monthElement, yearElement, parentElementId, elementId, false);
	setElementCalendarText(dateElement, monthElement, yearElement, elementId);
	var calcMinDate = minDate;
	var parentMinDate = parseYearMonthDate(parentYearElement.value, parentMonthElement.value, parentDateElement.value);
	if (!isNaN(parentMinDate)) {
		if (parentMinDate.getTime() >= minDate.getTime() && parentMinDate.getTime() <= maxDate.getTime()) { 
			calcMinDate = parentMinDate;
		}
	}
	validateWestJetCalendarDate(calcMinDate, maxDate, dateElement, monthElement, yearElement);
}

function selectDependantCalendar(elementId, formName, dateName, monthName, yearName) {
	getFormElement(eval('document.' + formName), dateName).value = selectedDate.getDate();
	getFormElement(eval('document.' + formName), monthName).value = selectedDate.getMonth() + 1;
	getFormElement(eval('document.' + formName), yearName).value = selectedDate.getFullYear();
	setElementCalendarText(getFormElement(eval('document.' + formName), dateName), getFormElement(eval('document.' + formName), monthName), getFormElement(eval('document.' + formName), yearName), elementId);
}

function displayCalendarDiv(imageId, elementId, formName, dateName, monthName, yearName, orientation, xOffSet, yOffSet) {
	var hiliteDate = parseYearMonthDate(getFormElement(eval('document.' + formName), yearName).value, getFormElement(eval('document.' + formName), monthName).value, getFormElement(eval('document.' + formName), dateName).value, today);
	if (isNaN(hiliteDate)) {
		displaySingleCalendar(imageId, minDate, maxDate, today, hiliteDate, '', '', 'selectedDate', 'selectCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '");', orientation);
	} else {
		displaySingleCalendar(imageId, minDate, maxDate, today, hiliteDate, hiliteDate.getMonth() + 1, hiliteDate.getFullYear(), 'selectedDate', 'selectCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '");', orientation);
	}
	mouseOverDivNew('calendar', document.getElementById(imageId), xOffSet, yOffSet, 0 );
}

function reRenderCalendarDiv(imageId, elementId, formName, dateName, monthName, yearName, orientation) {
	var hiliteDate = parseYearMonthDate(getFormElement(eval('document.' + formName), yearName).value, getFormElement(eval('document.' + formName), monthName).value, getFormElement(eval('document.' + formName), dateName).value);
	if (isNaN(hiliteDate)) {
		displaySingleCalendar(imageId, minDate, maxDate, today, hiliteDate, '', '', 'selectedDate', 'selectCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '");', orientation);
	} else {
		displaySingleCalendar(imageId, minDate, maxDate, today, hiliteDate, hiliteDate.getMonth() + 1, hiliteDate.getFullYear(), 'selectedDate', 'selectCalendar("' + elementId + '", "' + formName + '", "' + dateName + '", "' + monthName + '", "' + yearName + '");', orientation);
	}
}

function changeCalendar(dateElement, monthElement, yearElement, elementId) {
	setElementCalendarText(dateElement, monthElement, yearElement, elementId);
	validateWestJetCalendarDate(minDate, maxDate, dateElement, monthElement, yearElement, elementId);
}

function selectCalendar(elementId, formName, dateName, monthName, yearName) {
	getFormElement(eval('document.' + formName), dateName).value = selectedDate.getDate();
	getFormElement(eval('document.' + formName), monthName).value = selectedDate.getMonth() + 1;
	getFormElement(eval('document.' + formName), yearName).value = selectedDate.getFullYear();
	setElementCalendarText(getFormElement(eval('document.' + formName), dateName), getFormElement(eval('document.' + formName), monthName), getFormElement(eval('document.' + formName), yearName), elementId);
}

function setYearFromMonthAndDate(dateElement, monthElement, yearElement)
{
	var d = parseMonthDate(monthElement.value, dateElement.value, today);
	if (isNaN(d)) {
		yearElement.value = calendarDefYear;
	}
	else {
		yearElement.value = d.getFullYear();
	}
}
