/*
 * @include "DDP_Framework.js"
 * @include "DDP_Search.js"
 */
 
/**
 * @fileOverview 航空TOP画面の機能を保有するファイルです。
 */
 
/**
 * AirTop コンストラクタの定義
 * @class 航空TOP画面を操作するためのクラスです。
 * @constructor
 */
DDP_Search.AirTop = function() {
    //出発日の取得
    //(カレンダー選択処理の後に取得するため、初期表示時でなく、ここに配置)
    this.dateId = DDP_Search.idManager["date_go"];
    //出発日初期値
    this.dateDefaultValue = (getNode(DDP_Search.idManager["date_default_value"])).defaultValue;
    //出発時間
    this.time = getNode(DDP_Search.idManager["time_go"]);
    //出発時間初期値
    this.timeDefaultValue = (getNode(DDP_Search.idManager["time_default_value"])).selectedIndex; 
    //出発空港
    this.airportDeparture = getNode(DDP_Search.idManager["airport_departure"]);
    //出発空港初期値
    this.airportDepartureDefaultValue = (getNode(DDP_Search.idManager["departure_default_value"])).defaultValue; 
    //到着空港
    this.airportArrive = getNode(DDP_Search.idManager["airport_arrive"]);
    //到着空港初期値
    this.airportArriveDefaultValue = (getNode(DDP_Search.idManager["arrive_default_value"])).defaultValue; 
    //搭乗クラス
    this.seat = getNode(DDP_Search.idManager["seat_class"]);
    //搭乗クラス初期値
    this.seatDefaultValue = (getNode(DDP_Search.idManager["seat_default_value"])).defaultValue; 
    //検索条件解除リンク
    this.setLink =getNode(DDP_Search.idManager["set_search_condition_default_link"]);
    //JAL検索ボタン
    this.searchBttnJal =getNode(DDP_Search.idManager["search_bttn_jal"]);
    //ANA検索ボタン
    this.searchBttnAna =getNode(DDP_Search.idManager["search_bttn_ana"]);
    //ANA検索用情報通知URL
    this.anaDataSiteUrl = getNode(DDP_Search.idManager["ana_data_site_url"]);
    //接続識別子
    this.anaDataConnectionKind = getNode(DDP_Search.idManager["ana_data_connection_kind"]);
    //アクティビティID
    this.anaDataActivityId = getNode(DDP_Search.idManager["ana_data_activity_id"]);
    //戻りURL
    this.anaDataReturnUrl = getNode(DDP_Search.idManager["ana_data_return_url"]);
    //遷移元画面ID
    this.anaDataScreenId = getNode(DDP_Search.idManager["ana_data_screen_id"]);
    //照会種別
    this.anaDataTtwCalFlg = getNode(DDP_Search.idManager["ana_data_ttw_cal_flg"]);
    //AW結果表示用インデックス
    this.anaDataNowSegIndex = getNode(DDP_Search.idManager["ana_data_now_seg_index"]);
    //ANA検索条件チェック
    this.anaSearchConditionCheck = getNode(DDP_Search.idManager["ana_search_condition_check"]);
};

/**
 * 航空TOP画面の初期化を行う
 */
DDP_Search.AirTop.prototype.init = function(){

    var airTop = this;
    //リンクのクリックイベントを設定
    addEvent(this.setLink, "click", function() { airTop.setDefaultSearchCondition(); });
    addEvent(this.airportDeparture, "change", function(){ airTop.searchBttnCheck(); });
    addEvent(this.airportArrive, "change", function(){ airTop.searchBttnCheck(); });
    addEvent(this.searchBttnAna, "click", function(){ airTop.moveAnaSite(); });
    //リストで選択された空港キャリアによってボタンのdisabledを切り替える
    airTop.searchBttnCheck();
};

/**
 * 検索条件を初期値に戻す
 */
DDP_Search.AirTop.prototype.setDefaultSearchCondition = function() {
    var airTop = this;
    //出発日の取得
    //(カレンダー選択処理の後に取得するため、初期表示時でなく、ここに配置)
    airTop.date = getNode(airTop.dateId);
    //出発日
    airTop.date.value = airTop.dateDefaultValue;
    //出発時間
    airTop.nullCheck(airTop.time, airTop.timeDefaultValue);
    //出発空港
    airTop.airportDeparture.value = airTop.airportDepartureDefaultValue;
    //到着空港
    airTop.airportArrive.value = airTop.airportArriveDefaultValue;
    //搭乗クラス
    airTop.seat.value = airTop.seatDefaultValue;
    //リストで選択された空港キャリアによってボタンのdisabledを切り替える
    airTop.searchBttnCheck();
};
    
/**
 * 初期値がnullの場合、空文字をDropDownに設定する(IE用)
 */
DDP_Search.AirTop.prototype.nullCheck = function(pullDown, value){
    if(value == null) {
        pullDown.value = "";
    } else {
        pullDown.value = value;
    }
};

/**
 * リストで選択された空港によってキャリアによってボタンのdisabledを切り替える
 */
