// JScript ファイル
//ホテルWebService関連するjavascript

//ホテル事件検査ユーザコントロールのリンクをクリックした時のフンクション
function SetHotelValues(hotelTypeCode,changedType)
{
    //show背景用div、二回submitを防ぐ。
    showShadow();
    //ｃｓｓによってフライト値を設定する。
    setSelectedHotelType();
    setSelectedHotelGrade();
    //画面すべての条件の値を取る。
    var pageValues=getValus();
    //検索結果画面なら
    if($get("conditionMode").value=="2")
    {
        //在庫カレンダー移動カウントを設定する。
        document.getElementById("arrowCnt").value="0";
        //flash移動カウントを設定する
        document.getElementById("flashCnt").value="0";
        //キーワードエレメントが存在するなら
        if(document.getElementById("FreeWordHidden"))
        {
            //検索条件にキーワードを加える
            pageValues=pageValues+"$FreeWord:"+document.getElementById("FreeWordHidden").value;
        }
    }
    //画面スタイルを取る。
    var style= $get("conditionStyle").value;
    //画面チェックを行います
    pageCheck();
    //検索結果画面なら
    if($get("conditionMode").value=="2")
    {
        //画面ロード待つ表示部分を表示させる。  
        $get("searchResultDiv").innerHTML="<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\" class=\"tourListTbl first\" summary=\"ツアー検索結果一覧\">"+
                                          "<tr><td><p class=\"mt10\"><img src=\""+document.getElementById("clientUrl").value+
                                          "/base/images/base/wait/ajax-loader2.gif\" alt=\"loading\" /></p><p class=\"mt10\">読み込み中</p></td></tr></table>";
        document.getElementById("currentPage_Hidden").value="1";
        //ページ表示件数選択部分を隠す。
       changeArea('baseCommend','none');
        changeArea('viewCommend','none');
        $.ajax({
           type: "POST",
           url: document.getElementById("clientUrl").value+"/toursearch/ajaxForSearchResult.aspx",
           data: "HotelCode="+hotelTypeCode+
                 "&changedType="+changedType+
                 "&styleType="+style+
                 "&inputValues="+pageValues+
                 "&ajaxType=hotelChange"+
                 "&arrowCnt="+document.getElementById("arrowCnt").value+
                 "&displayItems="+document.getElementById(document.getElementById("ShowCntDropHidden").value).value+
                 "&sortItem="+document.getElementById(document.getElementById("sortItemHidden").value).value+
                 "&sortOrder="+document.getElementById(document.getElementById("sortOrderHidden").value).value+
                 "&allOpen="+document.getElementById(document.getElementById("allOpenHidden").value).value+
                 "&showType="+document.getElementById(document.getElementById("showTypeHidden").value).value+"",
           success: function(msg){
             jqueryHotelOnChangeSucceeded(msg);
           }
        }); 
    }
    else
    {
        //WebServiceを呼び出す。画面更新する。
        HotelConditionWebService.SetHotelValues(hotelTypeCode,changedType,pageValues,style,SetHotelTypeValuesSucceeded,onFailed,changedType);
    }
}

