// متغيرات عامة let selectedProducts = []; const maxCompareItems = 3; // تهيئة صفحة البحث document.addEventListener('DOMContentLoaded', () => { initializeSearch(); initializeComparison(); }); // تهيئة نظام البحث function initializeSearch() { const searchForm = document.getElementById('advanced-search'); const filters = document.querySelectorAll('select, input'); // معالجة نموذج البحث searchForm.addEventListener('submit', async (e) => { e.preventDefault(); await performSearch(); }); // تحديث النتائج عند تغيير الفلاتر filters.forEach(filter => { filter.addEventListener('change', debounce(performSearch, 500)); }); } // تنفيذ البحث async function performSearch() { const searchQuery = document.getElementById('search-query').value; const productType = document.getElementById('product-type').value; const minPrice = document.getElementById('min-price').value; const maxPrice = document.getElementById('max-price').value; const sortBy = document.getElementById('sort-by').value; try { const response = await fetch('/api/search.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ query: searchQuery, type: productType, minPrice, maxPrice, sortBy }) }); if (!response.ok) throw new Error('فشل البحث'); const results = await response.json(); displayResults(results); } catch (error) { console.error('Search error:', error); showError('حدث خطأ أثناء البحث. يرجى المحاولة مرة أخرى.'); } } // عرض نتائج البحث function displayResults(results) { const resultsContainer = document.getElementById('search-results'); if (!results.length) { resultsContainer.innerHTML = '
${product.description}
اختر منتجات للمقارنة
'; } } // دالة مساعدة للحد من تكرار الطلبات function debounce(func, wait) { let timeout; return function executedFunction(...args) { const later = () => { clearTimeout(timeout); func(...args); }; clearTimeout(timeout); timeout = setTimeout(later, wait); }; } // عرض رسائل الخطأ function showError(message) { const resultsContainer = document.getElementById('search-results'); resultsContainer.innerHTML = ` `; } // جلب تفاصيل المنتجات للمقارنة async function fetchProductsDetails(productIds) { try { const response = await fetch('/api/products.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ ids: productIds }) }); if (!response.ok) throw new Error('فشل جلب تفاصيل المنتجات'); return await response.json(); } catch (error) { console.error('Error fetching product details:', error); return []; } } document.addEventListener('DOMContentLoaded', function() { const searchInput = document.querySelector('.search-input'); const searchResults = document.querySelector('.search-results'); const searchIcon = document.querySelector('.search-icon'); const voiceSearchBtn = document.querySelector('.voice-search-btn'); const categoryFilters = document.querySelectorAll('input[name="category"]'); const minPrice = document.getElementById('min-price'); const maxPrice = document.getElementById('max-price'); const sortBy = document.getElementById('sort-by'); let searchTimeout; const debounceDelay = 300; // تفعيل البحث عند الكتابة searchInput.addEventListener('input', function() { clearTimeout(searchTimeout); if (this.value.length > 0) { searchTimeout = setTimeout(() => { performSearch(); searchResults.classList.add('active'); }, debounceDelay); } else { searchResults.classList.remove('active'); } }); // إخفاء نتائج البحث عند النقر خارجها document.addEventListener('click', function(e) { if (!searchResults.contains(e.target) && !searchInput.contains(e.target)) { searchResults.classList.remove('active'); } }); // تفعيل البحث الصوتي voiceSearchBtn.addEventListener('click', function() { if ('webkitSpeechRecognition' in window) { const recognition = new webkitSpeechRecognition(); recognition.lang = 'ar-SA'; recognition.continuous = false; recognition.interimResults = false; recognition.onstart = function() { voiceSearchBtn.classList.add('listening'); }; recognition.onresult = function(event) { const transcript = event.results[0][0].transcript; searchInput.value = transcript; performSearch(); searchResults.classList.add('active'); }; recognition.onerror = function(event) { console.error('Speech recognition error:', event.error); voiceSearchBtn.classList.remove('listening'); }; recognition.onend = function() { voiceSearchBtn.classList.remove('listening'); }; recognition.start(); } else { alert('عذراً، البحث الصوتي غير مدعوم في متصفحك'); } }); // تحديث نتائج البحث عند تغيير الفلاتر categoryFilters.forEach(filter => { filter.addEventListener('change', performSearch); }); minPrice.addEventListener('input', performSearch); maxPrice.addEventListener('input', performSearch); sortBy.addEventListener('change', performSearch); // دالة البحث الرئيسية function performSearch() { const query = searchInput.value; const selectedCategories = Array.from(categoryFilters) .filter(checkbox => checkbox.checked) .map(checkbox => checkbox.value); const priceRange = { min: minPrice.value ? parseInt(minPrice.value) : null, max: maxPrice.value ? parseInt(maxPrice.value) : null }; const sortValue = sortBy.value; // محاكاة طلب API fetchSearchResults(query, selectedCategories, priceRange, sortValue) .then(displayResults) .catch(error => console.error('Search error:', error)); } // دالة جلب نتائج البحث من الخادم async function fetchSearchResults(query, categories, priceRange, sort) { // هنا يمكنك استبدال هذا بطلب API حقيقي const mockResults = [ { id: 1, title: 'زيت اللافندر العطري', category: 'زيوت عطرية', price: 120, image: 'images/products/lavender.jpg' }, { id: 2, title: 'زيت الجوجوبا', category: 'زيوت ثابتة', price: 85, image: 'images/products/jojoba.jpg' } ]; return new Promise(resolve => { setTimeout(() => resolve(mockResults), 300); }); } // دالة عرض نتائج البحث function displayResults(results) { const resultsContainer = document.querySelector('.search-results-list'); resultsContainer.innerHTML = ''; if (results.length === 0) { resultsContainer.innerHTML = 'لم يتم العثور على نتائج
${this.highlightQuery(product.description)}
${product.price} ريال${message}