
	// Some globals
	var trimmedOBdep;
	var trimmedOBarr;
	var trimmedIBdep;
	var trimmedIBarr;
	var depapt = new Array();
	var arrapt = new Array();
	var directonly;

	$(document).ready(function(){
		// Default to multi flights
		//$("[name=radioval]").attr("checked", false); 
		//$("#multicity").attr("checked", true);
		//multiOn();
		//lockReturn();
		
		// Popup calender initialization
        $(".datepicker").datepicker({  
			showOn: 'both', 
			buttonImage: 'images/calendar2.gif', 
			buttonImageOnly: true, 
			numberOfMonths: 2,
			showAnim: '',
			minDate: 0 
		});
		jQuery("#DepDate").datepicker({  
			showOn: 'both', 
			buttonImage: 'images/calendar2.gif', 
			buttonImageOnly: true, 
			showAnim: '',
			minDate: 0 
		});
		jQuery("#ArrDate").datepicker({  
			showOn: 'both', 
			buttonImage: 'images/calendar2.gif', 
			buttonImageOnly: true, 
			showAnim: '',
			minDate: 1,
			beforeShow: function() { if (jQuery("#DepDate").datepicker( "getDate" ) != null) { jQuery( "#ArrDate" ).datepicker( "option", "minDate", jQuery("#DepDate").datepicker( "getDate" ) ); } }
		});
		
		// Autocomplete initilialization
        $(".citySelect")
			.autocomplete(airports, {
				autoFill: false,
				selectFirst: true,
				max: 18,
				mustMatch: false,
				matchContains: true,
				scrollHeight: 220,
				width: 260
			})
			.result(function() {
			  completeAutofill();
			  checkMultiComplete();
			  if ($(this).attr("id") == "OBdep") 
				$("#OBarr").focus();
			  if ($(this).attr("id") == "OBarr") 
				$("#DepDate").focus();
				
			for (i = 1; i < 4; i ++) {
			  if ($(this).attr("id") == "depapt"+i) 
				$("#arrapt"+i).focus();
			  if ($(this).attr("id") == "arrapt"+i) 
				$("#depdate"+i).focus();
			}
		});
		
		// AutoFill for return flights
		$("#OBdep, #OBarr").change(function () {
			completeAutofill();
		});
		
		// Multicity flights green highlite confirmation
		$("#depdate1, #depdate2, #depdate3, #depdate4").change(function () {
			checkMultiComplete();
		});
		

		// Attach actions to the radio button options
        $("#return").change(function() {
           multiOff();
           showReturn();
        });
        $("#oneway").change(function() {
			$("#adatecol, #atimecol").hide();
           multiOff();
        });
        $("#multicity").change(function() {
           multiOn();
        });
		
		// Fix png transparency in our friend IE6
		var isMSIE = /*@cc_on!@*/false;
		if (isMSIE) { 
			$('.pngfx').ifixpng();
		}
		
		// Show tooltips
		$('input,.ttip,label,.stdinput').tooltip({ 
			track: true, delay: 0, showURL: false, showBody: " - ", fade: 250 
		});

	});
    
    function showReturn() {
        $("#adatecol, #atimecol").fadeIn();
    }
    function hideReturn() {
        $("#adatecol, #atimecol").fadeOut();
    }
    function lockReturn() {
        $("#return-row-1").slideDown();
        $("#IBarr").attr("disabled", true);
        $("#IBdep").attr("disabled", true);
    }
    function multiOn() {
		$("#multicity-flights input").removeAttr("disabled");
        $("#mainflights").slideUp(300, function(){
            $("#multicity-flights").slideDown(250, function() {
				$(".numbercol1 > .mask").fadeOut(250, function() {
					$(".numbercol2 > .mask").fadeOut(250, function() {
						$(".numbercol3 > .mask").fadeOut(250, function() {
							$(".numbercol4 > .mask").fadeOut(250);
						});
					});
				});
			});
        });
        $("#mainflights input").attr("disabled", true);
    }
    function multiOff() {
        $("#multicity-flights").slideUp(300, function(){
            $("#mainflights").slideDown(300);
        });
		$(".mask").show();
		$("#mainflights input").removeAttr("disabled");
		$("#multicity-flights input").attr("disabled", true);
    }
	
	
	/*
	Begin form processing scripts.
	The following scripts process the submission form and error check before sending.
	*/
	
	//Return flights auto fill the inbound destinations.
	function completeAutofill() {
		if ($('[name=radioval]:checked').val() == "R") {
			$("#IBarr").val($("#OBdep").val());
			$("#IBdep").val($("#OBarr").val());
		}
	}
	
	// Generic trimming functions to pull the airport code out of city names
	function trim(str, chars) {
		return ltrim(rtrim(str, chars), chars);
	}
	function ltrim(str, chars) {
		chars = chars || "\\s";
		return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
	}
	function rtrim(str, chars) {
		chars = chars || "\\s";
		return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
	}

    // Trim the city names to include only the three character airport code for form submission,
	// then assign the trimmed airport codes to hidden fields.
    function trimCities() {

        var arr = $("#OBarr").val();
        var n = arr.indexOf('(');
        var arrn = "";
        
        if(n>0) {
            arrn=arr.substring(n+1,arr.length-1);
            $("#OBarrvl").val(trim(arrn,' '));
        } else {
            $("#OBarrvl").val(arr);
        }

        arr = $("#OBdep").val();
        n = arr.indexOf('(');
        if(n>0) {
            arrn=arr.substring(n+1,arr.length-1);
            $("#OBdepart").val(trim(arrn,' '));
        } else {
            $("#OBdepart").val(arr);
        }
        
        arr = $("#IBdep").val();
        n = arr.indexOf('(');
        if(n>0) {
            arrn=arr.substring(n+1,arr.length-1);
            $("#IBdepart").val(trim(arrn,' '));
        } else {
            $("#IBdepart").val(arr);
        }
        
        arr = $("#IBarr").val();
        n = arr.indexOf('(');
        if(n>0) {
            arrn=arr.substring(n+1,arr.length-1);
            $("#IBarrvl").val(trim(arrn,' '));
        } else {
            $("#IBarrvl").val(arr);
        }
        
        return true;
    }
	
	function checkMultiComplete() {
		if (($("#depapt1").val() != "") && ($("#arrapt1").val() != "") && ($("#depdate1").val() != "")) {
			$('.numbercol1').css("background-position", "0 100%"); 
		} else {
			$('.numbercol1').css("background-position", "0 0"); 
		}
		if (($("#depapt2").val() != "") && ($("#arrapt2").val() != "") && ($("#depdate2").val() != "")) {
			$('.numbercol2').css("background-position", "0 100%"); 
		} else {
			$('.numbercol2').css("background-position", "0 0"); 
		}
		if (($("#depapt3").val() != "") && ($("#arrapt3").val() != "") && ($("#depdate3").val() != "")) {
			$('.numbercol3').css("background-position", "0 100%"); 
		} else {
			$('.numbercol3').css("background-position", "0 0"); 
		}
		if (($("#depapt4").val() != "") && ($("#arrapt4").val() != "") && ($("#depdate4").val() != "")) {
			$('.numbercol4').css("background-position", "0 100%"); 
		} else {
			$('.numbercol4').css("background-position", "0 0"); 
		}
		return true;
	}
	
	function checkDepartAndArrivalDates() {
		var departureDate = $("#DepDate").val();
		var arrivalDate = $("#ArrDate").val();
		
		
		if (departureDate == null || departureDate == "") {
			createDialog($("#DepDate"), 'Please enter a departure date.', 'Departure Date Error');
			return false;
		}
		if ((arrivalDate == null || arrivalDate == "") && ($("[name=radioval]:checked").val() == "R") ) {
			createDialog($("#ArrDate"), 'Please enter an arrival date.', 'Arrival Date Error');
			return false;
		}
		
		try {
			departureDate = $.datepicker.parseDate('mm/dd/yy', departureDate);
		} catch (e) {
			if (e == "Invalid date") { 
				createDialog($("#DepDate"), 'Your departure date does not appear to be a valid date.', 'Departure Date Error');
			} else {
				createDialog($("#DepDate"), 'Please ensure that your departure date follows the format mm/dd/yyyy.', 'Departure Date Error');
			}
			return false;
		}
		
		try {
			arrivalDate = $.datepicker.parseDate('mm/dd/yy', arrivalDate);
		} catch (e) {
			if (e == "Invalid date") { 
				createDialog($("#ArrDate"), 'Your arrival date does not appear to be a valid date.', 'Departure Date Error');
			} else {
				createDialog($("#ArrDate"), 'Please ensure that your arrival date follows the format mm/dd/yyyy.', 'Departure Date Error');
			}
			return false;
		}
		
		if ( (departureDate > arrivalDate)  && ($("[name=radioval]:checked").val() == "R")) {
			createDialog($("#ArrDate"), 'Your departure date must be before your arrival date.', 'Date Conflict Error');
			return false;
		}
		return true;
	}
	
	function checkTotPax() {
		if (parseInt($("#nbinfants").val()) > parseInt($("#nbadults").val())) {
			createDialog($("#nbinfants"), 'The number of adults must be greater than the number of infants.', 'Too Many Infants');
			return false;
		}
		if ((parseInt($("#nbadults").val()) + parseInt($("#nbchilds").val())) > 8) {
			createDialog($("#nbadults"), 'The total number of Adults and Children cannot exceed 8.', 'Too Many Passengers');
			return false;
		}
		if (parseInt($("#nbchilds").val()) > (parseInt($("#nbadults").val()) *2)) {
			createDialog($("#nbadults"), 'We permit a maximum of 2 children per adult or 1 child and 1 infant per adult, for a total of 9 passengers, including infants.', 'Passenger Limit Error');
			return false;
		}
		if ((parseInt($("#nbchilds").val()) + parseInt($("#nbinfants").val())) > (parseInt($("#nbadults").val()) *2)) {
			createDialog($("#nbadults"), 'We permit a maximum of 2 children per adult or 1 child and 1 infant per adult, for a total of 9 passengers, including infants.', 'Passenger Limit Error');
			return false;
		}
		if ((parseInt($("#nbchilds").val()) + parseInt($("#nbinfants").val()) + parseInt($("#nbadults").val())) > 9) {
			createDialog($("#nbadults"), 'We permit a maximum of 2 children per adult or 1 child and 1 infant per adult, for a total of 9 passengers, including infants.', 'Passenger Limit Error');
			return false;
		}

		return true;
	}

	function checkAirline (strng) {
		if (strng==null)
			strng="";
		if(strng != "") {
			if (strng.length > 2) {
			
				if (strng.length < 5) {
					createDialog($("#Airline"), 'The Airline Code must be either two or five characters.', 'Airline Code Error');
					return false;
				}
				if(strng.indexOf("/")== -1) {
					createDialog($("#Airline"), 'The Airline Code must have a Slash.', 'Airline Code Error');
					return false;
				}
				if (strng.indexOf("/")!= 2) {
					createDialog($("#Airline"), 'The Airline Code Slash must be the third character.', 'Airline Code Error');
					return false;
				}
				
				return true;
					
			} else {
				alert ("Your Airline Code is too short. The Airline Code must be either two or five characters!");
				return false;
			}
		} else {
			return true;
		}
	}

	function createDialog(element, errorText, errorTitle) {
		if (!errorTitle) 
			errorTitle = "Error";
		//For positioning the popup box, use offsets of the passed element.
		var offsetX = 10;
		var offsetY = 10;
		
		var offsetBox = element;
		offsetX = offsetBox.offset().left + 75;
		offsetY = offsetBox.offset().top - 8;
		
		//Custom alert dialog initilialization 
		var $dialog = $('<div></div>')
				.html('Error!')
				.dialog({
					autoOpen: false,
					title: errorTitle,
					buttons: { "Ok": function() { $(this).dialog("close"); } },
					modal: true,
					draggable: false,
					height: 120,
					position: [offsetX,offsetY]
				});
				
				
		$dialog.html(errorText);
		$dialog.dialog('open');
	}
	
