if (typeof(QLifePet) == 'undefined') {
    var QLifePet = {};
}


QLifePet.Common.addOnload(
    function(){
        // ページャonclickイベント更新
        QLifePet.Result.updatePagersOnclick();
        // タブ初期化
        QLifePet.Result.initTabView();
        //
    }
);


QLifePet.Result = {

    tabView : null,
    /**
     * URLのキーワード部(GA追跡処理用)
     */
    keyword : '',
    /**
     * タブ初期化
     */
    initTabView : function(){
        // タブ初期化
        this.tabView = new YAHOO.widget.TabView('result_tabs'); 
        // タブ切り替えイベント追加
        var url = QLifePet.Common.getUrlSuffix();
        this.keyword = url.replace(/^\/pet\/search_[a-zA-Z]+_([^_]+).+$/, '$1');
        this.tabView.getTab(0).addListener(
            'click',
            function(e){
                QLifePet.Common.gaTrack('/pet/search_kuchikomi_' + QLifePet.Result.keyword + '_0_1');
            }
        );
        this.tabView.getTab(1).addListener(
            'click',
            function(e){
                QLifePet.Common.gaTrack('/pet/search_hospital_' + QLifePet.Result.keyword + '_0_0_-_1');
            }
        );
    },
    
    /**
     * ブラウザ履歴
     */

    /**
     * ブラウザ履歴: 状態を復帰
     */
    restoreHistory : function(newState){
//        alert('restore: newState=' + newState);
        if (newState == null || newState.length == 0) {
//            alert('restore: no new state.');
            return;
        }
        var reg = new RegExp(/^(\/pet\/search_[a-z]+)_(.+)$/);
        // 状態文字列(#以降)のマッチング
        var result = null;
        if (! (result = reg.exec(newState))) {
//	        alert('restore: not matched.');
            return;
        }
        var urlPrefix   = result[1];
        var params      = result[2].split('_');
        // 状態の復帰(キーワード)
        var keyword = decodeURIComponent(params[0]);
        $(this.TAB1.INPUT_KEYWORD).value = keyword;
        $(this.TAB2.INPUT_KEYWORD).value = keyword;

        if (urlPrefix == this.URLPREFIX_KUCHIKOMI) {
            // タブ1をアクティブ、状態を復帰
            this.switchTab(0);
            var subject = params[1];
            QLifePet.Common.restoreSelect(this.TAB1.SELECT_SUBJECT, subject);
        } else if (urlPrefix == this.URLPREFIX_HOSPITAL) {
            // タブ2をアクティブ、状態を復帰
            this.switchTab(1);
            var pref    = params[1];
            var subject = params[2];
            var repute  = params[3];
            QLifePet.Common.restoreSelect(this.TAB2.SELECT_PREF, pref);
            QLifePet.Common.restoreSelect(this.TAB2.SELECT_SUBJECT, subject);
            // TODO repute(checkbox)復帰
        } else {
            alert('Invalid history status.');
        }
    },
    /**
     * URLから現在の検索条件文字列を返す
     */
    getStateByUrl : function(){
        var initState = String(window.location).replace(/^https*:\/\/[^\/]+([^#]+).*$/, '$1');
        return initState;
    },
    /**
     * ページャーのonclick属性を更新する (非同期更新の関数呼び出しを追加)
     */
    updatePagersOnclick : function(){
	    var pagerAnchors = $$('div.pager a');
	    for (var i = 0 ; i < pagerAnchors.length ; i++) {
	        pagerAnchors[i].onclick = function(){
                var pathname = QLifePet.Common.getPathname(this);
                try {
                    YAHOO.util.History.navigate('st', pathname);
                } catch (e) {
	                QLifePet.Result.updateList(pathname);
                }
                return false; // hrefによるページ遷移禁止
            };
	    }
    },
    /**
     * アクティブなタブを切り替え
     *
     * @param int activeIndex アクティブにするタブのインデックス(0-)
     */
    switchTab : function(activeIndex){
        if (activeIndex == -1) {
	        return;
        }
        try {
            if (this.tabView.get('activeIndex') != activeIndex) {
                this.tabView.set('activeIndex', activeIndex);
            }
        } catch(e) {
            $(this.TAB1.DIV).setStyle({display : (activeIndex == 0 ? 'block' : 'none')});
            $(this.TAB2.DIV).setStyle({display : (activeIndex == 1 ? 'block' : 'none')});
        }
    },
    
    URLPREFIX_KUCHIKOMI : '/pet/search_kuchikomi',
    URLPREFIX_HOSPITAL : '/pet/search_hospital',
    /**
     * 検索結果を非同期更新
     * 
     * @param string  pathname 検索条件文字列。URLと同じフォーマット
     */
    updateList : function(pathname){
        if (pathname == null || pathname.length == 0) {
            alert('No pathname.');
            return;
        }
        // GoogleAnalyticsコール
        QLifePet.Common.gaTrack(pathname);

        var divId = '';
        var activeIndex = -1;
        // pathnameからidの判定
        if (pathname.match(/.*search_kuchikomi_/)) {
            divId = 'kuchikomi_list';
            activeIndex = 0;
        } else if (pathname.match(/.*search_hospital_/)) {
            divId = 'hospital_list';
            activeIndex = 1;
        } else {
            alert('Unexpected pathname.');
            return;
        }
        // タブ切り替え
        this.switchTab(activeIndex);

        // 待機画像
        $(divId).innerHTML = QLifePet.Common.IMG_LOADING;

        new Ajax.Request('hospital_result_update.php', {
            method : 'get',
            parameters : { pathname : pathname },
            onSuccess : function(transport) {
                $(divId).innerHTML = transport.responseText;
                QLifePet.Result.updatePagersOnclick();
            }
        });
    },
    
    /**
     * タブ1: 定数
     */
    TAB1 : {
        /**
         * タブ1<div>のid
         */
	    DIV : 'tab1',
        /**
         * キーワード<input>のid属性値
         */
        INPUT_KEYWORD : 'k_keyword',
        /**
         * 診療動物<select>のid属性値
         */
        SELECT_SUBJECT : 'k_subject'
    },
    /**
     * 口コミ検索結果の更新 (「絞り込む」ボタンを押したとき)
     */
    updateKuchikomi: function(){
        var keyword = $F(this.TAB1.INPUT_KEYWORD);
        var subject = $F(this.TAB1.SELECT_SUBJECT);
        // URL生成
        var pathname = this.URLPREFIX_KUCHIKOMI + '_' + encodeURIComponent(keyword) +
            '_' + subject + '_1';
        // TODO 口コミ一覧を更新
        try {
            YAHOO.util.History.navigate('st', pathname);
        } catch (e) {
            QLifePet.Result.updateList(pathname);
        }
    },
    
    /**
     * タブ2: 定数
     */
    TAB2 : {
        /**
         * タブ2<div>のid
         */
        DIV : 'tab2',
	    /**
	     * キーワード<input>のid属性
	     */
        INPUT_KEYWORD : 'h_keyword',
	    /**
	     * 都道府県<select>のid属性
	     */
	    SELECT_PREF : 'h_pref',
	    /**
	     * 診療動物<select>のid属性
	     */
	    SELECT_SUBJECT : 'h_subject',
	    /**
	     * CSSセレクタ
	     */
	    SELECTOR_REPUTE : 'input.repute'
    },
    /**
     * 病院検索結果の更新(「絞り込む」ボタンを押したとき)
     */
    updateHospital : function(){
        var keyword = $F(this.TAB2.INPUT_KEYWORD);
        var pref    = $F(this.TAB2.SELECT_PREF);
        var subject = $F(this.TAB2.SELECT_SUBJECT);
        var repute = [];
        // 評価の値を取得し、配列に格納
        var chkRepute = $$(this.TAB2.SELECTOR_REPUTE);
        for (var i = 0, length = chkRepute.length ; i < length ; i++) {
            if (chkRepute[i].checked) {
                repute[repute.length] = chkRepute[i].value;
            }
        }
        var reputation = (repute.length == 0 ? '-' : repute.join('-'));
        // 検索条件を結合してURL生成
        var pathname = this.URLPREFIX_HOSPITAL + '_' + encodeURIComponent(keyword) +
            '_' + pref + '_' + subject + '_' + reputation + '_1';
        // 一覧を更新
        try {
            YAHOO.util.History.navigate('st', pathname);
        } catch (e) {
            QLifePet.Result.updateList(pathname);
        }
    }
};

