/** * @file base.js * @brief JSでファイル単位に纏める必要の無い関数群を纏めたファイル */ var _js_param = new Array(); var _js_airport = new Array(); // 最大最小値 var param_min; var param_max; // どのページが判断するID var page_id; //スマホ化か判断 var device_type; function Company(value, name) { this.value = value; this.name = name; } /****************************************************************** * デフォルトセット(ページロード時処理が行われるもの) start ******************************************************************/ /** * @brief ページロードの時に走る関数。 * ページによって初回呼び出す関数が異なるのでハンドリングする * @param page_id ページid */ function initAll(page) { var form_obj = document.OPS_SEARCH; page_id = page; // smarty側でprint getParametar(); // 時間取得 var today = new Date(_js_param['today']); //var today = new Date(); // date.js getDefaultDate(today); // キーワード if(_js_param['p'] != ''){ form_obj.p.value = _js_param['p']; } // 検索項目 if(_js_param['sobj'] != ''){ for(var i = 0; i < form_obj.sobj.length; i++){ if(form_obj.sobj.options[i].value == _js_param['sobj']){ form_obj.sobj.options[i].selected = true; } } } // share.js shareInit(page_id); // pop_out.js setHiddenObjectId(); // 検索対象チェック if(_js_param['ol'] != ''){ if (form_obj.ol) { form_obj.ol.checked = true; } } // 各ページ初期化 if(page_id == 'ops'){ // smarty側でprint getDeptAirport(); initAir(); if(_js_param['err'] == 1){ controlShowObj('atour_opt_err01'); } defaultCheckControl(); // コースリスト }else if(page_id == 'atour_search'){ // add_dept.js deptInit(); defaultCheckControl(); // その他ページ }else{ // add_dept.js deptInit(); } if (form_obj.dmin && form_obj.dmax) { // 旅行日数初期化 setMinMax(form_obj.dmin, form_obj.dmax, _js_param['dmin'], _js_param['dmax']); } if (form_obj.pmin && form_obj.pmax) { // 料金初期化 setMinMax(form_obj.pmin, form_obj.pmax, _js_param['pmin'], _js_param['pmax']); } } /** * @brief パラメータが渡ってきた時、デフォルトチェックを入れる関数 */ function defaultCheckControl() { // share.js if (_js_param['ao'] == 'a') { aoCheck(1, 0); } else { aoCheck(0, 0); } // al対応 var al_len = 0; for (key in _js_param['al']) { al_len++; } // 条件指定ページ if (page_id == 'ops') { if (_js_param['al'] != '' || al_len > 0) { dynaLoad('/abroad-tour/js/airline_list', 'search_airLoad'); } defSetCheckOpt('ap'); defSetCheckOpt('theme'); defSetCheckOpt('dt'); defSetCheckOpt('seat'); defSetCheckOpt('hotel'); defSetCheckOpt('tc'); defSetCheckOpt('ot'); // コースリスト }else if (page_id == 'atour_search') { if (_js_param['al'] != '' || al_len > 0) { dynaLoad('/abroad-tour/js/airline_list', 'search_airLoad'); } showSearchOptionColum('theme', 'atour_search_theme'); showSearchOptionColum('dt', 'atour_search_dt'); showSearchOptionColum('seat', 'atour_search_seat'); showSearchOptionColum('hotel', 'atour_search_hotel'); showSearchOptionColum('tc', 'atour_search_tc'); showSearchOptionColum('ot', 'atour_search_ot'); }else{ return; } } /** * @brief (条件指定ページ用)値のデフォルトチェックを行う関数 * @param param _js_param[]又は_js_airport[]のkey */ function defSetCheckOpt(param) { if(param == 'ap'){ if(!_js_airport[0] || _js_airport[0] == ''){ return; } }else{ if(!_js_param[param] || _js_param[param] == ''){ return; } } var div_id = ''; if(param == 'ap'){ for(var i = 0; i < _js_airport.length; i++){ if(_js_airport[i]){ div_id = param + '_' + _js_airport[i]; if (document.OPS_SEARCH.elements[div_id]) { document.OPS_SEARCH.elements[div_id].checked = true; } } } return; } for(var i = 0; i < _js_param[param].length; i++){ if(param == 'theme'){ // 要素の存在チェック if(_js_param[param][i] && _js_param[param][i].length > 1){ param_value = _js_param[param][i]; }else if(_js_param[param]){ param_value = _js_param[param]; } // 配列の時 }else if (_js_param[param][i]) { param_value = _js_param[param][i]; // 文字列の時 }else if(_js_param[param]){ param_value = _js_param[param]; } if (param == 'seat' || param == 'hotel') { if (param_value == 1) { param_value = 'a'; } else if (param_value == 2) { param_value = 'b'; } else if (param_value == 3) { param_value = 'c'; } } if(param_value != ''){ div_id = param + '_' + param_value; if (document.OPS_SEARCH.elements[div_id]) { document.OPS_SEARCH.elements[div_id].checked = true; } }else{ break; } } } /** * @brief (atour_search用)オプション条件の出しわけを行う関数 * オプション条件が指定されていたら、コースリスト画面にそのオプションを表示する * @param param _js_param配列のkey * @param colum_id オプション条件のカラムID(htmlに割り振っているid) */ function showSearchOptionColum(param, colum_id) { // 値チェック if(!_js_param[param] || _js_param[param] == ''){ return; } var div_id = ''; var chk_id = ''; var param_value = ''; theme_name = new Array(); theme_name['WH'] = "世界遺産探訪"; theme_name['TP'] = "テーマパーク観光"; theme_name['DM'] = "ダイビング、マリンスポーツ"; theme_name['SS'] = "スキー、スノーボード"; theme_name['WS'] = "スポーツ観戦"; theme_name['EA'] = "オーロラ鑑賞"; theme_name['CR'] = "クルーズの旅"; theme_name['TT'] = "鉄道の旅"; theme_name['ST'] = "学び、ホームステイ"; theme_name['LS'] = "長期滞在型"; for(var i = 0; i < _js_param[param].length; i++){ if(param == 'theme'){ if(_js_param[param][i] && _js_param[param][i].length > 1){ param_value = _js_param[param][i]; }else if(_js_param[param]){ param_value = _js_param[param]; } // 配列の時 }else if(_js_param[param][i]){ param_value = _js_param[param][i]; // 文字列の時 }else if(_js_param[param]){ param_value = _js_param[param]; }else{ param_value = ''; } if (param == 'seat' || param == 'hotel') { if (param_value == 1) { param_value = 'a'; } else if (param_value == 2) { param_value = 'b'; } else if (param_value == 3) { param_value = 'c'; } } if(param_value != ''){ div_id = param + '_' + param_value; chk_id = 'chk_' + param +'_' + param_value; // 対象会員の時はcolum_idが異なるので変更 if(param == 'theme' && (param_value == 'PR' || param_value == 'BB' || param_value == 'YC')){ colum_id = 'atour_search_member'; }else if(param == 'theme'){ colum_id = 'atour_search_theme'; }else{ colum_id = 'atour_search_' + param; } // ページに埋め込まれたIDに変換 if(document.getElementById(div_id)){ document.OPS_SEARCH.elements[chk_id].checked = true; document.getElementById(colum_id).style.display = 'block'; if (_js_param['recmid'] == 3 && param == 'theme') { document.getElementById("theme_recmid").innerHTML = theme_name[param_value]; document.getElementById("theme_recmid").style.display = 'block'; } else { document.getElementById(div_id).style.display = 'block'; } } }else{ break; } } } /****************************************************************** * デフォルトセット(ページロード時処理が行われるもの) end ******************************************************************/ /****************************************************************** * Min Max 設定 start ******************************************************************/ /** * @brief GETパラメータで旅行日数、旅行代金が渡ってきた時に走る関数
旅行日数と旅行代金のセレクトボックスをデフォルトセットする */ function setMinMax(obj_min, obj_max, min, max) { param_min = min; param_max = max; // 旅行代金のパラメータのチェック // 値の矛盾をチェック if(param_min != '' && param_max != ''){ if(obj_min.name == 'dmin' && parseInt(param_min) > parseInt(param_max)){ param_min = ''; param_max = ''; }else if(obj_min.name == 'pmin' && parseInt(param_min) >= parseInt(param_max)){ param_min = ''; param_max = ''; } } if(param_min != ''){ for(i = 0; i < obj_min.length; i++){ if(obj_min.options[i].value == param_min){ obj_min.options[i].selected = true; param_min = ''; break; }else{ continue; } } }else{ if (obj_min) { obj_min.options[0].selected = true; } else { return; } } changeMaxValue(obj_min, obj_max); } /** * @brief 旅行日数、旅行代金の最小値が決定した時に走る関数 */ function changeMaxValue(obj_min, obj_max) { if (!obj_min) { return; } if (!obj_max) { return; } idx = obj_min.selectedIndex; // セレクトボックスの要素数 var select_counter = 0; // 取得する要素番号(旅行代金と旅行日数は取り出し方が違うので分ける) var element_num = 0; // セレクトボックスを初期化 obj_max.options.length = 1; // minが指定無しの場合 if(idx == 0){ select_counter = obj_min.options.length - 1; element_num = 1; // minが最大値の時 旅行代金のみ }else if(idx == obj_min.options.length - 1 && obj_min.name == document.OPS_SEARCH.pmin){ return; // minに値が設定されている場合 }else{ // 旅行代金 if(obj_min.name == "pmin"){ select_counter = obj_min.options.length - idx - 1; element_num = idx + 1; // 旅行日数 }else{ select_counter = obj_min.options.length - idx; element_num = idx; } } // 要素セット for(i = 0; i < select_counter; i++){ obj_max.options[i + 1] = new Option(str_split(obj_min.options[i + element_num].value), obj_min.options[i + element_num].value); } if(param_max){ for(i = 0; i< obj_max.length; i++){ if(obj_max.options[i].value == param_max){ obj_max.options[i].selected = true; param_max = null; break; } } }else{ obj_max.options[0].selected = true; } } /** * @brief 旅行代金の数字にカンマを追加する関数 */ function str_split(num) { var txt_num = '' + num; // 数値ではない、もしくは空の文字列でない if(!isNaN(txt_num) || txt_num != ''){ var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])'); var curr_val = txt_num.split('.'); curr_val[0] += '.'; // カンマ追加処理 do{ curr_val[0] = curr_val[0].replace(rxSplit, '$1,$2'); }while(rxSplit.test(curr_val[0])); if (curr_val.length > 1) { txt_num = curr_val.join(''); }else{ txt_num = curr_val[0].split('.')[0]; } } return txt_num; } /****************************************************************** * Min Max 設定 end ******************************************************************/ /****************************************************************** * 共通関数 start ******************************************************************/ /** * @brief チェックボックス用HTML文字列を作成する * @param check_name チェックボックスに付ける名前 * @param check_value チェックボックスのvalue値 * @param id チェックボックスに付けるid * @param text_node チェックボックスと共に表示する文字列 * @param default_check デフォルトチェックをいれるかの判定 * @param on_click_fank オンクリック関数を付ける場合は指定する * 0 → チェックしない 1 → チェックする * @return str checkboxのHTML * ('; */ return str; } /** * @brief チェックボックスのラベルHTML文字列を作成する * @param value value値 * @param option ラベルに付けるオプション */ function makeCheckLabelStr(value, text_node, option) { var str = ''; str += '