
function init() {
	if (!document.getElementById)
		return;

    var oMessageCloseLink = document.getElementById("messageCloseLink");
	oMessageCloseLink.firstChild.onclick = hideMessageBox;
	
	window.oDatesToggle = document.getElementById("showAllDatesToggle");
	window.oDatesCheckbox = document.getElementById("showDatesCheckbox");
	oDatesCheckbox.onclick = toggleCalendarDates;
	
	if (oDatesCheckbox.checked)
		oDatesToggle.style.display = "block";
		
	window.oReturnButton = document.getElementById("returnTrip");
	window.oOneWayButton = document.getElementById("onewayTrip");
	window.oReturnFlightInputs = document.getElementById("returnFlightInputs");
    window.oTripType = document.getElementById("triptype");
    
    if (oTripType.checked){
        oReturnFlightInputs.style.display = "none";
    }else{
        oReturnFlightInputs.style.display = "block";
    }
    
	if (oReturnButton){
		verifyReturnFlightInputs();
		oReturnButton.onfocus = toggleReturnFlightInputs;
		oOneWayButton.onfocus = toggleReturnFlightInputs;
	}
	
	window.aValidOutboundDays = null;
	window.aValidReturnDays = null;
	
	window.oOrigTextBox = document.getElementById("Leg1_startCity");
	if (oOrigTextBox == null)
		window.oOrigTextBox = document.getElementById("Leg1_startCityChoices");
	oOrigTextBox.onblur = doCustomScheduleCheck;
	
	window.oDestTextBox = document.getElementById("Leg1_endCity");
	if (oDestTextBox == null)
		window.oDestTextBox = document.getElementById("Leg1_endCityChoices");
	oDestTextBox.onblur = doCustomScheduleCheck;
	
	window.oDepDatePicker = document.getElementById("Leg1_depDatePicker");
	initDatePicker(oDepDatePicker, "outbound");
	
	window.oRetDatePicker = document.getElementById("Leg1_retDatePicker");
	if (oRetDatePicker)
		initDatePicker(oRetDatePicker, "return");
	
	window.oDepDatePicker2 = document.getElementById("depDatePicker2");
	if (oDepDatePicker2)
		initDatePicker(oDepDatePicker2, "outbound");
	
	window.oDepDatePicker3 = document.getElementById("depDatePicker3");
	if (oDepDatePicker3)
		initDatePicker(oDepDatePicker3, "outbound");
	
	if (oRetDatePicker && oRetDatePicker.daySelect) {
		if (oDepDatePicker.daySelect)
			oDepDatePicker.daySelect.onchange = depDayChangeHandler;
		if (oDepDatePicker.monthSelect)
			oDepDatePicker.monthSelect.onchange = depMonthChangeHandler;
		if (oRetDatePicker.daySelect)
			oRetDatePicker.daySelect.onchange = retDayChangeHandler;
		if (oRetDatePicker.monthSelect)
			oRetDatePicker.monthSelect.onchange = retMonthChangeHandler;
	}
	doCustomScheduleCheck();
}

function initDatePicker (oDatePicker, sJourneyDirection) {

	var oCalendar = new Calendar();
	
	oDatePicker.daySelect = oDatePicker.firstChild;
	oDatePicker.monthSelect = oDatePicker.daySelect.nextSibling;
	
	var oIframe = document.getElementById(oDatePicker.id + "Cal");
	oCalendar.iframe = oIframe;
		
	oDatePicker.calendar = oCalendar;
	
	var sImageId = oDatePicker.id + "CalImage";
	var oImage = document.getElementById(sImageId);
	oImage.style.display = "block";
	oImage.datePicker = oDatePicker;
	oImage.journeyDir = sJourneyDirection;
	oImage.onclick = popupCalendar;
	oImage.onmouseover = showCursorHand;
	oImage.onmouseout = showCursorDefault;
}

function toggleReturnFlightInputs() {

	if (oReturnButton.checked){
		oReturnFlightInputs.style.display = "none";
		oOneWayButton.checked = false;
	}else {
	    oReturnFlightInputs.style.display = "block";
	    oReturnButton.checked = false;
	}
		
}

function verifyReturnFlightInputs() {
	if (oReturnButton.checked)
		oReturnFlightInputs.style.display = "block";
	if (oOneWayButton.checked)
		oReturnFlightInputs.style.display = "none";
}

function depDayChangeHandler() {
	if (!oRetDatePicker)
		return;
	if (oDepDatePicker.monthSelect.value == oRetDatePicker.monthSelect.value && parseInt(oRetDatePicker.daySelect.value, 10) < parseInt(oDepDatePicker.daySelect.value, 10)) {
		if ((oDepDatePicker.daySelect.selectedIndex + 1) < oRetDatePicker.daySelect.options.length) {
			oRetDatePicker.daySelect.selectedIndex = oDepDatePicker.daySelect.selectedIndex + 1;
		}
		else {
			oRetDatePicker.daySelect.selectedIndex = 0;
			selectNextOption(oRetDatePicker.monthSelect);
		}
	}
}

