﻿
/* 
  VARIABLES 
  =========
*/
var siteRoot                   = '';
var browserType                = '';
var blurCount                  = 0;

/* 
  CONSTANTS 
  =========
*/
var CookieParamID              = 'FlightParams';
var uxAdultID                  = 'uxAdult';
var uxSeniorID                 = 'uxSenior';
var uxChildID                  = 'uxChild';
var uxFlightOptionReturnID     = 'uxFlightOptionReturn';
var uxFlightOptionOneWayID     = 'uxFlightOptionOneWay';
var uxDeptID                   = 'uxDept';
var uxDepartureDateID          = 'uxDepartureDate';
var uxDestinationID            = 'uxDestination';
var uxDestinationHiddenID      = 'uxDestinationHidden';
var uxDestinationTypeHiddenID  = 'LTP';
var uxReturnDateID             = 'uxReturnDate';
var uxDirectFlightID           = 'uxDirectFlight';
var uxCabinClassID             = 'uxCabinClass';
var uxChild1AgeID              = 'uxChild1Age';
var uxChild2AgeID              = 'uxChild2Age';
var uxChild3AgeID              = 'uxChild3Age';
var uxChild4AgeID              = 'uxChild4Age';
var uxChild5AgeID              = 'uxChild5Age';
var uxChild6AgeID              = 'uxChild6Age';
var uiDestinationMessagePanelID= 'uiDestinationMessagePanel';
var uiDeptDateMessagePanelID   = 'uiDeptDateMessagePanel';
var uiReturnDateMessagePanelID = 'uiReturnDateMessagePanel';
var uiPaxMessagePanelID        = 'uiPaxMessagePanel';
var uxAirlineID                = 'uxAirline';
/* 
  Search form methods
  ===================
*/
function InitialiseFlightSearchForm(root,childAge) {
  var textOverrides = new Array(1);  
  LoadPropositions('FLIGHT',root);
  InitialiseNumericDropdown(uxAdultID , 0, 9, 2, null);
  InitialiseNumericDropdown(uxSeniorID, 0, 9, 0, null);
  InitialiseNumericDropdown(uxChildID , 0, 6, 0, null);
  textOverrides[1] = 'under 2';
  InitialiseNumericDropdown(uxChild1AgeID, 1, childAge, 0, textOverrides);
  InitialiseNumericDropdown(uxChild2AgeID, 1, childAge, 0, textOverrides);
  InitialiseNumericDropdown(uxChild3AgeID, 1, childAge, 0, textOverrides);
  InitialiseNumericDropdown(uxChild4AgeID, 1, childAge, 0, textOverrides);
  InitialiseNumericDropdown(uxChild5AgeID, 1, childAge, 0, textOverrides);
  InitialiseNumericDropdown(uxChild6AgeID, 1, childAge, 0, textOverrides);
  LoadFormValues();         
}
function SaveFormValues(){
  // This should probably be saved as multiple values to one cookie...
  var value = {
    uxFlightOptionReturn  : $(uxFlightOptionReturnID).checked,
    uxFlightOptionOneWay  : $(uxFlightOptionOneWayID).checked, 
    uxDept                : $(uxDeptID).value,
    uxDestination         : $(uxDestinationID).value,
    uxDestinationHidden   : $(uxDestinationHiddenID).value,
    LTP                   : $(uxDestinationTypeHiddenID).value,
    uxDepartureDate       : $(uxDepartureDateID).value,
    uxReturnDate          : $(uxReturnDateID).value,
    uxDirectFlight        : $(uxDirectFlightID).checked,
    uxAdult               : $(uxAdultID).value,
    uxSenior              : $(uxSeniorID).value,
    uxChild               : $(uxChildID).value,
    uxCabinClass          : $(uxCabinClassID).value,
    uxChild1Age           : $(uxChild1AgeID).value,
    uxChild2Age           : $(uxChild2AgeID).value,
    uxChild3Age           : $(uxChild3AgeID).value,
    uxChild4Age           : $(uxChild4AgeID).value,
    uxChild5Age           : $(uxChild5AgeID).value,
    uxChild6Age           : $(uxChild6AgeID).value,
    uxAirline             : $(uxAirlineID).value
  };
  subcookiejar.bake(CookieParamID, value);
}
function LoadFormValues(){
    // Also check the cookie setting code in integrationEP
  LoadFormValue(CookieParamID,uxFlightOptionReturnID,true);
  LoadFormValue(CookieParamID,uxFlightOptionOneWayID,true);
  if($(uxFlightOptionOneWayID).checked){DisplayOneWayFlight();}
  LoadFormValue(CookieParamID,uxDeptID,false);
  LoadFormValue(CookieParamID,uxDestinationID,false);
  LoadFormValue(CookieParamID,uxDestinationHiddenID,false);
  LoadFormValue(CookieParamID,uxDestinationTypeHiddenID,false);
  if(LoadFormValue(CookieParamID,uxDepartureDateID,false))
  {
    ChangeDate(null,$(uxDepartureDateID),null);
  }
  if(LoadFormValue(CookieParamID,uxReturnDateID,false))
  {
    ChangeDate(null,$(uxReturnDateID),null);
  }
  else{
    setCheckOut(7);
  }
  LoadFormValue(CookieParamID,uxDirectFlightID,true);
  LoadFormValue(CookieParamID,uxAdultID,false);
  LoadFormValue(CookieParamID,uxSeniorID,false);
  if(LoadFormValue(CookieParamID,uxChildID,false))
  {
    NumberOfChildrenOnChangeHandler($(uxChildID));
  }
  LoadFormValue(CookieParamID,uxCabinClassID,false);  
  for(var i=1;i<=6;i++)
  {
   // var elem=document.getElementById("uxChild"+1+"Age");
    LoadFormValue(CookieParamID,"uxChild"+i+"Age",false);
  }
  LoadFormValue(CookieParamID,uxAirlineID,false);
}
function LoadFormValue(CookieID,ElemID,isChecked)
{
  var value = subcookiejar.fetch(CookieID,ElemID);
  var input = $(ElemID);
  if(value != null && value != "" && input){
    if(isChecked)
    {
      input.checked = (value == 'true');
    }else input.value = value;
    return true;
  }
  return false;
}
function NumberOfChildrenOnChangeHandler(input){
// uxChild1AgePanel
  var value               = input.value;
  var uiChildAgeContainer = null;
  var i                   = 0;
  for (i = 1; i <= 6; i++){
    uiChildAgeContainer = $(input.id + i + 'AgePanel');
    if (uiChildAgeContainer) {
      if (i <= value) {
        uiChildAgeContainer.style.display='';
        $(input.id + i + 'Age').selectedIndex = 0;
      } else {
        uiChildAgeContainer.style.display='none';
        $(input.id + i + 'Age').selectedIndex = null;
      }  
    } else {
      alert('NumberOfChildrenOnChangeHandler: Could not find room/child container with and id of <' + input.id + i + 'AgePanel>!');
      return null;   
    }
  }
}
function ShowErrorMessage(id, message){
  var panel = $(id);
  if (panel){
    panel.innerHTML = message;
    panel.style.display = 'block';
  }
}
function ClearErrorMessage(id){
  var panel = $(id);
  if (panel){
    panel.innerHTML = "";
    panel.style.display = "none";
  }
}
function DisplayOneWayFlight(){
  var input = $(uxReturnDateID);
  var label = $(uxReturnDateID + '_label');
  input.value = "";
  input.disabled = true;
  document.getElementById("uxReturnDate_Image").style.visibility = "hidden";
  label.innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; 
}
function DisplayReturnFlight(){
  var input = $(uxReturnDateID);
  input.disabled = false;
  document.getElementById("uxReturnDate_Image").style.visibility = "visible";
  setCheckOut(7);
}

