jQuery(function ($) { var Simulation = function () { 'use strict'; //コース id this.course_id = 0; //タブレットナビ用 コース複数あった場合の追加数値 this.link_add_num = 0; //タブレットナビ用 オプション無かった場合の数値 this.option_link_add_num = 0; //タブレットナビ用 曜日無かった場合の数値 this.holiday_link_add_num = 0; this.option_checked_array = new Array; // 増税 還元 this.reduction_discount_flg = false; this.reduction_discount_price = null; //コースid存在する場合はご利用曜日をdisabled if ($("#course_id").size()) { $("input[name='holiday']:radio").attr("disabled", "disabled"); $("#holiday").addClass("off"); this.link_add_num = 1; } //オプション存在確認 if ($("#options").size() === 0) { this.option_link_add_num = 1; } //曜日存在確認 if ($("#holiday").size() === 0) { this.holiday_link_add_num = 1; } //コンビオプション if ($(':hidden[name="option_combi"]').size()) { this.option_combi = JSON.parse($(':hidden[name="option_combi"]').val()); } //セットオプション if ($(':hidden[name="option_set_discount"]').size()) { this.option_set_discount_obj = JSON.parse($(':hidden[name="option_set_discount"]').val()); } //タブレットナビ css //this.nav_width = Math.floor(100 / $("#sim_navigation li").length) + "%"; //$("#sim_navigation li a, #sim_navigation li b").css("width",nav_count); } //--------------------------------------------------- //リセット //--------------------------------------------------- Simulation.prototype.formReset = function (skip) { 'use strict'; var holiday_id = "#holiday,"; var holiday_label = "#holiday label,"; var holiday_radio = "#holiday :radio,"; var time_id = "#time,"; var time_radio = "#time :radio,"; var time_label = "#time label,"; var course_id_txt = ",input[name=course_id]"; //複数コースがある場合 if (this.link_add_num === 0) { holiday_radio = ""; holiday_id = ""; } //曜日スキップの場合 //console.log(holiday_skip); if (holiday_skip !== "") { time_id = ""; time_radio = ""; time_label = ""; } //コース切り替え時 if (skip === "course_skip") { holiday_id = ""; holiday_label = ""; course_id_txt = ""; holiday_radio = ""; $('#simulation input:radio').each(function (index) { if ($(this).attr('name') === "course_id") { return true; } $(this).val([]); }); } //曜日切り替え時 else if (skip === "holiday_skip") { holiday_id = ""; holiday_label = ""; holiday_radio = ""; course_id_txt = ""; time_id = ""; $('#simulation input:radio').each(function (index) { if ($(this).attr('name') === "holiday" || $(this).attr('name') === "course_id") { return true; } $(this).val([]); }); } else { //$('input:checked, input:radio').attr('checked', false); $("#simulation").find("select").val("").end().find(":checked").prop("checked", false); $('#simulation input:checkbox, #simulation input:radio').prop('disabled', false); if (sim_mode === "tablet") { $(".course_id_nav").html("コース"); } } $('input:checkbox').removeAttr('checked'); // $(".nomination_type_checkbox").each(function(index) { // resetNominationTypeItem(index); // }) $('.course select ,#discount select, select[name^=option_quantity_]').prop('selectedIndex', 0); $("input[name='discount']").val(""); $(holiday_radio + time_radio + '.course .course_time, #discount select, #nomination :radio, #nomination_type :radio, #nomination_type :input, #options :checkbox, select[name^=option_quantity_], select[name^=nomination_type_quantity_]').prop("disabled", "disabled"); $(holiday_label + time_label + '#nomination label, #options label').removeClass("checked"); $(holiday_id + time_id + '#nomination, #options, #nomination_type').addClass("off"); $(".option_off :button, #course_id_btn, #holiday_btn, #time_btn, #course_btn, #nomination_btn").css({ opacity: 0 }); $("#discount option").each(function (index) { if ($(this).text().indexOf('指名料') != -1) { $(this).attr("disabled", "disabled"); } }); $(".option_result, .course_result, .nomination_txt, .nomination_type_txt, .nomination_type_result").text(""); $(".priceBox .card").text(""); $(".outof").val(""); $(".change").text("0"); //ナビ部分 if ($("#holiday :radio:checked").val() === undefined) { $(".holiday_nav").html("曜日"); } $(".time_nav").html("時間帯"); $(".nomination_nav").html("指名"); $(".course_nav").html("コース時間"); $(".option_nav").html("オプション"); $(".discount_nav").html("割引"); $(".total_nav").html("合計"); /* $("#sim_navigation li b, #sim_navigation li a").css({ "width":this.nav_width, }); */ } //--------------------------------------------------- //ダブル・トリプルコース 組み合せ内訳 表示 //--------------------------------------------------- Simulation.prototype.breakdown = function (list) { 'use strict'; var str = ""; var minute = $("select[name='course'] option:selected").text() + " "; if (list.length >= 2) { str += "
"; str += "
" + minute + "指名料を加算したコース組み合せ一覧
"; str += ""; str += ""; str += ""; str += ""; for (var key in list) { var course_name = list[key]["name"].replace(/-/g, "分+") + "分"; str += ""; str += ""; str += ""; str += ""; str += ""; str += ""; } str += "
組み合せコース料金指名料合計
" + course_name + "" + list[key]["course"] + "円" + list[key]["nomination"] + "円" + list[key]["total"] + "円
"; str += "
"; } $("#simulation .breakdown").html(str); } //,追加 Simulation.prototype.addFigure = function (str) { var num = new String(str).replace(/,/g, ""); while (num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"))); return num; } //,削除 Simulation.prototype.removeFigure = function (str) { var num = new String(str).replace(/,/g, ""); num = Number(num); return num; } //消費税 Simulation.prototype.cutTax = function (str) { var num = new String(str).slice(-2); num = Number(num); return num; } //オプションリセット Simulation.prototype.optionOff = function () { $('#option :checked').attr("checked", false); } //--------------------------------------------------- //計算メソッド //--------------------------------------------------- Simulation.prototype.cheangePrice = function () { 'use strict'; var holidayVal = 0; if ($('#holiday :radio:checked').val() === "holiday") { holidayVal = holiday_add_price; } var time_add_price = $(':hidden[name="time_add_price"]').val(); var timeVal = $('#time :radio:checked').val(); var nominationPrice = 0; var nominationTypePrice = 0; var courseName = ""; var optionsPrice = 0; var coursePrice = 0; var sum_price = []; var discountVal = 0; this.course_id = $("input[name='course_id']:checked").val() ? $("input[name='course_id']:checked").val() : 0; if (typeof nomination_prices !== 'undefined' && Array.isArray(nomination_prices)) { if (nomination_prices[this.course_id]) { nomination_price = nomination_prices[this.course_id]; } } // 指名料計算 var nominationVal = 0; var nominationTypeCheckboxVal = $(".nomination_type_checkbox:checked").val(); var nominationTypeRadioVal = $(".nomination_type_radio:checked").val(); // 複数料金タイプ if (typeof nomination_type !== 'undefined' && nomination_type.length) { // radio if (nominationTypeRadioVal) { nominationVal = nomination_type[nominationTypeRadioVal]['price']; } // checkbox if (nominationTypeCheckboxVal) { $("input[name^='nomination_type']:checked").each(function (index) { var val = $(this).val(); var nomination_type_quantity_num = $("select[name=nomination_type_quantity_" + val + "]").val(); var price = nomination_type[$(this).val()]['price']; if (nomination_type_quantity_num >= 2) { price = price * nomination_type_quantity_num; } nominationVal += parseInt(price) }); } } else { // 単一指名料 nominationVal = $("#nomination :radio:checked").val() * nomination_price ? $("#nomination :radio:checked").val() * nomination_price : 0; } var set_option_discount = 0; //割引 if ($("select[name='discount']").val()) { discountVal = $('select[name="discount"]').val(); var discount_min = ''; if (discountVal > 1) { discount_min = '-'; } } else if ($("input[name='discount']").val()) { discountVal = $("input[name='discount']").val(); discountVal = discountVal.replace(/,/g, ""); $("input[name='discount']").val(discountVal); var discount_min = ''; if (discountVal > 1) { discount_min = '-'; } } else { var discount_min = ''; } if ($("select[name='course']").val() || $("input[name='course']:checked").val()) { var courseVal = $('select[name="course"]').val(); if ($('input[name="course"]:checked').val()) { courseVal = $('input[name="course"]:checked').val(); } var courseValArr = courseVal.split(","); //セレクトから組み合わせ別ベース料金オブジェクト作成 var base_price = {}; for (var key in courseValArr) { var cs_list = courseValArr[key].split("-"); var list_key = courseValArr[key]; var list_price = 0; for (var skey in cs_list) { list_price += parseInt(courseJson[this.course_id][cs_list[skey]]); } base_price[list_key] = list_price; } //時間帯、指名料を計算した料金オブジェクト作成 for (var rkey in base_price) { //コース本数 var cos_count = rkey.split("-").length ? rkey.split("-").length : 1; //曜日 var sum_hol = holidayVal * cos_count; //時間帯 var time_price = 0; var add_course_time = $(':hidden[name="add_course_time"]').val(); if (add_course_time === "true") { time_price = timeVal; } else { time_price = timeVal * time_add_price; } var sum_time = time_price * cos_count; //指名料 ダブルコース以上の計算を追加 var sum_nomination = nominationVal * cos_count; //セット sum_price.push({ name: rkey, course_count: cos_count, holiday: sum_hol, time: sum_time, nomination: sum_nomination, course: parseInt(base_price[rkey]) + parseInt(sum_hol) + parseInt(sum_time), total: parseInt(base_price[rkey]) + parseInt(sum_hol) + parseInt(sum_time) + parseInt(sum_nomination) }); //sum_price[rkey] = parseInt(base_price[rkey]) + parseInt(sum_hol) + parseInt(sum_time) + parseInt(sum_nomination); } //安い順に並び替え sum_price.sort(function (a, b) { if (a.total < b.total) return -1; if (a.total > b.total) return 1; return 0; }); var holidayPlice = sum_price[0]["holiday"]; coursePrice = parseInt(sum_price[0]["course"]); //料金部分コース内訳 //ダブル以上の場合 var price_text = ""; if (sum_price.length >= 2) { price_text = "最安値組合せ"; } courseName = price_text + "(" + sum_price[0]["name"].replace(/-/g, "分+") + "分)"; } else { coursePrice = 0; $('.nomination_txt').text(''); } var nom_txt = $('.nomination_txt'); //指名料設定 var nom_nop_txt = ""; if (nominationVal !== undefined && cos_count !== undefined) { nominationPrice = sum_price[0]["nomination"]; var nomination_price_txt = nomination_price; if (typeof nomination_type !== 'undefined' && nomination_type.length) { nomination_price_txt = nominationVal; } if (nominationVal != 0) { if ($("#nomination :radio:checked").val() >= 2) { nom_nop_txt = " × " + $("#nomination :radio:checked").val() + "名分 "; } if (cos_count != 1) { $('.nomination_txt').text('(' + nomination_price_txt + '円 × ' + sum_price[0]["course_count"] + nom_nop_txt + ')'); } else { if (nom_nop_txt !== "") { nom_nop_txt = "(" + nomination_price_txt + '円 ' + nom_nop_txt + ")"; } nom_txt.text(nom_nop_txt); } } else { nom_txt.text(''); } } $(".option_input:checked").each(function (index) { }); //指名複数料金タイプ 内訳 var nomination_type_result_text = ''; if (nominationTypeCheckboxVal) { nomination_type_result_text = makeCheckedNominationTypeResultText(".nomination_type_checkbox:checked"); } if (nominationTypeRadioVal) { nomination_type_result_text = makeCheckedNominationTypeResultText(".nomination_type_radio:checked"); } if (nomination_type_result_text) { $(".nomination_type_result").text("("+nomination_type_result_text+")"); } else { $(".nomination_type_result").text(""); } function makeCheckedNominationTypeResultText(elem) { var result = ""; var nomination_type_result_array = []; if ($(elem).val()) { $(elem).each(function (index) { //個数チェック var nomination_type_result_text = ""; var nomination_type_quantity_num = $("select[name=nomination_type_quantity_" + $(this).val() + "]").val(); if (nomination_type_quantity_num >= 2) { nomination_type_result_text = "×" + nomination_type_quantity_num; } else { nomination_type_result_text = ""; } nomination_type_result_array.push($(this).next().text() + nomination_type_result_text); }); result = nomination_type_result_array.join("/") } return result; } //オプション内訳 var option_result_array = new Array(); var quantity_num = 1; var option_result_text = ""; var option_checkd_value = new Array(); if ($(".option_input:checked").val()) { //$("#options :checkbox:checked").each(function(index){ $(".option_input:checked").each(function (index) { //個数チェック quantity_num = $("select[name=option_quantity_" + $(this).val() + "]").val(); if (quantity_num >= 2) { option_result_text = "×" + quantity_num; } else { option_result_text = ""; } option_result_array.push($(this).next().text() + option_result_text); //値セット if (sim.option_set_discount_obj) { option_checkd_value.push($(this).val()); } }); //セットオプション割引設定 if (sim.option_set_discount_obj) { set_option_discount = sim.makeSetOptionDiscount(option_checkd_value); } $(".option_result").text("(" + option_result_array.join("/") + ")"); } else { $(".option_result").text(""); } //指名料割引処理 if (nominationPrice < 1) { $("#discount option").each(function (index) { if ($(this).text().indexOf('指名料') != -1) { $(this).attr("disabled", "disabled"); } }); //alert($('select[name="discount"] option:selected').text()); if ($('select[name="discount"] option:selected').text().indexOf('指名料') != -1) { $(',#discount select').prop('selectedIndex', 0); discountVal = 0; } } else { $("#discount option").each(function (index) { $(this).removeAttr("disabled", "disabled"); }); } //オプション料金 optionsPrice = 0; //var quantity = 1; var optionsFlg = false; var link_num = sim.link_add_num + 4 - sim.holiday_link_add_num; $('.option_item :checkbox:checked').each(function () { var quantity = 1; //数量 if ($("select[name=option_quantity_" + $(this).val() + "]").size()) { quantity = $("select[name=option_quantity_" + $(this).val() + "]").val(); } if (quantity !== undefined) { quantity = quantity; } else { quantity = 1; } optionsPrice = optionsPrice + sim.removeFigure($(this).parent("label").find(".optionPrice").text()) * quantity; optionsFlg = true; $(".option_nav").html("オプション" + sim.addFigure(optionsPrice) + "円"); }); //ナビ部分 if (isNaN(coursePrice)) { coursePrice = 0; } //---------------------- //結果表示 //---------------------- var subTotal = parseInt(coursePrice) + parseInt(optionsPrice) + parseInt(nominationPrice) - parseInt(discountVal) - parseInt(set_option_discount); //var subTotal = parseInt(coursePrice) + parseInt(optionsPrice) + parseInt(nominationPrice) - parseInt(discountVal); var tax = Math.floor(subTotal * tax_num); var total = subTotal + tax; var cut = sim.cutTax(total); var cut_min = ""; if (cut > 1) { cut_min = '-'; } total -= cut; //数字設定 $(".course_result").text(courseName); $(".nominationTotal").text(sim.addFigure(nominationPrice)); $(".courseTotal").text(sim.addFigure(coursePrice)); $(".optionTotal1").text(sim.addFigure(optionsPrice)); // $(".subTotal").text(sim.addFigure(subTotal)); // $(".tax").text(sim.addFigure(tax)); if (sim.option_set_discount_obj) { var option_cut_min = ""; if (set_option_discount > 1) { option_cut_min = '-'; } $(".option_discount").text(option_cut_min + set_option_discount); } $(".cut").text(cut_min + cut); $(".discount_text").text(discount_min + sim.addFigure(discountVal)); $(".add_total").text(sim.addFigure(subTotal + tax)); var total_price = null; total_price = subTotal; // if (typeof reduction_discount_num !== 'undefined') { // total_price = subTotal + tax; // } else { // total_price = subTotal + tax - cut; // } $(".total").text(sim.addFigure(total_price)); // 増税 還元割引 if (total_price && typeof reduction_discount_num !== 'undefined') { var reduction_percent = tax_num - reduction_discount_num; var reduction_discount = subTotal * reduction_percent; var cut_reduction = sim.cutTax(subTotal + reduction_discount); sim.reduction_discount_price = subTotal + reduction_discount - cut_reduction; $(".reduction_discount_price").text(sim.addFigure(sim.reduction_discount_price)); } var reference_price = total_price; if (sim.reduction_discount_price) { reference_price = sim.reduction_discount_price; } //ナビ部分 合計 if (coursePrice > 0) { let t_num = 6; if (discount_hidden) { t_num = 5; } link_num = sim.link_add_num + t_num - sim.option_link_add_num - sim.holiday_link_add_num; $(".total_nav").html("合計" + sim.addFigure(reference_price) + "円"); } if (subTotal != 0) { $(".priceBox dd, priceBox .price_text").css({ opacity: 0 }); $(".priceBox dd, .priceBox .price_text").animate({ opacity: 1 }, 700); $(".priceBox .price_text").text('合計金額が出ました') } else { $(".priceBox .price_text").text('上記選択フォームを選択すると
合計金額を表示します') } if ($("#options :checkbox:checked").val()) { //$(".option_off").css({opacity:0}); $(".option_off :button").animate({ opacity: 1 }, 300); } else { $(".option_off :button").animate({ opacity: 0 }, 300); } var card = reference_price + reference_price * 0.05; card = Math.floor(card); $(".priceBox .card").text(sim.addFigure(card)); //コース内訳 sim.breakdown(sum_price); //お預かりの処理 $("input[name='outof']").on('change blur', function () { var outof = $(this).val(); outof = outof.replace(/,/g, ""); $(this).val(sim.addFigure(outof)); var change = outof - reference_price; $(".change").text(sim.addFigure(change)); }); $("input[name='outof']").on('focus', function () { var outof = $(this).val(); outof = outof.replace(/,/g, ""); $(this).val(outof); $(this).select(); }); }; //------------------------------------------------------------- //インスタンス化と各イベントハンドラー //------------------------------------------------------------- var sim = new Simulation(); sim.formReset(); //コースid チェンジ $("input[name='course_id']:radio").change(function () { if (holiday_skip === "1") { sim.getSimulationHtml(); sim.timeAsync(); $("#time :radio").removeAttr("disabled"); $("#time").removeClass("off"); } else { sim.getSimulationHtml(); $("#holiday :radio").removeAttr("disabled"); $("#holiday").removeClass("off"); } $("#course_id_btn").animate({ opacity: 1 }, 400); $(".course_id_nav").html("コース" + $(this).parent().text() + ""); sim.formReset("course_skip"); sim.cheangePrice(); $(".option_nav").html("オプション"); //$('#options :checkbox, select[name^=option_quantity_]').prop("disabled", "disabled"); }); //----------------- //曜日 //----------------- $("#holiday").on('change', '.holiday_radio', function () { sim.timeAsync(); sim.formReset("holiday_skip"); $("#time :radio").removeAttr("disabled"); sim.cheangePrice(); $("#time").removeClass("off"); $("#holiday_btn").animate({ opacity: 1 }, 400); $(".holiday_nav").html("曜日" + $("#holiday :radio:checked").parent().text() + ""); }); //----------------- //時間帯 //----------------- // $("#time").on('click','.time_radio',function(){ $("#time").on('change', '.time_radio', function () { link_num = sim.link_add_num + 1 - sim.holiday_link_add_num; $(".time_nav").html("時間帯" + $("#time :radio:checked").parent().text() + ""); //$(".course select").removeAttr("disabled"); $("#nomination :radio").removeAttr("disabled"); $("#nomination_type :radio").removeAttr("disabled"); $("#nomination_type :checkbox").removeAttr("disabled"); $("#nomination").removeClass("off"); $("#nomination_type").removeClass("off"); $("#time_btn").animate({ opacity: 1 }, 400); sim.cheangePrice(); }); //----------------- //指名 //----------------- // $("#nomination").on('click','.nomination_label',function(){ $("#nomination").on('change', '.nomination_label', function () { changeNomination(); }); function changeNomination() { $(".course select").removeAttr("disabled"); autoChangeCourse(); link_num = sim.link_add_num + 2 - sim.holiday_link_add_num; $(".nomination_nav").html("指名" + $("#nomination :radio:checked").parent().text() + ""); sim.cheangePrice(); $("#nomination_btn").animate({ opacity: 1 }, 400); } //----------------- //指名 料金複数タイプ //----------------- // nomination type radio $("#nomination_type").on('change', '.nomination_type_radio', function () { $(".course select").removeAttr("disabled"); autoChangeCourse(); link_num = sim.link_add_num + 2 - sim.holiday_link_add_num; $(".nomination_nav").html("指名" + $("#nomination_type :radio:checked").parent().text() + ""); sim.cheangePrice(); $("#nomination_type_btn").animate({ opacity: 1 }, 400); }); // nomination type checkbox $("#nomination_type").on('change', '.nomination_type_checkbox', function () { $(".course select").removeAttr("disabled"); autoChangeCourse(); sim.option_checked_array = sim.makeInputArray(".nomination_type_item :checkbox:checked"); if ($(this).prop("checked")) { // 指名する/しないでcheckbox制御 if ($(this).val() == 0) { $(".nomination_type_checkbox").each(function(index) { if (index != 0) { resetNominationTypeItem(index) } }) } else { resetNominationTypeItem(0) } $("select[name=nomination_type_quantity_" + $(this).val() + "]").removeAttr("disabled"); $(this).parent("label").next(".quantity_cont").removeClass("off"); } else { $("select[name=nomination_type_quantity_" + $(this).val() + "]").attr("disabled", "disabled"); $(".option_result").text(""); } // nav text var link_num = sim.link_add_num + 2 - sim.holiday_link_add_num; var nav_text = ""; $("input[name^='nomination_type']:checked").each(function(index) { nav_text += nomination_type[$(this).val()]["name"]+"
"; }); $(".nomination_nav").html("指名" + nav_text + ""); sim.cheangePrice(); $("#nomination_type_btn").animate({ opacity: 1 }, 400); }); $(".nomination_type_item").on("change", 'select[name^=nomination_type_quantity_]', function () { sim.cheangePrice(); }); function resetNominationTypeItem(index) { var nomination_type_name = "nomination_type["+index+"]"; $('input[name="'+nomination_type_name+'"]').prop("checked", false); $("select[name=nomination_type_quantity_" + index + "]").attr("disabled", "disabled"); $(".nomination_type_label_" + index + "").next(".quantity_cont").addClass("off"); } /** * 時間帯 一つなら自動セレクト */ function autoChangeTime() { if (course_time[sim.course_id].length === 1) { $('.time_radio').first().click(); if (sim_mode !== 'tablet' & brand_nomination_hidden) { changeNomination(); } } } /** * シングル 1コースのみ場合は自動セレクト */ function autoChangeCourse() { if (Object.keys(courseJson[sim.course_id]).length == 1 && course_pattern_break[sim.course_id]) { // タブレット $('.course .course_radio').first().click(); // pc if (sim_mode == 'pc') { $(".course_time").val(Object.keys(courseJson[sim.course_id])); changeCourse() } } } //----------------- //コース時間 //----------------- $(".course").on('change', '.course_time', function () { changeCourse(); }); function changeCourse() { link_num = sim.link_add_num + 3 - sim.holiday_link_add_num; $(".course_nav").html("コース時間" + $('select[name="course"] option:selected').text() + ""); $("#nomination :radio, #options :checkbox").removeAttr("disabled"); $("#nomination, #options").removeClass("off"); $("#course_btn").animate({ opacity: 1 }, 400); $(".shop_sim .arrow").animate({ opacity: 1 }, 400); var no_discount = $(':hidden[name="no_discount"]').val(); if (no_discount === undefined) { $("#discount select").removeAttr("disabled"); $(".discount_title").text("割引"); } else { $(".discount_title").text("割引不可"); $(".discount_nav").html("割引不可"); } sim.cheangePrice(); } // $(".course").on('change','.course_radio',function(){ $(".course").on('click', '.course_radio', function () { link_num = sim.link_add_num + 3 - sim.holiday_link_add_num; $(".course_nav").html("コース時間" + $(this).parent().text() + ""); $("#nomination :radio, #options :checkbox").removeAttr("disabled"); $("#nomination, #options").removeClass("off"); $("#course_btn").animate({ opacity: 1 }, 400); $(".shop_sim .arrow").animate({ opacity: 1 }, 400); var no_discount = $(':hidden[name="no_discount"]').val(); if (no_discount === undefined) { $("#discount select").removeAttr("disabled"); $(".discount_title").text("割引"); } else { $(".discount_title").text("割引不可"); $(".discount_nav").html("割引不可"); } sim.cheangePrice(); }); //----------------- //オプション //----------------- $(".option_item").on('change', '.option_input', function () { //コンビオプション処理 if (sim.option_combi) { sim.option_combi_checker($(this)); } //タブレットnav tabletOptionNavChange(this); //link_num = sim.link_add_num + 4 - sim.holiday_link_add_num; sim.option_checked_array = sim.makeInputArray(".option_item :checkbox:checked"); if ($(this).prop("checked")) { $("select[name=option_quantity_" + $(this).val() + "]").removeAttr("disabled"); $(this).parent("label").next(".quantity_cont").removeClass("off"); } else { $("select[name=option_quantity_" + $(this).val() + "]").attr("disabled", "disabled"); $(this).parent("label").next(".quantity_cont").addClass("off"); //$(".option_nav").html("オプション0円"); $(".option_result").text(""); } //セットオプションのcheckedを一旦はずす if (sim.option_set_discount_obj) { $(".set_option_radio").prop("checked", false); sim.setOptionChecked(); } sim.cheangePrice(); }); $(".option_item").on("change", 'select[name^=option_quantity]', function () { sim.cheangePrice(); }); $("#nomination :radio").on("click", ".nomination_label", function () { $("#nomination_btn").animate({ opacity: 1 }, 400); }); //----------------------- //タブレットのオプションnav 切り替え //----------------------- var tabletOptionNavChange = function (that) { var link_num = sim.link_add_num + 4 - sim.holiday_link_add_num; if ($(that).prop("checked") === false || $(that).attr("name") === "option_off") { $(".option_nav").html("オプション0円"); } } //----------------------- //セットオプション 重複不可の処理のクリック //----------------------- $('[class^=input_only_option_set]').on("click", function () { tabletOptionNavChange(this); var list_array = $(this).val().split("-"); var checked_name = $(this).attr("name"); var checked_class = $(this).attr("class").split(" ")[0]; var checked_id = $(this).attr("id"); var all_list_array = new Array(); $('.' + checked_class).each(function () { var all_list = $(this).val().split("-"); all_list_array = all_list_array.concat(all_list); }); //オプションアイテムのチェックを全て外す for (var key in all_list_array) { $('.option_num_' + all_list_array[key]).prop("checked", false); } if ($(this).prop('checked')) { //セットcheckboxをいったんすべて解除 $('.' + checked_class).prop("checked", false); //自分だけchecked $(this).prop("checked", true); //セットオプションをchecked for (var key in list_array) { $('.option_num_' + list_array[key]).prop("checked", true); } } sim.cheangePrice(); }); //----------------------- //セットオプション 重複制約なし のクリック //----------------------- $(':input[name^=option_set]').on("click", function () { var list_array = $(this).val().split("-"); tabletOptionNavChange(this); if ($(this).prop('checked')) { //セットオプションをchecked for (var key in list_array) { $('.option_num_' + list_array[key]).prop("checked", true); } } else { for (var key in list_array) { $('.option_num_' + list_array[key]).prop("checked", false); } } sim.cheangePrice(); }); //----------------------- //セットオプション 共通 //----------------------- //$(':input[name^=option_set]').on("click",function(){ //link_num = sim.link_add_num + 4 - sim.holiday_link_add_num; // $(".option_nav").html("オプション0円"); //----------------- //割引 //----------------- $("select[name='discount'],input[name='discount']").change(function () { sim.setDiscountPrice(); /* sim.cheangePrice(); link_num = sim.link_add_num + 5 - sim.option_link_add_num - sim.holiday_link_add_num; var d_price = ""; if($('select[name="discount"] option:selected').text()){ d_price = $('select[name="discount"] option:selected').text(); }else if($("input[name='discount']").val()){ d_price = sim.addFigure($("input[name='discount']").val())+"円"; } $(".discount_nav").html("割引"+ d_price +""); */ }); Simulation.prototype.setDiscountPrice = function (list) { 'use strict'; sim.cheangePrice(); link_num = sim.link_add_num + 5 - sim.option_link_add_num - sim.holiday_link_add_num; var d_price = ""; if ($('select[name="discount"] option:selected').text()) { d_price = $('select[name="discount"] option:selected').text(); } else if ($("input[name='discount']").val()) { d_price = sim.addFigure($("input[name='discount']").val()) + "円"; } $(".discount_nav").html("割引" + d_price + ""); } //----------------- //割引簡単入力ボタンがあるときの処理 //----------------- $("button[name='discount_btn']").on("click", function () { var nowdiscount = Number($("input[name='discount']").val()); nowdiscount += Number($(this).val()); $("input[name='discount']").val(nowdiscount); sim.setDiscountPrice(); }); $("button[name='discount_reset']").on("click", function () { $("input[name='discount']").val(""); sim.setDiscountPrice(); }); //----------------- //オプションのチェックを外す //----------------- $(".option_off :button").click(function () { $('#options :checkbox').attr("checked", false); $('#options :checkbox').attr("disabled", false); $('#options :checkbox').parent().removeClass("off"); $('#options label').removeClass("checked"); $(".option_result").text(""); sim.cheangePrice(); tabletOptionNavChange(this); }); //----------------- // 増税 還元 //----------------- $("input[name='reduction_discount']").change(function (val) { $('.reduction_discount').toggle(); if (sim.reduction_discount_price) { sim.reduction_discount_price = null; } if (sim.reduction_discount_flg) { sim.reduction_discount_flg = false; $("input[name='reduction_discount']").parent().removeClass('active'); } else { sim.reduction_discount_flg = true; $("input[name='reduction_discount']").parent().addClass('active'); } sim.cheangePrice(); }); /*----------------------------------- やり直すボタン ------------------------------------*/ $('.sim_reset').on("click", function () { if (sim_mode === "ipn") { if (window.confirm('やり直しますか?')) { sim_slider.setNextPanel(0); sim_slider.updateClass($(this)); sim.formReset(); nominationPrice = 0; sim.cheangePrice(); } else { window.alert('キャンセルしました'); return false; } } else { sim_slider.setNextPanel(0); sim_slider.updateClass($(this)); sim.formReset(); nominationPrice = 0; sim.cheangePrice(); sim.reduction_discount_flg = false; sim.reduction_discount_price = null; $(".reduction_discount").hide(); $("input[name='reduction_discount']").parent().removeClass('active'); } }); /*----------------------------------- カードの場合の表示ボタン ------------------------------------*/ $('.sim_card').on("click", function () { if (sim_mode !== "tablet") { return false; } $(".card_tr").toggle(); $(".outof_tr").toggle(); $(".change_tr").toggle(); return false; }); /*----------------------------------- タブレット nav ------------------------------------*/ $(".total_nav").on("click", ".total_nav_link", function () { $(".total-panel").addClass("panel-active"); }); $("#sim_navigation li").on("click", ".nav_link", function () { $(".total-panel").removeClass("panel-active"); }); $("#holiday :radio, #time :radio, #options :checkbox, select[name='course'], input[name='course'], select[name^=option_quantity_]").change(sim.cheangePrice); /*----------------------------------- 各項目 ajax ------------------------------------*/ Simulation.prototype.getSimulationHtml = function () { this.course_id = $("input[name='course_id']:checked").val(); var file = "index.php"; var type = ''; var request = [ { url: file, params: { "course_id": this.course_id, mode: "get_html", type: "hidden", "sim_mode": sim_mode } }, { url: file, params: { "course_id": this.course_id, mode: "get_html", type: "course", "sim_mode": sim_mode } }, { url: file, params: { "course_id": this.course_id, mode: "get_html", type: "holiday", "sim_mode": sim_mode } }, //{ url: file, params: { "course_id":course_id, mode:"get_html", type:"time","sim_mode":sim_mode} }, { url: file, params: { "course_id": this.course_id, mode: "get_html", type: "option", "sim_mode": sim_mode } }, { url: file, params: { "course_id": this.course_id, mode: "get_html", type: "nomination", "sim_mode": sim_mode } }, { url: file, params: { "course_id": this.course_id, mode: "get_html", type: "nominationType", "sim_mode": sim_mode, "test": 1 } } ]; var jqXHRList = []; for (var i = 0; i <= request.length - 1; i++) { var forCount = i; (function (i) { var target = request[i].url; var paramdata = request[i].params; var type = request[i].params.type; var target_html = $("#" + type + "_loader"); $.ajax({ url: target, data: paramdata, type: 'GET', dataType: 'html', success: function (res) { $(target_html).html(res); $("#simulation_loader").css("opacity", 0); $("#simulation_loader").animate({ opacity: 1 }, 400); $('#nomination :radio, #nomination_type :radio, #nomination_type :checkbox, #options :checkbox, .course .course_time, select[name^=option_quantity_], select[name^=nomination_type_quantity_]').prop("disabled", "disabled"); } }); })(forCount); } } /*----------------------------------- 時間帯は個別にajax ------------------------------------*/ Simulation.prototype.timeAsync = function () { var holiday_val = $("#holiday :radio:checked").val(); $.ajax({ url: "index.php", type: "GET", data: "mode=get_time&holiday=" + holiday_val + "&sim_mode=" + sim_mode + "&course_id=" + this.course_id, datatype: "html", timeout: 10000, error: function () { alert("読み込みが失敗しました"); }, success: function (data) { $("#time").html(data); $("#simulation_loader").css("opacity", 0); $("#simulation_loader").animate({ opacity: 1 }, 400); autoChangeTime(); }, }); } /** *-------------------------------------------- * コンビオプション処理 * * @param object val * * @return void *-------------------------------------------- */ Simulation.prototype.option_combi_checker = function (val) { var that = this; var value_num = $(val).attr("value"); if (that.option_combi[value_num]) { for (var index in that.option_combi[value_num]) { var num = that.option_combi[value_num][index]; var elem = ".option_num_" + num; if ($(val).prop("checked")) { $(elem).prop("checked", false); $(elem).attr("disabled", "disabled"); } else { $(elem).attr("disabled", false); } $(elem).parent().toggleClass("off"); } } } /** *-------------------------------------------- * セットオプションの割引金額を作成し返す * * @param array arr 選択されたオプションの配列 * * @return number *-------------------------------------------- */ Simulation.prototype.makeSetOptionDiscount = function (arr) { //セットオプションパターン var sort_option_pattern = sim.makeOptionPattern(arr); //セットオプション割引設定 var option_set_discount = 0; for (var prop in sort_option_pattern) { if (this.option_set_discount_obj[sort_option_pattern[prop]]) { //割引料金 option_set_discount += this.option_set_discount_obj[sort_option_pattern[prop]]; } } return option_set_discount; } var checkedTrue = function (param) { $($(param)).prop("checked", true); } /** *-------------------------------------------- * 引数のinput)を配列にして返す * * @param string input * * @return array *-------------------------------------------- */ Simulation.prototype.makeInputArray = function (input) { var obj = new Array(); $(input).each(function (index) { obj.push($(this).val()); }); return obj; } /** *-------------------------------------------- * セットオプション用 個別オプションのクリック セットあるならchekced * * @param array arr 選択されたオプションの配列 * * @return number *-------------------------------------------- */ Simulation.prototype.setOptionChecked = function () { var sort_option_pattern = sim.makeOptionPattern(sim.option_checked_array); for (var prop in sort_option_pattern) { var timer; var set_str; if (this.option_set_discount_obj[sort_option_pattern[prop]]) { //セットオプションの組み合わせがあればchekced if ($(".set_option_" + sort_option_pattern[prop]).prop("checked") === false) { clearTimeout(timer); set_str = ".set_option_" + sort_option_pattern[prop]; checkedTrue(set_str); } } } } /** *-------------------------------------------- * 選択されたオプションをsetオプション比較用配列を作成 * * @param array arr * * @return array *-------------------------------------------- */ Simulation.prototype.makeOptionPattern = function (arr) { var option_pattern = new Array() for (var prop in this.option_set_discount_obj) { var len = new Number(); len = str_counter(prop, "-"); //各セット組み合わせ内訳個数を自由にできるようにconcat option_pattern = option_pattern.concat(this.makeArrayPattern(arr, len)); } //セットオプションパターンから重複取り除く var sort_option_pattern = option_pattern.filter(function (x, i, self) { return self.indexOf(x) === i; }); return sort_option_pattern; } /** *-------------------------------------------- * 引数の配列を総組み合わせ作成 * * @param array balls * @param number len * * @return array *-------------------------------------------- */ Simulation.prototype.makeArrayPattern = function (balls, len) { var arrs, i, j, zensu, results, parts; arrs = []; zensu = balls.length; if (zensu < len) { return; } else if (len == 1) { for (i = 0; i < zensu; i++) { arrs[i] = [balls[i]]; } } else { for (i = 0; i < zensu; i++) { parts = balls.slice(0); parts.splice(i, 1)[0]; results = this.makeArrayPattern(parts, len - 1); for (j = 0; j < results.length; j++) { //arrs.push([balls[i]].concat(results[j])); arrs.push([balls[i]] + "-" + results[j]); } } } return arrs; } /** *-------------------------------------------- * 文字カウンター * * @param string str * @param string seq * * @return int *-------------------------------------------- */ var str_counter = function (str, seq) { return str.split(seq).length; } });