DDP_Search.AirTop.prototype.searchBttnCheck = function(){
    var airTop = this;
    var jalBttnFlg = true;
    var anaBttnFlg = true;
    var jalSrc = DDP_Search.Const.AIR_TOP_SEARCH_BUTTON_PATH;
    var anaSrc = DDP_Search.Const.AIR_TOP_SEARCH_BUTTON_PATH;
    // JAL検索ボタンの切り替え
    if(airTop.searchAiportCarrierCheck(airTop.airportDeparture.value, DDP_Search.Const.CARRIER_JAL) 
        && airTop.searchAiportCarrierCheck(airTop.airportArrive.value, DDP_Search.Const.CARRIER_JAL)) {
        jalBttnFlg = false;
        jalSrc += DDP_Search.Const.AIR_TOP_SEARCH_BUTTON_JAL_ENABLE;
    } else {
        jalSrc += DDP_Search.Const.AIR_TOP_SEARCH_BUTTON_JAL_DISABLED;
    }
    
    // ANA検索ボタンの切り替え
    if(airTop.searchAiportCarrierCheck(airTop.airportDeparture.value, DDP_Search.Const.CARRIER_ANA) 
        && airTop.searchAiportCarrierCheck(airTop.airportArrive.value, DDP_Search.Const.CARRIER_ANA)) {
        anaBttnFlg = false;
        anaSrc += DDP_Search.Const.AIR_TOP_SEARCH_BUTTON_ANA_ENABLE;
    } else {
        anaSrc += DDP_Search.Const.AIR_TOP_SEARCH_BUTTON_ANA_DISABLED;
    }
    
    airTop.searchBttnJal.src = jalSrc;
    airTop.searchBttnJal.disabled = jalBttnFlg;
    airTop.searchBttnAna.src = anaSrc;
    airTop.searchBttnAna.disabled = anaBttnFlg;
};

/**
 * 指定された空港が指定されたキャリアで使用されているかをチェックします
 */
DDP_Search.AirTop.prototype.searchAiportCarrierCheck = function(value, carrierKbn){

    //空港とキャリアの情報の取得
    var conf = ScriptResource.AirportCarrier.setting;
    //キャリアが運航しているかどうかのフラグ
    var carrierFlg = false;
    
    for(var i = 0; i < conf.length; i++) {
        if(conf[i].airportCode == value) {
            if(carrierKbn == DDP_Search.Const.CARRIER_JAL) {
                //JALが運航している場合、フラグを更新
                if(conf[i].jal == "1") {
                    carrierFlg = true;
                }
            } else if (carrierKbn == DDP_Search.Const.CARRIER_ANA) {
                //ANAが運航している場合、フラグを更新
                if(conf[i].ana == "1") {
                    carrierFlg = true;
                }
            }
        }
    }
    return carrierFlg;
};

/**
 * ANAサイトへ遷移する
 */
DDP_Search.AirTop.prototype.moveAnaSite = function(anaSearchConditionCheckValue){
    var airTop = this;
    if(anaSearchConditionCheckValue == "1") {
        //ANAサイトへ遷移する
        var anaSearchCondition = airTop.createAnaSiteData();
        var anaSearch = new DDP_Search.AnaSearch(anaSearchCondition);
        anaSearch.post();
    }
};
/**
 * ANAサイト遷移用のデータを作成する
 */
DDP_Search.AirTop.prototype.createAnaSiteData = function() {
    var airTop = this;
    var anaSearchCondition = new DDP_Search.AnaSearchCondition();
    anaSearchCondition.anaSiteUrl = airTop.anaDataSiteUrl.value;
     //接続識別子を作成
    anaSearchCondition.connectionKind = airTop.anaDataConnectionKind.value;
    //アクティビティIDを作成
    anaSearchCondition.activityId = airTop.anaDataActivityId.value;
    //戻りURLを作成
    anaSearchCondition.returnURL = airTop.anaDataReturnUrl.value;
    //遷移元画面IDを作成
    anaSearchCondition.screenId = airTop.anaDataScreenId.value;
    //搭乗月を作成
    anaSearchCondition.selectedEmbMonth = getNode(airTop.dateId).value.substr(4,2);
    //搭乗日を作成
    anaSearchCondition.selectedEmbDay = getNode(airTop.dateId).value.substr(6,2);
    //出発空港コードを作成
    anaSearchCondition.selectedDepApo = airTop.airportDeparture.value;
    //到着空港コードを作成
    anaSearchCondition.selectedArrApo = airTop.airportArrive.value;
    //搭乗クラスを作成
    var boardingClass = "Y";//Y:普通席
    if(this.seat.value == "2") {
        boardingClass = "S"//S:プレミアム
    }
    anaSearchCondition.seatKind = boardingClass;
    //出発時刻指定を作成
    anaSearchCondition.selectedDepTime = airTop.time.value;
    //照会種別を作成
    anaSearchCondition.ttwCalFlg = airTop.anaDataTtwCalFlg.value;
    //AW結果表示用インデックスを作成
    anaSearchCondition.nowSegIndex = airTop.anaDataNowSegIndex.value;
    return anaSearchCondition;
};
