// === 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();
}
}