/**
* 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: 20
clear
Aroma organico di tabacco coil friendly estratto da foglie di Avana
Conosciuto anche con il nome di Habanos, l'Avana è un tabacco erbaceo, abbastanza morbido e caratterizzato da note fermentate e lievemente affumicate
22,03 €
(incl. imposta consumo: 3,04 €)
Aroma organico di tabacco coil friendly estratto da foglie di Avana
Aroma organico di tabacco coil friendly estratto da foglie di Burley
Il Burley appartiene alla famiglia dei tabacchi chiari, è un tabacco tostato, asciutto e morbido, con un sentore di frutta secca
22,03 €
(incl. imposta consumo: 3,04 €)
Aroma organico di tabacco coil friendly estratto da foglie di Burley
Aroma organico di tabacco coil friendly estratto da foglie di Kentucky
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto da foglie di Kentucky
Il Kentucky appartiene alla famiglia dei tabacchi scuri. Si caratterizza per essere un tabacco fermentato e molto affumicato e presenta note legnose e spigolose.
22,03 €
(incl. imposta consumo: 3,04 €)
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto da foglie di Latakia
Il Latakia appartiene alla famiglia dei tabacchi scuri, profondo e secco, si caratterizza per le sue note speziate, fumose e di incenso
22,03 €
(incl. imposta consumo: 3,04 €)
Aroma organico di tabacco coil friendly estratto da foglie di Latakia
Aroma organico di tabacco coil friendly estratto da foglie di Basma
Il Basma è un tabacco orientale, dalle note speziate, secche e legnose
22,03 €
(incl. imposta consumo: 3,04 €)
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto in purezza da foglie di Latakia
Un pregiato estratto in purezza, intenso e corposo. Un aroma di cui gli amanti del Latakia potranno apprezzare in tutte le sue sfumature. Dolce in uno sfondo amaro, lievemente speziato, fumoso con qualche sfumatura legnosa.
Vincitore del premio "Miglior liquido al tabacco" al Vapexpro Grecia 2023 e Vapexpo Spagna 2024
25,03 €
(incl. imposta consumo: 3,04 €)
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto in purezza da foglie di Latakia
Un pregiato estratto in purezza, intenso e corposo. Un aroma di cui gli amanti del Latakia potranno apprezzare in tutte le sue sfumature. Dolce in uno sfondo amaro, lievemente speziato, fumoso con qualche sfumatura legnosa.
Vincitore del premio "Miglior liquido al tabacco" al Vapexpro Grecia 2023 e Vapexpo Spagna 2024
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto da foglie di Kentucky italiano proveniente dalla Valtiberina
Ispirato al sigaro toscano, arricchito da note fumose
Vincitore del premio "Miglior liquido al tabacco" al Vapexpro Polonia 2024
25,03 €
(incl. imposta consumo: 3,04 €)
Aroma organico di tabacco coil friendly estratto da foglie di Kentucky italiano proveniente dalla Valtiberina
Ispirato al sigaro toscano, arricchito da note fumose
Vincitore del premio "Miglior liquido al tabacco" al Vapexpro Polonia 2024
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto da foglie di Virginia
Il Virginia appartiene alla famiglia dei tabacchi chiari. Un tabacco dolce, morbido e paglierino, con un sentore floreale e di miele
22,03 €
(incl. imposta consumo: 3,04 €)
check_circle
check_circle