﻿// JScript File

Type.registerNamespace("FareQuest");

FareQuest.AirUIHelper = function() 
{

    
    //Sys.UI.Controls for all the top elements for the quicksearchdivs and airresultdivs
    var _homePageContainerDivControl = null ;
    var _resultsContainerDivControl = null ;
    var _resultsDivControl = null ;
    var _filtersDivControl = null ; 
    var _progressbarDivControl =  null ;
    var _filtersortProgressDivControl = null;
    var _adsDivControl = null ;
    var _detailsDivControl = null;
    var _quickSearchDivControl = null ;
    
    //Sys.UI.OpacityBehavior controls 
    var _resultsOpacityControl = null ;
    var _filtersOpacityControl = null ; 
    var _adsOpacityControl = null ;

    //Used for panel flipping
    var _toggleOpacityValue = 0.3 ;
    var _toggleOpacityValueDarker = 0.2 ;
    
    //Wrapper panel classes for the divcontrols with update functionality
    var _airResultsPanel = null ;
    var _airFiltersPanel = null  ;
    var _airProgressBarPanel = null ;
    var _airAdsPanel = null ;
    var _airDetailsPanel = null;
    
    //State variables for AirDoSearch webservice request
    var _currentResultNumber = 1 ;
    var _totalResultsNumber = 1 ;
    var _erroredResultsNumber = 0 ;
    var _timedoutResultsNumber = 0 ;
    var _abortedResultsNumber = 0 ; 
    
    //All the air partners AirDoSearch will be invoked for
    var _partnerArray = null ;
    
    //GLOBAL Array that all the functions will operate on some time parallely
    //MUTEX is essential to operate on this variable
    var _airItineraryClientArray = null ;
    
    //Sorting State Variables - maintains current state
    var _sortByPriceState = g_SORTSTATEASC ;
    var _sortByAirlinesState = g_SORTSTATEUNSORTED ;
    var _sortByDepartState = g_SORTSTATEUNSORTED ;
    var _sortByArriveState = g_SORTSTATEUNSORTED ;
    var _sortByStopsState = g_SORTSTATEUNSORTED ;
    var _sortByDurationState = g_SORTSTATEUNSORTED ;
    
    var _numberOfClickOuts = 0 ;
    
    
    this.InitAirUIHelper = function()
    {
        //alert ("Init AirUI Helper") ;
        
        //Create Atlas Div Controls and Initialize
        _homePageContainerDivControl = new Sys.UI.Control($('HomePageContainer')); 
        _resultsContainerDivControl = new Sys.UI.Control($('AirResultsPageContainer')); 
        _resultsDivControl = new Sys.UI.Control($('AirResults')); 
        _filtersDivControl = new Sys.UI.Control($('AirFilterResults')); 
        _progressbarDivControl =  new Sys.UI.Control($('progressdiv'));
        _adsDivControl = new Sys.UI.Control($('AirResultsPageRightColumn'));
        _detailsDivControl = new Sys.UI.Control($('detailsdiv')); 
        _quickSearchDivControl = new Sys.UI.Control($('HomePageLeftColumn')); 
        _filtersortProgressDivControl = new Sys.UI.Control($('filtersortprogressdiv')); 
        
        //Initialize Atlas Div Controls
        _homePageContainerDivControl.initialize(); 
        _resultsContainerDivControl.initialize();
        _resultsDivControl.initialize();
        _filtersDivControl.initialize();
        _progressbarDivControl.initialize();
        _detailsDivControl.initialize() ;
        _adsDivControl.initialize();
        _quickSearchDivControl.initialize() ;
        _filtersortProgressDivControl.initialize() ;
        
        
        //Create Atlas Opacity Controls, Set its value to _toggleOpacityValue and  Initialize
        _resultsOpacityControl = new Sys.UI.OpacityBehavior(); 
        _filtersOpacityControl = new Sys.UI.OpacityBehavior(); 
        _adsOpacityControl = new Sys.UI.OpacityBehavior();
        
        //Initialize Atlas Opacity Control for resultsdiv
        _resultsOpacityControl.set_value(_toggleOpacityValue);
        _resultsDivControl.get_behaviors().add(_resultsOpacityControl);
        _resultsOpacityControl.initialize();
        
        //Initialize Atlas Opacity Control for filtersdiv
        _filtersOpacityControl.set_value(_toggleOpacityValue);
        _filtersDivControl.get_behaviors().add(_filtersOpacityControl);
        _filtersOpacityControl.initialize();
        
        //Initialize Atlas Opacity Control for adspanel
        _adsOpacityControl.set_value(_toggleOpacityValue);
        _adsDivControl.get_behaviors().add(_adsOpacityControl);
        _adsOpacityControl.initialize();
        
        //Make ResultsPage container invisible and make container divs collapse
        _resultsContainerDivControl.set_visible(false) ;
        _progressbarDivControl.set_visible(false) ;
        _filtersortProgressDivControl.set_visible(false) ;
        _detailsDivControl.set_visible(false) ;
        _homePageContainerDivControl.set_visibilityMode (Sys.UI.VisibilityMode.Collapse);
        _resultsContainerDivControl.set_visibilityMode (Sys.UI.VisibilityMode.Collapse);
        _progressbarDivControl.set_visibilityMode (Sys.UI.VisibilityMode.Collapse);
        _filtersortProgressDivControl.set_visibilityMode (Sys.UI.VisibilityMode.Collapse);
        _detailsDivControl.set_visibilityMode (Sys.UI.VisibilityMode.Collapse);
        _quickSearchDivControl.set_visibilityMode (Sys.UI.VisibilityMode.Collapse);
          
    
        _airResultsPanel = new FareQuest.AirResultsPanel(_resultsDivControl) ;
        _airFiltersPanel = new FareQuest.AirFiltersPanel(_filtersDivControl) ;
        _airProgressBarPanel = new FareQuest.AirProgressBarPanel(_progressbarDivControl) ;
        _airAdsPanel = new FareQuest.AirAdsPanel(_adsDivControl) ;
        _airDetailsPanel = new FareQuest.AirDetailsPanel(_detailsDivControl);
    
    
        //PLEASE NOTE ****_partnerArray and _totalResultsNumber are intialised in SetPartnerArray()*****
        _currentResultNumber = 1 ;
        _erroredResultsNumber = 0 ;
        _timedoutResultsNumber = 0 ;
        _abortedResultsNumber = 0 ; 
    
        //Global array is intialized to null
        _airItineraryClientArray = null ;
        
        _sortByPriceState = g_SORTSTATEASC ;
        _sortByAirlinesState = g_SORTSTATEUNSORTED ;
        _sortByDepartState = g_SORTSTATEUNSORTED ;
        _sortByArriveState = g_SORTSTATEUNSORTED ;
        _sortByStopsState = g_SORTSTATEUNSORTED ;
        _sortByDurationState = g_SORTSTATEUNSORTED ;
        
    }
    


    //intializes the partner array for this search
    this.SetPartnerArray = function(partnerarray)
    {
        //alert ("Setting Partner Array") ;
        _partnerArray = partnerarray ;
        _totalResultsNumber = partnerarray.length ;
        //alert ("total partners :"  + _totalResultsNumber) ;
    }
    
    this.ValidateSearch = function()
    {
    }
    
    this.GetAirItineraryClientArray = function()
    {
        return this._airItineraryClientArray ;
    }
    
    this.ShowHomePage =  function()
    {
        _resultsContainerDivControl.set_visible(false) ;
        _progressbarDivControl.set_visible(false) ;
        _detailsDivControl.set_visible(false) ;
        _homePageContainerDivControl.set_visible(true) ;
        
    }
    
    this.InitLoadResults = function()
    {
        //Prepare all the state variables before initiating AirDoSearch WebService request
        _currentResultNumber = 1 ;
        _erroredResultsNumber = 0 ;
        _timedoutResultsNumber = 0 ;
        _abortedResultsNumber = 0 ; 
        
        _numberOfClickOuts = 0 ;
   
        //Set airItineraryClientArray to null, this will be populated as and when the AirDoSearch returns
        _airItineraryClientArray = null  ;
        
        //Set SORT States
        _sortByPriceState = g_SORTSTATEASC ;
        _sortByAirlinesState = g_SORTSTATEUNSORTED ;
        _sortByDepartState = g_SORTSTATEUNSORTED ;
        _sortByArriveState = g_SORTSTATEUNSORTED ;
        _sortByStopsState = g_SORTSTATEUNSORTED ;
        _sortByDurationState = g_SORTSTATEUNSORTED ;
        
        
        //Change the opacity on all the result page divs
        _resultsOpacityControl.set_value(_toggleOpacityValue);
        _filtersOpacityControl.set_value(_toggleOpacityValue); 
        _adsOpacityControl.set_value(_toggleOpacityValue);
        
        //Toggle homepage, results div containers  - also progressbar
        _homePageContainerDivControl.set_visible(false);
        _resultsContainerDivControl.set_visible(true);
        _progressbarDivControl.set_visible(true) ;
    }
    
    this.LoadMoreResults = function()
    {
        _airResultsPanel.Update(_airItineraryClientArray) ;
    }
    
    this.LoadEndResult = function()
    {
        _airResultsPanel.Update(_airItineraryClientArray) ;
        _airFiltersPanel.Update(_airItineraryClientArray) ;
        
        //update the ads panel
        _airAdsPanel.Update(document.getElementById("ToField").value);
        
        //Change the opacity on all the result page divs
        _resultsOpacityControl.set_value(1);
        _filtersOpacityControl.set_value(1); 
        _adsOpacityControl.set_value(1);
        
        //Make progressbar invisible
        _progressbarDivControl.set_visible(false)
        
    }
    
    this.SetSortFilterBehavior = function()
    {
        //Change the opacity on all the result page divs
        _resultsOpacityControl.set_value(_toggleOpacityValue);
        _filtersOpacityControl.set_value(_toggleOpacityValue); 
        _adsOpacityControl.set_value(_toggleOpacityValue);
        
        //Make progressbar visible
        _filtersortProgressDivControl.set_visible(true) ;
    }
        
    this.ClearSortFilterBehavior = function()
    {
    
        //Change the opacity on all the result page divs
        _resultsOpacityControl.set_value(1);
        _filtersOpacityControl.set_value(1); 
        _adsOpacityControl.set_value(1);
        
        //Make progressbar invisible
        _filtersortProgressDivControl.set_visible(false)
        
    }
    
    this.ToggleAllSortStates = function()
    {
        _sortByPriceState = g_SORTSTATEUNSORTED ;
        _sortByAirlinesState = g_SORTSTATEUNSORTED ;
        _sortByDepartState = g_SORTSTATEUNSORTED ;
        _sortByArriveState = g_SORTSTATEUNSORTED ;
        _sortByStopsState = g_SORTSTATEUNSORTED ;
        _sortByDurationState = g_SORTSTATEUNSORTED ;
    }
    
    
    this.GetPriceSortState=function()
    {
        return _sortByPriceState ;
    }
    
    this.GetAirlinesSortState=function()
    {
        return _sortByAirlinesState ;
    }
    
    this.GetDepartSortState=function()
    {
        return _sortByDepartState ;
    }
    
    this.GetArriveSortState=function()
    {
        return _sortByArriveState ;
    }
    
    this.GetStopsSortState=function()
    {
        return _sortByStopsState ;
    }
    
    this.GetDurationSortState=function()
    {
        return _sortByDurationState ;
    }
    
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.SortByPriceActual = function()
    {
        var currentPriceState = _sortByPriceState ; 
        g_AIRUIHELPER.ToggleAllSortStates() ;
        _sortByPriceState = currentPriceState ;
        if (_sortByPriceState == g_SORTSTATEASC)
            _sortByPriceState = g_SORTSTATEDESC ;
        else
            _sortByPriceState = g_SORTSTATEASC ;
            
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.SortByPrice(_sortByPriceState) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
        g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.SortByPrice = function()
    { 
        
        setTimeout(this.SetSortFilterBehavior, 1) ;
        setTimeout(this.SortByPriceActual, 1000) ;
            
    }
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.SortByAirlinesActual = function()
    {
        var currentAirlinesState = _sortByAirlinesState ; 
        g_AIRUIHELPER.ToggleAllSortStates() ;
        _sortByAirlinesState = currentAirlinesState ;
        if (_sortByAirlinesState == g_SORTSTATEASC)
            _sortByAirlinesState = g_SORTSTATEDESC ;
        else
            _sortByAirlinesState = g_SORTSTATEASC ;
            
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.SortByAirlines(_sortByAirlinesState) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
        g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.SortByAirlines = function()
    { 
        setTimeout(this.SetSortFilterBehavior, 1) ;
        setTimeout(this.SortByAirlinesActual, 1000) ;         
    }
    
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.SortByDepartActual = function()
    {
        var currentDepartState = _sortByDepartState ; 
        g_AIRUIHELPER.ToggleAllSortStates() ;
        _sortByDepartState = currentDepartState ;
        if (_sortByDepartState == g_SORTSTATEASC)
            _sortByDepartState = g_SORTSTATEDESC ;
        else
            _sortByDepartState = g_SORTSTATEASC ;
            
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.SortByDepart(_sortByDepartState) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
        g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.SortByDepart = function()
    { 
        setTimeout(this.SetSortFilterBehavior, 1) ;
        setTimeout(this.SortByDepartActual, 1000) ;         
    }
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.SortByArriveActual = function()
    {
        var currentArriveState = _sortByArriveState ; 
        g_AIRUIHELPER.ToggleAllSortStates() ;
        _sortByArriveState = currentArriveState ;
        if (_sortByArriveState == g_SORTSTATEASC)
            _sortByArriveState = g_SORTSTATEDESC ;
        else
            _sortByArriveState = g_SORTSTATEASC ;
            
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.SortByArrive(_sortByArriveState) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
        g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.SortByArrive = function()
    { 
        setTimeout(this.SetSortFilterBehavior, 1) ;
        setTimeout(this.SortByArriveActual, 1000) ;         
    }
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.SortByStopsActual = function()
    {
        var currentStopsState = _sortByStopsState ; 
        g_AIRUIHELPER.ToggleAllSortStates() ;
        _sortByStopsState = currentStopsState ;
        if (_sortByStopsState == g_SORTSTATEASC)
            _sortByStopsState = g_SORTSTATEDESC ;
        else
            _sortByStopsState = g_SORTSTATEASC ;
            
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.SortByStops(_sortByStopsState) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
        g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.SortByStops = function()
    { 
        setTimeout(this.SetSortFilterBehavior, 1) ;
        setTimeout(this.SortByStopsActual, 1000) ;         
    }
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.SortByDurationActual = function()
    {
        var currentDurationState = _sortByDurationState ; 
        g_AIRUIHELPER.ToggleAllSortStates() ;
        _sortByDurationState = currentDurationState ;
        if (_sortByDurationState == g_SORTSTATEASC)
            _sortByDurationState = g_SORTSTATEDESC ;
        else
            _sortByDurationState = g_SORTSTATEASC ;
            
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.SortByDuration(_sortByDurationState) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
        g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.SortByDuration = function()
    { 
        setTimeout(this.SetSortFilterBehavior, 1) ;
        setTimeout(this.SortByDurationActual, 1000) ;         
    }
    
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.FilterByPriceActual = function(maxPrice)
    {
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.FilterByPrice(maxPrice) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
      
       //alert ("filter by price" + maxPrice) ;
        g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.FilterByPrice = function(maxPrice)
    { 
        setTimeout(this.SetSortFilterBehavior, 1) ;
        setTimeout("g_AIRUIHELPER.FilterByPriceActual("+maxPrice+")", 1000) ;
        //this.SetSortFilterBehavior();
        //this.FilterByPriceActual(maxPrice);        
    }
    
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.FilterByAirlinesActual = function(checkboxstatus,airlinecode)
    {
        //alert (checkboxstatus) ;
        //alert (airlinecode) ;
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.FilterByAirlines(checkboxstatus,airlinecode) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
      
       g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.FilterByAirlines = function(airlineCheckBox)
    { 

        setTimeout(this.SetSortFilterBehavior, 1) ;
        var functionString = "g_AIRUIHELPER.FilterByAirlinesActual('"+airlineCheckBox.checked+"','"+airlineCheckBox.value+"')" ;
        setTimeout(functionString, 1000) ;
        //this.SetSortFilterBehavior();
        //this.FilterByPriceActual(maxPrice);        
    }
    
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.FilterByStopsActual = function(checkboxstatus,noofstops)
    {
        //alert (checkboxstatus) ;
        //alert (airlinecode) ;
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.FilterByStops(checkboxstatus,noofstops) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
      
       g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.FilterByStops = function(stopsCheckBox)
    { 

        setTimeout(this.SetSortFilterBehavior, 1) ;
        var functionString = "g_AIRUIHELPER.FilterByStopsActual('"+stopsCheckBox.checked+"','"+stopsCheckBox.value+"')" ;
        setTimeout(functionString, 1000) ;
        //this.SetSortFilterBehavior();
        //this.FilterByPriceActual(maxPrice);        
    }
    
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.FilterByLeaveDepartActual = function(mintime,maxtime)
    {
        //alert (checkboxstatus) ;
        //alert (airlinecode) ;
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.FilterByLeaveDepart(mintime,maxtime) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
      
       g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.FilterByLeaveDepart = function(mintime,maxtime)
    { 

        setTimeout(this.SetSortFilterBehavior, 1) ;
        var functionString = "g_AIRUIHELPER.FilterByLeaveDepartActual('"+mintime+"','"+maxtime+"')" ;
        setTimeout(functionString, 1000) ;
        //this.SetSortFilterBehavior();
        //this.FilterByPriceActual(maxPrice);        
    }
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.FilterByLeaveArriveActual = function(mintime,maxtime)
    {
        //alert (checkboxstatus) ;
        //alert (airlinecode) ;
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.FilterByLeaveArrive(mintime,maxtime) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
      
       g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.FilterByLeaveArrive = function(mintime,maxtime)
    { 

        setTimeout(this.SetSortFilterBehavior, 1) ;
        var functionString = "g_AIRUIHELPER.FilterByLeaveArriveActual('"+mintime+"','"+maxtime+"')" ;
        setTimeout(functionString, 1000) ;
        //this.SetSortFilterBehavior();
        //this.FilterByPriceActual(maxPrice);        
    }
    
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.FilterByReturnDepartActual = function(mintime,maxtime)
    {
        //alert (checkboxstatus) ;
        //alert (airlinecode) ;
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.FilterByReturnDepart(mintime,maxtime) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
      
       g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.FilterByReturnDepart = function(mintime,maxtime)
    { 

        setTimeout(this.SetSortFilterBehavior, 1) ;
        var functionString = "g_AIRUIHELPER.FilterByReturnDepartActual('"+mintime+"','"+maxtime+"')" ;
        setTimeout(functionString, 1000) ;
        //this.SetSortFilterBehavior();
        //this.FilterByPriceActual(maxPrice);        
    }
    
    
    //Since this function is executed in a parallel thread using settimeout, you cant use this.function()
    //Instead use g_AIRUIHELPER.function() if you want to call a function in this class
    this.FilterByReturnArriveActual = function(mintime,maxtime)
    {
        //alert (checkboxstatus) ;
        //alert (airlinecode) ;
        if (_airItineraryClientArray != null )
        {
            _airItineraryClientArray.FilterByReturnArrive(mintime,maxtime) ;
            _airResultsPanel.Update(_airItineraryClientArray) ;
        }
      
       g_AIRUIHELPER.ClearSortFilterBehavior() ;
    }
    
    this.FilterByReturnArrive = function(mintime,maxtime)
    { 

        setTimeout(this.SetSortFilterBehavior, 1) ;
        var functionString = "g_AIRUIHELPER.FilterByReturnArriveActual('"+mintime+"','"+maxtime+"')" ;
        setTimeout(functionString, 1000) ;
        //this.SetSortFilterBehavior();
        //this.FilterByPriceActual(maxPrice);        
    }
    
    
    
    
    
    this.OnShowDetails=function(itnNumber)
    {
        var itineraryClientArray  = _airItineraryClientArray.GetLocalAirItineraries() ;
        _airDetailsPanel.ShowBookDetails(itineraryClientArray[itnNumber],_airItineraryClientArray);
        
        //Change the opacity on all the result page divs
        _resultsOpacityControl.set_value(_toggleOpacityValueDarker);
        _filtersOpacityControl.set_value(_toggleOpacityValueDarker); 
        _adsOpacityControl.set_value(_toggleOpacityValueDarker);
        
        //Make Visible the Air Details Div
        _detailsDivControl.set_visible(true) ;
    }
    
    this.OnCloseDetails=function()
    {
         
        //Change the opacity on all the result page divs
        _resultsOpacityControl.set_value(1);
        _filtersOpacityControl.set_value(1); 
        _adsOpacityControl.set_value(1);
        
        //Make Visible the Air Details Div
        _detailsDivControl.set_visible(false) ;
    }
    
    
    
    this.OnClickOutComplete = function(result)
    {
    }
    
    this.BookFlight=function(itnNumber)
    {
    
        var clientItineraries = _airItineraryClientArray.GetLocalAirItineraries() ;
        var currentClientItinerary = clientItineraries[itnNumber].GetAirItinerary() ;
        
        var currentPartnerRedirect = currentClientItinerary.PartnerRedirect ;
        
        var bookForm = document.createElement("form");
        var partnerURL = "" ;
        var redirectURL = "" ;
        

        for (var localtemp=0;localtemp<currentPartnerRedirect.length;localtemp++)
        {
           //alert ("Key :" + currentPartnerRedirect[localtemp].Key + " Value :" + currentPartnerRedirect[localtemp].Value ) 
           if (currentPartnerRedirect[localtemp].Key == "PartnerURL" )
                partnerURL = currentPartnerRedirect[localtemp].Value ;
           else if (currentPartnerRedirect[localtemp].Key == "RedirectURL" )
                redirectURL = currentPartnerRedirect[localtemp].Value ;
           else 
           {
                var formInput = document.createElement("input");
                formInput.name = currentPartnerRedirect[localtemp].Key ;
                formInput.type = "hidden";
                formInput.value = currentPartnerRedirect[localtemp].Value ;
                bookForm.appendChild(formInput) ;
           }
           
        }
        
        _numberOfClickOuts++ ;
        
        bookForm.action = partnerURL + redirectURL  ;
        bookForm.method = "post";
        bookForm.target = "_new" + _numberOfClickOuts ;
        bookForm.name = "frmchangeview" + _numberOfClickOuts ;
        bookForm.id = "frmchangeview" + _numberOfClickOuts ;
        
        _detailsDivControl.get_associatedElement().appendChild(bookForm);
        document.getElementById("frmchangeview" + _numberOfClickOuts).submit() ;
        
        FASTWebService.LogAirClickOut(
         currentClientItinerary.SearchID,
         currentClientItinerary.SearchToken,
         {  
            onMethodComplete:this.OnClickOutComplete,
            userContext: "ClickOut Performed", 
            timeoutInterval: 120000,
            priority : 0 
          }   
        );

        
        
     }
    
    
    
    
    this.OnComplete = function(result)
    {
        //When AirDoSearch WebService returns for the first partner **NOTE** _currentResultNumber starts at 1
        if (_currentResultNumber == 1)
        {
            //alert ("First Result came back Total:" + _totalResultsNumber) ;
            _airItineraryClientArray = new FareQuest.AirItineraryClientArray() ;
            _airItineraryClientArray.InitLocalArray (result) ;
            _currentResultNumber++ ;
            this.LoadMoreResults() ;
        }
        //When AirDoSearch WebService returns for the last partner    
        else if (_currentResultNumber == _totalResultsNumber)
        {
            //alert ("Last Result came back Total:" + _totalResultsNumber) ;
            if (_airItineraryClientArray == null)   
            {
                _airItineraryClientArray = new FareQuest.AirItineraryClientArray() ;
                _airItineraryClientArray.InitLocalArray (result) ;
            }
            else 
                _airItineraryClientArray.Merge (result) ;
            _currentResultNumber = 1 ;
            this.LoadEndResult() ;
        }
        //When AirDoSearch WebService returns for the first < partnernumber < last
        else
        {
            //alert (_currentResultNumber + " : Result came back Total:" + _totalResultsNumber) ;
            if (_airItineraryClientArray == null)   
            {
                _airItineraryClientArray = new FareQuest.AirItineraryClientArray() ;
                _airItineraryClientArray.InitLocalArray (result) ;
            }
            else 
                _airItineraryClientArray.Merge (result) ;
            _currentResultNumber++ ;
            this.LoadMoreResults() ;
        }
    }
    
    
    //This method increments _currentResultNumber for failed webservice requests and 
    //checks all the requests failed
    this.IncrementResultsAndCheckForAllErrors = function()
    {
        if (_currentResultNumber == 1)
        {
            _currentResultNumber++ ;
        }    
        else if (_currentResultNumber == _totalResultsNumber )
        {
            _currentResultNumber= 1 ;
            if ( (_erroredResultsNumber + _timedoutResultsNumber + _abortedResultsNumber) == _totalResultsNumber )
            {
                alert("Your search did not return any flights due to one of the following: \n - None of our providers serve the requested airports \n - No Flights are available \n - A temporary problem with our partners or this site \n \n Please try your search again later.") ;
                this.ShowHomePage() ;
            }
            else
                this.LoadEndResult() ;                
        }
        else
        {
            _currentResultNumber++ ;
        }    
    }
    
    this.OnTimeout = function(result)
    {
        //alert ("OnTimeout " + result) ;
        //Increase the number of timeout results
        _timedoutResultsNumber++ ;
        this.IncrementResultsAndCheckForAllErrors() ; 
     }
    
    this.OnError = function(result)
    {
        //alert ("OnError " + result) ;
        //Increase the number of errored results
        _erroredResultsNumber++ ;
        this.IncrementResultsAndCheckForAllErrors() ; 
    }
    
    this.OnAborted = function(result)
    {
        //alert ("OnAborted " + result) ;
        //Increase the number of aborted results
        _abortedResultsNumber++ ;
        this.IncrementResultsAndCheckForAllErrors() ; 
    }
    
    this.OnCloseDetailsSync = function()
    { 
        //Nothing to synchronise here so just calling the required function
        this.OnCloseDetails() ;
     
    }
    
    
    this.FilterByPriceSync = function(maxPrice)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitPrice(maxPrice);
        new Mutex(airCmd,"FilterByPrice"); 
    }
    
    this.FilterByAirlinesSync = function(airlineCheckBox)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitAirline(airlineCheckBox);
        new Mutex(airCmd,"FilterByAirlines"); 
    }
    
    this.FilterByStopsSync = function(stopsCheckBox)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitFirstParam(stopsCheckBox);
        new Mutex(airCmd,"FilterByStops"); 
    }
    
    
    this.FilterByLeaveDepartSync = function(mintime,maxtime)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitFirstParam(mintime);
        airCmd.InitSecondParam(maxtime);
        new Mutex(airCmd,"FilterByLeaveDepart"); 
    }
    
    this.FilterByLeaveArriveSync = function(mintime,maxtime)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitFirstParam(mintime);
        airCmd.InitSecondParam(maxtime);
        new Mutex(airCmd,"FilterByLeaveArrive"); 
    }
    
    this.FilterByReturnDepartSync = function(mintime,maxtime)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitFirstParam(mintime);
        airCmd.InitSecondParam(maxtime);
        new Mutex(airCmd,"FilterByReturnDepart"); 
    }
    
    this.FilterByReturnArriveSync = function(mintime,maxtime)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitFirstParam(mintime);
        airCmd.InitSecondParam(maxtime);
        new Mutex(airCmd,"FilterByReturnArrive"); 
    }
    
    this.SortByPriceSync = function()
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        new Mutex(airCmd,"SortByPrice"); 
    }
    
    this.SortByAirlinesSync = function()
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        new Mutex(airCmd,"SortByAirlines"); 
    }
    
    this.SortByDepartSync = function()
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        new Mutex(airCmd,"SortByDepart"); 
    }
    
    this.SortByArriveSync = function()
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        new Mutex(airCmd,"SortByArrive"); 
    }
    
    this.SortByStopsSync = function()
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        new Mutex(airCmd,"SortByStops"); 
    }
    
    this.SortByDurationSync = function()
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        new Mutex(airCmd,"SortByDuration"); 
    }
    
    
    this.OnShowDetailsSync = function(itnNumber)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitShowDetails(itnNumber)
        new Mutex(airCmd,"OnShowDetails"); 
    }
    
    
    this.OnBookFlightSync = function(itnNumber)
    { 
        //alert ("Book Flight Sync called" );
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitShowDetails(itnNumber)
        new Mutex(airCmd,"OnBookFlight"); 
    }
    
    
    this.OnCompleteSync = function(result)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitAirSearchResult(result)
        new Mutex(airCmd,"OnComplete"); 
    } 


    this.OnTimeoutSync = function(result)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitAirSearchResult(result)
        new Mutex(airCmd,"OnTimeout"); 
    } 
    
    this.OnErrorSync = function(result)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitAirSearchResult(result)
        new Mutex(airCmd,"OnError"); 
    } 
    
    this.OnAbortedSync = function(result)
    { 
        var airCmd = new FareQuest.AirUIHelperCmd();
        //Initialise airCmd Parameter
        airCmd.InitAirSearchResult(result)
        new Mutex(airCmd,"OnAborted"); 
    } 

    /* moved to qsearchvalidation.js
    this.OnAirportBlur = function(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;
    }*/

    this.OnButtonClick = function()
    {
    
       var sparam = new FAST.FareQuest.BLL.Air.AirSearchParam();
       var aff = new FAST.FareQuest.BLL.Affiliate();

       var da = new FAST.FareQuest.BLL.Air.Airport();
       var aa = new FAST.FareQuest.BLL.Air.Airport();
       var ss1 = new FAST.FareQuest.BLL.Air.AirSearchSegment();
       var ss2 = new FAST.FareQuest.BLL.Air.AirSearchSegment();
       var aff = new FAST.FareQuest.BLL.Affiliate();
       var prefair1 = new FAST.FareQuest.BLL.Air.Airline();
       var prefair2 = new FAST.FareQuest.BLL.Air.Airline();
       var prefair3 = new FAST.FareQuest.BLL.Air.Airline();
       
        
         var TripType 
        //set appropriate Trip Type
        if(document.getElementById('RoundTrip').checked)
            {
              TripType = document.getElementById('RoundTrip').value;
              //alert ("Trip Type: "+ TripType);
            }
        else if (document.getElementById('OneWay').checked)
            {
              TripType = document.getElementById('OneWay').value;    
              //alert ("Trip Type: "+ TripType);
            }
            
        var LeaveDate = document.getElementById("LeaveDate").value;
        var ReturnDate = document.getElementById("ReturnDate").value;
        
        //Split Function to get dates from mm/dd/yyyy format
        var LeaveDate_array=LeaveDate.split("/");
        var LeaveMonth = LeaveDate_array[0];
        LeaveMonth = LeaveDate_array[0] - 1;
        if (LeaveMonth <= 0)
           {
            LeaveMonth == 0
           }
        var LeaveDay = LeaveDate_array[1];
        var LeaveYear = LeaveDate_array[2];
        
        var ReturnDate_array=ReturnDate.split("/");
        var ReturnMonth = ReturnDate_array[0];
        ReturnMonth = ReturnDate_array[0] - 1;
        if (ReturnMonth <= 0)
           {
            ReturnMonth == 0
           }
        var ReturnDay = ReturnDate_array[1];
        var ReturnYear = ReturnDate_array[2]; 
        
        
        var LeaveTime = document.getElementById("LeaveTime").value;
        var ReturnTime = document.getElementById("ReturnTime").value;    
        var ClassOfService = document.getElementById("ClassOfService").value;
        var Travelers = document.getElementById("Travelers").value;
        //Advance Search Options
        var Seniors = document.getElementById("Seniors").value;
        var Children = document.getElementById("Children").value;
        var PreferNonStop = document.getElementById("PreferNonStop").value;
        if(document.getElementById('PreferNonStop').checked)
           PreferNonStop = document.getElementById("PreferNonStop").value;
        else {
          PreferNonStop = false;
        }
        
          
       //Get Array of Prefferred airlines
       var PrefAirSelObj = document.getElementById('ctl00_MainContent_QuickSearch_PreferredAirlines');
       var PrefAirSelectedArray = new Array();
       var TheSelectedAirlinesArray = new Array();
       var i;
       var count = 0;
         //loop through Airline Combo List
         for (i=0; i<PrefAirSelObj.options.length; i++) {
                if (PrefAirSelObj.options[i].selected) {
                    PrefAirSelectedArray[count] = PrefAirSelObj.options[i].value; 
                   TheSelectedAirlinesArray[count] = PrefAirSelectedArray[count];
                count++;
             }
          } 
        
        var FromField = document.getElementById("FromField").value;
        if (FromField.length != 3)
        {
            var FromField_array=FromField.split("[");
            var FromField = FromField_array[1];
            FromField = FromField.slice(0,3);
        }
        
        var ToField = document.getElementById("ToField").value;
        if (ToField.length != 3)
        {
            var ToField_array=ToField.split("[");
            var ToField = ToField_array[1];
            ToField = ToField.slice(0,3);
        }
        
        FromField = FromField.toUpperCase();
        ToField = ToField.toUpperCase();
        
      
        

       //set departure airport information
       da.Code = FromField;
       //da.Code = "ATL";
       da.City = "Atlanta";
       da.Country = "USA";
       da.State = "GA";
       da.Name = "Hartsfield International";

       //set arrival airport information
       aa.Code = ToField;
       //aa.Code = "LAX";
       aa.City = "Los Anageles";
       aa.Country = "USA";
       aa.State = "CA";
       aa.Name = "Los Angeles International";
       
       //create departure segment
       ss1.Origin = da;
       ss1.Destination = aa;
       ss1.DepartureDate = new Date(LeaveYear,LeaveMonth,LeaveDay);
       //ss1.DepartureDate = new Date(2007,0,12);
       ss1.DepartureTime = LeaveTime;
       //create return segment
       ss2.Origin = aa;
       ss2.Destination = da;
       ss2.DepartureDate =  new Date(ReturnYear,ReturnMonth,ReturnDay);
       ss2.DepartureTime = ReturnTime;
       
       //create affiliate
       aff.AffiliateID = 500; //farequest default
       aff.AffiliateName = "FareQuest Default";

       //set the AirSearchParam fields
       sparam.Segments = new Array();
       sparam.Segments.push(ss1);
       sparam.Segments.push(ss2);
       sparam.SearchType = TripType;
       //sparam.SearchType = "OneWay";
       sparam.ClassOfService = ClassOfService;
      //param.ClassOfService = "Business";
      
       sparam.PrefferedAirlines = new Array();
        //put airline codes in the array
        //alert(count);
         //for (a=0; a<count; a++) {
            if (count == 1){
                prefair1.Code = TheSelectedAirlinesArray[0];
                sparam.PrefferedAirlines.push(prefair1);
            }
            if (count == 2){
                prefair1.Code = TheSelectedAirlinesArray[0];
                sparam.PrefferedAirlines.push(prefair1);
                prefair2.Code = TheSelectedAirlinesArray[1];
                sparam.PrefferedAirlines.push(prefair2);
            }
             if (count == 3){
                prefair1.Code = TheSelectedAirlinesArray[0];
                sparam.PrefferedAirlines.push(prefair1);
                prefair2.Code = TheSelectedAirlinesArray[1];
                sparam.PrefferedAirlines.push(prefair2);
                prefair3.Code = TheSelectedAirlinesArray[1];
                sparam.PrefferedAirlines.push(prefair3);
            }
                
       sparam.PreferNonStop = PreferNonStop;
       sparam.Affiliate = aff;
       sparam.Adults = Travelers;
       sparam.Children = Children;
       sparam.Seniors = Seniors;
       sparam.ClickInID = g_CLICKINID;


       //Initialise all the panels
       this.InitLoadResults() ;

       //Issue web service requests for all the partners in the _partnerarray
       //*sync* methods are used for callbacks 
       for (var i = 0; i < _partnerArray.length ; i++) 
       //_totalResultsNumber = 2 ; 
       //for (var i = 0; i < 2 ; i++) 
       {
           //alert ("About to issue request to : "+ _partnerArray[2]) ;
           if ( i == 0 )
           {
               //High priority web service request 
               FASTWebService.DoAirSearch(
                 sparam,
                 _partnerArray[i],
                 {  
                    onMethodComplete:this.OnCompleteSync, 
                    onMethodTimeout:this.OnTimeoutSync, 
                    onMethodError:this.OnErrorSync, 
                    onMethodAborted:this.OnAbortedSync, 
                    userContext: "QuickSearch button clicked", 
                    timeoutInterval: 120000,
                    priority : 0 
                  }   
                );
           }
           else
           {    //Normal priority web service requests
                FASTWebService.DoAirSearch(
                 sparam,
                 _partnerArray[i],
                 {  onMethodComplete:this.OnCompleteSync, 
                    onMethodTimeout:this.OnTimeoutSync, 
                    onMethodError:this.OnErrorSync, 
                    onMethodAborted:this.OnAbortedSync, 
                    userContext: "QuickSearch button clicked", 
                    timeoutInterval: 120000,
                    priority : 1 
                  }   
                ); 
           } //if partnerno == 1
       } //for each partner
    } //onButtonClick function
    

} //AirUIHelper class end

FareQuest.AirUIHelper.registerClass('FareQuest.AirUIHelper', null, Sys.IDisposable);
