/**
* BF Product Box — Selettore esclusivo scatole / sfusi
* Quando l'utente inserisce una quantità in uno dei due campi,
* l'altro si offusca e viene disabilitato. Tornando a 0 si riattiva.
*/
(function () {
'use strict';
var boxes = 0;
var sfusi = 0;
var updating = false;
// 'none' | 'box' | 'sfusi'
var activeMode = 'none';
var precision = (typeof prestashop !== 'undefined' && prestashop.currency) ? (prestashop.currency.precision || 2) : 2;
function parseIntSafe(value) {
var parsed = parseInt(value, 10) || 0;
return parsed < 0 ? 0 : parsed;
}
function getContext() {
var container = document.getElementById('bfpbox-container');
if (!container) {
return null;
}
var parsedTiers = [];
try {
parsedTiers = JSON.parse(container.dataset.tiers || '[]');
} catch (e) {
parsedTiers = [];
}
return {
container: container,
step: parseInt(container.dataset.step, 10) || 50,
basePrice: parseFloat(container.dataset.basePrice) || 0,
tiers: parsedTiers,
showSavings: container.dataset.showSavings === '1',
qtyInput: document.getElementById('quantity_wanted'),
boxInput: document.getElementById('bfpbox-box-input'),
boxPiecesEl: document.getElementById('bfpbox-box-pieces'),
sfusiInput: document.getElementById('bfpbox-sfusi-input'),
btnBoxPlus: document.getElementById('bfpbox-box-plus'),
btnBoxMinus: document.getElementById('bfpbox-box-minus'),
btnSfusiPlus: document.getElementById('bfpbox-sfusi-plus'),
btnSfusiMinus: document.getElementById('bfpbox-sfusi-minus'),
boxRow: document.getElementById('bfpbox-row-box'),
sfusiRow: document.getElementById('bfpbox-row-sfusi'),
addBtn: document.querySelector('#add-to-cart-or-refresh [data-button-action="add-to-cart"]'),
};
}
function getTotal(step) {
return (boxes * step) + sfusi;
}
function round2(val) {
var factor = Math.pow(10, precision);
return Math.round(val * factor) / factor;
}
function formatPrice(amount) {
amount = round2(amount);
if (typeof prestashop !== 'undefined' && prestashop.currency) {
var formatted = amount.toFixed(precision);
var sign = prestashop.currency.sign || '€';
if (prestashop.currency.format === 1) {
return sign + ' ' + formatted;
}
return formatted + ' ' + sign;
}
return amount.toFixed(2) + ' €';
}
function findActiveTier(discountedQty, tiers) {
var active = null;
for (var i = 0; i < tiers.length; i++) {
if (discountedQty >= tiers[i].qty) {
active = tiers[i];
}
}
return active;
}
/* ─── Lock / unlock dei campi ─── */
function updateLockState(context) {
if (boxes > 0 && sfusi === 0) {
activeMode = 'box';
} else if (sfusi > 0 && boxes === 0) {
activeMode = 'sfusi';
} else if (boxes === 0 && sfusi === 0) {
activeMode = 'none';
}
if (context.boxRow && context.sfusiRow) {
if (activeMode === 'sfusi') {
context.boxRow.classList.add('bfpbox-row-disabled');
context.sfusiRow.classList.remove('bfpbox-row-disabled');
} else if (activeMode === 'box') {
context.sfusiRow.classList.add('bfpbox-row-disabled');
context.boxRow.classList.remove('bfpbox-row-disabled');
} else {
context.boxRow.classList.remove('bfpbox-row-disabled');
context.sfusiRow.classList.remove('bfpbox-row-disabled');
}
}
var boxDisabled = (activeMode === 'sfusi');
var sfusiDisabled = (activeMode === 'box');
if (context.boxInput) {
context.boxInput.disabled = boxDisabled;
}
if (context.btnBoxPlus) {
context.btnBoxPlus.disabled = boxDisabled;
}
if (context.btnBoxMinus) {
context.btnBoxMinus.disabled = boxDisabled;
}
if (context.sfusiInput) {
context.sfusiInput.disabled = sfusiDisabled;
}
if (context.btnSfusiPlus) {
context.btnSfusiPlus.disabled = sfusiDisabled;
}
if (context.btnSfusiMinus) {
context.btnSfusiMinus.disabled = sfusiDisabled;
}
}
function syncQtyInput(context) {
if (!context || !context.qtyInput) {
return;
}
updating = true;
context.qtyInput.value = getTotal(context.step);
context.qtyInput.dispatchEvent(new Event('change', { bubbles: true }));
updating = false;
}
function syncStateFromQtyInput(resetToZero) {
var context = getContext();
if (!context || !context.qtyInput) {
return false;
}
context.qtyInput.setAttribute('min', '0');
if (resetToZero) {
boxes = 0;
sfusi = 0;
context.qtyInput.value = 0;
return true;
}
var qty = parseIntSafe(context.qtyInput.value);
if (qty > 0 && context.step > 0 && qty % context.step === 0) {
boxes = qty / context.step;
sfusi = 0;
} else {
boxes = 0;
sfusi = qty;
}
return true;
}
function syncStateFromControls(context) {
if (!context) {
return;
}
var liveBoxes = context.boxInput ? parseIntSafe(context.boxInput.value) : boxes;
var liveSfusi = context.sfusiInput ? parseIntSafe(context.sfusiInput.value) : sfusi;
if (liveBoxes > 0) {
liveSfusi = 0;
} else if (liveSfusi > 0) {
liveBoxes = 0;
}
boxes = liveBoxes;
sfusi = liveSfusi;
}
function syncQtyBeforeSubmit() {
var context = getContext();
if (!context || !context.qtyInput) {
return;
}
syncStateFromControls(context);
context.qtyInput.value = getTotal(context.step);
}
function updateDisplay() {
var context = getContext();
if (!context || !context.qtyInput || !context.boxInput || !context.sfusiInput) {
return;
}
if (updating) return;
updating = true;
context.qtyInput.setAttribute('min', '0');
updateLockState(context);
var totalQty = getTotal(context.step);
var discountedQty = boxes * context.step;
context.boxInput.value = boxes;
if (context.boxPiecesEl) {
context.boxPiecesEl.textContent = discountedQty > 0 ? '= ' + discountedQty + ' pz' : '';
}
context.sfusiInput.value = sfusi;
var calcEl = document.getElementById('bfpbox-dynamic-calc');
if (!calcEl) { updating = false; return; }
var html = '';
if (context.addBtn) {
context.addBtn.disabled = (totalQty < 1);
}
if (totalQty < 1) {
calcEl.innerHTML = '';
highlightTierRow(context, null);
updating = false;
return;
}
if (activeMode === 'sfusi' || (activeMode === 'none' && sfusi > 0)) {
html += '
';
html += '
' + totalQty + ' pezzi sfusi: ' + formatPrice(totalQty * context.basePrice) + ' (' + formatPrice(context.basePrice) + '/pz a prezzo pieno)
';
var nextTier = context.tiers.length > 0 ? context.tiers[0] : null;
if (nextTier) {
var boxesNeeded = Math.ceil(nextTier.qty / context.step);
html += '
Passa a ' + boxesNeeded + ' scatol' + (boxesNeeded === 1 ? 'a' : 'e') + ' per pagare solo ' + formatPrice(nextTier.unit_price) + '/pz!
';
}
html += '
';
highlightTierRow(context, null);
} else if (activeMode === 'box' && discountedQty > 0) {
var tier = findActiveTier(discountedQty, context.tiers);
if (tier) {
var discountedTotal = discountedQty * tier.unit_price;
var totalIfFull = discountedQty * context.basePrice;
html += '';
html += '
' + boxes + ' scatol' + (boxes === 1 ? 'a' : 'e') + ' (' + discountedQty + ' pz) a ' + formatPrice(tier.unit_price) + '/pz:
';
html += '
';
html += '
';
html += '' + discountedQty + ' pz × ' + formatPrice(tier.unit_price) + '';
html += '' + formatPrice(discountedTotal) + '';
html += '
';
html += '
';
html += 'Totale';
html += '' + formatPrice(discountedTotal) + '';
html += '
';
html += '
';
if (context.showSavings && totalIfFull > discountedTotal) {
var saving = totalIfFull - discountedTotal;
var savingPct = ((saving / totalIfFull) * 100).toFixed(1);
html += '
Risparmi ' + formatPrice(saving) + ' (' + savingPct + '%) rispetto al prezzo pieno di ' + formatPrice(totalIfFull) + '
';
}
html += '
';
highlightTierRow(context, tier);
} else {
highlightTierRow(context, null);
}
} else {
highlightTierRow(context, null);
}
calcEl.innerHTML = html;
updating = false;
}
function highlightTierRow(context, tier) {
if (!context) {
return;
}
var rows = context.container.querySelectorAll('.bfpbox-tiers-table tr[data-tier-qty]');
for (var i = 0; i < rows.length; i++) {
var tierQty = parseInt(rows[i].dataset.tierQty, 10);
rows[i].classList.toggle('bfpbox-tier-active', tier && tierQty === tier.qty);
}
}
function bindHandlers() {
var context = getContext();
if (!context || !context.qtyInput || !context.boxInput || !context.sfusiInput) {
return;
}
if (context.btnBoxPlus && context.btnBoxPlus.dataset.bfpboxBound !== '1') {
context.btnBoxPlus.dataset.bfpboxBound = '1';
context.btnBoxPlus.addEventListener('click', function () {
if (activeMode === 'sfusi') return;
var liveContext = getContext();
if (!liveContext) return;
boxes = parseIntSafe(liveContext.boxInput.value) + 1;
sfusi = 0;
syncQtyInput(liveContext);
updateDisplay();
});
}
if (context.btnBoxMinus && context.btnBoxMinus.dataset.bfpboxBound !== '1') {
context.btnBoxMinus.dataset.bfpboxBound = '1';
context.btnBoxMinus.addEventListener('click', function () {
if (activeMode === 'sfusi') return;
var liveContext = getContext();
if (!liveContext) return;
boxes = parseIntSafe(liveContext.boxInput.value);
if (boxes > 0) {
boxes--;
sfusi = 0;
syncQtyInput(liveContext);
updateDisplay();
}
});
}
if (context.boxInput.dataset.bfpboxBound !== '1') {
context.boxInput.dataset.bfpboxBound = '1';
context.boxInput.addEventListener('change', function () {
if (activeMode === 'sfusi') return;
boxes = parseIntSafe(context.boxInput.value);
sfusi = 0;
syncQtyInput(getContext());
updateDisplay();
});
context.boxInput.addEventListener('input', function () {
clearTimeout(context.boxInput._bfTimer);
context.boxInput._bfTimer = setTimeout(function () {
if (activeMode === 'sfusi') return;
boxes = parseIntSafe(context.boxInput.value);
sfusi = 0;
syncQtyInput(getContext());
updateDisplay();
}, 400);
});
}
if (context.btnSfusiPlus && context.btnSfusiPlus.dataset.bfpboxBound !== '1') {
context.btnSfusiPlus.dataset.bfpboxBound = '1';
context.btnSfusiPlus.addEventListener('click', function () {
if (activeMode === 'box') return;
var liveContext = getContext();
if (!liveContext) return;
sfusi = parseIntSafe(liveContext.sfusiInput.value) + 1;
boxes = 0;
syncQtyInput(liveContext);
updateDisplay();
});
}
if (context.btnSfusiMinus && context.btnSfusiMinus.dataset.bfpboxBound !== '1') {
context.btnSfusiMinus.dataset.bfpboxBound = '1';
context.btnSfusiMinus.addEventListener('click', function () {
if (activeMode === 'box') return;
var liveContext = getContext();
if (!liveContext) return;
sfusi = parseIntSafe(liveContext.sfusiInput.value);
if (sfusi > 0) {
sfusi--;
boxes = 0;
syncQtyInput(liveContext);
updateDisplay();
}
});
}
if (context.sfusiInput.dataset.bfpboxBound !== '1') {
context.sfusiInput.dataset.bfpboxBound = '1';
context.sfusiInput.addEventListener('change', function () {
if (activeMode === 'box') return;
sfusi = parseIntSafe(context.sfusiInput.value);
boxes = 0;
syncQtyInput(getContext());
updateDisplay();
});
context.sfusiInput.addEventListener('input', function () {
clearTimeout(context.sfusiInput._bfTimer);
context.sfusiInput._bfTimer = setTimeout(function () {
if (activeMode === 'box') return;
sfusi = parseIntSafe(context.sfusiInput.value);
boxes = 0;
syncQtyInput(getContext());
updateDisplay();
}, 400);
});
}
if (context.qtyInput.dataset.bfpboxQtyBound !== '1') {
context.qtyInput.dataset.bfpboxQtyBound = '1';
context.qtyInput.addEventListener('change', function () {
if (updating) return;
syncStateFromQtyInput(false);
updateDisplay();
});
context.qtyInput.addEventListener('input', function () {
clearTimeout(context.qtyInput._bfTimer);
context.qtyInput._bfTimer = setTimeout(function () {
if (updating) return;
syncStateFromQtyInput(false);
updateDisplay();
}, 400);
});
}
if (context.addBtn && context.addBtn.dataset.bfpboxSubmitBound !== '1') {
context.addBtn.dataset.bfpboxSubmitBound = '1';
context.addBtn.addEventListener('click', function () {
syncQtyBeforeSubmit();
}, true);
}
}
if (typeof prestashop !== 'undefined') {
prestashop.on('updatedProduct', function () {
setTimeout(function () {
bindHandlers();
syncStateFromQtyInput(true);
updateDisplay();
}, 100);
});
}
window.addEventListener('pageshow', function () {
bindHandlers();
syncStateFromQtyInput(true);
updateDisplay();
});
if (!syncStateFromQtyInput(true)) {
return;
}
bindHandlers();
updateDisplay();
})();
Home
Ενεργά φίλτρα
-
Τύπος γεύσης: Φυσική γεύση
clear
-
Περιεχόμενο φιάλης σε mL: 10
clear
Δυνατό, αυθεντικό, με μια ξηρή και σύνθετη φρεσκάδα.
Η έντονη γεύση της μέντας με μια νότα Balsamica που την κάνει ξεχωριστή, έντονη και γευστική.
Κυριαρχεί η φρεσκάδα, με μια ελαφρώς πικρή γεύση.
Μια ιδιαίτερη γεύση, απαλή, ελαφρώς πικάντικη και γλυκιά.
10,01 €
(incl. imposta consumo: 1,52 €)
Μια ιδιαίτερη γεύση, απαλή, ελαφρώς πικάντικη και γλυκιά.
Φυσική, βοτανική γεύση, η γεύση των Foglie φρεσκοσπασμένων φύλλων μέντας, που ξεχωρίζει για την υφή της που θυμίζει τσίχλα.
Αναμφίβολα πολύ δροσερή, λεπτή, με έντονη γεύση και ευωδιαστή.
Παγωμένη, απόλυτη φρεσκάδα, έντονη και ιδιαίτερα δυνατή.
Απαλή, ελαφρώς γλυκιά, με ένα αρωματικό, βοτανικό άρωμα.
10,01 €
(incl. imposta consumo: 1,52 €)
Απαλή, ελαφρώς γλυκιά, με ένα αρωματικό, βοτανικό άρωμα.
Είναι ιδιαίτερα δημοφιλής για τη χαρακτηριστική και έντονη γεύση της, που είναι σχεδόν «πικάντικη».
Ελαφρώς πικάντικο, με ξηρή γεύση και πολύ δροσερό.
10,01 €
(incl. imposta consumo: 1,52 €)
Ελαφρώς πικάντικο, με ξηρή γεύση και πολύ δροσερό.
check_circle
check_circle