/*
 *
 * ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
 *
 * 1. 使用方法
 *  enableSearchCompanyCondsAjax()を実行する。
 *  その際、引数にハッシュデータを指定し初期設定を変更する
 *
 * 2. 使用例
 *  var setting = {
 *      'req_json' : 'data.json', // 必須
 *      'pref_pulldown_id' : '#pref',
 *      'cond1_pulldown_id' : '#cond1',
 *  }
 *  enableSearchCompanyCondsAjax(setting);
 *
 * ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
 *
 */


// 初期設定
search_company_ajax.c_req_json = '../../common/json/search_conds.php'; // リクエスト先JSON
search_company_ajax.c_pref_pulldown_id = '#addr01_0'; // 都道府県プルダウンのID
search_company_ajax.c_cond1_pulldown_id = '#cond_0'; // 条件1プルダウンのID
search_company_ajax.c_cond2_pulldown_id = '#cond_1'; // 条件2プルダウンのID
search_company_ajax.c_req_pref_label = 'addr01'; // リクエストする都道府県データラベル
search_company_ajax.c_req_cond_label = 'cond'; // リクエストする条件データラベル
search_company_ajax.c_res_pref_value; // レスポンスされる都道府県データ
search_company_ajax.c_res_cond1_value; // レスポンスされる条件1データ
search_company_ajax.c_res_cond2_value; // レスポンスされる条件2データ

/*
 * テンプレートファイルで実行する関数 引数に通信用JSONのパスなどを指定
 */
function enableSearchCompanyCondsAjax(params) {

    // リクエスト先JSONのパスを格納
    if (params) {
        if (params['req_json']) {
            search_company_ajax.c_req_json = params['req_json'];
        }
        if (params['pref_pulldown_id']) {
            search_company_ajax.c_pref_pulldown_id = params['pref_pulldown_id'];
        }
        if (params['cond1_pulldown_id']) {
            search_company_ajax.c_cond1_pulldown_id = params['cond1_pulldown_id'];
        }
        if (params['cond2_pulldown_id']) {
            search_company_ajax.c_cond2_pulldown_id = params['cond2_pulldown_id'];
        }
        if (params['req_pref_label']) {
            search_company_ajax.c_req_pref_label = params['req_pref_label'];
        }
        if (params['req_cond_label']) {
            search_company_ajax.c_req_cond_label = params['req_cond_label'];
        }
        if (params['res_pref_value']) {
            search_company_ajax.c_res_pref_value = params['res_pref_value'];
        }
        if (params['res_cond1_value']) {
            search_company_ajax.c_res_cond1_value = params['res_cond1_value'];
        }
        if (params['res_cond2_value']) {
            search_company_ajax.c_res_cond2_value = params['res_cond2_value'];
        }

    }

    // リクエスト先JSONが指定されていたら
    if (search_company_ajax.c_req_json) {

        // 条件1プルダウンを更新
        SearchCompanyAjax_ifUpdateCond1Pulldown(function() {
            SearchCompanyAjax_ifUpdateCond2Pulldown();
        });

        // 各プルダウンにリスナーを追加
        $(search_company_ajax.c_pref_pulldown_id).change(function() {
            SearchCompanyAjax_ifUpdateCond1Pulldown();
        });
        $(search_company_ajax.c_cond1_pulldown_id).change(function() {
            SearchCompanyAjax_ifUpdateCond2Pulldown();
        });

    }

}

/*
 * 都道府県の値から条件1を更新する
 *
 * fn : コールバック関数
 */
function SearchCompanyAjax_ifUpdateCond1Pulldown(fn) {

    // 都道府県プルダウンの選択済みvalueを習得
    var addr01val = $(search_company_ajax.c_pref_pulldown_id + ' option:selected').val();

    // 条件2プルダウンのoptionをすべて削除してselectをdisableに
    SearchCompanyAjax_disablePulldown(search_company_ajax.c_cond2_pulldown_id);

    // 都道府県が選択されたら
    if (!addr01val) {

        // 条件1プルダウンのoptionをすべて削除してselectをdisableに
        SearchCompanyAjax_disablePulldown(search_company_ajax.c_cond1_pulldown_id);
    } else {

        // 更新用パラメータを準備
        var json_params = {};
        json_params[search_company_ajax.c_req_pref_label] = addr01val;

        // 条件1プルダウンを更新
        var params = {};
        if (search_company_ajax.c_res_cond1_value) {
            params['selected'] = search_company_ajax.c_res_cond1_value;
            search_company_ajax.c_res_cond1_value = null;
        }
        SearchCompanyAjax_updatePulldown(search_company_ajax.c_req_json, search_company_ajax.c_cond1_pulldown_id, json_params, params, fn);
    }
}

/*
 * 都道府県と条件1の値から条件2を更新する
 *
 * fn : コールバック関数
 */
function SearchCompanyAjax_ifUpdateCond2Pulldown(fn) {

    // 都道府県プルダウンの選択済みvalueを習得
    var addr01val = $(search_company_ajax.c_pref_pulldown_id + ' option:selected').val();

    // 条件1プルダウンの選択済みvalueを習得
    var cond1val = $(search_company_ajax.c_cond1_pulldown_id + ' option:selected').val();

    // 都道府県と条件1が選択されたら
    if (!(addr01val && cond1val)) {

        // 条件2プルダウンのoptionをすべて削除してselectをdisableに
        SearchCompanyAjax_disablePulldown(search_company_ajax.c_cond2_pulldown_id);
    } else {

        // 更新用パラメータを準備
        var json_params = {};
        json_params[search_company_ajax.c_req_pref_label] = addr01val;
        json_params[search_company_ajax.c_req_cond_label] = cond1val;

        // 条件2プルダウンを更新
        var params = {};
        params['ingore_value'] = cond1val;
        if (search_company_ajax.c_res_cond2_value) {
            params['selected'] = search_company_ajax.c_res_cond2_value;
            search_company_ajax.c_res_cond2_value = null;
        }
        SearchCompanyAjax_updatePulldown(search_company_ajax.c_req_json, search_company_ajax.c_cond2_pulldown_id, json_params, params, fn);
    }
}
