// === GLOBAL VAR var counterShop = 10, setIntShop, $counterShop; var counterCheckout1 = 10, setIntCheckout1, $counterCheckout1; var counterManufacturing = 900, setIntManufacturing, $counterManufacturing; var startCounterManufacturing = 1744808891; var elapsedTime; var currentCounterManufacturing = Date.now(); // === DOCUMENT READY (= DOM READY) $(document).ready(function() { // === PAGE TITLE & CART === // ========================= $(".pageTitle").attr("pageTitle", " | Order"); $(".orderSummary .sameBilling").on("click", toggleBilling); var fees = $(".shippingOption.selected [shippingPrice]").attr("shippingPrice"); $(".orderSummary [totalDelivery]").attr("totalDelivery", fees); setShipping(true).done(function () { checkPlacement(); }).fail(function () { $(".btn.buy").addClass("btn-info notAllowed").removeClass("btn-primary ready"); }); $("input").on("input", resetEvaluation); $(".orderSummary input.address[type='text']").on("input", checkPlacement); $(".orderSummary .shippingOption").on("click", clickShippingOption); $(".placement .buy").on("click", proceedPlacement); $counterShop = $(".counterShop").length >0; if ($counterShop) { setIntShop = setInterval(updateCounterShop, 1000); } $counterCheckout1 = $(".counterCheckout1").length >0; if ($counterCheckout1) { setIntCheckout1 = setInterval(updateCounterCheckout1, 1000); } $counterManufacturing = $(".counterManufacturing").length >0; if ($counterManufacturing) { setIntManufacturing = setInterval(updateCounterManufacturing, 1000); } }); // === SHIPPING === // ================ function clickShippingOption(event) { var $this = $(this); var fees = $this.find("[shippingPrice]").attr("shippingPrice"); $(".orderSummary .shippingOption").removeClass("selected"); $this.addClass("selected"); $(".orderSummary [totalDelivery]").attr("totalDelivery", fees); setShipping(true).done(function () { checkPlacement(); }).fail(function (obj) { if (obj.error == 9) { $(".btn.buy").addClass("btn-info notAllowed").removeClass("btn-primary ready"); swal({ title: "Changes detected", text: "You need to go back to step #1 for verification", type: "error", showCancelButton: false, confirmButtonClass: "btn-primary", confirmButtonText: "Back to step #1", closeOnConfirm: true, closeOnClickOutside: false, closeOnEsc: false }, function(isConfirm) { $(".toBackward")[0].click(); }); } }); } function setShipping(pToBeDeffered) { if ((typeof pToBeDeffered === "boolean") && (pToBeDeffered)) { var deferredObj = $.Deferred(); } var shippingChoice = $(".shippingOptions .shippingOption.selected").attr("shippingType"); var shippingPrice = $(".shippingOptions .shippingOption.selected [shippingPrice]").attr("shippingPrice"); var params = '{ "selected":"'+ shippingChoice +'", "price":"'+ shippingPrice +'" }'; $.ajax({ type: "POST", url: "_shipping.php", data: "p=" + B64.encode("setShipping/§/"+ params +"/§/"+ Math.floor(Date.now() / 1000)), cache: false, success: function(data) { try { var obj = JSON.parse(data); } catch(err) { notifyMsg("danger", "Shipping choice", "Server did not reply correctly.", "bi bi-journal-x"); if (deferredObj) { deferredObj.reject(false); } else { return false; } } if (obj.error != 0) { notifyMsg("danger", "Shipping choice ("+ obj.error +")", ""+ obj.shMsg +"
"+ obj.lngMsg +"", "bi bi-journal-x"); if (deferredObj) { deferredObj.reject(obj); } else { return false; } } else { if (deferredObj) { deferredObj.resolve(true); } else { return true; } } }, error: function(XMLHttpRequest, textStatus, errorThrown) { notifyMsg("danger", "Internet (AJAX : "+ XMLHttpRequest.status +")", errorThrown, "bi bi-journal-x"); if (deferredObj) { deferredObj.reject(false); } else { return false; } } }); if (deferredObj) { return deferredObj.promise(); } } // === COUNTER === // =============== function setManufacturingCounter(pToBeDeffered) { if ((typeof pToBeDeffered === "boolean") && (pToBeDeffered)) { var deferredObj = $.Deferred(); } var params = startCounterManufacturing +" "; params = params.trim(); $.ajax({ type: "POST", url: "_checkout.php", data: "p=" + B64.encode("setManufacturingTime/§/"+ params +"/§/"+ Math.floor(Date.now() / 1000)), cache: false, success: function(data) { try { var obj = JSON.parse(data); } catch(err) { notifyMsg("danger", "Manufacturing queue", "Server did not reply correctly.", "bi bi-journal-x"); if (deferredObj) { deferredObj.reject(false); } else { return false; } } if (obj.error != 0) { notifyMsg("danger", "Manufacturing queue ("+ obj.error +")", ""+ obj.shMsg +"
"+ obj.lngMsg +"", "bi bi-journal-x"); if (deferredObj) { deferredObj.reject(obj); } else { return false; } } else { if (deferredObj) { deferredObj.resolve(true); } else { return true; } } }, error: function(XMLHttpRequest, textStatus, errorThrown) { notifyMsg("danger", "Internet (AJAX : "+ XMLHttpRequest.status +")", errorThrown, "bi bi-journal-x"); if (deferredObj) { deferredObj.reject(false); } else { return false; } } }); if (deferredObj) { return deferredObj.promise(); } } function updateCounterShop() { counterShop--; var text = "(automatic in "+ counterShop +" second"+ ( (counterShop > 1)? "s":"" ) +")"; $(".counterShop small").html(text); if (counterShop <= 0) { clearInterval(setIntShop); $(".counterShop")[0].click(); } } function updateCounterCheckout1() { counterCheckout1--; var text = "(automatic in "+ counterCheckout1 +" second"+ ( (counterCheckout1 > 1)? "s":"" ) +")"; $(".counterCheckout1 small").html(text); if (counterCheckout1 <= 0) { clearInterval(setIntCheckout1); $(".counterCheckout1")[0].click(); } } function updateCounterManufacturing() { elapsedTime = Math.floor((Date.now() - startCounterManufacturing) / 1000); var currentCounter = counterManufacturing - elapsedTime; var mn = Math.floor(currentCounter / 60); var ss = currentCounter % 60; if (mn <= 10) { $(".tooltip-content").not(".warning").addClass("warning"); } else { $(".tooltip-content").removeClass("warning"); } if (mn < 10) mn = "0" + mn; if (ss < 10) ss = "0" + ss; $(".counterManufacturing").html(mn +":"+ ss); if (currentCounter <= 0) { clearInterval(setIntManufacturing); $(".counterManufacturing").html("--:--"); $(".tooltip-content .text").html("Position in queue is lost. We calculate your new position."); setIntManufacturing = setInterval(renewCounterManufacturing, 10000); } } function renewCounterManufacturing() { clearInterval(setIntManufacturing); $(".tooltip-content").removeClass("warning"); $(".tooltip-content").removeClass("warning"); $(".counterManufacturing").html("--:--"); $(".tooltip-content .text").html("Remaining time your queue position is locked before we recalculate it."); startCounterManufacturing = Date.now(); setIntManufacturing = setInterval(updateCounterManufacturing, 1000); } // === BILLING === // =============== function toggleBilling() { var $this =$(this); resetEvaluation(true); $(".orderSummary .billingAddress").toggle( !$this.is(":checked") ); if (!$this.is(":checked")) { if (checkAddress(false)) { $(".btn.buy").addClass("btn-primary ready").removeClass("btn-info notAllowed"); } else { $(".btn.buy").addClass("btn-info notAllowed").removeClass("btn-primary ready"); } } else { $(".btn.buy").addClass("btn-primary ready").removeClass("btn-info notAllowed"); } } // === ADDRESS === // =============== function resetEvaluation(param) { if (typeof param === "boolean") { if (param) { $(".billingAddress .input-group").removeClass("is-invalid is-valid"); $(".billingAddress input").removeClass("is-invalid is-valid"); } } else { var $this = $(this); $this.removeClass("is-invalid is-valid"); $this.closest(".input-group").removeClass("is-invalid is-valid"); } } function checkAddress() { var check; if (!$(".orderSummary .sameBilling").is(":checked")) { var $billing = $(".orderSummary .billingAddress"); var name = $billing.find(".inputName").val().trim(); var address1 = $billing.find(".inputAddress1").val().trim(); var city = $billing.find(".inputCity").val().trim(); var postalCode = $billing.find(".inputPostalCode").val().trim(); check = (name.length >0) && (address1.length > 0) && (city.length > 0) && (postalCode.length > 0); } else { check = true; } return check; } function evaluateAddressInfo(params) { params = (typeof params === 'undefined')? [ ] : params; var $shipping = $(".orderSummary"); // .shippingAddress $shipping.find(".name").removeClass("is-invalid is-valid"); $shipping.find(".company").removeClass("is-invalid is-valid"); $shipping.find(".address1").removeClass("is-invalid is-valid"); $shipping.find(".address2").removeClass("is-invalid is-valid"); $shipping.find(".city").removeClass("is-invalid is-valid"); $shipping.find(".stateRegion").removeClass("is-invalid is-valid"); $shipping.find(".postalCode").removeClass("is-invalid is-valid"); $shipping.find(".country").removeClass("is-invalid is-valid"); $shipping.find(".mail").removeClass("is-invalid is-valid"); $shipping.find(".phone").removeClass("is-invalid is-valid"); if (!$(".orderSummary .sameBilling").is(":checked")) { params.forEach(checkAddressItem); } } function checkAddressItem(value, index) { var $billing = $(".orderSummary .billingAddress"); var name = $billing.find(".inputName").val().trim(); var company = $billing.find(".inputCompany").val().trim(); var address1 = $billing.find(".inputAddress1").val().trim(); var address2 = $billing.find(".inputAddress2").val().trim(); var city = $billing.find(".inputCity").val().trim(); var state = $billing.find(".inputState").val().trim(); var postalCode = $billing.find(".inputPostalCode").val().trim(); var country = $billing.find(".inputCountry").val().trim(); switch (value) { case "name" : if (name.length <= 0) { $billing.find(".name").addClass("is-invalid").removeClass("is-valid"); } else { $billing.find(".name").addClass("is-valid").removeClass("is-invalid"); } break; case "company" : if (company.length > 0) { $billing.find(".company").addClass("is-valid"); } else { $billing.find(".company").val("").removeClass("is-invalid is-valid"); } break; case "address1" : if (address1.length <= 0) { $billing.find(".address1").addClass("is-invalid").removeClass("is-valid"); } else { $billing.find(".address1").addClass("is-valid").removeClass("is-invalid"); } break; case "address2" : if (address2.length > 0) { $billing.find(".address2").addClass("is-valid"); } else { $billing.find(".address2").val("").removeClass("is-invalid is-valid"); } break; case "city" : if (city.length <= 0) { $billing.find(".city").addClass("is-invalid").removeClass("is-valid"); } else { $billing.find(".city").addClass("is-valid").removeClass("is-invalid"); } break; case "state" : if (state.length > 0) { $billing.find(".state").addClass("is-valid"); } else { $billing.find(".state").val("").removeClass("is-invalid is-valid"); } break; case "postalcode" : if (postalCode.length <= 0) { $billing.find(".postalCode").addClass("is-invalid").removeClass("is-valid"); } else { $billing.find(".postalCode").addClass("is-valid").removeClass("is-invalid"); } break; case "country" : if (country.length > 0) { $billing.find(".country").addClass("is-valid"); } else { $billing.find(".country").val("").removeClass("is-invalid is-valid"); } break; } } function setAddress(pToBeDeffered) { if ((typeof pToBeDeffered === "boolean") && (pToBeDeffered)) { var deferredObj = $.Deferred(); } var $billing = $(".orderSummary .billingAddress"); var sameBilling = $(".orderSummary .sameBilling").is(":checked"); var name = $billing.find(".inputName").val().trim(); var company = $billing.find(".inputCompany").val().trim(); var address1 = $billing.find(".inputAddress1").val().trim(); var address2 = $billing.find(".inputAddress2").val().trim(); var city = $billing.find(".inputCity").val().trim(); var state = $billing.find(".inputState").val().trim(); var postalCode = $billing.find(".inputPostalCode").val().trim(); var country = $billing.find(".inputCountry").val().trim(); var fullAddress = { "sameBilling" : (sameBilling)? true : false, "name" : name, "company" : company, "address1" : address1, "address2" : address2, "city" : city, "state" : state, "postal_code" : postalCode, "country" : country, }; $.ajax({ type: "POST", url: "_shipping.php", data: "p=" + B64.encode("setBillingAddress/§/"+ JSON.stringify(fullAddress) +"/§/"+ Math.floor(Date.now() / 1000)), cache: false, success: function(data) { try { var obj = JSON.parse(data); } catch(err) { notifyMsg("danger", "Billing address", "Server did not reply correctly.", "bi bi-journal-x"); if (deferredObj) { deferredObj.reject(false); } else { return false; } } if (obj.error != 0) { notifyMsg("danger", "Billing address ("+ obj.error +")", ""+ obj.shMsg +"
"+ obj.lngMsg +"", "bi bi-journal-x"); if (deferredObj) { deferredObj.reject(false); } else { return false; } } else { if (deferredObj) { deferredObj.resolve(true); } else { return true; } } }, error: function(XMLHttpRequest, textStatus, errorThrown) { notifyMsg("danger", "Internet (AJAX : "+ XMLHttpRequest.status +")", errorThrown, "bi bi-journal-x"); if (deferredObj) { deferredObj.reject(false); } else { return false; } } }); if (deferredObj) { return deferredObj.promise(); } } // === TO CHECKOUT #3 === // ====================== function proceedPlacement() { var check = checkPlacement(); if (!check) { if (!$(".orderSummary .sameBilling").is(":checked")) { evaluateAddressInfo([ "name", "company", "address1", "address2", "city", "state", "postalcode", "country" ]); } return false; } setAddress(true).done(function () { checkOrder(true).done(function () { setManufacturingCounter(true).done(function () { $(".toStep3")[0].click(); }).fail(function () { $(".toStep3")[0].click(); }); }).fail(function (obj) { if (obj.error == 4) { $(".btn.buy").addClass("btn-info notAllowed").removeClass("btn-primary ready"); swal({ title: "Changes detected", text: "You need to go back to step #1 for verification", type: "error", showCancelButton: false, confirmButtonClass: "btn-primary", confirmButtonText: "Back to step #1", closeOnConfirm: true, closeOnClickOutside: false, closeOnEsc: false }, function(isConfirm) { $(".toBackward")[0].click(); }); } }); }).fail(function () { console.log("Executed after setAdress fail"); }); } function checkPlacement() { if (checkAddress()) { $(".btn.buy").addClass("btn-primary ready").removeClass("btn-info notAllowed"); } else { $(".btn.buy").addClass("btn-info notAllowed").removeClass("btn-primary ready"); return false; } return true } function checkOrder(pToBeDeffered) { if ((typeof pToBeDeffered === "boolean") && (pToBeDeffered)) { var deferredObj = $.Deferred(); } $.ajax({ type: "POST", url: "_checkout.php", data: "p=" + B64.encode("checkOrder/§/"+ Math.floor(Date.now() / 1000) +"/§/"+ Math.floor(Date.now() / 1000)), cache: false, success: function(data) { try { var obj = JSON.parse(data); } catch(err) { notifyMsg("danger", "Check order", "Server did not reply correctly.", "bi bi-journal-x"); if (deferredObj) { deferredObj.reject(false); } else { return false; } } if (obj.error != 0) { if (!obj.check1) { notifyMsg("danger", "Check order (4.1)", "Error when trying to check order", "bi bi-journal-x"); } else { notifyMsg("danger", "Check order (4.2)", "Error when trying to check order", "bi bi-journal-x"); } if (deferredObj) { deferredObj.reject(obj); } else { return false; } } else { if (deferredObj) { deferredObj.resolve(true); } else { return true; } } }, error: function(XMLHttpRequest, textStatus, errorThrown) { notifyMsg("danger", "Internet (AJAX : "+ XMLHttpRequest.status +")", errorThrown, "bi bi-journal-x"); if (deferredObj) { deferredObj.reject(false); } else { return false; } } }); if (deferredObj) { return deferredObj.promise(); } }