
var ns            = ns || {}; //以下でインクルードするjsファイルで使われる
ns.search_default = {};
ns.search_detail  = {};
(function($){$(document).ready(function(){



(function(){
    //----------------------------------------------------------------------------------------------
    //1. エリアorジャンルのセレクトボックスのクリック時の動作
    //----------------------------------------------------------------------------------------------
    $('#header_under_search div select').on('change', function(e, value){
        //1) 変数宣言
        var $self  = $(this)                             //自分自身のオブジェクト
          , i      = $self.attr('layer') - 1             //子供のSELECT操作用のループのインデックス
          , $child = $self.siblings('[layer=' + i + ']') //直下の子供のオブジェクト
          , hasOption = false                            //trueだったら<select>有効
          ;

        //2) 引数に入ってた場合(triggerメソッド使った時)
        if (value !== undefined) {
            $self.val(value);
        }//END IF

        //3) optionの削除。自分の子孫全員のoptionのremove
        //   ※最初の「未選択」は例外
        for(; i > 0; i--){
            //option削除
            $self.siblings('select[layer=' + i + ']')
                 .children('option[value!=""]'      ) //「未選択」のoptionのvalueは""
                 .remove();
            //無効化
            $self.siblings('select[layer=' + i + ']').attr('disabled', 'disabled');
        }//END FOR

        //4) optionの追加。元ネタから直下の子供に改めて追加
        $child.size() &&                                                       //子供がいるなら
        $('#head_original_tag'                                                 //元ネタのdivの
         +' select[pair-name="' + $child.attr('name') + '"]'                   //子供と同じpari-nameの
         +' option'                                         ).each(function(){ //option

            var $org = $(this);
            if ($org.attr('parent-id') === $self.val()) {     //子供の親のIDと自分のIDが一致したら
                //オプション追加
                $('<option>').attr('value', $org.attr('value')) //valueと
                             .text($org.text())                 //表示用文字列設定して
                             .appendTo($child);                 //子供のselectタグのoptionタグとして追加
                //有効化
                $child.removeAttr('disabled');
            }//END IF
        });//END EACH()

    });//END ON()
    //----------------------------------------------------------------------------------------------
    //2. 前回の入力を再現
    //----------------------------------------------------------------------------------------------
    (function(){
        //--------------------------------------------------------------------------------
        //1) 変数宣言。前回のパラメータ等
        //--------------------------------------------------------------------------------
        var prevParams = [//エリア(※小さいほうから並ぶ)
                           [{ name :'city_area'
                            , value: ns.search_default.city_area }  //S
                           ,{ name :'city'
                            , value: ns.search_default.city      }  //M
                           ,{ name :'pref_area'
                            , value: ns.search_default.pref_area }] //L
                          //ジャンル
                         , [{ name :'sgt'
                            , value: ns.search_default.sgt       }  //S
                           ,{ name :'sg'
                            , value: ns.search_default.sg        }  //M
                           ,{ name :'ct'
                            , value: ns.search_default.ct        }] //L
                           //ジャンル(イベント時)
                         , [{ name :'eg'
                            , value: ns.search_default.ct        }] //L
                         ]
          , len_tags = 2     //配列の長さ エリアとジャンル(店舗)
          , len_LMS  = 3     //           LMS
          , i = 0, k = 0     //ループのインデックス
          , $option  = null  //jQueryオブジェクト。optionタグの元ネタの。
          , $select  = null  //                    selectタグ。表示用の。
          ;
        //--------------------------------------------------------------------------------
        //2) エリアとジャンルの入力フィールドを前回の値で設定
        //--------------------------------------------------------------------------------
        for(i=0; i<len_tags; i++){//エリアとジャンル分ループ(※イベント時にジャンルのループは無駄だがとりあえず放置)
            //----------------------------------------------------------------------------
            //1. prevParamsのvalueの設定する。S→M→Lの順。
            //   親のvalueが変更される場合がある。
            //----------------------------------------------------------------------------
            var tags = prevParams[i];   //エリアorジャンル
            for(k=0; k<len_LMS-1; k++){
                if (tags[k].value> 0){ //値が入っているなら
                    //自分のoptionタグを取得
                    $option = $('#head_original_tag'
                               +' select[pair-name="' + tags[k].name  + '[]"]'
                               +' option[value="'     + tags[k].value + '"]'
                               );
                    //親のvalue属性に設定
                    tags[k+1].value = $option.attr('parent-id');
                }//END IF
            }//END FOR k
            //----------------------------------------------------------------------------
            //2. prevParamsのvalueが設定されたので逆のL→M→S順でイベント発生
            //----------------------------------------------------------------------------
            for(k=len_LMS-1; k>=0; k--){
                if(tags[k].value > 0) {
                    $select = $('#header_under_search div select[name="' + tags[k].name + '[]"]');
                    $select.trigger('change', tags[k].value);
                }//END IF
            }//END FOR
        }//END FOR
        //--------------------------------------------------------------------------------
        //3) イベント用処理(※店舗時にも動くがとりあえず放置)
        //--------------------------------------------------------------------------------
        $select = $('#header_under_search div select[name="eg[]"]');
        $select.trigger('change', prevParams[2][0].value);
    }());//無名関数実行
    //----------------------------------------------------------------------------------------------
    //3.「詳細検索」リンク設定
    //----------------------------------------------------------------------------------------------
    (function(){
        //1) 詳細検索のダイアログ設定
        var $mc = $("#search_detail");
        $mc.dialog({autoOpen:false
                   , modal  :true
                   , width  :$mc.css('width')
                   , position: { my: "center top", at: "center top", of: window }
                   , buttons : [{text: '閉じる', click: function(){$mc.dialog('close');}}]
                   });
        //2) 詳細検索リンククリック時
        $('#show_search_detail, .show_search_detail, #body_show_search').on('click', function(e){
            //デフォルト動作禁止
            e.preventDefault();
            //ダイアログ表示
            $mc.dialog('open');

            //スマホ用処理
            if ($('#mapSec').is(':visible') && !window.isShownSecond) {

                window.isShownSecond = true;

                window.mapInit = function() {
                    var nsm = new nissen.Map($);
                };//END FUNCTION

                //Googleマップ動的読み込み
                var script = document.createElement("script");
                script.type = "text/javascript";
                script.src = "//maps.google.com/maps/api/js?v=3&sensor=false&callback=mapInit";
                document.body.appendChild(script);
            }//END IF
        });//END ON()
    }());
    //----------------------------------------------------------------------------------------------
    //4. カレンダー
    //----------------------------------------------------------------------------------------------
    //Googleのサーバから読み込む場合
    YahhoCal.loadYUI();
    var setTerms = function(e, prefix) {
        e.preventDefault();
        e.stopPropagation();
        var date = new Date();
        $('#' + prefix + '_term_from_year' ).val(date.getFullYear() );
        $('#' + prefix + '_term_from_month').val(date.getMonth() + 1);
        $('#' + prefix + '_term_from_day'  ).val(date.getDate()     );
        $('#' + prefix + '_term_to_year'   ).val($('#' + prefix + '_term_from_year' ).val());
        $('#' + prefix + '_term_to_month'  ).val($('#' + prefix + '_term_from_month').val());
        $('#' + prefix + '_term_to_day'    ).val($('#' + prefix + '_term_from_day'  ).val());
    }//END FUCNTION
    $('#def_set_term').on('click', function(e) {
        setTerms(e, 'def');
    });
    $('#det_set_term').on('click', function(e) {
        setTerms(e, 'det');
    });
}());

(function(){
    //───────────────────────────────────────────────
    //■ 定数宣言
    //───────────────────────────────────────────────
    var FONT_NORMAL = '400'  //フォント-通常の値
      , FONT_BOLD   = '700'; //        -太字の値
    //───────────────────────────────────────────────
    //■ 初期処理
    //───────────────────────────────────────────────
    //───────────────────────────────────────────────
    //■ イベント
    //───────────────────────────────────────────────
    //01============================================================================================
    /**
     * タブのクリック。[ジャンル/エリア]タブ用設定
     *
     * @param string target #タブのID
     */
    function TabUtil(target) {
        //------------------------------------------------------------------------------------------
        //1. jQueryUIのタブ
        //------------------------------------------------------------------------------------------
        $(target).tabs();
        //------------------------------------------------------------------------------------------
        //2. チェックボックスの設定
        //------------------------------------------------------------------------------------------
        $(target + ' div.tab_content input:checkbox').on('change', function(e){
            //--------------------------------------------------------------------------------------
            //1) 自分のフォントの設定。チェックボックスがチェックされていたら太字
            //--------------------------------------------------------------------------------------
            //1. 太字かどうか決める
            var $this   = $(this);
            var checked = $this.attr('checked');
            checked = checked || false; //undefinedのときはfalseへ

            var fontWeight = FONT_NORMAL;
            if (checked) {
                fontWeight = FONT_BOLD;
            }//END IF
            //2. labelのCSSに設定
            $('label[for=' + $this.attr('id') + ']').css('font-weight', fontWeight);
            //--------------------------------------------------------------------------------------
            //2) 子のフォント，チェックボックスの設定。常にfalse
            //--------------------------------------------------------------------------------------
            var setChild = function(that) {
                //1. 子のチェックボックスの値の設定。常にfalse。
                var $childrenClass = $('input.' + $(that).attr('id'));
                $childrenClass.attr('checked' , false);
                //2. 子のフォントは常に通常
                $childrenClass.each(function(){
                    $('label[for=' + $(this).attr('id') + ']').css('font-weight', FONT_NORMAL);
                });
                //3. 再帰。さらに子供の処理。
                if ($childrenClass.length > 0) {
                    $childrenClass.each(function(){
                        setChild(this);
                    })
                }//END IF
            };
            setChild(this);
            //------------------------------------------------------------------------------
            //3) 親のフォント，チェックボックスの設定。常にfalse
            //------------------------------------------------------------------------------
            /**
             *@param that checkbox
             */
            var setParent = function(that) {
                //常に親はfalse
               var parentId =  $(that).attr('class');
               var $parent  = $('#' + parentId);
               $parent.attr('checked', false); //親がチェックされてれば子供は常にfalse。
               $parent.siblings('label').css('font-weight', ''); //太字も無し

               //再帰処理
               if ($parent.length > 0) {
                   setParent('#' + parentId);
               }//END IF
            };
            setParent(this);
            //--------------------------------------------------------------------------------------
            //4) ヘッダのフォントの設定
            //--------------------------------------------------------------------------------------
            $(target + ' .tab_head a').each(function() {
                //変数宣言
                var $this = $(this);
                var divId = $this.attr('href'); //頭に'#'が付いている
                var isChecked = false;
                //チェックボックスが一つでもチェックされていればisCheckedはtrue
                $(divId + ' input[type=checkbox]').each(function() {
                    if ($(this).attr('checked')) {
                        isChecked = true;
                        return false; //each()でのbreak
                    }//END IF
                });//END EACH
                //フォント設定
                if (isChecked) {
                    $this.css('font-weight', FONT_BOLD  );
                } else {
                    $this.css('font-weight', FONT_NORMAL);
                }//END IF
            });//END EACH

        });//END CLICK

    }//END FUNCTION
    //↑で定義した関数呼び出し
    TabUtil('#genre_tabs'); //ジャンルのタブ
    TabUtil('#area_tabs' ); //エリアのタブ
    //02============================================================================================
    /**
     * [リセットボタン]クリック
     */
    $('#form_search').on('reset', function(e) {

        e.preventDefault();

        if (confirm('検索条件をクリアしてよろしいですか？')) {
            $('.type_tabs *').css('font-weight', FONT_NORMAL); //フォント元に戻す
            $('#form_search input[type=checkbox]').prop('checked' , false);
            $('#form_search input[type=text]'    ).val('');
        } else {
            ;
        }//END IF
    });
//--------------------------------------------------------------------------------------------------
//■前回の結果を受けてチェックボックスのクリック
//--------------------------------------------------------------------------------------------------
    //1. チェックボックスをクリックする関数
    /**
     * @param postfix    LMSのどれか
     * @param prevParams 前回クリックされたジャンルやエリアのID
     */
    var clickWithPrevParams = function(postfix, prevParams){
        var i   = 0
          , len = 0;
        prevParams = prevParams || [];
        len = prevParams.length;
        for(i=0;i<len;i++){
            $('#' + postfix + '_' + prevParams[i])[0].click();
        }//END FOR
    }//END FUNCTION
    //2. ジャンル
    clickWithPrevParams('genreL', ns.search_detail.genreL);
    clickWithPrevParams('genreM', ns.search_detail.genreM);
    clickWithPrevParams('genreS', ns.search_detail.genreS);
    //3. エリア
    clickWithPrevParams('areaL' , ns.search_detail.areaL );
    clickWithPrevParams('areaM' , ns.search_detail.areaM );
    clickWithPrevParams('areaS' , ns.search_detail.areaS );
//--------------------------------------------------------------------------------------------------
//■対象の最初のタブを表示(県北とか県央とか)
//--------------------------------------------------------------------------------------------------
    //ジャンル
    $('#genre_tabs>ul>li>a').each(function() {
        var fontWeight = $(this).css('font-weight') + '';
        if (fontWeight === FONT_BOLD ||
            fontWeight === 'bold'       ) { //Chrome用の条件
            $(this)[0].click();
            return false;
        }//END IF
    });
    //エリア
    $('#area_tabs>ul>li>a').each(function() {
        var fontWeight = $(this).css('font-weight') + '';
        if (fontWeight === FONT_BOLD ||
            fontWeight === 'bold'       ) { //Chrome用の条件
            $(this)[0].click();
            return false;
        }//END IF
    });
}());


});}(jQuery));