// Check all field inputs for validity.
	function checkWholeForm() {
	
		directonly = $('#directOnly').attr('checked')?"1":"0";
	
		if (!checkTotPax())
			return false;
	
		//Treat multicity differently from the other forms.
		if ($("[name=radioval]:checked").val() != "M") {
	
			if ($("#OBdep").val() == "") {
				createDialog($("#OBdep"), 'You must enter a departure location.', 'Departure Location Error');
				return false;
			}
			
			if ($("#OBarr").val() == "") {
				createDialog($("#OBarr"), 'You must enter an arrival location.', 'Arrival Location Error');
				return false;
			}
			
			if ($("[name=radioval]:checked").val() == "J") {
				if ($("#IBdep").val() == "") {
					createDialog($("#IBdep"), 'You must enter an inbound departure location for open jaw flights.', 'Departure Location Error');
					return false;
				}
				if ($("#IBarr").val() == "") {
					createDialog($("#IBarr"), 'You must enter an inbound arrival location for open jaw flights.', 'Arrival Location Error');
					return false;
				}
			}
			
			if (!checkDepartAndArrivalDates()) 
				return false;
				
			// Trim the city names to get airport codes
			var fullcity = "";
			var airportCode = "";
			var n = 0;
			
			fullcity = $("#OBdep").val();
			n = fullcity.indexOf('(');
			if (n>0) {
				airportCode = fullcity.substring(n+1,fullcity.length-1);
				trimmedOBdep = trim(airportCode,' ');
			} else { 
				trimmedOBdep = fullcity.toUpperCase();
			}
			
			fullcity = $("#OBarr").val();
			n = fullcity.indexOf('(');
			if (n>0) {
				airportCode = fullcity.substring(n+1,fullcity.length-1);
				trimmedOBarr = trim(airportCode,' ');
			} else { 
				trimmedOBarr = fullcity.toUpperCase();
			}
			
			fullcity = $("#IBdep").val();
			n = fullcity.indexOf('(');
			if (n>0) {
				airportCode = fullcity.substring(n+1,fullcity.length-1);
				trimmedIBdep = trim(airportCode,' ');
			} else { 
				trimmedIBdep = fullcity.toUpperCase();
			}
			
			fullcity = $("#IBarr").val();
			n = fullcity.indexOf('(');
			if (n>0) {
				airportCode = fullcity.substring(n+1,fullcity.length-1);
				trimmedIBarr = trim(airportCode,' ');
			} else { 
				trimmedIBarr = fullcity.toUpperCase();
			}
			
			// Autocomplete fix to stop it from blanking out the fields in firefox
			// when the user hits the back button.
			$(".citySelect").removeAttr("autocomplete");
			
			var newURL = "faresdisp.aspx?OBDep=" + trimmedOBdep +
						"&OBArr="		+ trimmedOBarr +
						"&IBDep="		+ trimmedIBdep +
						"&IBArr="		+ trimmedIBarr +
						"&Airline="		+ $("#Airline").val() +
						"&DepDate="		+ $("#DepDate").val() +
						"&ArrDate="		+ $("#ArrDate").val() +
						"&FareType="	+ $("#FareType").val() +
						"&radioval="	+ $('[name=radioval]:checked').val() +
						"&LowestFares="	+ "" +
						"&nbadults="	+ $("#nbadults").val() +
						"&nbchilds="	+ $("#nbchilds").val() +
						"&nbinfants="	+ $("#nbinfants").val() +
						"&OBtime="		+ $("#OBtime").val() +
						"&IBtime="		+ $("#IBtime").val() +
						"&directOnly=0" +
						"&lang="		+ lang +
						"&agencyID="		+ agencyID;
			
			top.location.href = "http://www.wwgbe.com/eres/" + newURL;
			
			return false;
		
		//Otherwise use the multicity form script
		} else {
			if ($("#depapt1").val() == "") {
				createDialog($("#depapt1"), 'You must have at least two city pairs and departure dates to use the multicity feature.', 'Multicity Error');
				return false;
			}
			if ($("#arrapt1").val() == "") {
				createDialog($("#arrapt1"), 'Please choose an arrival location.', 'Multicity Error');
				return false;
			}
			if ($("#depdate1").val() == "") {
				createDialog($("#depdate1"), 'Please choose a departure date.', 'Multicity Error');
				return false;
			}
			if ($("#depapt2").val() == "") {
				createDialog($("#depapt2"), 'You must have at least two city pairs and departure dates to use the multicity feature.', 'Multicity Error');
				return false;
			}
			if ($("#arrapt2").val() == "") {
				createDialog($("#arrapt2"), 'Please choose an arrival location.', 'Multicity Error');
				return false;
			}
			if ($("#depdate1").val() == "") {
				createDialog($("#depdate1"), 'Please choose a departure date.', 'Multicity Error');
				return false;
			}
			
			
			//Strip city names from the airport codes before pulling the multicity iframe:
			for (i=1;i<=5;i++) {
				if ((typeof($("#depapt" + i).val()) != "undefined") && $("#depapt" + i).val() != "undefined") {
					var fullcity = $("#depapt" + i).val();
					var n = fullcity.indexOf('(');
					if(n>0) {
						arrn=fullcity.substring(n+1,fullcity.length-1);
						depapt[i]=trim(arrn,' ');
					} else { depapt[i]=fullcity; }
				} else {
					$("#depapt" + i).val("");
				}
			}
			
			for (i=1;i<=5;i++) {
				if ((typeof($("#arrapt" + i).val()) != "undefined") && $("#arrapt" + i).val() != "undefined") {
					var fullcity = $("#arrapt" + i).val();
					var n = fullcity.indexOf('(');
					if(n>0) {
						arrn=fullcity.substring(n+1,fullcity.length-1);
						arrapt[i]=trim(arrn,' ');
					} else { arrapt[i]=fullcity; }
				} else {
					$("#arrapt" + i).val("");
				}
			}
			
			// Autocomplete fix to stop it from blanking out the fields in firefox
			// when the user hits the back button.
			$(".citySelect").removeAttr("autocomplete");
			
			newURL = "faresdisp_multicity.aspx?"
				+ "depapt1=" 	+ depapt[1] + "&arrapt1=" + arrapt[1]
				+ "&depapt2="	+ depapt[2] + "&arrapt2="+ arrapt[2]
				+ "&depapt3="	+ depapt[3] + "&arrapt3="+ arrapt[3]
				+ "&depapt4="	+ depapt[4] + "&arrapt4="+ arrapt[4]
				+ "&depdate1="	+ $("#depdate1").val()
				+ "&depdate2="	+ $("#depdate2").val()
				+ "&depdate3="	+ $("#depdate3").val()
				+ "&depdate4="	+ $("#depdate4").val()
				+ "&Airline="	+ $("#Airline").val()
				+ "&FareType="	+ $("#FareType").val()
				+ "&radioval="	+ $('[name=radioval]:checked').val()
				+ "&LowestFares="	+ ""
				+ "&nbadults="	+ $("#nbadults").val()
				+ "&nbchilds="	+ $("#nbchilds").val()
				+ "&nbinfants="	+ $("#nbinfants").val()
				+ "&directOnly=0" 
				+ "&lang="		+ lang
				+ "&agencyID="		+ agencyID;
			
			top.location.href = "http://www.wwgbe.com/eres/" + newURL;
			
			return false;
		}

		return false;
	}
