/**
* 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
Περιεχόμενο φιάλης σε mL: 40
clear
Χωρίς απόθεμα
Cacao - 40+40/80 mL - Aroma per sistema scomposto 40+40/80, diluire con PG o VG puri o premiscelati nelle basi da 10 mL BIY o ZERO. Diluiibile da 40 a 80 ml ottenendo concentrazioni aromatiche dal 12 all’ 8%
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto da foglie di Habanos, Dark Fire Cured e Virginia
22,03 €
(incl. imposta consumo: 3,04 €)
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto da foglie di Latakia, Virginia e Katerini
22,03 €
(incl. imposta consumo: 3,04 €)
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto da foglie di Latakia, aromatizzato con caramello salato e crema bavarese
22,03 €
(incl. imposta consumo: 3,04 €)
Χωρίς απόθεμα
Aroma per sistema scomposto 20+40, diluire con 40 mL di PG o VG puri o premiscelati nelle basi da 10 mL BIY o ZERO
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto da foglie di Piloto Cubano, Habanos, Mata Fina brasiliano
Ispirato al sigaro cubano, è connotato da note di testa avvolgenti, paglierine e dolciastre. A chiudere si percepisce un retrogusto lievemente fermentato
Vincitore del premio "Miglior liquido al tabacco" al Vapexpro Repubblica Ceca 2024
25,03 €
(incl. imposta consumo: 3,04 €)
Χωρίς απόθεμα
Habanos Grand Reserve - 40+40/80 mL -
Aroma per sistema scomposto 40+40/80, diluire con PG o VG puri o premiscelati nelle basi da 10 mL BIY o ZERO. Diluiibile da 40 a 80 ml ottenendo concentrazioni aromatiche dal 12 all’ 8%
Χωρίς απόθεμα
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 Virginia e Burley, aromatizzato con menta
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 Virginia, Burley e Cavendish, aromatizzato con marasca (particolare varietà di ciliegia) e vaniglia bacche
22,03 €
(incl. imposta consumo: 3,04 €)
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto da foglie di Kentucky e Dark Fire Cured
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 Virginia, aromatizzato con biscotto alla vaniglia
22,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
25,03 €
(incl. imposta consumo: 3,04 €)
Χωρίς απόθεμα
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 €)
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto da foglie di Cavendish, Burley e Virginia
22,03 €
(incl. imposta consumo: 3,04 €)
Χωρίς απόθεμα
Aroma organico di tabacco coil friendly estratto da foglie di Cavendish, Burley e Virginia
check_circle
check_circle