var Route1InputArea;
var Route1Title;
var Route1ReturnDepartDateInputArea;
var Route2InputArea;
var Route2Title;
var AdvanceSearchOptionArea;
var SimpleSearchOptionSwitch;
var AdvanceSearchOptionSwitch;

var FlightSearchTypeSelectControl;
var PassengerTypeSelectControl;
var PassengerQuantitySelectControl;
var AirlineSelectControl;
var ClassTypeSelectControl;
var SendTicketCityTextBoxControl;

var DepartCity1TextBoxControl;
var ArriveCity1TextBoxControl;
var DepartDate1TextBoxControl;
var ReturnDepartDate1Control;
var DepartCity2TextBoxControl;
var ArriveCity2TextBoxControl;
var DepartDate2TextBoxControl;

var DepartCity1Control;
var ArriveCity1Control;
var DepartDate1Control;
var DepartCity2Control;
var ArriveCity2Control;
var DepartDate2Control;
var ClassTypeControl;
var PassengerQuantityControl;
var SendTicketCityControl;
var AirlineControl;
var PassengerTypeControl;

var SearchType;

//Function run after DomReady
function DomReadyIndex()
{
    //Set controls variable
    SetControlsCommon();
    SetControlsIndex(); 

    //Register event
    ArriveCity1TextBoxControl.$r("blur", SetRoute1ArriveCityParameter); 
   
    //Get search type
    SearchType = GetRadioValue(FlightSearchTypeSelectControl);
    
    //Setting search display by flight search type
    DisplayControl();
}

//Function run after DomReady
function DomReadySearchResult()
{
    //Set controls variable
    SetControlsCommon(); 
    SetControlsResult(); 
    //Restore search parameter to search control of search result page
    RestoreSearchParameterResult(); 
    //Get search type
    SearchType = GetDropDownListValue(FlightSearchTypeSelectControl);
    
    //Setting search display by flight search type
    DisplayControl();
}

//Set controls variable of index page
function SetControlsIndex()
{
    FlightSearchTypeSelectControl = document.forms[0].FlightSearchType;
    PassengerTypeSelectControl = document.forms[0].PassengerTypeRadio;
    ClassTypeSelectControl = document.forms[0].ClassTypeRadio;
}

//Set controls variable of search result page
function SetControlsResult()
{
    FlightSearchTypeSelectControl = $("FlightSearchType");
    PassengerTypeSelectControl = $("PassengerTypeSelect");
    ClassTypeSelectControl = $("ClassTypeSelect");
}

//Set common controls variable
function SetControlsCommon()
{
    Route1InputArea = $("Route1InputArea");
    Route1Title = $("Route1Title");
    Route1ReturnDepartDateInputArea = $("Route1ReturnDepartDateInputArea");
    Route2InputArea = $("Route2InputArea");
    Route2Title = $("Route2Title");
    AdvanceSearchOptionArea = $("AdvanceSearchOptionArea");
    SimpleSearchOptionSwitch = $("SimpleSearchOptionSwitch");
    AdvanceSearchOptionSwitch = $("AdvanceSearchOptionSwitch");
   
    PassengerQuantitySelectControl = $("PassengerQuantitySelect");
    AirlineSelectControl = $("AirlineSelect");
    SendTicketCityTextBoxControl = $("SendTicketTextBox"); 
   
    DepartCity1TextBoxControl = $("DepartCity1TextBox");
    ArriveCity1TextBoxControl = $("ArriveCity1TextBox");
    DepartDate1TextBoxControl = $("DepartDate1TextBox");
    ReturnDepartDate1Control = $("ReturnDepartDate1TextBox");
    DepartCity2TextBoxControl = $("DepartCity2TextBox");
    ArriveCity2TextBoxControl = $("ArriveCity2TextBox");
    DepartDate2TextBoxControl = $("DepartDate2TextBox");
    
    DepartCity1Control = $("DCity1");
    ArriveCity1Control = $("ACity1");
    DepartDate1Control = $("DDate1");
    DepartCity2Control = $("DCity2");
    ArriveCity2Control = $("ACity2");
    DepartDate2Control = $("DDate2");
    ClassTypeControl = $("ClassType");
    PassengerQuantityControl = $("PassengerQuantity");
    SendTicketCityControl = $("SendTicketCity");
    AirlineControl = $("Airline");
    PassengerTypeControl = $("PassengerType");
 
}

