(function (){
'use strict';
var C=window.CMC;
if(!C) return;
var ESTADO=null;
var PEDIDO=leerPedido();
var vista='lista';
var abierto=false;
function esc(s){
return String(s==null ? '':s).replace(/[&<>"']/g, function (c){
return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c];
});
}
function dinero(v){
var m=C.moneda, p=Number(v||0).toFixed(m.n).split('.');
p[0]=p[0].replace(/\B(?=(\d{3})+(?!\d))/g, m.m);
return m.s + p.join(m.d);
}
function leerPedido(){
try { return JSON.parse(localStorage.getItem('cmc_pedido'))||{};} catch (e){ return {};}}
function guardarPedido(){
try { localStorage.setItem('cmc_pedido', JSON.stringify(PEDIDO)); } catch (e){}}
function api(datos){
var body=new URLSearchParams();
Object.keys(datos||{}).forEach(function (k){ body.append(k, datos[k]); });
return fetch(C.api, {
method: 'POST', credentials: 'same-origin',
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, body: body
}).then(function (r){ return r.json(); });
}
var I={
cerrar: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M6 6l12 12M18 6L6 18"/></svg>',
menos: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M6 12h12"/></svg>',
mas: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M12 6v12M6 12h12"/></svg>',
tacho: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 7h16M10 11v6M14 11v6M6 7l1 12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2l1-12M9 7V4h6v3"/></svg>',
atras: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 18l-6-6 6-6"/></svg>',
bolsa: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M6 7h12l-1 13H7L6 7z"/><path d="M9 7a3 3 0 0 1 6 0"/></svg>',
tienda: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"><path d="M4 10v10h16V10M3 10l2-6h14l2 6M3 10h18M9 20v-6h6v6"/></svg>',
camion: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h11v10H3zM14 10h4l3 3v3h-7"/><circle cx="7" cy="17.5" r="1.8"/><circle cx="17" cy="17.5" r="1.8"/></svg>',
efectivo: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"><rect x="2.5" y="6" width="19" height="12" rx="2"/><circle cx="12" cy="12" r="2.6"/><path d="M6 9.5v5M18 9.5v5"/></svg>',
banco: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-5 9 5M5 9v9M9.5 9v9M14.5 9v9M19 9v9M3 20h18"/></svg>',
tarjeta: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"><rect x="2.5" y="5" width="19" height="14" rx="2.5"/><path d="M2.5 10h19M6.5 15h4"/></svg>',
ok: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg>',
wa: '<svg viewBox="0 0 24 24"><path fill="currentColor" d="M12.04 2C6.58 2 2.13 6.45 2.13 11.91c0 1.75.46 3.45 1.32 4.95L2.05 22l5.25-1.38c1.45.79 3.08 1.21 4.74 1.21 5.46 0 9.91-4.45 9.91-9.91C21.95 6.45 17.5 2 12.04 2zm5.82 14.01c-.25.69-1.45 1.33-2 1.38-.51.05-1 .24-3.36-.7-2.84-1.12-4.63-4.03-4.77-4.22-.14-.19-1.14-1.52-1.14-2.9s.72-2.06.98-2.34c.25-.28.55-.35.74-.35h.53c.17 0 .4-.06.62.48.25.6.83 2.06.9 2.2.08.15.12.32.02.51-.09.19-.14.31-.28.48-.14.17-.3.37-.42.5-.14.14-.29.29-.12.57.17.28.74 1.22 1.59 1.97 1.09.97 2.01 1.27 2.29 1.41.28.14.45.12.61-.07.17-.19.71-.83.9-1.11.19-.28.37-.23.63-.14.25.09 1.62.76 1.9.9.28.14.46.21.53.32.07.12.07.67-.18 1.36z"/></svg>'
};
var PAGOS=[
{ id: 'efectivo', n: 'Efectivo', d: 'Precio con descuento', ico: I.efectivo },
{ id: 'transferencia', n: 'Transferencia bancaria', d: 'Precio con descuento · te enviamos los datos', ico: I.banco },
{ id: 'tarjeta', n: 'Tarjeta de crédito o débito', d: 'Precio normal · Datafast o Medianet', ico: I.tarjeta }
];
var enPagina=C.enPagina&&document.getElementById('cmc-pagina');
var raiz=document.createElement('div');
raiz.className='cmc' + (enPagina ? ' cmc-inline':'');
raiz.innerHTML =
(enPagina ? '':'<div class="cmc-fondo" data-cerrar></div>') +
'<section class="cmc-panel" role="' + (enPagina ? 'region':'dialog') + '" aria-modal="' + (enPagina ? 'false':'true') + '" aria-labelledby="cmc-titulo">' +
'<header class="cmc-top">' +
'<button type="button" class="cmc-ico-btn cmc-volver" aria-label="Atrás" hidden>' + I.atras + '</button>' +
'<h2 id="cmc-titulo" class="cmc-titulo">Tu carrito</h2>' +
(enPagina ? '':'<button type="button" class="cmc-ico-btn" data-cerrar aria-label="Cerrar">' + I.cerrar + '</button>') +
'</header>' +
'<div class="cmc-pasos" hidden></div>' +
'<div class="cmc-cuerpo"></div>' +
'<footer class="cmc-pie"></footer>' +
'</section>';
if(enPagina){
enPagina.appendChild(raiz);
}else{
raiz.hidden=true;
document.body.appendChild(raiz);
}
var ui={
panel: raiz.querySelector('.cmc-panel'),
titulo: raiz.querySelector('.cmc-titulo'),
volver: raiz.querySelector('.cmc-volver'),
pasos: raiz.querySelector('.cmc-pasos'),
cuerpo: raiz.querySelector('.cmc-cuerpo'),
pie: raiz.querySelector('.cmc-pie')
};
var focoPrevio=null;
function abrir(opts){
opts=opts||{};
if(enPagina){ window.scrollTo({ top: 0, behavior: 'smooth' });ir('lista'); return; }
if(!abierto){
focoPrevio=document.activeElement;
raiz.hidden=false;
document.documentElement.classList.add('cmc-bloqueo');
setTimeout(function (){ raiz.classList.add('is-on'); }, 16);
abierto=true;
}
ir(opts.vista||'lista');
if(opts.estado) pintar(opts.estado);
else cargar();
setTimeout(function (){ var b=raiz.querySelector('[data-cerrar].cmc-ico-btn'); if(b) b.focus({ preventScroll: true });}, 60);
}
function cerrar(){
if(enPagina||!abierto) return;
abierto=false;
raiz.classList.remove('is-on');
document.documentElement.classList.remove('cmc-bloqueo');
setTimeout(function (){ if(!abierto) raiz.hidden=true; }, 280);
if(focoPrevio&&focoPrevio.focus) focoPrevio.focus({ preventScroll: true });
}
raiz.addEventListener('click', function (e){
if(e.target.closest('[data-cerrar]')){ e.preventDefault(); cerrar(); }});
document.addEventListener('keydown', function (e){
if(e.key==='Escape'&&abierto) cerrar();
});
ui.volver.addEventListener('click', function (){
ir({ paso1: 'lista', paso2: 'paso1', paso3: 'paso2', enviado: 'paso3' }[vista]||'lista');
});
var cargando=false;
function cargar(){
if(!ESTADO) esqueleto();
if(cargando) return;
cargando=true;
api({ op: 'estado' }).then(function (d){ cargando=false; pintar(d); })
.catch(function (){ cargando=false; if(!ESTADO) errorCarga(); });
}
function pintar(d){
if(!d||!d.items) return;
ESTADO=d;
cabecera(d);
if(!d.items.length&&vista!=='enviado') vista='lista';
render();
}
function cabecera(d){
document.querySelectorAll('.cmh-cart-n').forEach(function (n){
var antes=n.textContent;
n.textContent=d.n;
n.classList.toggle('is-empty', !d.n);
if(antes!==String(d.n)&&d.n){ n.classList.remove('is-bump'); void n.offsetWidth; n.classList.add('is-bump'); }});
document.querySelectorAll('.cmh-cart-total').forEach(function (b){ b.textContent=d.cabecera; });
}
function cambiar(k, q){
var it=ESTADO.items.filter(function (x){ return x.k===k; })[0];
if(!it) return;
q=Math.max(0, Math.min(q, it.max));
if(q===0) ESTADO.items=ESTADO.items.filter(function (x){ return x.k!==k; });
else it.q=q;
recalcular();
render();
colaQty(k, q);
}
var tQty={};
function colaQty(k, q){
clearTimeout(tQty[k]);
tQty[k]=setTimeout(function (){
api({ op: q ? 'qty':'quitar', k: k, q: q }).then(pintar).catch(cargar);
}, 350);
}
function recalcular(){
var e=0, t=0, n=0;
ESTADO.items.forEach(function (x){ e +=x.p * x.q; t +=x.pr * x.q; n +=x.q; });
ESTADO.efectivo=e; ESTADO.tarjeta=t; ESTADO.n=n;
ESTADO.cabecera=dinero(e);
cabecera(ESTADO);
}
function ir(v){
vista=v;
if(ESTADO) render();
ui.cuerpo.scrollTop=0;
}
function render(){
var paso={ paso1: 1, paso2: 2, paso3: 3 }[vista]||0;
ui.volver.hidden=vista==='lista';
ui.titulo.textContent=vista==='lista' ? 'Tu carrito':vista==='enviado' ? 'Pedido listo':'Pedir por WhatsApp';
ui.pasos.hidden = !paso;
if(paso){
ui.pasos.innerHTML=['Entrega', 'Pago', 'Confirmar'].map(function (n, i){
var c=i + 1 < paso ? ' is-hecho':i + 1===paso ? ' is-actual':'';
return '<span class="cmc-paso' + c + '"><b>' + (i + 1 < paso ? I.ok:i + 1) + '</b>' + n + '</span>';
}).join('<i></i>');
}
({ lista: vLista, paso1: vEntrega, paso2: vPago, paso3: vConfirmar, enviado: vEnviado })[vista]();
}
function esqueleto(){
ui.cuerpo.innerHTML='<div class="cmc-items">' + [1, 2].map(function (){
return '<div class="cmc-item is-esq"><span class="cmc-img"></span><div class="cmc-info"><i></i><i></i><i></i></div></div>';
}).join('') + '</div>';
ui.pie.innerHTML='';
}
function errorCarga(){
ui.cuerpo.innerHTML='<div class="cmc-vacio"><b>No se pudo cargar el carrito</b><span>Revisa tu conexión e intenta de nuevo.</span>' +
'<button type="button" class="cmc-btn cmc-btn-sec" data-reintentar>Reintentar</button></div>';
ui.pie.innerHTML='';
}
function vLista(){
var d=ESTADO;
if(!d.items.length){
ui.cuerpo.innerHTML='<div class="cmc-vacio"><span class="cmc-vacio-ico">' + I.bolsa + '</span><b>Tu carrito está vacío</b>' +
'<span>Busca lo que necesitas y agrégalo aquí.</span>' +
'<a class="cmc-btn cmc-btn-dark" href="' + esc(C.tienda) + '">Ver productos</a></div>';
ui.pie.innerHTML='';
return;
}
ui.cuerpo.innerHTML='<ul class="cmc-items">' + d.items.map(function (x){
var desc=x.pr > x.p;
return '<li class="cmc-item" data-k="' + esc(x.k) + '">' +
'<a class="cmc-img" href="' + esc(x.url) + '"><img src="' + esc(x.img) + '" alt="" loading="lazy"></a>' +
'<div class="cmc-info">' +
'<a class="cmc-nombre" href="' + esc(x.url) + '">' + esc(x.n) + '</a>' +
(x.sku ? '<span class="cmc-sku">SKU ' + esc(x.sku) + '</span>':'') +
'<div class="cmc-fila">' +
'<div class="cmc-qty" role="group" aria-label="Cantidad">' +
'<button type="button" data-q="-1" aria-label="' + (x.q===1 ? 'Quitar':'Uno menos') + '">' + (x.q===1 ? I.tacho:I.menos) + '</button>' +
'<output aria-live="polite">' + x.q + '</output>' +
'<button type="button" data-q="1" aria-label="Uno más"' + (x.q >=x.max ? ' disabled':'') + '>' + I.mas + '</button>' +
'</div>' +
'<div class="cmc-precio"><b>' + dinero(x.p * x.q) + '</b>' + (desc ? '<s>' + dinero(x.pr * x.q) + '</s>':'') + '</div>' +
'</div>' +
(x.q >=x.max&&x.max < 999 ? '<span class="cmc-tope">' + (x.max===1 ? 'Última unidad disponible':'Máximo ' + x.max + ' disponibles') + '</span>':'') +
'</div>' +
'</li>';
}).join('') + '</ul>';
var ahorro=d.tarjeta - d.efectivo;
ui.pie.innerHTML =
'<div class="cmc-totales">' +
'<div class="cmc-total"><span>Total <small>' + d.n + (d.n===1 ? ' producto':' productos') + '</small></span><b>' + dinero(d.efectivo) + '</b></div>' +
(ahorro > 0.009 ? '<p class="cmc-nota">Precio en efectivo o transferencia. Con tarjeta: ' + dinero(d.tarjeta) + '.</p>':'') +
'</div>' +
'<button type="button" class="cmc-btn cmc-btn-wa" data-ir="paso1">' + I.wa + '<span>Pedir por WhatsApp</span></button>' +
(enPagina ? '<a class="cmc-btn cmc-btn-link" href="' + esc(C.tienda) + '">Seguir comprando</a>':'<button type="button" class="cmc-btn cmc-btn-link" data-cerrar>Seguir comprando</button>');
}
function vEntrega(){
var tiendas=C.tiendas||[];
ui.cuerpo.innerHTML =
'<div class="cmc-form">' +
'<h3 class="cmc-h">¿Cómo lo quieres recibir?</h3>' +
'<div class="cmc-opciones">' +
opcion('entrega', 'tienda', I.tienda, 'Retiro en tienda', 'Sin costo · en una de nuestras ' + tiendas.length + ' tiendas') +
opcion('entrega', 'envio', I.camion, 'Envío a domicilio', 'En Guayaquil o a todo el país por Servientrega · el costo se confirma por WhatsApp') +
'</div>' +
'<div class="cmc-sub" data-sub="tienda"' + (PEDIDO.entrega==='tienda' ? '':' hidden') + '>' +
'<h3 class="cmc-h">¿En cuál tienda?</h3>' +
'<div class="cmc-chips">' + tiendas.map(function (t){
return '<button type="button" class="cmc-chip' + (PEDIDO.tienda===t ? ' is-on':'') + '" data-tienda="' + esc(t) + '" aria-pressed="' + (PEDIDO.tienda===t) + '">' + esc(t) + '</button>';
}).join('') + '</div>' +
'</div>' +
'<div class="cmc-sub" data-sub="envio"' + (PEDIDO.entrega==='envio' ? '':' hidden') + '>' +
'<label class="cmc-campo"><span>Ciudad y sector</span><input type="text" data-campo="direccion" value="' + esc(PEDIDO.direccion||'') + '" placeholder="Ej: Guayaquil, Urdesa · Quito, Cumbayá" autocomplete="address-level2"></label>' +
'</div>' +
'</div>';
pieSiguiente('paso2', entregaLista());
}
function entregaLista(){
return (PEDIDO.entrega==='tienda'&&!!PEDIDO.tienda)||(PEDIDO.entrega==='envio'&&(PEDIDO.direccion||'').trim().length > 2);
}
function vPago(){
var d=ESTADO;
ui.cuerpo.innerHTML =
'<div class="cmc-form">' +
'<h3 class="cmc-h">¿Cómo vas a pagar?</h3>' +
'<div class="cmc-opciones">' + PAGOS.map(function (p){
var total=p.id==='tarjeta' ? d.tarjeta:d.efectivo;
return opcion('pago', p.id, p.ico, p.n, p.d, dinero(total));
}).join('') + '</div>' +
'</div>';
pieSiguiente('paso3', !!PEDIDO.pago);
}
function vConfirmar(){
var d=ESTADO, total=totalPedido();
ui.cuerpo.innerHTML =
'<div class="cmc-form">' +
'<h3 class="cmc-h">Revisa tu pedido</h3>' +
'<div class="cmc-resumen">' +
'<ul>' + d.items.map(function (x){
var pu=PEDIDO.pago==='tarjeta' ? x.pr:x.p;
return '<li><span><b>' + x.q + '×</b> ' + esc(x.n) + '</span><b>' + dinero(pu * x.q) + '</b></li>';
}).join('') + '</ul>' +
'<dl>' +
'<div><dt>Entrega</dt><dd>' + esc(textoEntrega()) + '</dd></div>' +
'<div><dt>Pago</dt><dd>' + esc(nombrePago()) + '</dd></div>' +
'</dl>' +
'<div class="cmc-total"><span>Total</span><b>' + dinero(total) + '</b></div>' +
(PEDIDO.entrega==='envio' ? '<p class="cmc-nota">Más el envío, que te confirmamos por WhatsApp.</p>':'') +
'</div>' +
'<label class="cmc-campo"><span>Tu nombre <small>(opcional)</small></span><input type="text" data-campo="nombre" value="' + esc(PEDIDO.nombre||'') + '" placeholder="¿Cómo te llamas?" autocomplete="name"></label>' +
'</div>';
ui.pie.innerHTML =
'<a class="cmc-btn cmc-btn-wa" data-enviar target="_blank" rel="noopener" href="' + esc(linkWhatsApp()) + '">' + I.wa + '<span>Enviar pedido por WhatsApp</span></a>' +
'<p class="cmc-nota cmc-nota-c">Se abre WhatsApp con tu pedido escrito. Solo tienes que enviarlo.</p>';
}
function vEnviado(){
ui.cuerpo.innerHTML =
'<div class="cmc-vacio cmc-listo"><span class="cmc-vacio-ico">' + I.ok + '</span><b>¡Listo! Termina de enviarlo en WhatsApp</b>' +
'<span>Te respondemos para confirmar disponibilidad' + (PEDIDO.entrega==='envio' ? ', el envío':'') + ' y el pago.</span></div>';
ui.pie.innerHTML =
'<a class="cmc-btn cmc-btn-sec" target="_blank" rel="noopener" href="' + esc(linkWhatsApp()) + '">¿No se abrió? Abrir WhatsApp</a>' +
'<button type="button" class="cmc-btn cmc-btn-dark" data-vaciar>Ya lo envié · vaciar carrito</button>' +
(enPagina ? '':'<button type="button" class="cmc-btn cmc-btn-link" data-cerrar>Seguir comprando</button>');
}
function opcion(grupo, id, ico, nombre, desc, extra){
var on=PEDIDO[grupo]===id;
return '<button type="button" class="cmc-opcion' + (on ? ' is-on':'') + '" data-' + grupo + '="' + id + '" aria-pressed="' + on + '">' +
'<span class="cmc-opcion-ico">' + ico + '</span>' +
'<span class="cmc-opcion-txt"><b>' + esc(nombre) + '</b><small>' + esc(desc) + '</small></span>' +
(extra ? '<span class="cmc-opcion-extra">' + extra + '</span>':'') +
'<span class="cmc-radio" aria-hidden="true"></span>' +
'</button>';
}
function pieSiguiente(destino, listo){
ui.pie.innerHTML='<button type="button" class="cmc-btn cmc-btn-dark" data-ir="' + destino + '"' + (listo ? '':' disabled') + '>Siguiente</button>';
}
function actualizarSiguiente(){
var b=ui.pie.querySelector('[data-ir]');
if(!b) return;
b.disabled=vista==='paso1' ? !entregaLista():vista==='paso2' ? !PEDIDO.pago:false;
}
function totalPedido(){ return PEDIDO.pago==='tarjeta' ? ESTADO.tarjeta:ESTADO.efectivo; }
function nombrePago(){ var p=PAGOS.filter(function (x){ return x.id===PEDIDO.pago; })[0]; return p ? p.n:''; }
function textoEntrega(){
return PEDIDO.entrega==='tienda' ? 'Retiro en ' + PEDIDO.tienda:'Envío a ' + (PEDIDO.direccion||'').trim();
}
function linkWhatsApp(){
var tarjeta=PEDIDO.pago==='tarjeta', l=[];
l.push('Hola CompuMundo Store! Quiero hacer este pedido:');
l.push('');
ESTADO.items.forEach(function (x){
l.push('• ' + x.q + ' x ' + x.n + (x.sku ? ' (SKU: ' + x.sku + ')':'') + ' — ' + dinero((tarjeta ? x.pr:x.p) * x.q));
});
l.push('');
l.push('*Total: ' + dinero(totalPedido()) + '*' + (PEDIDO.entrega==='envio' ? ' + envío':''));
l.push('*Entrega:* ' + textoEntrega());
l.push('*Pago:* ' + nombrePago());
if((PEDIDO.nombre||'').trim()) l.push('*Nombre:* ' + PEDIDO.nombre.trim());
return 'https://wa.me/' + C.whatsapp + '?text=' + encodeURIComponent(l.join('\n'));
}
raiz.addEventListener('click', function (e){
var t;
if((t=e.target.closest('[data-q]'))){
var k=t.closest('[data-k]').getAttribute('data-k');
var it=ESTADO.items.filter(function (x){ return x.k===k; })[0];
if(it) cambiar(k, it.q + parseInt(t.getAttribute('data-q'), 10));
}else if((t=e.target.closest('[data-ir]'))){
if(!t.disabled) ir(t.getAttribute('data-ir'));
}else if((t=e.target.closest('[data-entrega]'))){
PEDIDO.entrega=t.getAttribute('data-entrega'); guardarPedido(); vEntrega();
var campo=ui.cuerpo.querySelector('[data-sub="' + PEDIDO.entrega + '"] input');
if(campo&&!campo.value) campo.focus();
}else if((t=e.target.closest('[data-tienda]'))){
PEDIDO.tienda=t.getAttribute('data-tienda'); guardarPedido(); vEntrega();
}else if((t=e.target.closest('[data-pago]'))){
PEDIDO.pago=t.getAttribute('data-pago'); guardarPedido(); vPago();
}else if(e.target.closest('[data-enviar]')){
guardarPedido();
setTimeout(function (){ ir('enviado'); }, 300);
}else if(e.target.closest('[data-vaciar]')){
api({ op: 'vaciar' }).then(function (d){ vista='lista'; pintar(d); if(!enPagina) cerrar(); });
}else if(e.target.closest('[data-reintentar]')){
cargar();
}});
raiz.addEventListener('input', function (e){
var c=e.target.getAttribute('data-campo');
if(!c) return;
PEDIDO[c]=e.target.value;
guardarPedido();
actualizarSiguiente();
var wa=ui.pie.querySelector('[data-enviar]');
if(wa) wa.href=linkWhatsApp();
});
raiz.addEventListener('keydown', function (e){
if(e.key==='Enter'&&e.target.matches('input[data-campo]')){
e.preventDefault();
var b=ui.pie.querySelector('[data-ir]:not([disabled]), [data-enviar]');
if(b) b.click();
}});
function esCarrito(href){
try {
var u=new URL(href, location.href), c=new URL(C.carrito, location.href);
return u.origin===c.origin&&u.pathname.replace(/\/$/, '')===c.pathname.replace(/\/$/, '')&&!u.search;
} catch (e){ return false; }}
function agregar(id, q, btn){
if(btn){ btn.classList.add('cmc-cargando'); btn.setAttribute('aria-busy', 'true'); }
return api({ op: 'agregar', id: id, q: q||1 }).then(function (d){
if(btn){ btn.classList.remove('cmc-cargando'); btn.removeAttribute('aria-busy'); }
if(d.error&&!(d.items||[]).some(function (x){ return x.id===Number(id); })) throw new Error(d.error);
abrir({ estado: d });
if(d.error) aviso(d.error);
}).catch(function (err){
if(btn){ btn.classList.remove('cmc-cargando'); btn.removeAttribute('aria-busy'); }
aviso(err&&err.message&&err.message!=='Failed to fetch' ? err.message:'No se pudo agregar. Intenta de nuevo.');
});
}
document.addEventListener('click', function (e){
if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey) return;
var a=e.target.closest('a[href]');
if(a&&!raiz.contains(a)&&esCarrito(a.href)){
e.preventDefault();
var buscador=document.querySelector('.cmb-ov.is-on');
if(buscador){ var x=buscador.querySelector('.cmb-atras'); if(x) x.click(); }
abrir();
return;
}
var add=e.target.closest('a.add_to_cart_button[data-product_id]');
if(add&&add.classList.contains('product_type_simple')&&!add.classList.contains('ajax_add_to_cart')){
e.preventDefault();
agregar(add.getAttribute('data-product_id'), add.getAttribute('data-quantity')||1, add);
}}, true);
document.addEventListener('submit', function (e){
var f=e.target;
if(!f.matches||!f.matches('form.cart')||f.classList.contains('variations_form')||f.classList.contains('grouped_form')) return;
var btn=f.querySelector('[name="add-to-cart"]');
if(!btn||!btn.value) return;
e.preventDefault();
var q=f.querySelector('input[name="quantity"]');
agregar(btn.value, q ? Math.max(1, parseInt(q.value, 10)||1):1, btn);
}, true);
if(window.jQuery){
window.jQuery(document.body).on('added_to_cart removed_from_cart', function (ev, frag, hash, $btn){
ESTADO=null;
var desdeBuscador=$btn&&$btn[0]&&$btn[0].closest&&$btn[0].closest('.cmb-ov');
if(abierto||enPagina) cargar();
else if(!desdeBuscador&&ev.type==='added_to_cart') abrir();
});
}
var tAviso;
function aviso(txt){
var el=document.querySelector('.cmc-aviso');
if(!el){ el=document.createElement('div'); el.className='cmc-aviso'; el.setAttribute('role', 'status'); document.body.appendChild(el); }
el.textContent=txt;
el.classList.add('is-on');
clearTimeout(tAviso);
tAviso=setTimeout(function (){ el.classList.remove('is-on'); }, 3600);
}
if(enPagina) cargar();
window.CMCarrito={ abrir: abrir, cerrar: cerrar, agregar: agregar };})();