(function (){
'use strict';
if(typeof testkolikHeroSearch==='undefined'){
return;
}
var cfg=testkolikHeroSearch;
var input=document.getElementById('testkolik-search');
var panel=document.getElementById('tk-hero-search-live');
var list=document.getElementById('tk-hero-search-list');
var statusEl=document.getElementById('tk-hero-search-status');
var form=document.getElementById('tk-hero-search-form');
if(!input||!panel||!list||!form){
return;
}
var minChars=Math.max(1, parseInt(cfg.minChars, 10)||3);
var debounceMs=Math.max(0, parseInt(cfg.debounce, 10)||300);
var timer=null;
var seq=0;
var lastOpened=false;
function setStatus(msg){
if(statusEl){
statusEl.textContent=msg||'';
}}
function hidePanel(){
panel.hidden=true;
input.setAttribute('aria-expanded', 'false');
list.innerHTML='';
setStatus('');
lastOpened=false;
}
function showPanel(){
panel.hidden=false;
input.setAttribute('aria-expanded', 'true');
lastOpened=true;
}
function escapeHtml(s){
var div=document.createElement('div');
div.textContent=s;
return div.innerHTML;
}
function renderItems(items){
list.innerHTML='';
if(!items||!items.length){
var liEmpty=document.createElement('li');
liEmpty.className='tk-hero-search-live__empty';
liEmpty.setAttribute('role', 'presentation');
liEmpty.textContent=cfg.i18n.empty||'';
list.appendChild(liEmpty);
setStatus(cfg.i18n.empty||'');
return;
}
var foundMsg=cfg.i18n.found||'';
if(foundMsg.indexOf('%d')!==-1){
foundMsg=foundMsg.replace('%d', String(items.length));
}else{
foundMsg=String(items.length) + ' ' + foundMsg;
}
setStatus(foundMsg);
items.forEach(function (it){
var li=document.createElement('li');
li.className='tk-hero-search-live__item';
var a=document.createElement('a');
a.href=it.url||'#';
a.className='tk-hero-search-live__link';
var title=document.createElement('span');
title.className='tk-hero-search-live__title';
title.textContent=it.title||'';
a.appendChild(title);
if(it.meta){
var meta=document.createElement('span');
meta.className='tk-hero-search-live__meta';
meta.innerHTML=escapeHtml(it.meta);
a.appendChild(meta);
}
li.appendChild(a);
list.appendChild(li);
});
}
function fetchResults(q){
var mySeq=++seq;
setStatus(cfg.i18n.loading||'');
showPanel();
var url =
cfg.ajaxUrl +
'?action=' +
encodeURIComponent(cfg.action) +
'&nonce=' +
encodeURIComponent(cfg.nonce) +
'&q=' +
encodeURIComponent(q);
fetch(url, {
method: 'GET',
credentials: 'same-origin',
headers: { Accept: 'application/json' },
})
.then(function (r){
if(!r.ok){
throw new Error('bad status');
}
return r.json();
})
.then(function (data){
if(mySeq!==seq){
return;
}
if(!data||!data.success||!data.data){
renderItems([]);
return;
}
renderItems(data.data.items||[]);
})
.catch(function (){
if(mySeq!==seq){
return;
}
list.innerHTML='';
var li=document.createElement('li');
li.className='tk-hero-search-live__empty tk-hero-search-live__empty--error';
li.setAttribute('role', 'alert');
li.textContent=cfg.i18n.error||'';
list.appendChild(li);
setStatus(cfg.i18n.error||'');
});
}
function scheduleSearch(){
var q=(input.value||'').trim();
if(timer){
clearTimeout(timer);
timer=null;
}
if(q.length < minChars){
hidePanel();
return;
}
timer=setTimeout(function (){
timer=null;
fetchResults(q);
}, debounceMs);
}
input.addEventListener('input', scheduleSearch);
input.addEventListener('focus', function (){
if((input.value||'').trim().length >=minChars&&lastOpened){
scheduleSearch();
}});
input.addEventListener('keydown', function (e){
if(e.key==='Escape'){
hidePanel();
input.blur();
}});
document.addEventListener('click', function (e){
if(!panel.hidden&&!form.contains(e.target)){
hidePanel();
}});
form.addEventListener('submit', function (){
hidePanel();
});
})();