//function when change search type
function ChangeSearchType()
{
    SearchType = GetDropDownListValue(FlightSearchTypeSelectControl);
       
    //switch search type
    switch(SearchType)
    {
        case "S":
            SingleWaySearchDisplay();
            break;
        case "D":
            RoundwaySearchDisplay();
            break;
        case "M":
            MultipleWaySearchDisplay();
            break;              
    }
}

//Setting search display by flight search type
function DisplayControl()
{
    //switch search type
    switch(SearchType)
    {
        case "S":
            SingleWaySearchDisplay();
            break;
        case "D":
            RoundwaySearchDisplay();
            break;
        case "M":
            MultipleWaySearchDisplay();
            break;              
    }

    //Display Simple Setting Option
    SimpleSearchOptionDisplay() ;
}

//Single way search display setting
function SingleWaySearchDisplay()
{
    SearchType = "S";
    Route1InputArea.style.display = "";
    Route1Title.style.display = "none";
    Route1ReturnDepartDateInputArea.style.display = "none";
    Route2InputArea.style.display = "none"; 
    Route2Title.style.display = "none";
}

//Round way search display setting
function RoundwaySearchDisplay()
{
    SearchType = "D";
    Route1InputArea.style.display = "";
    Route1Title.style.display = "none";
    Route1ReturnDepartDateInputArea.style.display = "";
    Route2InputArea.style.display = "none"; 
    Route2Title.style.display = "none";
}

//Multiple way search display setting
function MultipleWaySearchDisplay()
{
    SearchType = "M";
    Route1InputArea.style.display = "";
    Route1Title.style.display = "";
    Route1ReturnDepartDateInputArea.style.display = "none";
    Route2InputArea.style.display = ""; 
    Route2Title.style.display = "";
}

//Advance search option display
function AdvanceSearchOptionDisplay()
{
    AdvanceSearchOptionArea.style.display = "";
    SimpleSearchOptionSwitch.style.display = "";
    AdvanceSearchOptionSwitch.style.display = "none";
}

//Simple search option display
function SimpleSearchOptionDisplay()
{
    AdvanceSearchOptionArea.style.display = "none";
    SimpleSearchOptionSwitch.style.display = "none";
    AdvanceSearchOptionSwitch.style.display = "";
}


//Set route 1 arrive city parameter when select a city
function SetRoute1ArriveCityParameter()
{
    DepartCity2TextBoxControl.value = ArriveCity1TextBoxControl.value;
 
}

