if (typeof(QLife) == 'undefined') {
    var QLife = {};
}
/**
 * トップ、検索ページ共通処理
 * 
 */
QLife.Common2011 = {
    /**
     * 診療科目,都道府県が選択変更されたとき、市区町村selectを更新する
     */
    onChangePref : function(isTop, checkSubject)
    {
        if (isTop) {
            //トップページ
            var prefCode    = this._checkInt($('#kamoku_pref').val());
            var subjectCode = this._checkInt($('#kamoku_sbj').val());
            
            var cityObj = $('#kamoku_city');
        } else {
            // 検索ページ
            var prefCode    = this._checkInt($('#search_pref').val());
            var subjectCode = this._checkInt($('#search_subject').val());
            
            var cityObj = $('#search_city');
        }
        //現在の市区町村一覧を削除する
        cityObj.empty();
        cityObj.append(this._createTag('', '市町村名を選択してください'));
        //ajax呼び出し
        if (this._requestAjax(checkSubject, prefCode, subjectCode)) {
            $.ajax({
                url : '/city_json',
                cache : false,
                data : {'pref' : prefCode, 'subject' : subjectCode},
                success: function(contents) {
                    // JSON
                    var json = $.parseJSON(contents);
                    //市区町村一覧の更新
                    for (var index = 0; index < json.length; index++) {
                        var text = json[index].name;
                        if (checkSubject) {
                            //診療科目優先のとき病院件数を表示
                            text += '(' + json[index].num + ')';
                        }
                        cityObj.append(QLife.Common2011._createTag(json[index].code, text));

                    }
                }
            });
        }
    },
    /**
     * 必要なパラメータがありajax呼び出しが必要かどうか調べる
     * 
     * @param bool checkSubject 診療科目コードが必要かどうか
     * @param int  prefCode     都道府県コード
     * @param int  subjectCode  診療科目コード
     * @return bool ajax呼び出し必要：true 不要：false
     */
    _requestAjax : function(checkSubject, prefCode, subjectCode)
    {
        if (checkSubject) {
            return (prefCode > 0 && subjectCode > 0);
        } else {
            return (prefCode > 0);
        }
    },
    /**
     * 値が数値であるか調べ数値以外のとき0を返す
     * 
     * @param int code 調べる値
     * @return int 正しい数値
     */
    _checkInt : function(str)
    {
        if (typeof(str) == 'undefined' || str.match(/^\d+$/) == null) {
            return '0';
        } else {
            return str;
        }
    },
    /**
     * タグを作成する
     * 
     * @param string value valueの値
     * @param string text  テキスト表示文字列
     * @return object optionタグDOMオブジェクト
     */
    _createTag : function(value, text)
    {
        var option = $(document.createElement("option"));
        option.val(value).text(text);
        return option;
    }
}

