var option_add = false; var supply_add = false; var isAndroid = (navigator.userAgent.toLowerCase().indexOf("android") > -1); var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); $(function() { // 선택옵션 /* 가상커서 ctrl keyup 이베트 대응 */ /* $(document).on("keyup", "select.it_option", function(e) { var sel_count = $("select.it_option").size(); var idx = $("select.it_option").index($(this)); var code = e.keyCode; var val = $(this).val(); option_add = false; if(code == 17 && sel_count == idx + 1) { if(val == "") return; sel_option_process(true); } }); */ /* 키보드 접근 후 옵션 선택 Enter keydown 이벤트 대응 */ $(document).on("keydown", "select.it_option", function(e) { var sel_count = $("select.it_option").size(); var idx = $("select.it_option").index($(this)); var code = e.keyCode; var val = $(this).val(); option_add = false; if(code == 13 && sel_count == idx + 1) { if(val == "") return; sel_option_process(true); } }); if(isAndroid) { $(document).on("touchend", "select.it_option", function() { option_add = true; }); } else { var it_option_events = isSafari ? "mousedown" : "mouseup"; $(document).on(it_option_events, "select.it_option", function(e) { option_add = true; }); } $(document).on("change", "select.it_option", function() { var sel_count = $("select.it_option").size(); var idx = $("select.it_option").index($(this)); var val = $(this).val(); var it_id = $("input[name='it_id[]']").val(); // 선택값이 없을 경우 하위 옵션은 disabled if(val == "") { $("select.it_option:gt("+idx+")").val("").attr("disabled", true); return; } // 하위선택옵션로드 if(sel_count > 1 && (idx + 1) < sel_count) { var opt_id = ""; // 상위 옵션의 값을 읽어 옵션id 만듬 if(idx > 0) { $("select.it_option:lt("+idx+")").each(function() { if(!opt_id) opt_id = $(this).val(); else opt_id += chr(30)+$(this).val(); }); opt_id += chr(30)+val; } else if(idx == 0) { opt_id = val; } $.post( "./itembuyoption.php", { it_id: it_id, opt_id: opt_id, idx: idx, sel_count: sel_count }, function(data) { $("select.it_option").eq(idx+1).empty().html(data).attr("disabled", false); // select의 옵션이 변경됐을 경우 하위 옵션 disabled if(idx+1 < sel_count) { var idx2 = idx + 1; $("select.it_option:gt("+idx2+")").val("").attr("disabled", true); } } ); } else if((idx + 1) == sel_count) { // 선택옵션처리 if(option_add && val == "") return; var info = val.split(","); // 재고체크 if(parseInt(info[2]) < 1) { alert("선택하신 옵션은 신청가능수가 초과되어 신청할 수 없습니다."); return false; } if(option_add) sel_option_process(true); } }); // 추가옵션 /* 가상커서 ctrl keyup 이베트 대응 */ /* $(document).on("keyup", "select.it_supply", function(e) { var $el = $(this); var code = e.keyCode; var val = $(this).val(); supply_add = false; if(code == 17) { if(val == "") return; sel_supply_process($el, true); } }); */ /* 키보드 접근 후 옵션 선택 Enter keydown 이벤트 대응 */ $(document).on("keydown", "select.it_supply", function(e) { var $el = $(this); var code = e.keyCode; var val = $(this).val(); supply_add = false; if(code == 13) { if(val == "") return; sel_supply_process($el, true); } }); if(isAndroid) { $(document).on("touchend", "select.it_supply", function() { supply_add = true; }); } else { var it_supply_events = isSafari ? "mousedown" : "mouseup"; $(document).on(it_supply_events, "select.it_supply", function(e) { supply_add = true; }); } $(document).on("change", "select.it_supply", function() { var $el = $(this); var val = $(this).val(); if(val == "") return; if(supply_add) sel_supply_process($el, true); }); // 수량변경 및 삭제 $(document).on("click", "#it_sel_option li button", function() { var mode = $(this).text(); var this_qty, max_qty = 9999, min_qty = 1; var $el_qty = $(this).closest("li").find("input[name^=ct_qty]"); var stock = parseInt($(this).closest("li").find("input.io_stock").val()); switch(mode) { case "증가": this_qty = parseInt($el_qty.val().replace(/[^0-9]/, "")) + 1; if(this_qty > stock) { alert("재고수량 보다 많은 수량을 구매할 수 없습니다."); this_qty = stock; } if(this_qty > max_qty) { this_qty = max_qty; alert("최대 구매수량은 "+number_format(String(max_qty))+" 입니다."); } $el_qty.val(this_qty); price_calculate(); break; case "감소": this_qty = parseInt($el_qty.val().replace(/[^0-9]/, "")) - 1; if(this_qty < min_qty) { this_qty = min_qty; alert("최소 구매수량은 "+number_format(String(min_qty))+" 입니다."); } $el_qty.val(this_qty); price_calculate(); break; case "삭제": if(confirm("선택하신 옵션항목을 삭제하시겠습니까?")) { var $el = $(this).closest("li"); var del_exec = true; if($("#it_sel_option .it_spl_list").size() > 0) { // 선택옵션이 하나이상인지 if($el.hasClass("it_opt_list")) { if($(".it_opt_list").size() <= 1) del_exec = false; } } if(del_exec) { $el.closest("li").remove(); price_calculate(); } else { alert("선택옵션은 하나이상이어야 합니다."); return false; } } break; default: alert("올바른 방법으로 이용해 주십시오."); break; } }); // 수량직접입력 $(document).on("keyup", "input[name^=ct_qty]", function() { var val= $(this).val(); if(val != "") { if(val.replace(/[0-9]/g, "").length > 0) { alert("수량은 숫자만 입력해 주십시오."); $(this).val(1); } else { var d_val = parseInt(val); if(d_val < 1 || d_val > 9999) { alert("수량은 1에서 9999 사이의 값으로 입력해 주십시오."); $(this).val(1); } else { var stock = parseInt($(this).closest("li").find("input.io_stock").val()); if(d_val > stock) { alert("신청가능수 보다 많은 수를 신청할 수 없습니다."); $(this).val(stock); } } } price_calculate(); } }); }); // 선택옵션 추가처리 function sel_option_process(add_exec) { var it_price = parseInt($("input#it_price").val()); var id = ""; var value, info, sel_opt, item, price, stock, run_error = false; var option = sep = ""; info = $("select.it_option:last").val().split(","); $("select.it_option").each(function(index) { value = $(this).val(); item = $(this).closest("tr").find("th label").text(); if(!value) { run_error = true; return false; } // 옵션선택정보 sel_opt = value.split(",")[0]; if(id == "") { id = sel_opt; } else { id += chr(30)+sel_opt; sep = " / "; } option += sep + item + ":" + sel_opt; }); if(run_error) { alert(item+"을(를) 선택해 주십시오."); return false; } price = info[1]; stock = info[2]; // 금액 음수 체크 if(it_price + parseInt(price) < 0) { alert("구매금액이 음수인 상품은 구매할 수 없습니다."); return false; } if(add_exec) { if(same_option_check(option)) return; add_sel_option(0, id, option, price, stock); } } // 추가옵션 추가처리 function sel_supply_process($el, add_exec) { var val = $el.val(); var item = $el.closest("tr").find("th label").text(); if(!val) { alert(item+"을(를) 선택해 주십시오."); return; } var info = val.split(","); // 재고체크 if(parseInt(info[2]) < 1) { alert(info[0]+"은(는) 신청가능수가 초과되어 신청할 수 없습니다."); return false; } var id = item+chr(30)+info[0]; var option = item+":"+info[0]; var price = info[1]; var stock = info[2]; // 금액 음수 체크 if(parseInt(price) < 0) { alert("구매금액이 음수인 상품은 구매할 수 없습니다."); return false; } if(add_exec) { if(same_option_check(option)) return; add_sel_option(1, id, option, price, stock); } } // 선택된 옵션 출력 function add_sel_option(type, id, option, price, stock) { var item_code = $("input[name='it_id[]']").val(); var it_msg1 = $("input[name='it_msg1[]']").val(); var it_msg2 = $("input[name='it_msg2[]']").val(); var it_msg3 = $("input[name='it_msg3[]']").val(); var opt = ""; var li_class = "it_opt_list"; if(type) li_class = "it_spl_list"; var opt_prc; if(parseInt(price) >= 0) opt_prc = "(+"+number_format(String(price))+"원)"; else opt_prc = "("+number_format(String(price))+"원)"; opt += "
  • "; opt += ""; opt += ""; opt += ""; opt += ""; opt += ""; opt += "
    "; opt += "
    "; opt += "
    "; // opt += ""; // opt += ""; opt += ""; opt += "
    "; if(!type) { if(it_msg1) { opt += "
    "; opt += "
    "; } if(it_msg2) { opt += "
    "; opt += "
    "; } if(it_msg3) { opt += "
    "; } } opt += "
  • "; if($("#it_sel_option > ul").size() < 1) { $("#it_sel_option").html(""); $("#it_sel_option > ul").html(opt); } else{ if(type) { if($("#it_sel_option .it_spl_list").size() > 0) { $("#it_sel_option .it_spl_list:last").after(opt); } else { if($("#it_sel_option .it_opt_list").size() > 0) { $("#it_sel_option .it_opt_list:last").after(opt); } else { $("#it_sel_option > ul").html(opt); } } } else { if($("#it_sel_option .it_opt_list").size() > 0) { $("#it_sel_option .it_opt_list:last").after(opt); } else { if($("#it_sel_option .it_spl_list").size() > 0) { $("#it_sel_option .it_spl_list:first").before(opt); } else { $("#it_sel_option > ul").html(opt); } } } } price_calculate(); usable_calculate(); } // 동일선택옵션있는지 function same_option_check(val) { var result = false; $("input[name^=io_value]").each(function() { if(val == $(this).val()) { result = true; return false; } }); if(result) alert(val+" 은(는) 이미 추가하신 옵션상품입니다."); return result; } // 가격계산 function price_calculate() { var it_price = parseInt($("input#it_price").val()); if(isNaN(it_price)) return; var $el_prc = $("input.io_price"); var $el_qty = $("input[name^=ct_qty]"); var $el_type = $("input[name^=io_type]"); var price, type, qty, total = 0; $el_prc.each(function(index) { price = parseInt($(this).val()); qty = parseInt($el_qty.eq(index).val()); type = $el_type.eq(index).val(); if(type == "0") { // 선택옵션 total += (it_price + price) * qty; } else { // 추가옵션 total += price * qty; } }); $("#it_tot_price").empty().html(number_format(String(total))+"원"); } // 사용가능일 달력 표시 - 2019.04.09. 구혜진 function usable_calculate() { var flag = $("input[name='it_5[]']").val(); var notuse = ($("input[name='it_6[]']").val()).split(","); var holiday = ['2019-06-06','2019-08-15','2019-09-12','2019-09-13','2019-10-03','2019-10-09','2019-12-25','2020-01-01','2020-01-24','2020-01-27','2020-04-15','2020-04-30','2020-05-01']; /* create an array of days which need to be disabled */ if(flag > 0) {notuse = notuse.concat(holiday);} var disabledDays = notuse; /* utility functions */ function nationalDays(date) { var m = date.getMonth(), d = date.getDate(), y = date.getFullYear(); for (i = 0; i < disabledDays.length; i++) { if($.inArray(y + '-' + addZero(m+1) + '-' + addZero(d), disabledDays) != -1 || new Date() > date) { //console.log('bad: ' + y + '-' + (m+1) + '-' + d + ' / ' + disabledDays[i]); return [false]; } } //console.log('good: ' + y + '-' + (m+1) + '-' + d ); return [true]; } function noHolidays(date) { return nationalDays(date); } function noWeekendsOrHolidays(date) { var noWeekend = jQuery.datepicker.noWeekends(date); return noWeekend[0] ? nationalDays(date) : noWeekend; } /* create datepicker */ if(flag > 0) { // 평일만 선택시 $(".use_date").datepicker({ dateFormat: 'yy-mm-dd', prevText: '이전 달', nextText: '다음 달', monthNames: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'], monthNamesShort: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'], dayNames: ['일','월','화','수','목','금','토'], dayNamesShort: ['일','월','화','수','목','금','토'], dayNamesMin: ['일','월','화','수','목','금','토'], showMonthAfterYear: true, yearSuffix: '년', minDate: "+1d", maxDate: "+10d", beforeShowDay: noWeekendsOrHolidays }); } else { $(".use_date").datepicker({ dateFormat: 'yy-mm-dd', prevText: '이전 달', nextText: '다음 달', monthNames: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'], monthNamesShort: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'], dayNames: ['일','월','화','수','목','금','토'], dayNamesShort: ['일','월','화','수','목','금','토'], dayNamesMin: ['일','월','화','수','목','금','토'], showMonthAfterYear: true, yearSuffix: '년', minDate: "+1d", maxDate: "+10d", beforeShowDay: nationalDays }); } } // 사용일 달력선택시 시작시각 계산 - 2019.04.22. 구혜진 function get_start_time(obj) { var val = $(obj).val(); // 선택값이 없을 경우 하위 옵션은 disabled if(val == "") { $(obj).closest("li").find(".start_time").val("").attr("disabled", true); $("#wr_2") ; return; } else { var it_id = $("input[name='it_id[]']").val(); var s_time = $("input[name='it_3[]']").val(); var e_time = $("input[name='it_4[]']").val(); // 선택옵션로드 var opt_room = get_opt_room(obj); var opt_time = get_opt_time(obj); $.post( "./itembuyoption_roomtime.php", { it_id: it_id, s_time: s_time, e_time: e_time, opt_date: val, opt_room: opt_room, opt_time: opt_time }, function(data) { $(obj).closest("li").find(".start_time").val("").attr("disabled", false); $(obj).closest("li").find(".start_time").html('').append(data); } ); } } // 시작시각 선택시 종료시각 계산 - 2019.04.23. 구혜진 function get_end_time(obj) { var val = $(obj).val(); var use_date =$(obj).closest("li").find(".use_date").val(); var opt_time = get_opt_time(obj); var tDate = new Date(use_date + " " + val); tDate.setHours(tDate.getHours() + opt_time); var new_time = addZero(tDate.getHours()); var new_min = addZero(tDate.getMinutes()); $(obj).closest("li").find(".end_time").val(new_time + ":" + new_min); } // 선택옵션에서 회의실 추출 - 2019.04.30. 구혜진 function get_opt_room(obj) { var opt_id = $(obj).closest("li").children("input.io_selected").val(); var opt_split = opt_id.split(chr(30)); return opt_split[0]; } // 선택옵션에서 사용시간 추출 - 2019.04.23. 구혜진 function get_opt_time(obj) { var opt_id = $(obj).closest("li").children("input.io_selected").val(); var opt_split_1 = opt_id.split(chr(30)); var opt_split_2 = opt_split_1[1].split("시간"); return Number(opt_split_2[0]); } // 시간계산시 0 채우기 - 2019.04.23. 구혜진 function addZero(i) { if (i < 10) i = "0" + i; return i; } // php chr() 대응 function chr(code) { return String.fromCharCode(code); }