(function (){
'use strict';
var root=document.documentElement;
function applyTheme(t){
root.setAttribute('data-theme', t);
try { localStorage.setItem('jineftin-theme', t); } catch (e){}}
document.querySelectorAll('[data-theme-toggle]').forEach(function (btn){
btn.addEventListener('click', function (){
var cur=root.getAttribute('data-theme')==='dark' ? 'light':'dark';
applyTheme(cur);
});
});
var header=document.querySelector('.site-header');
if(header){
var onScroll=function (){
var y=window.scrollY||window.pageYOffset||0;
if(y > 12) header.classList.add('is-scrolled');
else if(y < 4) header.classList.remove('is-scrolled');
};
window.addEventListener('scroll', onScroll, { passive: true });
onScroll();
}
var drawer=document.getElementById('mobile-drawer');
function openDrawer(){ if(drawer){ drawer.classList.add('open'); document.body.style.overflow='hidden'; }}
function closeDrawer(){ if(drawer){ drawer.classList.remove('open'); document.body.style.overflow=''; }}
document.querySelectorAll('[data-drawer-open]').forEach(function (b){ b.addEventListener('click', openDrawer); });
document.querySelectorAll('[data-drawer-close]').forEach(function (b){ b.addEventListener('click', closeDrawer); });
if(drawer){
var bd=drawer.querySelector('.backdrop');
if(bd) bd.addEventListener('click', closeDrawer);
}
var search=document.getElementById('search-overlay');
function openSearch(){
if(!search) return;
search.classList.add('open');
document.body.style.overflow='hidden';
var inp=search.querySelector('input[type="search"]');
if(inp) setTimeout(function (){ inp.focus(); }, 60);
}
function closeSearch(){
if(!search) return;
search.classList.remove('open');
document.body.style.overflow='';
var res=document.getElementById('search-results');
if(res){ res.innerHTML=''; res.classList.remove('is-open', 'is-loading'); }}
document.querySelectorAll('[data-search-open]').forEach(function (b){ b.addEventListener('click', openSearch); });
document.querySelectorAll('[data-search-close]').forEach(function (b){ b.addEventListener('click', closeSearch); });
document.addEventListener('keydown', function (e){
if(e.key==='Escape'){ closeSearch(); closeDrawer(); }});
var sInput=document.getElementById('jineftin-search-input');
var sResults=document.getElementById('search-results');
var data=window.jineftinData||{};
var i18n=data.i18n||{};
var sTimer, lastReq=0;
function esc(str){
return String(str==null ? '':str)
.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
.replace(/"/g, '&quot;').replace(/'/g, '&#39;');
}
function renderResults(items, q){
if(!items||!items.length){
sResults.innerHTML='<div class="sr-empty">' + esc(i18n.noResults||'No results') + '</div>';
sResults.classList.add('is-open');
return;
}
var html='';
items.forEach(function (it){
var thumb=it.thumb
? '<img src="' + esc(it.thumb) + '" alt="" loading="lazy">'
: '<span class="sr-ph"></span>';
html +='<a class="sr-item" href="' + esc(it.url) + '">' +
'<span class="sr-thumb">' + thumb + (it.pdf ? '<span class="sr-pdf">PDF</span>':'') + '</span>' +
'<span class="sr-body">' +
'<span class="sr-title">' + esc(it.title) + '</span>' +
(it.cat ? '<span class="sr-cat">' + esc(it.cat) + '</span>':'') +
'</span></a>';
});
var allUrl=(data.homeUrl||'/') + '?s=' + encodeURIComponent(q);
html +='<a class="sr-all" href="' + esc(allUrl) + '">' + esc(i18n.viewAll||'View all results') +
' <span aria-hidden="true">←</span></a>';
sResults.innerHTML=html;
sResults.classList.add('is-open');
}
function doSearch(q){
var stamp=++lastReq;
var url=(data.ajaxUrl||'') + '?action=jineftin_search&nonce=' +
encodeURIComponent(data.nonce||'') + '&q=' + encodeURIComponent(q);
fetch(url, { credentials: 'same-origin' })
.then(function (r){ return r.json(); })
.then(function (res){
if(stamp!==lastReq) return;
sResults.classList.remove('is-loading');
var d=(res&&res.data) ? res.data:{};
renderResults(d.results||[], q);
})
.catch(function (){ sResults.classList.remove('is-loading'); });
}
if(sInput&&sResults&&data.ajaxUrl){
sInput.addEventListener('input', function (){
var q=sInput.value.trim();
clearTimeout(sTimer);
if(q.length < 2){
sResults.innerHTML='';
sResults.classList.remove('is-open', 'is-loading');
return;
}
sResults.classList.add('is-loading', 'is-open');
sResults.innerHTML='<div class="sr-empty">' + esc(i18n.searching||'Searching…') + '</div>';
sTimer=setTimeout(function (){ doSearch(q); }, 280);
});
}
var galleries=document.querySelectorAll('[data-gallery]');
var lb=null, lbImages=[], lbIndex=0;
var CHEV='<svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 18 6-6-6-6"/></svg>';
var XICON='<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6 6 18M6 6l12 12"/></svg>';
function buildLightbox(){
lb=document.createElement('div');
lb.className='lightbox';
lb.setAttribute('role', 'dialog');
lb.setAttribute('aria-modal', 'true');
lb.innerHTML =
'<button class="lb-btn lb-close" aria-label="Close">' + XICON + '</button>' +
'<button class="lb-btn lb-prev" aria-label="Previous">' + CHEV + '</button>' +
'<figure class="lb-stage"><img alt=""></figure>' +
'<button class="lb-btn lb-next" aria-label="Next">' + CHEV + '</button>' +
'<div class="lb-counter"></div>';
document.body.appendChild(lb);
lb.querySelector('.lb-close').addEventListener('click', closeLightbox);
lb.querySelector('.lb-prev').addEventListener('click', function (){ lbNav(-1); });
lb.querySelector('.lb-next').addEventListener('click', function (){ lbNav(1); });
lb.addEventListener('click', function (e){ if(e.target===lb) closeLightbox(); });
}
function showLb(){
var img=lb.querySelector('img');
img.src=lbImages[lbIndex];
var single=lbImages.length < 2;
lb.querySelector('.lb-prev').style.display=single ? 'none':'';
lb.querySelector('.lb-next').style.display=single ? 'none':'';
lb.querySelector('.lb-counter').textContent=single ? '':(lbIndex + 1) + ' / ' + lbImages.length;
}
function openLightbox(images, index){
if(!lb) buildLightbox();
lbImages=images; lbIndex=index;
showLb();
lb.classList.add('open');
document.body.style.overflow='hidden';
}
function lbNav(d){ lbIndex=(lbIndex + d + lbImages.length) % lbImages.length; showLb(); }
function closeLightbox(){ if(lb){ lb.classList.remove('open'); document.body.style.overflow=''; }}
galleries.forEach(function (g){
var track=g.querySelector('.gal-track');
var prev=g.querySelector('.gal-prev');
var next=g.querySelector('.gal-next');
var items=Array.prototype.slice.call(g.querySelectorAll('.gal-item'));
var urls=items.map(function (it){ return it.getAttribute('data-full'); });
function step(dir){
var item=track.querySelector('.gal-item');
var amt=item ? item.offsetWidth + 16:300;
track.scrollBy({ left: dir * amt, behavior: 'smooth' });
}
if(prev) prev.addEventListener('click', function (){ step(1); });
if(next) next.addEventListener('click', function (){ step(-1); });
items.forEach(function (it, i){
it.addEventListener('click', function (){ openLightbox(urls, i); });
});
});
document.addEventListener('keydown', function (e){
if(!lb||!lb.classList.contains('open')) return;
if(e.key==='Escape') closeLightbox();
else if(e.key==='ArrowLeft') lbNav(1);
else if(e.key==='ArrowRight') lbNav(-1);
});
document.querySelectorAll('.jineftin-eml[data-eml]').forEach(function (a){
try {
var email=atob(a.getAttribute('data-eml'));
a.setAttribute('href', 'mailto:' + email);
var t=a.querySelector('.eml-text')||a;
t.textContent=email;
a.removeAttribute('data-eml');
} catch (e){}});
function toArabicDigits(s){
return String(s).replace(/[0-9]/g, function (d){ return '٠١٢٣٤٥٦٧٨٩'.charAt(+d); });
}
document.querySelectorAll('.file-input').forEach(function (wrap){
var input=wrap.querySelector('.file-native');
var trigger=wrap.querySelector('[data-file-trigger]');
var nameEl=wrap.querySelector('[data-file-name]');
if(!input||!nameEl) return;
var empty=input.getAttribute('data-empty')||'';
var many=input.getAttribute('data-many')||'%d';
if(trigger) trigger.addEventListener('click', function (){ input.click(); });
input.addEventListener('change', function (){
var n=input.files ? input.files.length:0;
if(!n){
nameEl.textContent=empty;
wrap.classList.remove('has-files');
}else if(n===1){
nameEl.textContent=input.files[0].name;
wrap.classList.add('has-files');
}else{
nameEl.textContent=many.replace('%d', toArabicDigits(n));
wrap.classList.add('has-files');
}});
});
if('IntersectionObserver' in window){
var io=new IntersectionObserver(function (entries){
entries.forEach(function (en){
if(en.isIntersecting){ en.target.classList.add('in-view'); io.unobserve(en.target); }});
}, { threshold: 0.08, rootMargin: '0px 0px -40px 0px' });
document.querySelectorAll('[data-reveal]').forEach(function (el){ io.observe(el); });
}})();