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

/**
 * 診療科目・都道府県検索ライブラリ (トップページ、タブ3)
 */
QLife.TopSubject = {
    /**
     * 対象サイト(1:本体、2:動物病院版)
     */
    site : 0,
    /**
     * YUI Browser History Manager モジュール名
     */
    bhmModuleName : '',
    /**
     * 診療科目select
     */
    SELECT_STEP1 : '',
    /**
     * 都道府県select
     */
    SELECT_STEP2 : '',
    /**
     * 市区町村select
     */
    SELECT_STEP3 : '',
    /**
     * 
     */
    DIV_HOSPITAL_LIST : '',
    
    init : function(site, bhmModuleName, selectStep1, selectStep2, selectStep3, divHospital){
        this.site = site;
        this.bhmModuleName = bhmModuleName
        this.SELECT_STEP1 = selectStep1;
        this.SELECT_STEP2 = selectStep2;
        this.SELECT_STEP3 = selectStep3;
        this.DIV_HOSPITAL_LIST = divHospital;
        
        $(this.SELECT_STEP1).onchange = function(){ QLife.TopSubject.areaCondChanged(); };
        $(this.SELECT_STEP2).onchange = function(){ QLife.TopSubject.areaCondChanged(); };
        $(this.SELECT_STEP3).onchange = function(){ QLife.TopSubject.areaChanged(1); };
        // ブラウザ履歴: UI状態を復帰
        this._restoreState();
    },
    /**
     * ブラウザ履歴: 初期状態文字列
     */
    initState : '',
    /**
     * ブラウザ履歴: 
     */
    restore : function(state){
        this.initState = String(state);
//        alert('TopSubject.restore: state=' + this.initState);
    },
    /**
     * ブラウザ履歴: UI状態を復帰
     */
    _restoreState : function(){
//        alert('TopSubject._restoreState: state=' + this.initState);
        if (this.initState == null || this.initState == '') {
            return;
        }
        var params = this.initState.split('_');
        if (params.length < 5 || params[0] != 2) {
            return;
        }
        var subject = decodeURIComponent(params[1]);
        var pref    = decodeURIComponent(params[2]);
        var area    = decodeURIComponent(params[3]);
        var page    = decodeURIComponent(params[4]);
//        alert('TopSubject._restoreState: subject=' + subject + ' pref=' + pref + ' area=' + area + ' page=' + page);
        //
        QLife.Common.restoreSelect(this.SELECT_STEP1, subject);
        QLife.Common.restoreSelect(this.SELECT_STEP2, pref);
        this.areaCondChanged(area);
	    QLife.TopSubject.updateList(this.initState);
    },
    /**
     * タブ3: 診療動物または都道府県のプルダウンリストが変更されたとき
     */
    areaCondChanged : function(selectedArea){
        var subject = $F(this.SELECT_STEP1);
        // 診療科目ガイドの切り替え
        if (! isNaN(subject)) {
            var spans = $$('div.guide_container span');
            for (var i = 0, length = spans.length ; i < length ; i++) {
                if (spans[i] && spans[i].id) {
                    var display = ('subject_desc' + subject == spans[i].id ? 'inline' : 'none');
                    spans[i].setStyle({display : display});
                }
            }
        }
        var pref = $F(this.SELECT_STEP2);
        if (subject == null || pref == null || String(subject).length == 0 || String(pref).length == 0 || isNaN(subject) || isNaN(pref)) {
            return;
        }

        new Ajax.Request('2008qlife_lib/toppage_area.php', {
            method : 'get',
            parameters : {site : QLife.TopSubject.site, subject : subject, pref : pref},
            onSuccess : function(transport) {
                var json = transport.responseText.evalJSON();
                if (json.err) {
                    // エラー
                    alert(json.err);
                    return;
                }
                // 正常終了: 地域一覧を更新
		        var slArea = $(QLife.TopSubject.SELECT_STEP3);
		        // 市区町村(Step3)の<option>を削除
		        QLife.Common.removeOptions(slArea);
		        // 市区町村(Step3)の<option>を追加
		        var areas = (typeof(json.xml.area.length) == 'undefined' ? [json.xml.area] : json.xml.area);
		        for (var i = 0, length = areas.length ; i < length ; i++) {
		            slArea.options[i + 1] = new Option(areas[i].name + '(' + areas[i].num + ')', areas[i].name);
		            // アクティブな地域を選択
		            if (selectedArea == areas[i].name) {
		                slArea.options[i + 1].selected = true;
		            }
		        }
            }
            });
    },
    /**
     * タブ3: 市区町村選択 → 病院リストを更新
     *
     * @param int page 表示するページ数(1-)
     */
    areaChanged : function(page){
        var subject = $F(this.SELECT_STEP1);
        var pref    = $F(this.SELECT_STEP2);
        var area    = $F(this.SELECT_STEP3);
//        alert('areaChanged: subject=' + subject + ' pref=' + pref + ' area=' + area);
        if (isNaN(subject) || isNaN(pref) || area.length == 0) {
            return;
        }
        // 状態文字列を作成
        var state = '2_' + encodeURIComponent(subject) +
            '_' + encodeURIComponent(pref) +
            '_' + encodeURIComponent(area) +
            '_' + encodeURIComponent(page);
        // 
        if (this.bhmModuleName == '') {
            QLife.TopSubject.updateList(state);
        } else {
	        try {
	            YAHOO.util.History.navigate(QLife.TopSubject.bhmModuleName, state);
	        } catch(e) {
	            QLife.TopSubject.updateList(state);
	        }
        }
    },
    
    updateList : function(state){
        var params = String(state).split('_');
        if (params.length < 5) {
//            alert('tab3[147]: Invalid state=' + state);
            return;
        }
        var tabIndex = decodeURIComponent(params[0]);
        var subject = decodeURIComponent(params[1]);
        var pref = decodeURIComponent(params[2]);
        var area = decodeURIComponent(params[3]);
        var page = decodeURIComponent(params[4]);
        if (String(tabIndex) != '2' || isNaN(subject) || isNaN(pref) || String(area).length == 0) {
//            alert('tab3[156]: Invalid state=' + state);
            return;
        }
        // 待機画像
        $(this.DIV_HOSPITAL_LIST).innerHTML = QLife.Common.IMG_LOADING;

        new Ajax.Request('toppage_hospital.php', {
            method : 'get',
            parameters : {stype : 2, subject : subject, pref : pref, area : area, page : page},
            onSuccess : function(transport) {
                var json = transport.responseText.evalJSON();
                $(QLife.TopSubject.DIV_HOSPITAL_LIST).innerHTML = json.html;
                // ページャーに非同期更新イベント設定
                QLife.TopSubject.updatePagersOnclick();
            }
        });
    },

    updatePagersOnclick : function(){
        var anchors = $$('div.pager a');
        for (var i = 0 ; i < anchors.length ; i++) {
            anchors[i].onclick = function(){
                // hrefテキストからページ数を取得
                var newpage = this.href.replace(/^.+page=(\d+).*$/, '$1');
                // TODO 
                QLife.TopSubject.areaChanged(newpage);
                return false;
            }
        }
    }
};