function UpdateReturnDate(deptDateInput){
  var returnDateInput;
  var deptDate;
  var retDate;
  returnDateInput = $(uxReturnDateID);
  if(returnDateInput.disabled)return;
  if (ValidateDate(4,deptDateInput, new Date(1,1,1900))){
    deptDate = GetDate(deptDateInput.value);
    if (ValidateDate(4,returnDateInput, new Date(1,1,1900))){
      retDate = GetDate(returnDateInput.value);
      if (deptDate > retDate){  
        returnDateInput.value = FormatDate(deptDate);        
      }
    }
  }
}
function UpdateDeptDate(returnDateInput){
  var deptDateInput;
  var deptDate;
  var retDate;
  deptDateInput = $(uxDepartureDateID);
  if (ValidateDate(4, returnDateInput, new Date(1,1,1900)) && ValidateDate(4, deptDateInput, new Date(1,1,1900))){
    deptDate = GetDate(deptDateInput.value);
    retDate  = GetDate(returnDateInput.value);
    if (retDate < deptDate){
      deptDateInput.value = FormatDate(retDate);
    }
  }
}
function FormatDate(dateObject){
  var dayString = '';
  var monthString = '';
  dayString = String(dateObject.getDate());
  if (dayString.length < 2){
    dayString = '0' + dayString;
  }
  monthString = String(dateObject.getMonth() + 1);
  if (monthString.length < 2){
    monthString = '0' + monthString;
  }
  return dayString + '/' + monthString  + '/' + dateObject.getFullYear();
}
/* 
  VALIDATION 
  ==========
*/
var valMessage;
var valMessages = new Array(11);
valMessages[0] = 'Each booking must have at least one adult passenger.'// <A class="error redText" target="_blank" href="http://thomascooknew.custhelp.com/cgi-bin/thomascooknew.cfg/php/enduser/std_adp.php?p_faqid=181&p_created=1132909608&p_sid=NstpJHJi&p_lva=154&p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTMmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1vbmUgYWR1bHQgcGVyIGNoaWxk&p_li=&p_topview=1">Click here</A> for more information.';
valMessages[1] = 'There must be at least one adult for every two children travelling.'// <A class="error redText" target="_blank" href="http://thomascooknew.custhelp.com/cgi-bin/thomascooknew.cfg/php/enduser/std_adp.php?p_faqid=181&p_created=1132909608&p_sid=NstpJHJi&p_lva=154&p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTMmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1vbmUgYWR1bHQgcGVyIGNoaWxk&p_li=&p_topview=1">Click here</A> for more information.';
valMessages[2] = 'There is a maximum of 9 passengers per booking.'// <A class="error redText" target="_blank" href="http://thomascooknew.custhelp.com/cgi-bin/thomascooknew.cfg/php/enduser/std_adp.php?p_faqid=160&p_created=1118940814&p_sid=NstpJHJi&p_lva=181&p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9MjAmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1tYXhpbXVtIHBhcnR5IHNpemU*&p_li=&p_topview=1">Click here</A> for more information.';
valMessages[3] = 'There must be at least 1 adult for each infant travelling.'// <a class="error redText" target="_blank" href="http://thomascooknew.custhelp.com/cgi-bin/thomascooknew.cfg/php/enduser/std_adp.php?p_faqid=181&p_created=1132909608&p_sid=NstpJHJi&p_lva=154&p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTMmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1vbmUgYWR1bHQgcGVyIGNoaWxk&p_li=&p_topview=1">Click here</a> for more information.';
valMessages[4] = 'Please enter a valid Departure date (at least 3 days from today).'
valMessages[5] = 'The return date you have entered has already passed.  Please enter a new return date.'
valMessages[6] = 'This destination is invalid. Please re-enter.';
valMessages[7] = 'Departure date is a required field, please enter departure date.';
valMessages[8] = 'Return date is a required field, please enter return date.';
valMessages[9] = 'Please enter a valid departure and return date.';
valMessages[10] = 'The returning date must be after the departing date.';
valMessages[11] = 'Please enter the age of each child in the party.'
function ValidateFlightSearchForm(){
  var isValid = false;
  var msgPanel;
  var deptDate;
  // Clear down current messages...      
  ClearErrorMessage(uiDestinationMessagePanelID);
  ClearErrorMessage(uiDeptDateMessagePanelID);    
  ClearErrorMessage(uiReturnDateMessagePanelID);    
  ClearErrorMessage(uiPaxMessagePanelID);
  // Destination
  isValid = $(uxDestinationID).value.length > 0 && $(uxDestinationID).value.toUpperCase() != 'MAKE SELECTION';
  if(!isValid){
    ShowErrorMessage(uiDestinationMessagePanelID, valMessages[6]);
    return false;
  }
  // Departure date
  isValid = ValidateDate(4,$(uxDepartureDateID));
  if(!isValid){
    ShowErrorMessage(uiDeptDateMessagePanelID, valMessage); 
    return false;
  }
  // Return date - cant be in the past or less than dept date...
  if (!$(uxFlightOptionOneWayID).checked){  
    deptDate = GetDate($(uxDepartureDateID).value);
    isValid = ValidateDate(10,$(uxReturnDateID),deptDate)  
  }else{ // flight is one-way, return day not needed...
    isValid = true;
  }
  if(!isValid){
    ShowErrorMessage(uiReturnDateMessagePanelID, valMessage);  
    return false;  
  }
  // Party size
  isValid = ValidateParty($(uxAdultID), $(uxSeniorID), $(uxChildID));
  if(!isValid){
    ShowErrorMessage(uiPaxMessagePanelID, valMessage);    
    return false;   
  }
  if(!ValidateCabinClass())return false;
   if(isValid)
    SaveFormValues(); 
  return true;
}
function ValidateCabinClass()
{
  var cabClass=$(uxCabinClassID)
  var cabClassMsg=document.getElementById("CabinClassErrorMessage");
  if(cabClass.value=="PREMIUMECONOMY")
  {
     cabClassMsg.style.display="block";
     return false; 
  }else
  {
     cabClassMsg.style.display="none";
     return true;
  }
}
function ValidateParty(inputAdult, inputSenior, inputChildren){
  var roomAdults    = parseInt(inputAdult.value) + parseInt(inputSenior.value);
  var roomChildren  = parseInt(inputChildren.value);
  var roomInfants   = 0;
  var partySize     = 0;
  var childAgeInput;
  var i             = 0;
  for(i=1; i<=inputChildren.value; i++){
    childAgeInput = $(inputChildren.id + i + 'Age');
    if(childAgeInput && (childAgeInput.value == '0'))
    {
      valMessage = valMessages[11];
      return false;   
    }
    if(childAgeInput && (childAgeInput.value == '1')){
         roomInfants++;
         roomChildren--;
    }
  }
  partySize = roomAdults + roomChildren + roomInfants;
  // each room must have at least one adult
  if  ( roomAdults == 0 ){
      valMessage = valMessages[0];
      return false;
  }
  // is the ratio of adults to children correct
  if ( roomAdults > 0 && roomChildren > 0 && (roomChildren/roomAdults) > 2 ){
      valMessage = valMessages[1];
      return false;
  }
  // is the ratio of adults to infants correct
  if ( roomAdults > 0 && roomInfants > 0 && (roomInfants/roomAdults) > 1 ) {
      valMessage = valMessages[3];
      return false;
  }
  // is the party size 9 or less
  if ( partySize > 9 ){
      valMessage = valMessages[2];
      return false;
  }
    return true;
}
function ValidateDate(msgNum, input, minValidDate){
  var dateStringArray;
  var deptDateString  = "";
  var dayString       = "";
  var monthString     = "";
  var yearString      = "";
  var inputDate;
  if(!minValidDate){
    minValidDate = new Date();
    minValidDate.setDate(minValidDate.getDate() + 2);
  }  
  if(input){
    deptDateString = input.value;
    dateStringArray = deptDateString.split("/");
    if(dateStringArray.length!=3){
        switch(msgNum){
            case 4: 
                valMessage = valMessages[7];
                break;
            case 5:
                valMessage = valMessages[8];
                break;
            default:
                valMessage = valMessages[9];
        }
        return false;
    }
    dayString   = dateStringArray[0];
    monthString = dateStringArray[1];
    yearString  = dateStringArray[2];
    if(yearString.length == 2){
      year = '20' + year;
    }
      inputDate = new Date();
      inputDate.setFullYear(yearString);	        
      inputDate.setMonth(Number(monthString)-1);      
      inputDate.setDate(dayString);
      if(isNaN(inputDate))
      {
            valMessage = valMessages[msgNum];
            return false;
      }
    if(inputDate < minValidDate){ // date selected is prior to 2 days hence        
      valMessage = valMessages[msgNum];
      return false;
    }
        if (monthString < 1 || monthString > 12) 
        {
            valMessage = valMessages[9];
            return false;
        }
        if (dayString < 1 || dayString > 31) 
        {
            valMessage = valMessages[9];
            return false;
        }
        if ((monthString==4 || monthString==6 || monthString==9 || monthString==11) && dayString==31) 
        {
            valMessage = valMessages[9];
            return false;
        }
  }
  return true;
}
document.onkeydown = function testForEnter(e){ 
  var elementId;
  if(!e){ 
      e=window.event;
      elementId = e.srcElement.id;
  }else{
      elementId = e.target.id;        
  } 
	if (e.keyCode == 13 && (elementId == uxDepartureDateID || elementId == uxReturnDateID || elementId == uxDestinationID) ) {        
		e.cancelBubble = true;
		e.returnValue = false;
		return false;	
  }
} 
/*
  Flight Results methods
  ======================
*/
// Array of key/value pairs. key: outbound option guid, value: array applicable inbound option guids...
var flightOptions;
function OutboundOptionChange(input, flightOptionArray){
  var inputValueArray;
  var optionGuid = "";
  var inboundInput;
  var inboundOptions;
  var idPrefix = "";
  var indexI = 0;
  var indexJ = 0;
  var autoPicked = false;
  if(input && input.checked){
    inputValueArray = input.value.split("_");
    // Index 0 should contain the id prefix for the inbound options...
    idPrefix = inputValueArray[0];
    // probably a better way of doing this....
    while(idPrefix.indexOf("~") >= 0){
      idPrefix = idPrefix.replace("~","_");
    }
    // Index 1 should contain the option Guid...
    optionGuid = inputValueArray[1];    
    // iterate the 2D array
    for(indexJ=0; indexJ < flightOptionArray.length; indexJ++){
      // Does array item relate to required option guid?
      if (flightOptionArray[indexJ].key == optionGuid){
        inboundOptions = flightOptionArray[indexJ].value;
        break;
      }
    }
    // iterate through all inbound radio buttons and disable/enable based on value GUID array.
    inboundInput = document.getElementById(idPrefix + indexI);
    while(inboundOptions && inboundInput){
      inboundInput.disabled = (IndexOf(inboundOptions,inboundInput.value) == -1);
      if(inboundInput.disabled){
        inboundInput.checked = false;
      }else if(!autoPicked){
         inboundInput.checked = true;
         autoPicked = true;
      }
      indexI++;
      inboundInput = document.getElementById(idPrefix + indexI);
    }
  }
}
function IndexOf(inputArray, value){
  for(var i=0; i<inputArray.length; i++){
    if(inputArray[i] == value){
      return i;      
    }
  }
  return -1
}
function setCheckOut(duration)
{
    var d = new Date();
    var d2 = new Date();
    var day;
    var month;
    var year;
    var Day;
    var Days = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
    var Months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
    if(document.getElementById("uxReturnDate").disabled)return; 
    if (!isValidDate(document.getElementById('uxDepartureDate').value))
    {
         document.getElementById("uxReturnDate_label").innerHTML = '';
         document.getElementById("uxReturnDate").value = '';
    }
    else
    {
        var deptDate = document.getElementById('uxDepartureDate').value.split('/');
        day = deptDate[0];
        month = deptDate[1];
        year = deptDate[2];
        d.setDate(15);
        d.setMonth(month-1);
        d.setFullYear(year);
        d.setDate(day);
        var d2 = d.add("d", duration);
        var Day;
        if(d2.getDate().toString().length < 2)
        {
            Day = "0" + d2.getDate();
        }
        else
        {
            Day = d2.getDate();
        }
        var Month = (parseInt(d2.getMonth())+1)
        if(Month.toString().length < 2)
        {
            Month = "0" + Month;
        }        
        document.getElementById("uxReturnDate_label").innerHTML = Days[d2.getDay()];   
        document.getElementById("uxReturnDate").value = (Day + "/" + Month + "/" + d2.getFullYear() );   
     }
}
