/**
* @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
* (