document.addEventListener('DOMContentLoaded', function() {
const form = document.getElementById('quicksearch');
const searchInput = document.getElementById('story');
const suggestionsDiv = document.getElementById('suggestions');
let fullSearchActive = false;
let searchTimeout;
let currentPage = 1;
let currentQuery = '';
let isLoading = false;
form.addEventListener('submit', function(e) {
e.preventDefault();
const query = searchInput.value.trim();
if (query.length > 0) {
fullSearchActive = true;
suggestionsDiv.style.display = 'none';
performFullSearch(query);
}
});
searchInput.addEventListener('keydown', function(e) {
if (e.key === 'Enter') {
e.preventDefault();
const query = searchInput.value.trim();
if (query.length > 0) {
fullSearchActive = true;
suggestionsDiv.style.display = 'none';
performFullSearch(query);
}
}
});
searchInput.addEventListener('input', function() {
const query = this.value.trim();
clearTimeout(searchTimeout);
if (fullSearchActive) {
const resultsContainer = document.getElementById('search-results-top');
if (resultsContainer && resultsContainer.style.display !== 'none') {
suggestionsDiv.style.display = 'none';
return;
}
}
if (query.length > 0) {
searchTimeout = setTimeout(() => {
performLiveSearch(query);
}, 300);
} else {
hideSearchResults();
}
});
searchInput.addEventListener('focus', function() {
if (fullSearchActive) {
const resultsContainer = document.getElementById('search-results-top');
if (resultsContainer && resultsContainer.style.display !== 'none') {
suggestionsDiv.style.display = 'none';
return;
}
}
});
function performLiveSearch(query) {
if (query.length < 2) {
hideSearchResults();
return;
}
currentQuery = query;
currentPage = 1;
showSearchResults();
let resultsContainer = document.getElementById('search-results-top');
resultsContainer.innerHTML = '
Recherche en cours...
';
fetch('/engine/ajax/search.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: 'query=' + encodeURIComponent(query) + '&page=1'
})
.then(response => response.text())
.then(data => {
if (searchInput.value.trim() === query) {
resultsContainer.innerHTML = `
${data}
`;
}
})
.catch(error => {
resultsContainer.innerHTML = 'Erreur lors de la recherche
';
});
}
function showSearchResults() {
let resultsContainer = document.getElementById('search-results-top');
if (!resultsContainer) {
resultsContainer = document.createElement('div');
resultsContainer.id = 'search-results-top';
resultsContainer.style.cssText = `
position: relative;
z-index: 1000;
padding: 20px;
margin: 0;
border-bottom: 2px solid #41dc9c;
box-shadow: 0 2px 10px rgba(0,0,0,0.3);
max-height: 90vh;
overflow-y: auto;
overflow-x: hidden;
`;
const wrapIn = document.querySelector('.wrap-in');
const headerOuter = document.querySelector('.header-outer');
if (wrapIn) {
wrapIn.insertBefore(resultsContainer, wrapIn.firstChild);
} else if (headerOuter) {
headerOuter.insertAdjacentElement('afterend', resultsContainer);
} else {
document.body.insertBefore(resultsContainer, document.body.firstChild);
}
}
resultsContainer.style.display = 'block';
if (window.pageYOffset > 300) {
resultsContainer.scrollIntoView({ behavior: 'smooth' });
}
}
function hideSearchResults() {
const resultsContainer = document.getElementById('search-results-top');
if (resultsContainer) {
resultsContainer.style.display = 'none';
}
fullSearchActive = false;
currentPage = 1;
}
function performFullSearch(query) {
suggestionsDiv.style.display = 'none';
fullSearchActive = true;
currentQuery = query;
currentPage = 1;
showSearchResults();
let resultsContainer = document.getElementById('search-results-top');
resultsContainer.innerHTML = 'Recherche en cours...
';
fetch('/engine/ajax/search.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: 'query=' + encodeURIComponent(query) + '&page=1'
})
.then(response => response.text())
.then(data => {
resultsContainer.innerHTML = `
${data}
`;
history.pushState({}, '', '?search=' + encodeURIComponent(query));
})
.catch(error => {
resultsContainer.innerHTML = 'Erreur lors de la recherche
';
});
}
function loadMoreResults() {
if (isLoading || !currentQuery) return;
isLoading = true;
currentPage++;
const loadMoreBtn = document.getElementById('load-more');
if (loadMoreBtn) {
loadMoreBtn.innerHTML = 'Chargement...';
loadMoreBtn.style.pointerEvents = 'none';
}
fetch('/engine/ajax/search.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: 'query=' + encodeURIComponent(currentQuery) + '&page=' + currentPage
})
.then(response => response.text())
.then(data => {
isLoading = false;
if (data.trim() && !data.includes('Aucun résultat')) {
if (loadMoreBtn) {
loadMoreBtn.remove();
}
const resultsContent = document.getElementById('search-results-content');
if (resultsContent) {
resultsContent.insertAdjacentHTML('beforeend', data);
}
} else {
if (loadMoreBtn) {
loadMoreBtn.style.display = 'none';
}
}
})
.catch(error => {
isLoading = false;
if (loadMoreBtn) {
loadMoreBtn.innerHTML = 'Erreur - Réessayer';
loadMoreBtn.style.pointerEvents = 'auto';
}
});
}
window.closeSearchResults = function() {
hideSearchResults();
};
window.loadMoreResults = loadMoreResults;
});