Nos nouvelles gammes sont désormais disponible dans la boutique ! Jetez y un œil dès maintenant et découvrez nos nouveaux adoucissant, lessives et autres !
Shopping Cart 0
Wishlist 0
No products in the wishlist
(function(){
var PID = 0;
var MODES = [];
var UC = 1;
var CPAL = 0;
var PVMAP = {"171":{"uc":1,"cpal":0,"modes":[]},"11075":{"uc":10,"cpal":40,"modes":{"carton":10,"pallet":400}},"11058":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"11052":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"11046":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"11034":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10859":{"uc":15,"cpal":80,"modes":{"unit":1,"carton":15,"pallet":1200}},"10844":{"uc":15,"cpal":80,"modes":{"unit":1,"carton":15,"pallet":1200}},"10518":{"uc":10,"cpal":40,"modes":{"unit":1,"carton":10,"pallet":400}},"10503":{"uc":12,"cpal":0,"modes":{"carton":12}},"10345":{"uc":10,"cpal":40,"modes":{"unit":1,"carton":10,"pallet":400}},"10141":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10094":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10093":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10092":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10086":{"uc":12,"cpal":40,"modes":{"unit":1,"carton":12,"pallet":480}},"10085":{"uc":12,"cpal":40,"modes":{"unit":1,"carton":12,"pallet":480}},"10083":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10082":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10081":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10080":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10079":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10078":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10076":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10075":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10074":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10073":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10072":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10071":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10068":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10067":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"10066":{"uc":4,"cpal":40,"modes":{"carton":4,"pallet":160}},"9602":{"uc":1,"cpal":48,"modes":{"unit":1,"pallet":48}}};
var ADD_URL = 'https://mfdistrib.fr/?wc-ajax=add_to_cart';
var REMOVE_URL = 'https://mfdistrib.fr/?wc-ajax=mfd_remove_pallet';
function notify(msg, isError) {
var bar = document.querySelector('.sober-alert-bar');
if (!bar) { bar = document.createElement('div'); bar.className = 'sober-alert-bar'; document.body.appendChild(bar); }
var div = document.createElement('div');
div.setAttribute('role', 'alert');
div.className = isError ? 'woocommerce-error' : 'woocommerce-message';
div.textContent = msg;
bar.innerHTML = '';
bar.appendChild(div);
bar.classList.remove('active');
void bar.offsetWidth;
bar.classList.add('active');
setTimeout(function() { bar.classList.remove('active'); }, 4000);
}
function refresh() {
if (window.jQuery) { window.jQuery(document.body).trigger('wc_fragment_refresh'); }
}
function postForm(url, fields) {
var parts = [];
for (var k in fields) {
if (Object.prototype.hasOwnProperty.call(fields, k)) { parts.push(encodeURIComponent(k) + '=' + encodeURIComponent(fields[k])); }
}
return fetch(url, { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, body: parts.join('&') }).then(function(r) { return r.json(); });
}
function postJson(url, obj) {
return fetch(url, { method: 'POST', credentials: 'same-origin', cache: 'no-store', headers: { 'Content-Type': 'application/json; charset=UTF-8' }, body: JSON.stringify(obj) }).then(function(r) { return r.json(); });
}
function cfgOf(scoped) {
var f = null;
try {
if (scoped && scoped.elements) { f = scoped; }
else if (scoped && scoped.closest) { f = scoped.closest('form.cart') || null; }
} catch (e0) { f = null; }
var pid = 0;
if (f && f.elements && f.elements['add-to-cart']) {
var av = parseInt(f.elements['add-to-cart'].value, 10);
if (av > 0) { pid = av; }
}
var m = (f && pid > 0) ? PVMAP[String(pid)] : null;
if (m) { return { pid: pid, uc: m.uc, cpal: m.cpal, modes: m.modes }; }
if (pid > 0) { return { pid: pid, uc: 1, cpal: 0, modes: {} }; }
if (PID > 0) {
var fm = PVMAP[String(PID)];
if (fm) { return { pid: PID, uc: fm.uc, cpal: fm.cpal, modes: fm.modes }; }
}
return { pid: (PID || 0), uc: UC, cpal: CPAL, modes: MODES };
}
function packDisp(mode, per, cfg) {
if (mode === 'pallet') { return (cfg.cpal > 0) ? cfg.cpal : per; }
return 1;
}
function syncForm(form, mode, disp, packs) {
if (!form || !form.elements) { return; }
var modeEl = form.elements.mfd_sale_mode || null;
var qtyEl = form.elements.quantity || null;
var packEl = form.elements.mfd_sale_quantity || null;
if (modeEl) { modeEl.value = mode; }
if (qtyEl) {
qtyEl.value = String(disp);
try { qtyEl.dispatchEvent(new window.Event('change')); } catch (e0) {}
}
if (packEl) { packEl.value = String(packs); }
}
function syncAll(mode, disp, packs) {
var fs = document.querySelectorAll('form.cart');
for (var i = 0; i < fs.length; i++) { syncForm(fs[i], mode, disp, packs); }
}
function quickAdd(mode, units, packs, btn, label, pid) {
var qpid = pid || PID || 0;
postForm(ADD_URL, { product_id: qpid, quantity: units, mfd_sale_mode: mode, mfd_sale_quantity: packs })
.then(function(d) {
if (btn) { btn.disabled = false; }
if (d && d.fragments) {
refresh();
notify('Produit ajouté au panier.');
if (btn && label) { btn.textContent = 'Ajouté'; setTimeout(function() { btn.textContent = label; }, 1500); }
} else {
var m = 'Erreur lors de l ajout au panier.';
if (d && d.message) { m = d.message; }
notify(m, true);
}
})
.catch(function() {
if (btn) { btn.disabled = false; }
notify('Erreur réseau, réessayez.', true);
});
}
function doSubmit(frm) {
var cfg = cfgOf(frm);
var qtyEl = frm.elements ? (frm.elements.quantity || null) : null;
var disp = parseInt(qtyEl && qtyEl.value ? qtyEl.value : '1', 10);
if (!(disp > 0)) { return; }
var modeEl = frm.elements ? (frm.elements.mfd_sale_mode || null) : null;
var mode = (modeEl && modeEl.value) ? modeEl.value : '';
var per = cfg.modes[mode] || 1;
if ((mode === 'carton' || mode === 'pallet') && !cfg.modes[mode]) { notify('Configuration produit indisponible, ouvrez sa fiche.', true); return; }
var units = disp;
if (mode === 'carton' || mode === 'pallet') { units = disp * (cfg.uc > 0 ? cfg.uc : 1); }
var packs = Math.max(1, Math.ceil(units / per));
var native = frm.querySelector('.single_add_to_cart_button');
if (native) { native.disabled = true; }
quickAdd(mode, units, packs, null, null, cfg.pid);
syncAll(mode, disp, packs);
if (native) { setTimeout(function(nb) { return function() { nb.disabled = false; }; }(native), 800); }
}
function doQuick(b) {
var cfg = cfgOf(b);
var mode = b.getAttribute('data-mfd-quick-mode');
var per = cfg.modes[mode] || 1;
if (!cfg.modes[mode]) { notify('Configuration produit indisponible, ouvrez sa fiche.', true); return; }
var dstep = packDisp(mode, per, cfg);
var dcur = 0;
var cf = b.closest('form.cart');
if (cf && cf.elements) {
var cme = cf.elements.mfd_sale_mode || null;
var cqb = cf.elements.quantity || null;
if (cme && cme.value === mode && cqb) { dcur = parseInt(cqb.value, 10) || 0; }
}
var dnext = Math.max(dstep, dcur + dstep);
var dps = 1;
if (mode === 'pallet') { dps = (dstep > 0) ? Math.max(1, Math.ceil(dnext / dstep)) : 1; }
else { dps = dnext; }
syncAll(mode, dnext, dps);
var label = b.textContent;
b.disabled = true;
quickAdd(mode, per, 1, b, label, cfg.pid);
}
function doRemove(b) {
var cfg = cfgOf(b);
var label = b.textContent;
b.disabled = true;
postForm(REMOVE_URL, { product_id: cfg.pid })
.then(function(d) {
b.disabled = false;
if (d && d.ok) {
refresh();
var dpu = (cfg.uc > 0) ? cfg.uc : 1;
var dleft = Math.max(0, Math.floor(((d.units !== undefined) ? d.units : 0) / dpu));
var dpk = (d.packs !== undefined) ? d.packs : 0;
syncAll('pallet', dleft, Math.max(dpk, 0));
notify('Palette retirée du panier.');
b.textContent = 'Retirée';
setTimeout(function() { b.textContent = label; }, 1500);
} else {
var m = (d && d.message) ? d.message : 'Erreur.';
notify(m, true);
}
})
.catch(function() {
b.disabled = false;
notify('Erreur réseau, réessayez.', true);
});
}
function cartQtyFix() {
if (!document.body.classList.contains('woocommerce-cart')) { return; }
var rows = document.querySelectorAll('tr.woocommerce-cart-form__cart-item');
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
var wrap = row.querySelector('td.product-quantity .quantity');
if (!wrap || wrap.getAttribute('data-mfd-cartfix')) { continue; }
var rm = row.querySelector('a.remove[data-product_id]');
var pid = rm ? (parseInt(rm.getAttribute('data-product_id'), 10) || 0) : 0;
var cfg = (pid > 0) ? PVMAP[String(pid)] : null;
if (!cfg || !cfg.uc || cfg.uc < 2) { continue; }
var inp = wrap.querySelector('input.qty');
if (!inp) { continue; }
var units = parseInt(inp.value, 10) || 0;
var mode = '';
var dds = row.querySelectorAll('dd p');
for (var j = 0; j < dds.length; j++) {
var t = (dds[j].textContent || '').toLowerCase();
if (t.indexOf('palette') !== -1) { mode = 'pallet'; }
else if (t.indexOf('carton') !== -1) { mode = 'carton'; }
}
var lbl;
if (mode === 'pallet' && cfg.cpal > 0) {
lbl = Math.round(units / (cfg.uc * cfg.cpal)) + ' palette(s) (' + Math.round(units / cfg.uc) + ' cartons)';
} else {
lbl = Math.round(units / cfg.uc) + ' carton(s)';
}
var sp = document.createElement('span');
sp.className = 'mfd-cart-qty';
sp.textContent = lbl;
wrap.style.display = 'none';
wrap.parentNode.insertBefore(sp, wrap);
wrap.setAttribute('data-mfd-cartfix', '1');
}
}
function fixLoad(form) {
if (!form || !form.elements) { return; }
var me0 = form.elements.mfd_sale_mode || null;
var qe0 = form.elements.quantity || null;
var cfg = cfgOf(form);
if (me0 && qe0 && me0.value === 'carton' && cfg.uc > 1) {
var cur0 = parseInt(qe0.value, 10) || 0;
if (cur0 === cfg.uc) { qe0.value = '1'; }
}
}
function bindProduct() {
var forms = document.querySelectorAll('form.cart');
for (var fi = 0; fi < forms.length; fi++) {
var form = forms[fi];
fixLoad(form);
if (!form.getAttribute('data-pv2-submit')) {
form.setAttribute('data-pv2-submit', '1');
form.addEventListener('submit', function(ev) {
ev.preventDefault();
ev.stopPropagation();
doSubmit(this);
}, true);
}
var quickRoot = form.querySelector('[data-mfd-quick-add]');
var removes = form.querySelectorAll('[data-mfd-remove-pallet]');
for (var ri = 0; ri < removes.length; ri++) {
var rbtn = removes[ri];
if (quickRoot && rbtn.parentElement !== quickRoot) { quickRoot.appendChild(rbtn); }
}
}
cartQtyFix();
}
document.addEventListener('click', function(ev) {
var t = ev.target;
var qb = (t && t.closest) ? t.closest('[data-mfd-quick-mode]') : null;
if (qb) {
ev.preventDefault();
ev.stopPropagation();
doQuick(qb);
return;
}
var rb = (t && t.closest) ? t.closest('[data-mfd-remove-pallet]') : null;
if (rb) {
ev.preventDefault();
ev.stopPropagation();
doRemove(rb);
}
}, true);
document.addEventListener('DOMContentLoaded', function() {
var fs0 = document.querySelectorAll('form.cart');
for (var i0 = 0; i0 < fs0.length; i0++) {
fixLoad(fs0[i0]);
}
});
bindProduct();
document.body.addEventListener('wc_fragments_refreshed', bindProduct);
document.body.addEventListener('updated_wc_div', bindProduct);
var pv2Obs = null;
try {
if (window.MutationObserver) {
var pv2Timer = null;
pv2Obs = new window.MutationObserver(function() {
if (pv2Timer) { clearTimeout(pv2Timer); }
pv2Timer = setTimeout(function() { bindProduct(); }, 250);
});
pv2Obs.observe(document.body, { childList: true, subtree: true });
}
} catch (e1) {}
try {
if (String(location.search).indexOf('mfd=') !== -1 && !document.getElementById('mfd-badge-js')) {
var pv2b = document.createElement('div');
pv2b.id = 'mfd-badge-js';
pv2b.textContent = 'MFD v25 - SCRIPT OK';
document.body.appendChild(pv2b);
}
} catch (e2) {}
})();