//Restore search parameter to search control of search result page
function RestoreSearchParameterResult()
{
        if(ClassTypeParameter=="*")
        {
            ClassTypeSelectControl.value='';
        }
        if(ClassTypeParameter=="F"||ClassTypeParameter=="C"||ClassTypeParameter=="CF")
        {
            ClassTypeSelectControl.value='CF';
        }
        if(ClassTypeParameter=="Y"||ClassTypeParameter=="YC"||ClassTypeParameter=="YF"||ClassTypeParameter==""|ClassTypeParameter=="YCF")
        {
            ClassTypeSelectControl.value='';
        }
        FlightSearchTypeSelectControl.value = SearchTypeParameter;
        PassengerTypeSelectControl.value = PassengerTypeParameter;
        PassengerQuantitySelectControl.value = PassengerQuantityParameter;
        AirlineSelectControl.value = AirlineParameter;
        //ClassTypeSelectControl.value = ClassTypeParameter;
        SendTicketCityTextBoxControl.value = SendTicketCityNameParameter;

        DepartCity1TextBoxControl.value = FirstRouteDepartCityNameParameter;
        ArriveCity1TextBoxControl.value = FirstRouteArriveCityNameParameter;
        DepartDate1TextBoxControl.value = FirstRouteDepartDateParameter;
        ReturnDepartDate1Control.value = SecondRouteDepartDateParameter;
        DepartCity2TextBoxControl.value = SecondRouteDepartCityNameParameter
        ArriveCity2TextBoxControl.value = SecondRouteArriveCityNameParameter;
        DepartDate2TextBoxControl.value = SecondRouteDepartDateParameter;
        
        DepartCity1Control.value = FirstRouteDepartCityCodeParameter;
        ArriveCity1Control.value = FirstRouteArriveCityCodeParameter;
        DepartDate1Control.value = FirstRouteDepartDateParameter;
        DepartCity2Control.value = SecondRouteDepartCityCodeParameter;
        ArriveCity2Control.value = SecondRouteArriveCityCodeParameter;
        DepartDate2Control.value = SecondRouteDepartDateParameter;   
        
        ClassTypeControl.value = ClassTypeParameter;
        PassengerQuantityControl.value = PassengerQuantityParameter;
        SendTicketCityControl.value = SendTicketCityNameParameter;
        AirlineControl.value = AirlineParameter;
        PassengerTypeControl.value = PassengerTypeParameter;
}



//Open first route flight search result page.
function OpenShowFareFirst()
{
    //Validate form value
    if(ValidateForm())
    {
        //alert(GenerateSearchParameterString()) ;
//        document.forms[0].action="ShowFareFirst.aspx";
//        document.forms[0].value=GenerateSearchParameterString();
//        document.forms[0].submit();

        _.location = "ShowFareFirst.aspx?" + GenerateSearchParameterString();
    } 

}

// Generate search parameter quary string
function GenerateSearchParameterString()
{   
    var Parameter = "";
      
    //switch search type
    switch(SearchType)
    {
        case "S":
            Parameter =  GenerateSinglewaySearchParameterString();
            break;
        case "D":
            if ( ReturnDepartDate1Control.isNull())
            { 
                Parameter =  GenerateSinglewaySearchParameterString();
            }
            else
            {
                Parameter =  GenerateRoundwaySearchParameterString();
            }  
            break;
        case "M":
            Parameter =  GenerateMultiplewaySearchParameterString();
            break;              
    }
   
    Parameter +=  GenerateCommonSimpleSearchParameterString();
    Parameter +=  GenerateCommonAdvanceSearchParameterString();
 
   
    return Parameter; 
}

//Generate single way search parameter
function GenerateSinglewaySearchParameterString()
{
    var Parameter = "";
   
    Parameter += "DCity1=";
    Parameter +=  DepartCity1Control.value; 
    Parameter += "&";
   
    Parameter += "ACity1=";
    Parameter +=  ArriveCity1Control.value; 
    Parameter += "&";
   
    Parameter += "DDate1=";
    Parameter +=  DepartDate1TextBoxControl.value; 
    Parameter += "&";
    DepartDate1Control.value =  DepartDate1TextBoxControl.value; 
  
    return Parameter;
}

//Generate round way search parameter
function GenerateRoundwaySearchParameterString()
{
    var Parameter = "";
   
    Parameter += "DCity1=";
    Parameter +=  DepartCity1Control.value; 
    Parameter += "&";
   
    Parameter += "ACity1=";
    Parameter +=  ArriveCity1Control.value; 
    Parameter += "&";
   
    Parameter += "DDate1=";
    Parameter +=  DepartDate1TextBoxControl.value; 
    Parameter += "&"; 
    DepartDate1Control.value =  DepartDate1TextBoxControl.value; 
   
    Parameter += "DDate2=";
    Parameter +=  ReturnDepartDate1Control.value; 
    Parameter += "&";  
    DepartDate2Control.value =  ReturnDepartDate1Control.value; 

    return Parameter;
}