function retDayChangeHandler() {
	if (oDepDatePicker.monthSelect.value == oRetDatePicker.monthSelect.value && parseInt(oDepDatePicker.daySelect.value, 10) > parseInt(oRetDatePicker.daySelect.value, 10)) {
		if ((oRetDatePicker.daySelect.selectedIndex - 1) >= 0) {
			oDepDatePicker.daySelect.selectedIndex = oRetDatePicker.daySelect.selectedIndex - 1;
		}
		else {
			oDepDatePicker.daySelect.selectedIndex = oDepDatePicker.daySelect.options.length-1;
			selectPreviousOption(oDepDatePicker.monthSelect);
		}
	}
}

function depMonthChangeHandler () {
	updateFlightDays(oDepDatePicker, aValidOutboundDays);
	
	if (!oRetDatePicker)
		return;
				
	var sDepMonth = oDepDatePicker.monthSelect.value;
	var oR = oRetDatePicker.monthSelect;
	if (oR.value < sDepMonth) {
		for (x=0;x<oR.options.length;x++) {
			if (oR.options[x].value == sDepMonth) {
				oR.selectedIndex = x;
				updateFlightDays (oRetDatePicker, aValidReturnDays);
				depDayChangeHandler();
				retDayChangeHandler();	
			}
		}
	}
}

function retMonthChangeHandler () {
	updateFlightDays (oRetDatePicker, aValidReturnDays);
				
	var sRetMonth = oRetDatePicker.monthSelect.value;
	var oDM = oDepDatePicker.monthSelect;
	if (oDM.value > sRetMonth) {
		for (x=0;x<oDM.options.length;x++) {
			if (oDM.options[x].value == sRetMonth) {
				oDM.selectedIndex = x;
				updateFlightDays(oDepDatePicker, aValidOutboundDays);
				retDayChangeHandler();
				depDayChangeHandler();	
			}
		}
	}
}

function selectNextOption(oSelect) {
	if ((oSelect.selectedIndex + 1) < oSelect.options.length)
		oSelect.selectedIndex = oSelect.selectedIndex + 1;
}

function selectPreviousOption(oSelect) {
	if ((oSelect.selectedIndex - 1) >= 0)
		oSelect.selectedIndex = oSelect.selectedIndex - 1;
}

function setDropdownsDate(sTargetId, dDepDate) {
	var oDateDropDowns = document.getElementById(sTargetId);
	
	var iNewMonth = dDepDate.getMonth() + 1;
	var sNewMonth = iNewMonth.toString();
	if (sNewMonth.length == 1)
		sNewMonth = "0" + sNewMonth;
	var sNewSelectValue = dDepDate.getFullYear() + "" + sNewMonth;
	var oDM = oDateDropDowns.monthSelect;
	for (x=0; x < oDM.options.length; x++) {
		if (oDM.options[x].value == sNewSelectValue) {
			oDM.selectedIndex = x;
			if (oDateDropDowns.id == oDepDatePicker.id) {
				depDayChangeHandler();
				depMonthChangeHandler();
			}
			else if (oDateDropDowns.id == oRetDatePicker.id) {
				retDayChangeHandler();
				retMonthChangeHandler()
			}		
		}
	}
	
	var oDD = oDateDropDowns.daySelect;
	for (x=0; x < oDD.options.length; x++) {
		if (parseInt(oDD.options[x].value, 10) == parseInt(dDepDate.getDate(), 10)) {
			oDD.selectedIndex = x;
			break;
		}
	}
}

function popupCalendar (evt) {
	var clickImage = getEventSource(window.event, evt);
	var oDateDropDowns = clickImage.datePicker;
	var oCalendar = oDateDropDowns.calendar;
	oCalendar.targetId = oDateDropDowns.id;
	
	var sDay = oDateDropDowns.daySelect.value;
	if (sDay.length == 1)
		sDay = "0" + sDay;
	var sMonthAndYear = oDateDropDowns.monthSelect.value;
	var sYear = sMonthAndYear.substring(0,4);
	var sMonth = sMonthAndYear.substring(4,6);
	var sDate = sMonth + "/" + sDay + "/" + sYear;
	oCalendar.popup(sDate, clickImage.journeyDir);
}

function doCustomScheduleCheck () {
	try {
		checkForCustomSchedule();
	}
	catch (oError) {
		alert(oError.message);
	}
}

