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 += "" + course_name + " | ";
str += "" + list[key]["course"] + "円 | ";
str += "" + list[key]["nomination"] + "円 | ";
str += "" + list[key]["total"] + "円 | ";
str += "
";
}
str += "
";
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;
}
});