//Generate multiple way search parameter
function GenerateMultiplewaySearchParameterString()
{
    var Parameter = "";
   
    Parameter += "DCity1=";
    Parameter +=  DepartCity1Control.value; 
    Parameter += "&";
   
    Parameter += "ACity1=";
    Parameter +=  ArriveCity1Control.value; 
    Parameter += "&";
   
    Parameter += "DDate1=";
    Parameter +=  DepartDate1TextBoxControl.value; 
    Parameter += "&"; 
    DepartDate1Control.value =  DepartDate1TextBoxControl.value; 
      
    Parameter += "ACity2=";
    Parameter +=  ArriveCity2Control.value; 
    Parameter += "&"; 
   
    Parameter += "DDate2=";
    Parameter +=  DepartDate2TextBoxControl.value; 
    Parameter += "&";  
    DepartDate2Control.value =  DepartDate2TextBoxControl.value; 

    return Parameter;
}

//Generate common simple search parameter
function GenerateCommonSimpleSearchParameterString()
{
    var Parameter = "";

    Parameter += "ClassType=";
    Parameter +=  ClassTypeControl.value;
    Parameter += "&"; 
     
   
    Parameter += "PassengerQuantity=";
    Parameter +=  PassengerQuantityControl.value;
    Parameter += "&"; 

    return Parameter; 
}

//Generate common advance search parameter
function GenerateCommonAdvanceSearchParameterString()
{
    var Parameter = "";

    if(SendTicketCityTextBoxControl.value!="")
    { 
        Parameter += "SendTicketCity=";
        Parameter += escape(SendTicketCityTextBoxControl.value);
    } 
    Parameter += "&";
    SendTicketCityControl.value = SendTicketCityTextBoxControl.value;
   
    Parameter += "Airline=";
    Parameter +=  AirlineControl.value;
    Parameter += "&"; 
   
    Parameter += "PassengerType=";
    Parameter +=  PassengerTypeControl.value;
    Parameter += "&"; 

    return Parameter; 
}

//Set class type
function SetClassTypeIndex()
{
    ClassTypeControl.value = GetRadioValue(ClassTypeSelectControl);
}

//Set class type
function SetClassTypeResult()
{
    ClassTypeControl.value = GetDropDownListValue(ClassTypeSelectControl);
}

//Set passenger quantity
function SetPassengerQuantity()
{
    PassengerQuantityControl.value = GetDropDownListValue(PassengerQuantitySelectControl);
}

//Set airline
function SetAirline()
{
    AirlineControl.value = GetDropDownListValue(AirlineSelectControl);
}

//Set passenger type
function SetPassengerTypeIndex()
{
    PassengerTypeControl.value = GetRadioValue(PassengerTypeSelectControl);
    ShowPassagerPro(PassengerTypeControl.value);
}

//Set passenger type
function SetPassengerTypeResult()
{
    PassengerTypeControl.value = GetDropDownListValue(PassengerTypeSelectControl);
}


//Get Radio control value
function GetRadioValue(radioObj)
{
    var Result = "";
    for (i=0; i<radioObj.length; i++)
    {
        if (radioObj[i].checked)
        {
            Result = radioObj[i].value;
            break; 
        }
    } 
    return Result;
}

//Get drop down list control value
function GetDropDownListValue(ddlObj)
{
    var Result = "";
   
    Result = ddlObj.options[ddlObj.selectedIndex].value;

    return Result;
}


//Validate
window.ValidateForm = function(){
    return false;
};