function jqueryHotelOnChangeSucceeded(msg)
{
    document.getElementById("ajaxDiv").innerHTML=msg; 
    var result=new Array();
    if(document.getElementById("dayOfWeekHTMLResultDiv"))
    {
        //result["dayOfWeekHTML"]=$("#dayOfWeekHTMLResultDiv",$("#ajaxDiv")).html();
        result["dayOfWeekHTML"]=$("select",$("#dayOfWeekHTMLResultDiv",$("#ajaxDiv"))).html();
    }    
    if(document.getElementById("destinationOne_AreaResultDiv"))
    {
        //result["destinationOne_Area"]=$("#destinationOne_AreaResultDiv",$("#ajaxDiv")).html();
        result["destinationOne_Area"]=$("select",$("#destinationOne_AreaResultDiv",$("#ajaxDiv"))).html();
    }
    if(document.getElementById("destinationOne_CountryResultDiv"))
    {
        //result["destinationOne_Country"]=$("#destinationOne_CountryResultDiv",$("#ajaxDiv")).html();
        result["destinationOne_Country"]=$("select",$("#destinationOne_CountryResultDiv",$("#ajaxDiv"))).html();
    }
    if(document.getElementById("destinationOne_CityResultDiv"))
    {
        //result["destinationOne_City"]=$("#destinationOne_CityResultDiv",$("#ajaxDiv")).html();
        result["destinationOne_City"]=$("select",$("#destinationOne_CityResultDiv",$("#ajaxDiv"))).html();
    }
    if(document.getElementById("courseCntResultDiv"))
    {
        result["courseCnt"]=$("#courseCntResultDiv",$("#ajaxDiv")).html();
    }
    if(document.getElementById("kodarwriHTMLResultDiv"))
    {
        result["kodarwriHTML"]=$("#kodarwriHTMLResultDiv",$("#ajaxDiv")).html();
    }
    if(document.getElementById("hotelHTMLResultDiv"))
    {
        result["hotelHTML"]=$("#hotelHTMLResultDiv",$("#ajaxDiv")).html();
    }
    if(document.getElementById("flightHTMLResultDiv"))
    {
        result["flightHTML"]=$("#flightHTMLResultDiv",$("#ajaxDiv")).html();
    }
    if(document.getElementById("searchBaseHTMLResultDiv"))
    {
        result["searchBaseHTML"]=$("#searchBaseHTMLResultDiv",$("#ajaxDiv")).html();
    }
    if(document.getElementById("flashURLDiv"))
    {
        result["flashURL"]=$("#flashURLDiv",$("#ajaxDiv")).text();
    }
    if(document.getElementById("flashPeriodDiv"))
    {
        result["flashPeriod"]=$("#flashPeriodDiv",$("#ajaxDiv")).html();
    }
    if(document.getElementById("arrowLeftDiv"))
    {
        result["arrowLeft"]=$("#arrowLeftDiv",$("#ajaxDiv")).html();
    }
    if(document.getElementById("arrowRightDiv"))
    {
        result["arrowRight"]=$("#arrowRightDiv",$("#ajaxDiv")).html();
    }
    if(document.getElementById("calendarLeftDiv"))
    {
        result["calendarLeft"]=$("#calendarLeftDiv",$("#ajaxDiv")).html();
    }
    if(document.getElementById("calendarRightDiv"))
    {
        result["calendarRight"]=$("#calendarRightDiv",$("#ajaxDiv")).html();
    }
    if(document.getElementById("pageChangeLinkDiv"))
    {
        result["pageChangeLink"]=$("#pageChangeLinkDiv",$("#ajaxDiv")).html();
    }
    if(document.getElementById("departureHTMLDiv"))
    {
        //result["departureHTML"]=$("#departureHTMLDiv",$("#ajaxDiv")).html();
        result["departureHTML"]=$("select",$("#departureHTMLDiv",$("#ajaxDiv"))).html();
    }
    if(document.getElementById("smallWindowUrlDiv"))
    {
        result["smallWindowUrl"]=$("#smallWindowUrlDiv",$("#ajaxDiv")).html();
    }
    document.getElementById("ajaxDiv").innerHTML="";
    
    //画面スタイルを取る。
    var style= $get("conditionStyle").value;
    //conditionMode(ツアー詳細条件検索用とか通用検査条件として使うとか判断する変数)
    var conditionMode= $get("conditionMode").value;
    //ランディングなどなら。
    if(conditionMode=="1")
    {
        //該当ツアー件数を設定する
        $get("has_course_cnt").innerHTML= result["courseCnt"];
        //出発地をupdate
        updateDeparture(result,style);
        //フライトをupdate
        updateFlight(result,style);
        //こだわりをupdate
        updateKodawari(result,style);
        //ホテルをupdate
        updateHotel(result,style);
        //曜日をupdate
        updateDayOfWeek(result);
        //画面特集部分のリンクを更新する。
        $get("deleSel").innerHTML=result["areaListLink"];
        //地図用XMLデータを更新
        $get("mapData").value=result["XmlData"];
        $get("neighborData").value=result["neighborXml"];
        //地図再表示
        showMap();
    }
    //検査結果とツアー詳細画面なら。
    else
    {
        //検索結果画面ではない場合なら
        if(conditionMode!="2")
        {
            //該当ツアー件数を設定する
            $get("has_course_cnt").innerHTML= result["courseCnt"];
        }
        //フライトをupdate
        updateFlight(result,style);
        //ホテルをupdate
        updateHotel(result,style);
        //こだわりをupdate
        updateKodawari(result,style);
        //目的地グルプを更新する。
        updateDestinationGroup(result);
        //出発地をupdate
        updateDeparture(result,style);
        //曜日をupdate
        updateDayOfWeek(result);
    }
    $get("searchResultDiv").innerHTML=result["searchBaseHTML"];
     $get("pageChangeLinkSpan").innerHTML=result["pageChangeLink"];
     document.getElementById(document.getElementById("viewCountHidden").value).value=result["courseCnt"];
     document.getElementById(document.getElementById("flashURLHidden").value).value=result["flashURL"];
     document.getElementById(document.getElementById("flashDateHidden").value).value=result["flashPeriod"];
     document.getElementById(document.getElementById("arrowLeftHidden").value).value=result["arrowLeft"];
     document.getElementById(document.getElementById("arrowRightHidden").value).value=result["arrowRight"];
     document.getElementById(document.getElementById("calendarLeftHidden").value).value=result["calendarLeft"];
     document.getElementById(document.getElementById("calendarRightHidden").value).value=result["calendarRight"];
    //事件が宣言が無い場合なら。背景が隠れる。
    hiddenShadow();
   //目的地部分をチェックし、resetする。
   checkDestinationOne();
   
      //フラグは一の場合（検索一覧なら）
    if(showAreaFlag=="1")
    {
        //一覧の時のスタイル作製する。
        changeViewStyle();
        //該当ツアーカウントを設定する。
        $get("has_course_cnt").innerHTML= document.getElementById(document.getElementById("viewCountHidden").value).value;
        $get("viewCommend").display="block";
    }
    //フラグは二の場合（検索結果なら）
    if(showAreaFlag=="2")
    {
        //検索結果のスタイル作製する。
        changeResultStyle();
        //該当ツアーカウントを設定する。
        $get("has_course_cnt").innerHTML= document.getElementById(document.getElementById("viewCountHidden").value).value;
        $get("baseCommend").display="block";
    }
    //画面タイトルを変わる方法。
    changeResultTitle();
    //画面ID変わる方法
    changeScreenId();
    //flashを更新する。
    changeFlash();
}

