// === GLOBAL VAR
var counterShop = 10, setIntShop;
var counterManufacturing = 900, setIntManufacturing, $counterManufacturing;
var startCounterManufacturing = 1744322151;
var elapsedTime;
var currentCounterManufacturing = Date.now();
// === DOCUMENT READY (= DOM READY)
$(document).ready(function() {
// === PAGE TITLE & CART ===
// =========================
$(".pageTitle").attr("pageTitle", " | Order");
cartRedraw();
refreshPromo();
$(".orderSummary .inputPromo").on("input", typePromo);
$(".addPromo").on("click", addPromo);
$("input").on("input", resetEvaluation);
$(".orderSummary input.address[type='text']").on("input", checkPlacement);
$(".placement .buy").on("click", proceedPlacement);
$counterShop = $(".counterShop").length >0;
if ($counterShop) {
setIntShop = setInterval(updateCounterShop, 1000);
}
$counterManufacturing = $(".counterManufacturing").length >0;
if ($counterManufacturing) {
setIntManufacturing = setInterval(updateCounterManufacturing, 1000);
}
});
// === 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 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);
}
// === DISCOUNT ===
// ================
function typePromo(event) {
var $this = $(this);
var $btn = $this.closest(".input-group").find(".addPromo");
$btn.removeClass("btn-danger")
if ($this.val().length > 0) {
$btn.addClass("btn-success").removeClass("btn-outline-secondary");
$btn.prop("disabled", false);
} else {
$btn.addClass("btn-outline-secondary").removeClass("btn-success");
$btn.prop("disabled", true);
}
}
function promoRemove(event) {
var $this = $(this);
var $promo = $(this).closest(".promo");
swal({
title: "Are you sure?",
text: "Click YES if you want to remove this promotion code from your cart.",
type: "warning",
showCancelButton: true,
confirmButtonClass: "btn-danger",
confirmButtonText: "Yes, delete it",
cancelButtonClass: "btn-success",
cancelButtonText: "No, keep it",
closeOnConfirm: true,
closeOnCancel: true,
closeOnClickOutside: false,
closeOnEsc: false
},
function(isConfirm) {
if (isConfirm) {
// Delete
$.ajax({
type: "POST",
url: "_checkout.php",
data: "p=" + B64.encode("removePromo/§/"+ $promo.attr("code") +"/§/"+ Math.floor(Date.now() / 1000)),
cache: false,
success: function(data) {
try {
var obj = JSON.parse(data);
}
catch(err) {
notifyMsg("danger", "Discount", "Server did not reply correctly.", "bi bi-journal-x");
return false;
}
if (obj.error != 0) {
notifyMsg("danger", "Discount ("+ obj.error +")", ""+ obj.shMsg +"
"+ obj.lngMsg +"", "bi bi-journal-x");
} else {
refreshPromo(false);
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
notifyMsg("danger", "Internet (AJAX : "+ XMLHttpRequest.status +")", errorThrown, "bi bi-journal-x");
}
});
}
});
}
function refreshPromo(pNotify) {
pNotify = (typeof pNotify !== 'undefined')? pNotify : true;
$.ajax({
type: "POST",
url: "_checkout.php",
data: "p=" + B64.encode("getPromo/§/-/§/"+ Math.floor(Date.now() / 1000)),
cache: false,
success: function(data) {
try {
var obj = JSON.parse(data);
}
catch(err) {
notifyMsg("danger", "Discount", "Server did not reply correctly.", "bi bi-journal-x");
return false;
}
var cartProducts, htmlData = "";
if (obj.error < 0) {
notifyMsg("danger", "Discount ("+ obj.error +")", ""+ obj.shMsg +"
"+ obj.lngMsg +"", "bi bi-journal-x");
} else {
var html = "";
for (var promo in obj.promos) {
var lPromo = obj.promos[promo];
var lUnit = "";
switch (lPromo.unit) {
case "e" :
lUnit = ' €';
break;
case "p" :
lUnit = ' %';
break;
}
html += '
';
html += '
';
html += '
'+ lPromo.code +'
';
html += '
- '+ lPromo.value +' '+ lUnit;
html += '
';
html += '
';
html += '
'+ lPromo.text +'
';
html += '
';
}
var discount = 0;
if (obj.discount) {
discount = obj.discount.e + obj.discount.p;
}
discount = "- "+ discount.toFixed(2).toString().replace(/\B(?0)) {
$(".orderSummary .promoCodes").show();
$(".orderSummary .discountTotal").show().css("display", "flex");
} else {
$(".orderSummary .promoCodes").hide();
$(".orderSummary .discountTotal").hide();
}
var lTotal, lDiscount;
if (obj.total) {
if (obj.total < 0) {
lTotal = "0.00";
lDiscount = obj.subtotal.toFixed(2).toString().replace(/\B(?"+ lDiscount +" €"+ ((obj.promos)? " with applied discount code"+ ( (obj.promos.length > 1)? "s":"") +"." : "."), "bi bi-journal-check");
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
notifyMsg("danger", "Internet (AJAX : "+ XMLHttpRequest.status +")", errorThrown, "bi bi-journal-x");
}
});
checkPlacement();
}
function addPromo(event) {
var $this = $(this);
var $input = $this.closest(".input-group").find(".inputPromo");
var code = $input.val();
$input.removeClass("is-invalid");
$(".input-group.promoToAdd").removeClass("is-invalid");
$.ajax({
type: "POST",
url: "_checkout.php",
data: "p=" + B64.encode("checkPromo/§/"+ code +"/§/"+ Math.floor(Date.now() / 1000)),
cache: false,
success: function(data) {
try {
var obj = JSON.parse(data);
}
catch(err) {
notifyMsg("danger", "Discount", "Server did not reply correctly.", "bi bi-journal-x");
return false;
}
var cartProducts, htmlData = "";
if (obj.error < 0) {
notifyMsg("danger", "Discount ("+ obj.error +")", ""+ obj.shMsg +"
"+ obj.lngMsg +"", "bi bi-journal-x");
} else if (obj.error >0) {
switch (obj.error) {
case 3 :
notifyMsg("danger", "Discount", "Discount can't be applied to an empty cart.", "bi bi-journal-x");
break;
case 4 :
notifyMsg("danger", "Discount", "Discount code ' "+ code +" ' is not available.", "bi bi-journal-x");
break;
case 5 :
notifyMsg("danger", "Discount", "Discount code ' "+ code +" ' is already applied.", "bi bi-journal-x");
break;
default :
notifyMsg("danger", "Discount ("+ obj.error +")", ""+ obj.shMsg +"
"+ obj.lngMsg +"", "bi bi-journal-x");
}
$input.addClass("is-invalid");
$(".input-group.promoToAdd").addClass("is-invalid");
$(".addPromo").addClass("btn-danger").removeClass("btn-succes btn-outline-secondary");
} else {
refreshPromo();
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
notifyMsg("danger", "Internet (AJAX : "+ XMLHttpRequest.status +")", errorThrown, "bi bi-journal-x");
}
});
}
// === TO CHECKOUT #2 ===
// ======================
function checkPlacement() {
var productQuantity = $(".orderSummary [productQuantity]").attr("productQuantity");
productQuantity = (isNaN(Number(productQuantity)))? 0 : Number(productQuantity);
var $shipping = $(".orderSummary .shippingAddress");
var name = $shipping.find(".inputName").val().trim();
var address1 = $shipping.find(".inputAddress1").val().trim();
var city = $shipping.find(".inputCity").val().trim();
var postalCode = $shipping.find(".inputPostalCode").val().trim();
var mail = $shipping.find(".inputMail").val().trim();
var check = (productQuantity >0) && (name.length >0) && (address1.length > 0) && (city.length > 0) && (postalCode.length > 0) && (validateEmail(mail));
if (check) {
checkAddress(true).done(function (obj) {
$shipping.find(".inputState").val(obj.state);
$shipping.find(".inputCountry").val(obj.country);
$shipping.find(".inputCountryCode").val(obj.country_code);
$(".btn.buy").addClass("btn-primary ready").removeClass("btn-info notAllowed");
}).fail(function () {
console.log("Executed after checkAddress fail");
$(".btn.buy").addClass("btn-info notAllowed").removeClass("btn-primary ready");
});
} else {
$(".btn.buy").addClass("btn-info notAllowed").removeClass("btn-primary ready");
}
}
function proceedPlacement(event) {
var $this = $(this);
if ($this.hasClass("notAllowed")) {
evaluateAddressInfo([ "name", "company", "address1", "address2", "city", "state", "postalcode", "country", "mail" ]);
notifyMsg("danger", "Order step #2 not allowed yet", "Please verify all mandatory information are defined before proceeding.", "bi bi-journal-x");
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
return false;
} else {
setAddress(true).done(function () {
setManufacturingCounter(true).done(function () {
$(".toStep2")[0].click();
}).fail(function () {
$(".toStep2")[0].click();
});
}).fail(function () {
// console.log("Executed after setAdress fail");
});
}
}
// === ADDRESS ===
// ===============
function resetEvaluation(param) {
var $this = $(this);
$this.removeClass("is-invalid is-valid");
$this.closest(".input-group").removeClass("is-invalid is-valid");
}
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");
params.forEach(checkAddressItem);
}
function checkAddressItem(value, index) {
var $shipping = $(".orderSummary .shippingAddress");
var name = $shipping.find(".inputName").val().trim();
var company = $shipping.find(".inputCompany").val().trim();
var address1 = $shipping.find(".inputAddress1").val().trim();
var address2 = $shipping.find(".inputAddress2").val().trim();
var city = $shipping.find(".inputCity").val().trim();
var state = $shipping.find(".inputState").val().trim();
var postalCode = $shipping.find(".inputPostalCode").val().trim();
var country = $shipping.find(".inputCountry").val().trim();
var phone = $shipping.find(".inputPhone").val().trim();
var mail = $shipping.find(".inputMail").val().trim();
switch (value) {
case "name" :
if (name.length <= 0) {
$shipping.find(".name").addClass("is-invalid").removeClass("is-valid");
} else {
$shipping.find(".name").addClass("is-valid").removeClass("is-invalid");
}
break;
case "company" :
if (company.length > 0) {
$shipping.find(".company").addClass("is-valid");
} else {
$shipping.find(".company").val("").removeClass("is-invalid is-valid");
}
break;
case "address1" :
if (address1.length <= 0) {
$shipping.find(".address1").addClass("is-invalid").removeClass("is-valid");
} else {
$shipping.find(".address1").addClass("is-valid").removeClass("is-invalid");
}
break;
case "address2" :
if (address2.length > 0) {
$shipping.find(".address2").addClass("is-valid");
} else {
$shipping.find(".address2").val("").removeClass("is-invalid is-valid");
}
break;
case "city" :
if (city.length <= 0) {
$shipping.find(".city").addClass("is-invalid").removeClass("is-valid");
} else {
$shipping.find(".city").addClass("is-valid").removeClass("is-invalid");
}
break;
case "state" :
if (state.length > 0) {
$shipping.find(".state").addClass("is-valid");
} else {
$shipping.find(".state").val("").removeClass("is-invalid is-valid");
}
break;
case "postalcode" :
if (postalCode.length <= 0) {
$shipping.find(".postalCode").addClass("is-invalid").removeClass("is-valid");
} else {
$shipping.find(".postalCode").addClass("is-valid").removeClass("is-invalid");
}
break;
case "country" :
if (country.length > 0) {
$shipping.find(".country").addClass("is-valid");
} else {
$shipping.find(".country").val("").removeClass("is-invalid is-valid");
}
break;
case "mail" :
if (!validateEmail(mail)) {
$shipping.find(".mail").addClass("is-invalid").removeClass("is-valid");
} else {
$shipping.find(".mail").addClass("is-valid").removeClass("is-invalid");
}
break;
case "phone" :
if (country.length > 0) {
$shipping.find(".phone").addClass("is-valid");
} else {
$shipping.find(".phone").val("").removeClass("is-invalid is-valid");
}
break;
}
}
function checkAddress(pToBeDeffered) {
if ((typeof pToBeDeffered === "boolean") && (pToBeDeffered)) {
var deferredObj = $.Deferred();
}
var $shipping = $(".orderSummary .shippingAddress");
var name = $shipping.find(".inputName").val().trim();
var company = $shipping.find(".inputCompany").val().trim();
var address1 = $shipping.find(".inputAddress1").val().trim();
var address2 = $shipping.find(".inputAddress2").val().trim();
var city = $shipping.find(".inputCity").val().trim();
var state = $shipping.find(".inputState").val().trim();
var postalCode = $shipping.find(".inputPostalCode").val().trim();
var country = $shipping.find(".inputCountry").val().trim();
var fullAddress = {
"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("checkAddress/§/"+ JSON.stringify(fullAddress) +"/§/"+ Math.floor(Date.now() / 1000)),
cache: false,
success: function(data) {
try {
var obj = JSON.parse(data);
}
catch(err) {
notifyMsg("danger", "Delivery address", "Server did not reply correctly.", "bi bi-journal-x");
if (deferredObj) {
deferredObj.reject(false);
} else {
return false;
}
}
if (obj.error != 0) {
notifyMsg("danger", "Delivery address ("+ obj.error +")", ""+ obj.shMsg +"
"+ obj.lngMsg +"", "bi bi-journal-x");
if (deferredObj) {
deferredObj.reject(false);
} else {
return false;
}
} else {
if (deferredObj) {
deferredObj.resolve(obj.address);
} else {
return obj.address;
}
}
},
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 setAddress(pToBeDeffered) {
if ((typeof pToBeDeffered === "boolean") && (pToBeDeffered)) {
var deferredObj = $.Deferred();
}
var $shipping = $(".orderSummary .shippingAddress");
var name = $shipping.find(".inputName").val().trim();
var company = $shipping.find(".inputCompany").val().trim();
var address1 = $shipping.find(".inputAddress1").val().trim();
var address2 = $shipping.find(".inputAddress2").val().trim();
var city = $shipping.find(".inputCity").val().trim();
var state = $shipping.find(".inputState").val().trim();
var postalCode = $shipping.find(".inputPostalCode").val().trim();
var country = $shipping.find(".inputCountry").val().trim();
var countryCode = $shipping.find(".inputCountryCode").val().trim();
var phone = $shipping.find(".inputPhone").val().trim();
var mail = $shipping.find(".inputMail").val().trim();
var fullAddress = {
"name" : name,
"company" : company,
"address1" : address1,
"address2" : address2,
"city" : city,
"state" : state,
"postal_code" : postalCode,
"country" : country,
"country_code": countryCode,
"mail" : mail,
"phone" : phone
};
$.ajax({
type: "POST",
url: "_shipping.php",
data: "p=" + B64.encode("setAddress/§/"+ JSON.stringify(fullAddress) +"/§/"+ Math.floor(Date.now() / 1000)),
cache: false,
success: function(data) {
try {
var obj = JSON.parse(data);
}
catch(err) {
notifyMsg("danger", "Delivery address", "Server did not reply correctly.", "bi bi-journal-x");
if (deferredObj) {
deferredObj.reject(false);
} else {
return false;
}
}
if (obj.error != 0) {
notifyMsg("danger", "Delivery 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();
}
}