 //global variable used to denote when an error is being displayed
 var global_HasError = false;
 
 function OnAirportBlur(objAirport)
 {
        var value = objAirport.value;
        
        if (value.length > 3)
            if (value.indexOf('[') > -1) // Autocomplete used
            {
                var FromField_array=value.split("[");
                var FromField = FromField_array[1];
                value = FromField.slice(0,3);
            }
        else // Longer name and no autocomplete
        {
            return false;
        }
        objAirport.value = value.toUpperCase();  // convert to UPPER
        return true;
    }
 
//one-way and round-trip options
function disableRoundTripOptions(){
    //document.forms[0].ReturnDate.disabled=true;
    //document.forms[0].ReturnTime.disabled=true;
    //document.getElementById("ReturnDateCalendar").style.display= "none";
    document.getElementById("AirqsearchArrive").style.display= "none";
}

function enableRoundTripOptions(){
    //document.forms[0].ReturnDate.disabled=false;
    //document.forms[0].ReturnTime.disabled=false;
    //document.getElementById("ReturnDateCalendar").style.display= "inline";
    document.getElementById("AirqsearchArrive").style.display= "inline";
}

//disabling dates less than and equal to today
function dateStatusFrom(date) {
        var min = new Date();
        min = new Date(min.getTime() - 1*24*60*60*1000)//includes today
        var max = new Date(min.getFullYear()+1,min.getMonth(),min.getDay());
        if (date.getTime() < min.getTime() || date.getTime() > max.getTime())
               return true; // true says "disable"
        else
               return false; // leave other dates enabled
}
function dateStatusTo(date) {
        var min = new Date();
        min = new Date(min.getTime() - 1*24*60*60*1000);//includes today
        var max = new Date(min.getFullYear()+1,min.getMonth(),min.getDay());
        if (date.getTime() < min.getTime() || date.getTime() > max.getTime())
               return true; // true says "disable"
        else
               return false; // leave other dates enabled
}

function whatsLeaveDate(date) {
    var whatsLeaveDate = date;
}


//get default leave date 
function getLeaveDate() {
    var to = new Date();
    var toDate = new Date(to.getTime() + 7*24*60*60*1000);
    var curr_date = toDate.getDate();
    var curr_month = toDate.getMonth();
    curr_month++;
    var curr_year = toDate.getFullYear();
    if (curr_month < 10){
        curr_month = "0" + curr_month;
    }
    if (curr_date < 10){
        curr_date = "0" + curr_date;
    }
    document.forms[0].LeaveDate.value=curr_month + "/" + curr_date + "/" + curr_year;
}

//get default leave date
function getReturnDate() {
    var from = new Date();
    var fromDate = new Date(from.getTime() + 14*24*60*60*1000);
    var curr_date = fromDate.getDate();
    var curr_month = fromDate.getMonth();
    curr_month++;
    var curr_year = fromDate.getFullYear();
    if (curr_month < 10){
        curr_month = "0" + curr_month;
    }
    if (curr_date < 10){
        curr_date = "0" + curr_date;
    }
    document.forms[0].ReturnDate.value=curr_month + "/" + curr_date + "/" + curr_year;
}

//enforce one week rule between two dates
function catcalc(cal) {
    var date = cal.date;
    whatsLeaveDate(date);
    var time = date.getTime()
    //use the _other_ field
    var field = document.getElementById("ReturnDate");
    if (field == cal.params.inputField){
        field = document.getElementById("LeaveDate");
        time -= Date.WEEK; //subtract one week
       } else {
            time += Date.WEEK; // add one week
       }
       var date2 = new Date(time);
       field.value = date2.print("%m/%d/%Y");
  
    }

//Capture Enter Press
//'Enter' key Submits Form
document.onkeypress=enterKey;
function enterKey(e) {
    var key;
    if (e != null && e.which != null)
    {
        key = e.which; //FireFox
    }
    else
    {
        key = window.event.keyCode;     //IE
    }
    
     if(key == 13)
     {
        validateForm();
     }
}
 