//ホテルwebService操作が成功して、画面更新する。
function SetHotelTypeValuesSucceeded(result,changedType)
{
    //画面スタイルを取る。
    var style= $get("conditionStyle").value;
    //conditionMode(ツアー詳細条件検索用とか通用検査条件として使うとか判断する変数)
    var conditionMode= $get("conditionMode").value;
    //ランディングなどなら。
    if(conditionMode=="1")
    {
        //該当ツアー件数を設定する
        $get("has_course_cnt").innerHTML= result["courseCnt"];
        //出発地をupdate
        updateDeparture(result,style);
        //フライトをupdate
        updateFlight(result,style);
        //こだわりをupdate
        updateKodawari(result,style);
        //ホテルをupdate
        updateHotel(result,style);
        //曜日をupdate
        updateDayOfWeek(result);
        //画面特集部分のリンクを更新する。
        $get("deleSel").innerHTML=result["areaListLink"];
        //地図用XMLデータを更新
        $get("mapData").value=result["XmlData"];
        $get("neighborData").value=result["neighborXml"];
        //地図再表示
        showMap();
    }
    //検査結果とツアー詳細画面なら。
    else
    {
        //検索結果画面ではない場合なら
        if(conditionMode!="2")
        {
            //該当ツアー件数を設定する
            $get("has_course_cnt").innerHTML= result["courseCnt"];
        }
        //フライトをupdate
        updateFlight(result,style);
        //ホテルをupdate
        updateHotel(result,style);
        //こだわりをupdate
        updateKodawari(result,style);
        //目的地グルプを更新する。
        updateDestinationGroup(result);
        //出発地をupdate
        updateDeparture(result,style);
        //曜日をupdate
        updateDayOfWeek(result);
    }
    //事件設定。ホテルが連動成功後,行う。
    try{   
        hotelConditionOnChanged();
    }catch(e){
        //事件が宣言が無い場合なら。背景が隠れる。
        hiddenShadow();
        //ランディング画面ではない場合なら
       if(conditionMode!="1")
       {
           //目的地部分をチェックし、resetする。
           checkDestinationOne();
       }
    } 
}

