Remises incroyables
Des produits de qualité
catégories
Produits exclusifs
(function () {
const WILAYAS = [
{ code: "01", nom: "Adrar", domicile: 1500, stopDesk: 1000 },
{ code: "02", nom: "Chlef", domicile: 800, stopDesk: 500 },
{ code: "03", nom: "Laghouat", domicile: 1000, stopDesk: 600 },
{ code: "04", nom: "Oum El Bouaghi", domicile: 800, stopDesk: 500 },
{ code: "05", nom: "Batna", domicile: 800, stopDesk: 500 },
{ code: "06", nom: "Bejaia", domicile: 800, stopDesk: 500 },
{ code: "07", nom: "Biskra", domicile: 1000, stopDesk: 600 },
{ code: "08", nom: "Bechar", domicile: 1200, stopDesk: 800 },
{ code: "09", nom: "Blida", domicile: 600, stopDesk: 400 },
{ code: "10", nom: "Bouira", domicile: 700, stopDesk: 450 },
{ code: "11", nom: "Tamanrasset", domicile: 2000, stopDesk: 1500 },
{ code: "12", nom: "Tebessa", domicile: 900, stopDesk: 600 },
{ code: "13", nom: "Tlemcen", domicile: 800, stopDesk: 500 },
{ code: "14", nom: "Tiaret", domicile: 900, stopDesk: 600 },
{ code: "15", nom: "Tizi Ouzou", domicile: 700, stopDesk: 450 },
{ code: "16", nom: "Alger", domicile: 600, stopDesk: 400 },
{ code: "17", nom: "Djelfa", domicile: 1000, stopDesk: 600 },
{ code: "18", nom: "Jijel", domicile: 800, stopDesk: 500 },
{ code: "19", nom: "Setif", domicile: 800, stopDesk: 500 },
{ code: "20", nom: "Saida", domicile: 900, stopDesk: 600 },
{ code: "21", nom: "Skikda", domicile: 800, stopDesk: 500 },
{ code: "22", nom: "Sidi Bel Abbes", domicile: 800, stopDesk: 500 },
{ code: "23", nom: "Annaba", domicile: 800, stopDesk: 500 },
{ code: "24", nom: "Guelma", domicile: 900, stopDesk: 600 },
{ code: "25", nom: "Constantine", domicile: 800, stopDesk: 500 },
{ code: "26", nom: "Medea", domicile: 700, stopDesk: 450 },
{ code: "27", nom: "Mostaganem", domicile: 800, stopDesk: 500 },
{ code: "28", nom: "MSila", domicile: 800, stopDesk: 500 },
{ code: "29", nom: "Mascara", domicile: 800, stopDesk: 500 },
{ code: "30", nom: "Ouargla", domicile: 1100, stopDesk: 700 },
{ code: "31", nom: "Oran", domicile: 800, stopDesk: 500 },
{ code: "32", nom: "El Bayadh", domicile: 1200, stopDesk: 800 },
{ code: "33", nom: "Illizi", domicile: 1900, stopDesk: 1500 },
{ code: "34", nom: "Bordj Bou Arreridj", domicile: 800, stopDesk: 500 },
{ code: "35", nom: "Boumerdes", domicile: 500, stopDesk: 300 },
{ code: "36", nom: "El Tarf", domicile: 900, stopDesk: 600 },
{ code: "37", nom: "Tindouf", domicile: 1700, stopDesk: 1000 },
{ code: "38", nom: "Tissemsilt", domicile: 800, stopDesk: 500 },
{ code: "39", nom: "El Oued", domicile: 1100, stopDesk: 700 },
{ code: "40", nom: "Khenchela", domicile: 900, stopDesk: 600 },
{ code: "41", nom: "Souk Ahras", domicile: 900, stopDesk: 600 },
{ code: "42", nom: "Tipaza", domicile: 600, stopDesk: 400 },
{ code: "43", nom: "Mila", domicile: 800, stopDesk: 500 },
{ code: "44", nom: "Ain Defla", domicile: 800, stopDesk: 500 },
{ code: "46", nom: "Ain Temouchent", domicile: 800, stopDesk: 500 },
{ code: "47", nom: "Ghardaia", domicile: 1100, stopDesk: 700 },
{ code: "48", nom: "Relizane", domicile: 800, stopDesk: 500 },
{ code: "49", nom: "Timimoun", domicile: 1500, stopDesk: 1000 },
{ code: "51", nom: "Ouled Djellal", domicile: 1000, stopDesk: 600 },
{ code: "52", nom: "Beni Abbes", domicile: 1200, stopDesk: 800 },
{ code: "53", nom: "In Salah", domicile: 1800, stopDesk: 1200 },
{ code: "55", nom: "Touggourt", domicile: 1100, stopDesk: 700 },
{ code: "56", nom: "Djanet", domicile: 2200, stopDesk: 1600 },
{ code: "57", nom: "El MGhair", domicile: 1100, stopDesk: 700 },
{ code: "58", nom: "El Meniaa", domicile: 1100, stopDesk: 800 }
];
const WILAYA_SEL = '[name="address[state]"], #address_province, [name="province"]';
const SHIP_SEL = '.shipping-price, [data-shipping-price]';
const TOTAL_SEL = '.payment-due__price, [data-checkout-total-price], .total-line--total .price';
let selectedWilaya = null;
let selectedMethod = "domicile";
let baseTotal = null;
const fmt = (n) => n.toLocaleString("fr-DZ") + " DA";
function buildSelect(original) {
const sel = document.createElement("select");
sel.id = "yc-wilaya-select";
sel.name = original.name || "address[state]";
sel.style.cssText = "width:100%;padding:10px 12px;border:1px solid #ccc;border-radius:4px;font-size:14px;background:#fff;color:#333;cursor:pointer;box-sizing:border-box;";
const ph = document.createElement("option");
ph.value = "";
ph.disabled = true;
ph.selected = true;
ph.textContent = "Selectionnez votre wilaya";
sel.appendChild(ph);
WILAYAS.forEach((w) => {
const o = document.createElement("option");
o.value = w.nom;
o.textContent = w.code + " - " + w.nom;
sel.appendChild(o);
});
sel.addEventListener("change", function () {
selectedWilaya = WILAYAS.find((w) => w.nom === this.value) || null;
updateDisplay();
});
return sel;
}
function makeLabel(radioVal, isActive) {
const lbl = document.createElement("label");
lbl.id = isActive ? "yc-label-domicile" : "yc-label-stopdesk";
lbl.style.cssText = "display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:5px;cursor:pointer;margin-bottom:8px;"
+ (isActive ? "border:2px solid #2563eb;background:#eff6ff;" : "border:1.5px solid #d1d5db;background:#fff;");
const radio = document.createElement("input");
radio.type = "radio";
radio.name = "yc_delivery";
radio.value = radioVal;
radio.checked = isActive;
radio.style.cssText = "width:16px;height:16px;accent-color:#2563eb;cursor:pointer;flex-shrink:0;";
const txt = document.createElement("span");
txt.style.cssText = "flex:1;font-size:14px;font-weight:500;color:" + (isActive ? "#1e40af" : "#374151") + ";";
txt.textContent = isActive ? "Livraison a domicile" : "Livraison au bureau Stop Desk";
const prix = document.createElement("span");
prix.id = isActive ? "yc-prix-domicile" : "yc-prix-stopdesk";
prix.style.cssText = "font-weight:600;font-size:14px;color:" + (isActive ? "#1e40af" : "#374151") + ";";
prix.textContent = "---";
lbl.appendChild(radio);
lbl.appendChild(txt);
lbl.appendChild(prix);
return lbl;
}
function refreshStyles() {
const lD = document.getElementById("yc-label-domicile");
const lS = document.getElementById("yc-label-stopdesk");
if (!lD || !lS) return;
if (selectedMethod === "domicile") {
lD.style.border = "2px solid #2563eb"; lD.style.background = "#eff6ff";
lS.style.border = "1.5px solid #d1d5db"; lS.style.background = "#fff";
} else {
lS.style.border = "2px solid #2563eb"; lS.style.background = "#eff6ff";
lD.style.border = "1.5px solid #d1d5db"; lD.style.background = "#fff";
}
}
function updateDisplay() {
const elD = document.getElementById("yc-prix-domicile");
const elS = document.getElementById("yc-prix-stopdesk");
if (!selectedWilaya) return;
const frais = selectedMethod === "domicile" ? selectedWilaya.domicile : selectedWilaya.stopDesk;
if (elD) elD.textContent = fmt(selectedWilaya.domicile);
if (elS) elS.textContent = fmt(selectedWilaya.stopDesk);
const shipEl = document.querySelector(SHIP_SEL);
if (shipEl) shipEl.textContent = fmt(frais);
if (baseTotal !== null) {
const totEl = document.querySelector(TOTAL_SEL);
if (totEl) totEl.textContent = fmt(baseTotal + frais);
}
}
function injectAll() {
if (document.getElementById("yc-wilaya-select")) return;
const orig = document.querySelector(WILAYA_SEL);
if (!orig) return;
const sel = buildSelect(orig);
orig.style.display = "none";
orig.parentNode.insertBefore(sel, orig);
const totEl = document.querySelector(TOTAL_SEL);
if (totEl && baseTotal === null) {
const n = parseInt(totEl.textContent.replace(/[^\d]/g, ""), 10);
if (!isNaN(n) && n > 0) baseTotal = n;
}
if (document.getElementById("yc-delivery-methods")) return;
const wrap = document.createElement("div");
wrap.id = "yc-delivery-methods";
wrap.style.cssText = "margin:16px 0;padding:14px 16px;border:1px solid #e0e0e0;border-radius:6px;background:#fafafa;";
const titre = document.createElement("p");
titre.style.cssText = "margin:0 0 10px;font-weight:600;font-size:14px;color:#333;";
titre.textContent = "Methode de livraison";
wrap.appendChild(titre);
wrap.appendChild(makeLabel("domicile", true));
wrap.appendChild(makeLabel("stopDesk", false));
const sibling = sel.nextSibling;
sibling ? sel.parentNode.insertBefore(wrap, sibling) : sel.parentNode.appendChild(wrap);
wrap.querySelectorAll("input[type=radio]").forEach((r) => {
r.addEventListener("change", function () {
selectedMethod = this.value;
refreshStyles();
updateDisplay();
});
});
}
const obs = new MutationObserver(injectAll);
obs.observe(document.body, { childList: true, subtree: true });
injectAll();
}());