_.$r('domready', function(){
    window.ValidateForm = $validate(document.forms[0], 
    {
		DepartCity1TextBox: 'StringIsEmpty|DepartCityNullPrompt',
		ArriveCity1TextBox: 'StringIsEmpty|ArriveCityNullPrompt;ValidateDepartCityNotSameAsArriveCity(DepartCity1TextBoxControl, ArriveCity1TextBoxControl)|DepartCityNotSameAsArriveCityPrompt',
		DepartDate1TextBox: 'StringIsEmpty|DepartDateNullPrompt;ValidateDateTime|DepartDateNullPrompt;DepartDateBeforeToday|FirstDepartBeforeToday',
        ReturnDepartDate1TextBox: 'ValidateDateTime|DepartDateNullPrompt;ValidateReturnDepartDate|ReturnDepartDateBeforeDepartDatePrompt',
        ArriveCity2TextBoxControl: 'StringIsEmpty|ArriveCityNullPrompt;ValidateDepartCityNotSameAsArriveCity(DepartCity2TextBoxControl, ArriveCity2TextBoxControl)|DepartCityNotSameAsArriveCityPrompt',
        DepartDate2TextBox: 'StringIsEmpty|DepartDateNullPrompt;ValidateDateTime|DepartDateNullPrompt;ValidateSecondRouteDepartDate|SecondRouteDepartDateBeforeDepartDatePrompt'

	}, 
	{
		DepartCityNullPrompt: '請選擇出發城市',
        ArriveCityNullPrompt: '請選擇到達城市',
        DepartDateNullPrompt: '請選擇出發日期',
        ReturnDepartDateNullPrompt: '請選擇返程日期',
        ReturnDepartDateBeforeDepartDatePrompt: '您選擇的返回日期早于出發日期，請重新選擇', 
        SecondRouteDepartDateBeforeDepartDatePrompt: '第二程出發日期不能早于第一程出發日期',  
        DepartCityNotSameAsArriveCityPrompt: '出發城市不能和到達城市相同',
        FirstDepartBeforeToday:'您選擇的出發日期早于今天,請重新選擇'
	});
});

//String is empty
function StringIsEmpty(value)
{
    return value.trim()!='';
}

//Validate date time
function ValidateDateTime(value)
{
    if (value=="")
    {
        return true;
    } 
   
    return value.isDateTime();
}


//Validate depart city does not same as arrive city
function ValidateDepartCityNotSameAsArriveCity(departCityControl, arriveCityControl)
{
    var DepartCity = departCityControl.value; 
    if ( DepartCity.indexOf("(")>-1)
    {
        DepartCity = DepartCity.slice(0, DepartCity.indexOf('('))
    } 
    var ArriveCity = arriveCityControl.value; 
    if ( ArriveCity.indexOf("(")>-1)
    {
        ArriveCity = ArriveCity.slice(0, ArriveCity.indexOf('('))
    } 
    return DepartCity != ArriveCity; 
}

//Validate first route depart date;
function ValidateFirstRouteDepartDate(value)
{
    return value.isDateTime()<ReturnDepartDate1Control.value.isDateTime();
}

//Validate round trip return depart date
function ValidateReturnDepartDate(value)
{
   if (value == "")
   {
        return true;
   } 
    
    return  value.isDateTime()>=DepartDate1TextBoxControl.value.isDateTime()
}

//Validate first route depart date;
function ValidateSecondRouteDepartDate(value)
{
    return  value.isDateTime()>=DepartDate1TextBoxControl.value.isDateTime()
}

//FirstDepartDateBeforeToday
function DepartDateBeforeToday(value)
{
    var LocalDate = new Date();
    var CurrentDate=LocalDate.getFullYear()+"-"+(parseInt(LocalDate.getMonth(),10)+1)+"-"+LocalDate.getDate();
    return Math.round((value.isDateTime()-CurrentDate.isDateTime())/60000)>=0
}
//if passager type is child or baby show message
function ShowPassagerPro(passagerType)
{
    if(passagerType.toUpperCase()=="ADU")
    {
        document.getElementById("PassagerPro").style.display="none";

    }
    if(passagerType.toUpperCase()=="CHI")
    {
        document.getElementById("PassagerPro").innerHTML="";
        document.getElementById("PassagerPro").innerHTML="請您確認兒童有成人陪伴，無成人陪伴的兒童只能直接向航空公司預訂。";
        document.getElementById("PassagerPro").style.display="";

    }
    if(passagerType.toUpperCase()=="BAB")
    {
        document.getElementById("PassagerPro").innerHTML="";
        document.getElementById("PassagerPro").innerHTML="請您確認嬰兒有成人陪伴，無成人陪伴的嬰兒只能直接向航空公司預訂。";
        document.getElementById("PassagerPro").style.display="";
    }
}