function hotelDivUpdate(div)
{
    if(div.className=="closed")
    {
        ;
    }
    else
    {
        //show背景用div、二回submitを防ぐ。
        showShadow();
        //画面スタイルを取る。
        var style= $get("conditionStyle").value;
        //画面すべての条件の値を取る。
        var pageValues=getValus();
        //検索結果画面なら
        if($get("conditionMode").value=="2")
        {
            //キーワードエレメントが存在するなら
            if(document.getElementById("FreeWordHidden"))
            {
                //検索条件にキーワードを加える
                pageValues=pageValues+"$FreeWord:"+document.getElementById("FreeWordHidden").value;
            }
        }
        //WebServiceを呼び出す。画面更新する。
        HotelConditionWebService.UpdateHotelDiv(style,pageValues,hotelDivUpdateSucceeded,onFailed);
    }
}

function hotelDivUpdateSucceeded(result)
{
    //画面スタイルを取る。
    var style= $get("conditionStyle").value;
    //こだわりをupdate
    updateHotel(result,style);
    hiddenShadow();
}


//ホテルの画面部分を更新する。
function updateHotel(result,style)
{
    //conditionMode(ツアー詳細条件検索用とか通用検査条件として使うとか判断する変数)
    var conditionMode= $get("conditionMode").value;
    //ランディング画面ならば
    if(conditionMode=="1")
    {
        if(document.getElementById("slideBtn05").className=="closed")
        {
            ;
        }
        else
        {
             //ランディング画面と検査結果画面なら。
            if(style=="rightStyle")
            {
               //ホテルを更新する。
               $get("slideArea05").innerHTML=result["hotelHTML"];
               //「ホテルタイプ」リンク状態を回復する。
               resetLinkBtnState("hotelTypeValues_Hidden");
               //「ホテルグレード」リンク状態を回復する。
               resetLinkBtnState("hotelGradeValues_Hidden");
               //「該当ホテル」チェック状態を回復する。
               checkHotelListArry();
               //該当ホテルコードをチェックして、過剰のコードを削除する。
               resetHotelList();
            }
            //ツアー検査画面なら。
            else
            {
                //ホテルを更新する。
                $get("hotelConditionDiv").innerHTML=result["hotelHTML"];
                //「ホテルタイプ」リンク状態を回復する。
                resetLinkBtnState("hotelTypeValues_Hidden");
                //「ホテルグレード」リンク状態を回復する。
                resetLinkBtnState("hotelGradeValues_Hidden");
                //「該当ホテル」チェック状態を回復する。
                checkHotelListArry();
                //該当ホテルコードをチェックして、過剰のコードを削除する
                resetHotelList();
            }
            //更新したｃｓｓによってhiddenの値を更新する。
            setSelectedHotelType();
            setSelectedHotelGrade();
        }
    }
    else if(conditionMode=="2")
    {
        //---(ASN蛭子井 検索結果一覧にホテル・フライトの絞込みを復活 2009/12/16 Start)---//
        //if(document.getElementById("slideBtn04").className=="closed")
        if(!document.getElementById("slideArea04"))
        //---(ASN蛭子井 検索結果一覧にホテル・フライトの絞込みを復活 2009/12/16 End)---//
        {
            ;
        }
        else
        {
             //ランディング画面と検査結果画面なら。
            if(style=="rightStyle")
            {
               //ホテルを更新する。
               $get("slideArea05").innerHTML=result["hotelHTML"];
               //「ホテルタイプ」リンク状態を回復する。
               resetLinkBtnState("hotelTypeValues_Hidden");
               //「ホテルグレード」リンク状態を回復する。
               resetLinkBtnState("hotelGradeValues_Hidden");
               //「該当ホテル」チェック状態を回復する。
               checkHotelListArry();
               //該当ホテルコードをチェックして、過剰のコードを削除する。
               resetHotelList();
            }
            //ツアー検査画面なら。
            else
            {
                //ホテルを更新する。
                $get("hotelConditionDiv").innerHTML=result["hotelHTML"];
                //「ホテルタイプ」リンク状態を回復する。
                resetLinkBtnState("hotelTypeValues_Hidden");
                //「ホテルグレード」リンク状態を回復する。
                resetLinkBtnState("hotelGradeValues_Hidden");
                //「該当ホテル」チェック状態を回復する。
                checkHotelListArry();
                //該当ホテルコードをチェックして、過剰のコードを削除する
                resetHotelList();
            }
            //更新したｃｓｓによってhiddenの値を更新する。
            setSelectedHotelType();
            setSelectedHotelGrade();
        }
    }
    else
    {
        //ランディング画面と検査結果画面なら。
        if(style=="rightStyle")
        {
           //ホテルを更新する。
           $get("slideArea05").innerHTML=result["hotelHTML"];
           //「ホテルタイプ」リンク状態を回復する。
           resetLinkBtnState("hotelTypeValues_Hidden");
           //「ホテルグレード」リンク状態を回復する。
           resetLinkBtnState("hotelGradeValues_Hidden");
           //「該当ホテル」チェック状態を回復する。
           checkHotelListArry();
           //該当ホテルコードをチェックして、過剰のコードを削除する。
           resetHotelList();
        }
        //ツアー検査画面なら。
        else
        {
            //ホテルを更新する。
            $get("hotelConditionDiv").innerHTML=result["hotelHTML"];
            //「ホテルタイプ」リンク状態を回復する。
            resetLinkBtnState("hotelTypeValues_Hidden");
            //「ホテルグレード」リンク状態を回復する。
            resetLinkBtnState("hotelGradeValues_Hidden");
            //「該当ホテル」チェック状態を回復する。
            checkHotelListArry();
            //該当ホテルコードをチェックして、過剰のコードを削除する
            resetHotelList();
        }
        //更新したｃｓｓによってhiddenの値を更新する。
        setSelectedHotelType();
        setSelectedHotelGrade();
    }
}

