(function(){ function ready(fn){ if(document.readyState!=='loading'){fn();} else {document.addEventListener('DOMContentLoaded',fn);} } function paint(cb){ var chip=cb.closest('.tt-chip'); if(!chip) return; var on=cb.checked; if(chip.classList.contains('tt-flag')){ chip.style.setProperty('box-shadow', on?'0 0 0 2px #638C1C':'none', 'important'); chip.style.setProperty('border-color', on?'#638C1C':'#d9e0cc', 'important'); } else { chip.style.setProperty('background-color', on?'#638C1C':'#fff', 'important'); chip.style.setProperty('border-color', on?'#638C1C':'#d9e0cc', 'important'); chip.style.setProperty('color', on?'#fff':'#4a4f42', 'important'); } } function rangeDows(dDesde,dHasta){ if(!dDesde||!dDesde.value) return null; var from=new Date(dDesde.value+'T00:00:00'); var to=(dHasta&&dHasta.value)?new Date(dHasta.value+'T00:00:00'):new Date(from.getTime()); if(from.getTime()>to.getTime()){ var t=from; from=to; to=t; } var days=Math.round((to.getTime()-from.getTime())/86400000)+1; if(days>400) days=400; var set={}; for(var i=0;days>i;i++){ var dd=new Date(from.getTime()+i*86400000); set[dd.getDay()]=1; } return set; } ready(function(){ document.querySelectorAll('.tt-wrap').forEach(function(w){ var grid=w.querySelector('.tt-grid'); var cards=Array.prototype.slice.call(w.querySelectorAll('.tt-card')); if(!cards.length) return; var tipoCbs=w.querySelectorAll('.tt-f-tipo'); var subCbs=w.querySelectorAll('.tt-f-sub'); var idiCbs=w.querySelectorAll('.tt-f-idioma'); var allCbs=w.querySelectorAll('.tt-f-tipo,.tt-f-sub,.tt-f-idioma'); var dDesde=w.querySelector('.tt-f-desde'); var dHasta=w.querySelector('.tt-f-hasta'); var sortSel=w.querySelector('.tt-f-sort'); var empty=w.querySelector('.tt-f-empty'); var verMas=w.querySelector('.tt-vermas'); var STEP=parseInt(w.getAttribute('data-mostrar'),10); if(!(STEP>0)) STEP=999999; var shownLimit=STEP; function checkedVals(cbs){ var a=[]; cbs.forEach(function(c){ if(c.checked) a.push(c.getAttribute('data-v')); }); return a; } function matches(c){ var tv=checkedVals(tipoCbs), sv=checkedVals(subCbs), iv=checkedVals(idiCbs), dows=rangeDows(dDesde,dHasta); var ct=(c.getAttribute('data-tipo')||'').split(' '); var cs=(c.getAttribute('data-tsub')||'').split(' '); var ci=(c.getAttribute('data-idiomas')||'').split(' ').filter(Boolean); var cd=(c.getAttribute('data-dias')||'').split(' '); if(tv.length && !tv.some(function(v){return ct.indexOf(v)>=0;})) return false; if(sv.length && !sv.some(function(v){return cs.indexOf(v)>=0;})) return false; if(iv.length){ var im=(ci.length===0)?true:iv.some(function(v){return ci.indexOf(v)>=0;}); if(!im) return false; } if(dows){ var m=false; cd.forEach(function(x){ if(dows[parseInt(x,10)]) m=true; }); if(!m) return false; } return true; } function apply(){ var eligible=[]; cards.forEach(function(c){ if(matches(c)) eligible.push(c); else c.style.display='none'; }); eligible.forEach(function(c,i){ c.style.display=(shownLimit>i)?'flex':'none'; }); if(verMas) verMas.style.display=(eligible.length>shownLimit)?'inline-block':'none'; if(empty) empty.style.display=(eligible.length===0)?'block':'none'; } function resetAndApply(){ shownLimit=STEP; apply(); } function sortCards(){ var mode=sortSel?sortSel.value:''; if(mode){ cards.sort(function(a,b){ var pa=parseFloat(a.getAttribute('data-precio'))||0; var pb=parseFloat(b.getAttribute('data-precio'))||0; return (mode==='precio-desc')?(pb-pa):(pa-pb); }); } if(grid) cards.forEach(function(c){ grid.appendChild(c); }); } allCbs.forEach(function(c){ c.addEventListener('change',function(){ paint(c); resetAndApply(); }); }); if(dDesde) dDesde.addEventListener('change',resetAndApply); if(dHasta) dHasta.addEventListener('change',resetAndApply); if(sortSel) sortSel.addEventListener('change',function(){ sortCards(); apply(); }); if(verMas) verMas.addEventListener('click',function(e){ e.preventDefault(); shownLimit+=STEP; apply(); }); var clr=w.querySelector('.tt-f-clear'); if(clr) clr.addEventListener('click',function(e){ e.preventDefault(); allCbs.forEach(function(c){c.checked=false;paint(c);}); if(dDesde)dDesde.value=''; if(dHasta)dHasta.value=''; if(sortSel)sortSel.value=''; resetAndApply(); }); apply(); }); }); })();