//Main Validation
function validateForm() {
     var FromField = document.getElementById("FromField").value;
     var ToField = document.getElementById("ToField").value;
     var LeaveDate = document.getElementById("LeaveDate").value;
     var ReturnDate = document.getElementById("ReturnDate").value;
     
     //attempt to locate the airport in question
     if(FromField.length > 3)
     {
        IATAACOnSubmitLookUp(document.getElementById("FromField"));
        IATAACFindAirports(FromField,200);
     }
     //IATAACOnSubmitLookUp(document.getElementById("ToField"));
      
     //regex test for date format validity
     var ValidFormatDate = /^\d{2}\/\d{2}\/\d{4}$/ 
     
     //chopping up the mm/dd/yyyy format
     var LeaveDate_array=LeaveDate.split("/");
     var LeaveMonth = LeaveDate_array[0] - 1;
     var LeaveDay = LeaveDate_array[1];
     var LeaveYear = LeaveDate_array[2];
     
     var ReturnDate_array=ReturnDate.split("/");
     var ReturnMonth = ReturnDate_array[0] - 1;
     var ReturnDay = ReturnDate_array[1];
     var ReturnYear = ReturnDate_array[2]; 
     
     //test for date validity and leap year
     var isValidReturnDate = new Date(ReturnYear, ReturnMonth, ReturnDay)
     var isValidLeaveDate = new Date(LeaveYear, LeaveMonth, LeaveDay)   
    
    var ChkLeaveDate=new Date();
        ChkLeaveDate.setMonth(LeaveMonth); // January = 0
        ChkLeaveDate.setDate(LeaveDay);
        ChkLeaveDate.setFullYear(LeaveYear); 

    var ChkReturnDate=new Date();
        ChkReturnDate.setMonth(ReturnMonth); // January = 0
        ChkReturnDate.setDate(ReturnDay);
        ChkReturnDate.setFullYear(ReturnYear); 
        
    //minimum start date
    var ThresholdDate = new Date();
    ThresholdDate = new Date(ThresholdDate.getTime() - 1*24*60*60*1000);
    
    //Get Array of Prefferred airlines
       var AirSelObj = document.getElementById('ctl00_MainContent_QuickSearch_PreferredAirlines');
       var AirSelectedArray = new Array();
       var z;
       var countOfAirlines = 0;
       //loop through Airline Combo List
         for (z=0; z<AirSelObj.options.length; z++) {
                if (AirSelObj.options[z].selected) {
                    AirSelectedArray[countOfAirlines] = AirSelObj.options[z].value; 
                
                countOfAirlines++;
             }
          } 
        
 
 
 var errors = 0;
  //Check for blank 'From' Field 
  if (FromField == "") {
    hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_FromField").style.display = "inline";
    setFocusFrom();
    errors +=1;
   return false;
 }
 
 //Check for blank 'To' Field 
 if (ToField == "") {
    hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_ToField").style.display = "inline";
    setFocusTo();
    errors +=1;
  return false;
 }

//'To' and 'From' Airports cannot be same 
if (FromField.length != 3 && FromField.indexOf('[') > 0)
        {
            var FromField_array=FromField.split("[");
            var FromField = FromField_array[1];
            FromField = FromField.slice(0,3);
        }
        
if (ToField.length != 3 && ToField.indexOf('[') > 0)
        {
            var ToField_array=ToField.split("[");
            var ToField = ToField_array[1];
            ToField = ToField.slice(0,3);
        }
        
FromField = FromField.toUpperCase();
ToField = ToField.toUpperCase(); 
        
if (FromField == ToField) {
     hideAllErrors();
     showErrorDiv();
     document.getElementById("Error_ToFromAirportSame").style.display = "inline";
     setFocusFrom();
     errors +=1;
     return false;
}        
 
//checking formatting for 'To' and 'From' fields
var checkOpenBrackFrom = FromField.indexOf('[');
var checkOpenBrackTo = ToField.indexOf('[');
var checkLengthFromField = FromField.length;
var checkLengthToField = ToField.length;

//check if From Field is properly formatted
if (checkOpenBrackFrom == -1 && checkLengthFromField > 3 || checkLengthFromField < 3){
   hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_FromFieldFormat").style.display = "inline";
    setFocusFrom();
    errors +=1;
   return false;
 }
 
 //check if To Field is properly formatted
if (checkOpenBrackTo == -1 && checkLengthToField > 3 || checkLengthToField < 3){
   hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_ToFieldFormat").style.display = "inline";
    setFocusTo();
    errors +=1;
   return false;
 }
 
 // Valid characters for 'To' and 'From' Airports
 var validChars = /^[A-z]+$/;
 
// 'From' Airport code should not contain any invalid characters or numbers
 if (checkLengthFromField == 3 && !validChars.test(FromField)){
    hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_FromFieldFormat").style.display = "inline";
    setFocusFrom();
    errors +=1;
   return false;
 }
  // 'To' Airport code should not contain any invalid characters or numbers
 if (checkLengthToField == 3 && !validChars.test(ToField)){
    hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_ToFieldFormat").style.display = "inline";
    setFocusTo();
    errors +=1;
   return false;
 }

//Leave Date must be formatted as mm/dd/yyyy  
if (!ValidFormatDate.test(LeaveDate)){
    hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_LeaveDateFormat").style.display = "inline";
    setFocusLeave();
    errors +=1;
  return false;
}

//Return Date must be formatted as mm/dd/yyyy  
if (!ValidFormatDate.test(ReturnDate)){
    hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_ReturnDateFormat").style.display = "inline";
    setFocusReturn();
    errors +=1;
  return false;
}

//Leave Date must be a valid Date, Month and Year in a Calendar i.e. Leap Year, 30 vs. 31 days for a Month
if ((isValidLeaveDate.getMonth()!=LeaveMonth)||(isValidLeaveDate.getDate()!=LeaveDay)||(isValidLeaveDate.getFullYear()!=LeaveYear)){
    hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_LeaveDateValid").style.display = "inline";
    setFocusLeave();
    errors +=1;
  return false;
}

//Return Date must be a valid Date and Month in a Calendar i.e. leap year, 30 vs. 31 days
if ((isValidReturnDate.getMonth()!=ReturnMonth)||(isValidReturnDate.getDate()!=ReturnDay)||(isValidReturnDate.getFullYear()!=ReturnYear)){
     hideAllErrors();
     showErrorDiv();
    document.getElementById("Error_ReturnDateValid").style.display = "inline";
    setFocusReturn();
    errors +=1;
  return false;
}

//The 'Return Date' must be equal to or greater than 'Leave Date'
if (ChkLeaveDate > ChkReturnDate){
    hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_ReturnDateField").style.display = "inline";
    setFocusReturn();
    errors +=1;
    return false;
}

//Start Date or Leave Date cannot be less than Today's Date/ThresholdDate
if (ChkLeaveDate < ThresholdDate){
    hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_LeaveDateStart").style.display = "inline";
    setFocusLeave();
    errors +=1;
    return false;
}

//Only '3' Airlines are supported from Preferred Airlines selection list
if (countOfAirlines > 3) {
    hideAllErrors();
    showErrorDiv();
    document.getElementById("Error_PreferredAirlines").style.display = "inline";
    errors +=1;
    return false;
}

 //Start search if no errors are returned
 if (errors == 0) {
     StartSearch();
 }
 
  //Main error block area
  function showErrorDiv()
  {
    //set the error ditection field to on
    global_HasError = true;
    
    //show the error div
    document.getElementById("AirSearchErrors").style.display = "inline";
  }
  
  //Setting focus on 'To'
  function setFocusTo() {
    document.getElementById("ToField").select();
    document.getElementById("ToField").focus();
  }
  
  //Setting focus on 'From'
  function setFocusFrom() {
     document.getElementById("FromField").select();
     document.getElementById("FromField").focus();
   }
  
  //Setting focus on 'Leave Date'
  function setFocusLeave() {
     document.getElementById("LeaveDate").select();
     document.getElementById("LeaveDate").focus();
  }
  
  //Setting focus on 'Return Date'
  function setFocusReturn() {
    document.getElementById("ReturnDate").select();
    document.getElementById("ReturnDate").focus();
  }
  
  //Clears out all the errors' Text from the screen
  function hideAllErrors() 
  {
    //reset the error field
    //set the error ditection field to off
    global_HasError = false;
    
    document.getElementById("AirSearchErrors").style.display = "none";
    var spans = document.getElementsByTagName("span"); 
    for (var i=0; i<spans.length; i++) 
      //if there are spans with id starting with 'Error_', hide them
      if (spans[i].id.indexOf("Error_") == 0) { 
            spans[i].style.display = "none";
   
      }
  }
  
  //Begin search when Validation is passed
  function StartSearch(){
      hideAllErrors();
      g_AIRUIHELPER.OnButtonClick();
    }
    
}