//ｃｓｓによってフライト値を設定する。
function setSelectedHotelType()
{
     var tempArr=$("a[@class='cur']",$("#hotelTypeDl"));
     $get("hotelTypeValues_Hidden").value=getHiddenString(tempArr);
}
//ｃｓｓによってフライト値を設定する。
function setSelectedHotelGrade()
{
     var tempArr=$("a[@class='cur']",$("#hotelGradeDl"));
     $get("hotelGradeValues_Hidden").value=getHiddenString(tempArr);
}

//フライトページ切り替え方法。
function hotelPageChange(selectPage)
{
    //画面すべての条件の値を取る。
    var pageValues=getValus();
    //画面スタイルを取る。
    var style= $get("conditionStyle").value;
    //検索結果画面なら
    if($get("conditionMode").value=="2")
    {
        //キーワードエレメントが存在するなら
        if(document.getElementById("FreeWordHidden"))
        {
            //検索条件にキーワードを加える
            pageValues=pageValues+"$FreeWord:"+document.getElementById("FreeWordHidden").value;
        }
    }
    //WebServiceを呼び出す。画面更新する。
    HotelConditionWebService.HotelListChangePage(selectPage,pageValues,style,hotelPageChangeSucceeded,onFailed);
}

//フライトページ切り替えデータを取って、画面更新
function hotelPageChangeSucceeded(result)
{
    //「該当ホテル」表示部分を更新する。
    $get("hotelListDl").innerHTML=result["hotelListDlHtml"];
    //「該当ホテル」チェック状態を回復する
    resetHotelList();
}