function checkForCustomSchedule () {
	window.aValidOutboundDays = null;
	window.aValidReturnDays = null;
		
	var sOrig = oOrigTextBox.value;
	var sDest = oDestTextBox.value;
	if (sOrig == "" || sDest == "")
		return false;
		
	var sReturnExists = "false";
	if (oRetDatePicker)
		sReturnExists = "true";
		
	window.oXHR = getXHR();
	if (oXHR == null)
		return false;
	var sUrl = "/GalileoIBE/CustomSchedule.aspx?orig=" + sOrig + "&dest=" + sDest + "&return=" + sReturnExists;
	oXHR.open("get", sUrl, true);
	oXHR.onreadystatechange = handleCustomScheduleResponse;
	oXHR.send(null);
}

function handleCustomScheduleResponse () {
	if (oXHR.readyState == 4) {
		var bShowMessage = false;
			
		var sScheduleJSON = trim(oXHR.responseText);
		if (sScheduleJSON != "") {
			sScheduleJSON = sScheduleJSON;
			eval (sScheduleJSON);
			bShowMessage = true;
		}
		else {
			oDatesCheckbox.checked = false;
			oDatesToggle.style.display = "none";
		}
				
		updateFlightDays (oDepDatePicker, aValidOutboundDays, bShowMessage);
		if (oRetDatePicker)
			updateFlightDays (oRetDatePicker, aValidReturnDays, bShowMessage);
	}
}

function updateFlightDays (oDatePicker, aValidDays, bShowMessage) {
	if (oDatePicker == null)
		return;
		
	var sOriginalSelectedValue = oDatePicker.daySelect.value;
	
	var aOptions = oDatePicker.daySelect.options;
	
	var aCurrMonth = null;
	if (aValidDays != null)
		aCurrMonth = aValidDays[oDatePicker.monthSelect.value];
	
	if (aValidDays == null || aCurrMonth == null || (oDatesCheckbox && oDatesCheckbox.checked)) {
		if (aOptions.length != 31) {
			aOptions.length = 0;
			for (var x=0; x<=30; x++) {
				var oNewDay = document.createElement("option");
				oNewDay.text = (x+1).toString();
				oNewDay.value = justifyAndPad(oNewDay.text, "right", 2, "0");
				aOptions[x] = oNewDay;
			}
		}
	}
	else {
		aOptions.length = 0;
		for (var x=0; x<aCurrMonth.length; x++) {
			var oNewDay = document.createElement("option");
			oNewDay.text = aCurrMonth[x];
			oNewDay.value = justifyAndPad(oNewDay.text, "right", 2, "0");
			aOptions[x] = oNewDay;
		}
	}
	
	// reselect original value or, if it does not exist, closest following value
	for (var x=0; x<aOptions.length; x++) {
		var oOption = aOptions[x];
		if (parseInt(oOption.value, 10) >= parseInt(sOriginalSelectedValue, 10)
			|| x == (aOptions.length-1)) {
				oDatePicker.daySelect.selectedIndex = x;
				break;
		}
	}
	
	if (bShowMessage) {
		displayCustomScheduleMessage();
		oDatesToggle.style.display = "block";
	}
}

function toggleCalendarDates (evt) {
	var oCheckBox = getEventSource (window.event, evt);
	if (oCheckBox.checked) {
		updateFlightDays (oDepDatePicker, null, false);
		updateFlightDays (oRetDatePicker, null, false);
	}
	else {
		updateFlightDays (oDepDatePicker, aValidOutboundDays, true);
		updateFlightDays (oRetDatePicker, aValidReturnDays, true);
	}
}

function displayCustomScheduleMessage () {
	var sMessage = "Only the best flight dates for this route will be shown."
		+ "<br /><br />If you wish to view <strong>all dates</strong>, please select "
		+ "<strong>Show All Dates</strong>";
	showMessage(sMessage);
}

function showMessage (sMessage) {
	var oMessageBox = document.getElementById("messageDisplay");
	var oMessageBody = document.getElementById("messageBody");
	
	if (typeof(document.all)=='object') { // IE
		var oIframe = document.getElementById("messageBackgroundIframe");
		oIframe.style.display = "block";
		oIframe.style.width = oMessageBox.offsetWidth;
		oIframe.style.height = oMessageBox.offsetHeight;
		oIframe.style.left = oMessageBox.offsetLeft;
		oIframe.style.top = oMessageBox.offsetTop;
	}
	
	oMessageBody.innerHTML = sMessage;
	oMessageBox.style.display = "block";
	
	setTimeout("document.body.onclick = hideMessageBox", 1000);
}

function hideMessageBox (evt) {
	var oEvtSrc = getEventSource (window.event, evt);
	if (oEvtSrc && oEvtSrc.id == "messageDisplay")
		return;
		
	document.body.onclick = null;
	
	var oMessageBox = document.getElementById("messageDisplay");
	var oMessageBody = document.getElementById("messageBody");
	oMessageBody.innerHTML = "";
	oMessageBox.style.display = "none";
	var oBackground = document.getElementById("messageBackgroundIframe");
	oBackground.style.display = "none";
	return false;
}


