/*===================================================== * Script Name: inttour_module_common.js * Description: 空席照会モジュール 海外ツアー共通処理 * Version: 1.2 * Last Up Date: 2017/11/10 =====================================================*/ ////////////////////////////// // 海外ツアー 共通処理 START // 過渡期かどうかのチェック処理 // 過渡期の定義情報を読み込んで過渡期フラグがON(過渡期中)の場合はtrue、 // 過渡期フラグがOFF、または定義情報自体が無い(過渡期中でない)場合はfalseを返す。 function m_inttourModuleCommon_isTransitionPeriod() { if ('m_inttourTransitionPeriodOptions' in window && m_inttourTransitionPeriodOptions.isTransitionPeriod) { return true; } return false; } //指定文字列の配列内存在チェック function m_inttourModuleCommon_getStrArrayMatchAll(targetStr, arrayStr){ if($tour_module_jq.inArray(targetStr, arrayStr) != -1){ return true; } return false; }; // 海外ツアー 共通処理 END ////////////////////////////// ////////////////////////////// // 海外旅作 共通処理 START //初期値設定 var m_inttourModuleDp_siteType = { site : 'inttour', module : 'tabisaku' }; var m_inttourModuleDp_defaults = { isExist : { stay : true, // 都市滞在ラジオ secondDestCode : true, // 2都市目 transferDeptDate : true, // 移動日 numberOfPeople : true // 参加人数 }, targetModule : undefined, numberOfPeopleModuleNo : '999', numberOfPeopleTextId : m_tourModuleNumberOfPeople_defaultParams.textId, numberOfPeopleColumn : m_tourModuleNumberOfPeople_defaultParams.column, numberOfPeopleRow : m_tourModuleNumberOfPeople_defaultParams.row, numberOfRoomsInputClass : 'm_numberOfRooms', numberOfPeopleTextValue : '' }; // 海外旅作 検索実行関数 // リクエストパラメータの調整(操作)を実施した後、フォームをsubmitする。 function m_inttourModuleDp_submitSearch(obj) { var target = obj.targetModule; var isExistDef = m_tourModuleCommon_getParam(m_inttourModuleDp_siteType, {}, 'isExist'); var isExist = $tour_module_jq.extend(isExistDef, obj.isExist); var nopModuleNo = m_tourModuleCommon_getParam(m_inttourModuleDp_siteType, obj, 'numberOfPeopleModuleNo'); var nopTextId = m_tourModuleCommon_getParam(m_inttourModuleDp_siteType, obj, 'numberOfPeopleTextId'); var nopColumn = m_tourModuleCommon_getParam(m_inttourModuleDp_siteType, obj, 'numberOfPeopleColumn'); var nopRow = m_tourModuleCommon_getParam(m_inttourModuleDp_siteType, obj, 'numberOfPeopleRow'); var norInputClass = m_tourModuleCommon_getParam(m_inttourModuleDp_siteType, obj, 'numberOfRoomsInputClass'); var numberOfPeopleTextValue = m_tourModuleCommon_getParam(m_inttourModuleDp_siteType, obj, 'numberOfPeopleTextValue'); var targetForm = $tour_module_jq(this).closest('.form-tabisaku'); // 参加人数エラー再チェック if(isExist.numberOfPeople){ m_inttourModuleDp_lastCheckValueNumberOfPeople( target, nopTextId+ nopModuleNo, nopColumn, nopRow, nopModuleNo ); } // リクエストパラメータ調整 m_inttourModuleDp_arrangeRequest({ isExist : isExist, targetForm : targetForm, numberOfRoomsInputClass : norInputClass, numberOfPeopleModuleNo : nopModuleNo, numberOfPeopleTextId : nopTextId, numberOfPeopleColumn : nopColumn, numberOfPeopleRow : nopRow, numberOfPeopleTextValue : numberOfPeopleTextValue }); // 検索実行 targetForm.submit(); } //検索ボタン押下時のサブミット前リクエストパラメータ調整 var m_inttourModuleDp_arrangeRequest = function (option){ var isExist = option.isExist; var targetForm = option.targetForm; ////////////////////// // 都市滞在調整 START if(isExist.stay){ var selectedRadioValue = targetForm.find('input[name="m_stay"]:checked').val(); // 1都市滞在選択時、到着地(2都市目)と移動日のパラメータを除外 if (selectedRadioValue === m_inttourModuleDp_stayCityCountList[0].value) { if(isExist.secondDestCode){ targetForm.find('input[name="secondDestCode"]').prop('disabled', true); } if(isExist.transferDeptDate){ targetForm.find('input[name="transferDeptDate"]').prop('disabled', true); } } else { targetForm.find('input[name="secondDestCode"]').prop('disabled', false); targetForm.find('input[name="transferDeptDate"]').prop('disabled', false); } } // 都市滞在調整 END ////////////////////// ////////////////////// // 参加人数 START if(isExist.numberOfPeople){ var selectRoomsValue = targetForm.find('.' + option.numberOfRoomsInputClass).val(); var pplModuleNo = option.numberOfPeopleModuleNo; var columnArray = option.numberOfPeopleColumn; var columnMax = columnArray.length; var rowArray = option.numberOfPeopleRow; var rowMax = rowArray.length; var numberOfPeopleTextValue = option.numberOfPeopleTextValue; // 参加人数リクエストパラメータの調整 // ・参加人数未選択時、参加人数のパラメータを送信する // ・指定部屋数分のみリクエストパラメータを送信 // ・部屋数毎のエラーチェック状態を参照し、エラー状態の部屋分のパラメータは除外 var isErrorNumberOfPeopleList = targetForm.find('#' + option.numberOfPeopleTextId + pplModuleNo).data('isErrorRoomList'); if(isErrorNumberOfPeopleList === undefined){ // 画面で参加人数の操作をしなかった場合、エラーリストを初期化 isErrorNumberOfPeopleList = new Array(rowMax); for(var ri = 0; ri < rowMax; ri++){ isErrorNumberOfPeopleList[ri] = false; } } for(var ri = 0; ri < rowMax; ri++){ if(selectRoomsValue < (ri + 1) || isErrorNumberOfPeopleList[ri]){ targetForm.find('.'+ rowArray[ri].name + pplModuleNo).prop('disabled', true); } else { targetForm.find('.'+ rowArray[ri].name + pplModuleNo).prop('disabled', false); } } } // 参加人数 END ////////////////////// } //参加人数入力値の最終チェック処理 function m_inttourModuleDp_lastCheckValueNumberOfPeople(target, nopInputTextId, nopColumn, nopRow, moduleNo){ var nopRowMax = nopRow.length; var nopHiddenSelector = ''; for(var ri = 0; ri < nopRowMax; ri++){ if(ri != 0){ nopHiddenSelector += ','; } nopHiddenSelector += '.' + nopRow[ri].name + moduleNo; } var nopHiddenObj = target.find(nopHiddenSelector); m_inttourModuleDp_checkValueNumberOfPeople( nopHiddenObj, nopInputTextId, nopColumn ,nopRow); } // 参加人数入力値のチェック処理 // エラーの場合はエラー番号を返却する。 // targetInput:参加人数吹き出し内のセレクト要素 // inputId:吹き出し呼び出し元のinput要素のid function m_inttourModuleDp_checkValueNumberOfPeople(targetInput, inputId, column, row) { var errNo = undefined; var maxPeopleAll = m_inttourModuleDp_errorCheckNumberOfPeopleMax.all; // 全部屋合計(大人+子供(ベッド有り))最大8名 var maxPeople1Room = m_inttourModuleDp_errorCheckNumberOfPeopleMax.roomEach; // 1部屋合計(大人+子供(ベッド有り))最大6名 var maxPeopleNoBed = m_inttourModuleDp_errorCheckNumberOfPeopleMax.noBed; // ベッドなし人数合計(子供(ベッドなし)+幼児)最大2名 var cntPeopleAll = 0; var columnArray = column; var columnMax = columnArray.length; var rowArray = row; var rowMax = rowArray.length; var cntPeople1RoomAdultChild1 = new Array(rowMax); // 各部屋毎の大人+子供(ベッド有り)の集計 var cntPeople1RoomChild2infant = new Array(rowMax); // 各部屋毎の子供(ベッドなし)+幼児の集計 var isErrorRoomList = new Array(rowMax); // true:エラー検出、false:エラーなし for(var ri = 0; ri < rowMax; ri++){ cntPeople1RoomAdultChild1[ri] = 0; cntPeople1RoomChild2infant[ri] = 0; isErrorRoomList[ri] = false; } var checkArea = undefined; $tour_module_jq(targetInput).each(function(idx) { var selectStr = $tour_module_jq(this).attr('id'); // 吹き出し表示時選択肢から取得 if(selectStr === undefined){ selectStr = $tour_module_jq(this).attr('name'); // 吹き出し非表示時または検索時、hiddenから取得 } var inputValue = undefined; // 指定要素の値取得 inputValue = parseInt($tour_module_jq(this).val()); if(isNaN(inputValue)){ inputValue = parseInt($tour_module_jq(this).find('li.mod-current').data('val')); // TOP } if(isNaN(inputValue)){ errNo = 0; // 参加人数入力値不正エラー return false; } // 1行毎の合計 for(var ri = 0; ri < rowMax; ri++){ if(selectStr.indexOf(rowArray[ri].name) >= 0){ for(var ci = 0; ci < columnMax; ci++){ if(selectStr.indexOf(columnArray[ci].name) >= 0){ if (!columnArray[ci].sumColumn) { // 全体の合計をカウント cntPeopleAll += inputValue; if(columnArray[ci].sum){ cntPeople1RoomAdultChild1[ri] += inputValue; } else { // 子供(ベッドなし)+幼児のカウント cntPeople1RoomChild2infant[ri] += inputValue; } } break; } } } } }); // 正常値取得後エラーチェック開始 if(errNo === undefined || !errNo === 0){ // 8人より多い人数を選択 if(cntPeopleAll > maxPeopleAll){ errNo = 1; } // 1部屋に6より多い人数を選択 for(var ri = 0; ri < rowMax; ri++){ if(cntPeople1RoomAdultChild1[ri] > maxPeople1Room){ errNo = 1; isErrorRoomList[ri] = true; } } // 到着地のエリア間共通チェック // 1部屋で子供(ベッドなし)+幼児の人数が2人より多い for (var ri = 0; ri < rowMax; ri++) { if (cntPeople1RoomChild2infant[ri] > maxPeopleNoBed) { errNo = 1; isErrorRoomList[ri] = true; } } // 到着地のエリア毎の参加人数チェック // エリア->(大人+子供(ベッドあり))->(子供(ベッドなし)+幼児)の順でリストからチェックフラグを取得 checkArea = $tour_module_jq('#' + inputId).closest('.form-tabisaku').find('.m_arrArea1').val(); if(checkArea !== undefined){ // エリアで取得 var checkAreaList1 = m_inttourModuleDp_errorCheckNumberOfPeopleArea[checkArea]; if(checkAreaList1 !== undefined){ for(var ri = 0; ri < rowMax; ri++){ var isError = false; // 大人+子供(ベッドあり)で取得(選択している部屋数までチェック) var checkAreaList2 = checkAreaList1[cntPeople1RoomAdultChild1[ri]]; if(checkAreaList2 !== undefined){ // 子供(ベッドなし)+幼児で取得 var checkAreaList3 = checkAreaList2[cntPeople1RoomChild2infant[ri]]; if(checkAreaList3 !== undefined){ isError = checkAreaList3; }else{ isError = true; } }else{ isError = true; } // エラー判定 if(isError){ errNo = 1; isErrorRoomList[ri] = true; } } } } } // エラーチェックリストを呼び出し元input要素に保存 $tour_module_jq('#' + inputId).data().isErrorRoomList = isErrorRoomList; return errNo; } // 海外ツアー旅作の各項目不正値チェック処理 // options:チェック対象の各値 // siteType:各モジュール判定、setParam取得用 // defaults:各モジュールデフォルト値 // return:options(チェック後) function m_inttourModuleDp_incorrectValue(options, siteType, defaults) { // 座席クラス var cfCheck = []; for(cf=0;cf\n'; hiddenHtml += '\n'; hiddenHtml += '\n'; targetForm.append(hiddenHtml); }else{ var depValueYearMonth = ''; var depValueDay = ''; // 値分割 if(!_.isEmpty(depValueYearMonthDay)){ depValueYearMonth = depValueYearMonthDay.slice(0, 6); depValueDay = depValueYearMonthDay.slice(6); } // hiddenに値設定・出力 target.tourCommonModule('createInputHidden', { intPkgDepDateYM : depValueYearMonth, intPkgDepDateD : depValueDay }); } } // 旧BE用固定パラメータ追加、新BEパラメータ排除 if(destination === 'old'){ // 追加 var hiddenHtml = ''; hiddenHtml += '\n'; hiddenHtml += '\n'; targetForm.append(hiddenHtml); // 排除 targetForm.find('input[name="isSearchTransition"]').prop('disabled', true); targetForm.find('input[name="coopSiteCode"]').prop('disabled', true); } else { targetForm.find('input[name="isSearchTransition"]').prop('disabled', false); targetForm.find('input[name="coopSiteCode"]').prop('disabled', false); } } //コースコード入力値チェックと整形、座席クラス設定、遷移先BE決定 // return 'new':新BE、'old':'旧BE' function m_inttourModulePkg_checkCourseCode(target, courseCode, depDateClass){ var destination = 'new'; var new_be = m_tourModuleCommon_ASW_DOMAIN + m_tourModuleCommon_getListValue(m_inttourModulePkg_fromAction_coursecode, 'URL'); var old_be = m_tourModuleCommon_oldBE_DOMAIN + m_tourModuleCommon_getListValue(m_inttourModulePkg_fromAction_oldBE, 'URL'); //form、コースコード入力値を取得 var targetForm = courseCode.closest('form'); var courseCodeValue = courseCode.val(); //1桁目が数字の場合は新BEへ、それ以外は旧BEへ送信する if(/^[0-90-9]/.test(courseCodeValue)){ //新BE targetForm.attr('action', new_be); destination = 'new'; }else{ //旧BE targetForm.attr('action', old_be); destination = 'old'; targetForm.attr('method', 'POST'); } //お客様がハイフンを入れたらパラメータで除外 if(/-/.test(courseCodeValue) || /ー/.test(courseCodeValue) || /-/.test(courseCodeValue)){ courseCodeValue = courseCodeValue.replace(/-/g,'') .replace(/ー/g,'') .replace(/-/g,''); } //全角を半角に変換 if(/[A-Za-z0-9]/.test(courseCodeValue)){ courseCodeValue = courseCodeValue.replace(/[A-Za-z0-9]/g,function(s){ return String.fromCharCode(s.charCodeAt(0)-0xFEE0); }); } //小文字を大文字に変換 courseCodeValue = courseCodeValue.toUpperCase(); //コースコード欄に反映 courseCode.val(courseCodeValue); //新BEの場合はコースコードから座席クラスを取得する if(targetForm.attr('action') === new_be){ //座席クラス var cabinClass = ''; //判定用文字 var digit= ''; //7桁目が存在する場合は7桁目で判定 if(6 < courseCodeValue.length){ digit = courseCodeValue.charAt(6); //7桁目リスト var inttourClassFareListCourseCode = m_inttourModulePkg_classFareListCourseCode; //リストから該当値を検索しセットする cabinClass = inttourClassFareListCourseCode[digit]; //それ以外は3桁目を参照 }else if(2 < courseCodeValue.length){ digit = courseCodeValue.charAt(2); //3桁目リスト var inttourClassFareListCourseCodeBasic = m_inttourModulePkg_classFareListCourseCodeBasic; //リストから該当値を検索しセットする cabinClass = inttourClassFareListCourseCodeBasic[digit]; } //値が取れなかった場合はブランク if(cabinClass === undefined){ cabinClass = ''; } //座席クラス格納用のhidden作成 target.tourCommonModule('createInputHidden', { cabinClassCode : cabinClass }); } return destination; } // 海外ツアーパッケージの各項目不正値チェック処理 // options:チェック対象の各値 // siteType:各モジュール判定、setParam取得用 // defaults:各モジュールデフォルト値 // return:options(チェック後) function m_inttourModulePkg_incorrectValue(options, siteType, defaults) { //座席クラス var cfCheck = []; for(cf=0;cf