//「該当ホテル」チェック状態を回復するファクション。
function resetHotelList()
{
    //「該当ホテル」チェック状態を回復する
    for(var i=0;i<hotelListArr.length;i++)
    {
        $("input[@name='"+hotelListArr[i]+"']").attr("checked", true); 
    }
}

//「ホテル名検索」を行う時のファクション
function hotelListSearch(text)
{
    //「該当ホテル」コードを保存するオブジェクトをresetする。
    hotelListArr=new Array();
    //画面すべての条件の値を取る。
    var pageValues=getValus();
    //検索結果画面なら
    if($get("conditionMode").value=="2")
    {
        //キーワードエレメントが存在するなら
        if(document.getElementById("FreeWordHidden"))
        {
            //検索条件にキーワードを加える
            pageValues=pageValues+"$FreeWord:"+document.getElementById("FreeWordHidden").value;
        }
    }
    //画面スタイルを取る。
    var style= $get("conditionStyle").value;
    //WebServiceを呼び出す。画面更新する
    HotelConditionWebService.SearchHotelList(text.value,style,pageValues,hotelListSearchSucceeded,onFailed);
}

//「ホテル名検索」Webseriveを成功して後の操作。
function hotelListSearchSucceeded(result)
{
    //「該当ホテル」表示部分を更新する。
    $get("hotelListDl").innerHTML=result["hotelListDlHtml"];
    //「該当ホテル」コードを保存するオブジェクトをresetする。
    hotelListArr=new Array();
}

//「該当ホテル」コードを処理して、Stringを取る。
function getHotelListCode()
{
   //Stringを作成するオブジェクトを取る。
   var sb=new Sys.StringBuilder("");
   //コードStringを作成開始。
   if(hotelListArr.length!=0)
   {
        for(var i=0;i<hotelListArr.length;i++)
        {
                if(i==hotelListArr.length-1)
                {
                     sb.append(hotelListArr[i]);
                     break;
                }
                sb.append(hotelListArr[i]+"_");
        }
   }
   //結果を返す。
   return sb.toString();   
}

//該当ホテル」コードを保存するオブジェクト
var hotelListArr=new Array();

//「該当ホテル」コードを加える,減る方法。
function addHotelList(value)
{
    //コードをhotelListArrの中に存在する時
    if(hotelListArr.findIndex(value)>-1)
    {
        //コードをhotelListArrの中から削除する。
        hotelListArr.deleteByValue(value);
    }
    //コードをhotelListArrの中に存在しない時
    else
    {
        //コードをhotelListArrの中に加える。
        hotelListArr.addUnique(value);
    }
    //hotelListArrの中のコード数は11になる時
    if(hotelListArr.length==11)
    {
        //このコードに対応するチェックボックスのチェック状態を削除する。
        $("input[@name='"+value+"']").attr("checked", false); 
        //このコードをhotelListArrの中から削除する。
        hotelListArr.deleteByValue(value);
    }
}

//「該当ホテル」コードをチェックして、過剰のコードを削除するファクション。
function checkHotelListArry()
{
    //「該当ホテル」部分のすべてのチェックボックスを取る。
    var arr=$(":checkbox",$("#hotelListDl")) ;
    //必要の変数を宣言する。
    var tempArr=new Array();
    var delectValues=new Array();
    //「該当ホテル」部分のすべてのチェックボックスの値を保存して。
    for(var i=0;i<arr.length;i++)
    {
        tempArr.addUnique(arr[i].value);
    }
    //削除必要のコードを探して、delectValuesの中に保存して。
    for(var i=0;i<hotelListArr.length;i++)
    {
        if(tempArr.findIndex(hotelListArr[i])<0)
        {
            delectValues.addUnique(hotelListArr[i]);
        }
    }
    //削除必要のコードをhotelListArrの中から削除する。
    for(var i=0;i<delectValues.length;i++)
    {
        hotelListArr.deleteByValue(delectValues[i])
    }
}