(function() { if (window.searchInitialized) return window.searchInitialized = true let searchTimeout const searchInput = document.getElementById('search-input') const searchDropdown = document.getElementById('search-dropdown') if (searchInput) { searchInput.addEventListener('input', function(e) { clearTimeout(searchTimeout) const query = e.target.value.trim() if (query.length < 2) { searchDropdown.innerHTML = '' return } searchTimeout = setTimeout(() => { fetch('/api/search-quick?q=' + encodeURIComponent(query)) .then(res => res.json()) .then(results => { if (!results || results.length === 0) { searchDropdown.innerHTML = '' return } let html = '
' html += '
Anime
' results.forEach(r => { html += ` ${r.image ? `${r.title}` : '
no image
'}
${escapeHtml(r.title)}
${r.type}
` }) html += `View all results for ${escapeHtml(query)}` html += '
' searchDropdown.innerHTML = html }) .catch(err => console.error('Search error:', err)) }, 300) }) searchInput.addEventListener('blur', () => { setTimeout(() => { searchDropdown.innerHTML = '' }, 200) }) document.addEventListener('click', (e) => { if (!e.target.closest('.header-search-wrapper')) { searchDropdown.innerHTML = '' } }) } function escapeHtml(text) { const div = document.createElement('div') div.textContent = text return div.innerHTML } })()