document.addEventListener('DOMContentLoaded', () => { const searchForm = document.getElementById('search-form'); const searchInput = document.getElementById('search-input'); const searchBtn = document.getElementById('search-btn'); const resultsContainer = document.getElementById('results-container'); const examples = document.querySelectorAll('.example-link'); // Helper to format currency const formatCurrency = (value) => new Intl.NumberFormat('nl-NL', { style: 'currency', currency: 'EUR', minimumFractionDigits: 0 }).format(value); const handleSearch = async (query) => { if (!query) return; const originalBtnText = searchBtn.innerHTML; searchBtn.innerHTML = ''; searchBtn.disabled = true; resultsContainer.style.display = 'none'; try { const response = await fetch(`/api/search.php?query=${encodeURIComponent(query)}`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); displayResults(data); } catch (error) { console.error("Fetch error: ", error); displayError('Er is een fout opgetreden. Probeer het later opnieuw.'); } finally { searchBtn.innerHTML = originalBtnText; searchBtn.disabled = false; } }; searchForm.addEventListener('submit', (e) => { e.preventDefault(); handleSearch(searchInput.value); }); examples.forEach(link => { link.addEventListener('click', (e) => { e.preventDefault(); const exampleQuery = e.target.textContent; searchInput.value = exampleQuery; handleSearch(exampleQuery); }); }); const displayResults = (data) => { if (data.error) { displayError(data.error); return; } // --- Main Header --- document.getElementById('address-title').textContent = data.adres; document.getElementById('address-subtitle').textContent = `Gegevens voor ${data.postcode}, ${data.plaats}`; // --- Basisgegevens --- document.getElementById('info-postcode').textContent = data.postcode; document.getElementById('info-plaats').textContent = data.plaats; document.getElementById('info-gemeente').textContent = data.gemeente; document.getElementById('info-provincie').textContent = data.provincie; document.getElementById('info-buurt').textContent = data.buurt; document.getElementById('info-wijk').textContent = data.wijk; // --- Kadastrale Info --- document.getElementById('info-perceelnummer').textContent = data.perceelnummer; document.getElementById('info-eigendomssituatie').textContent = data.eigendomssituatie; document.getElementById('info-type').textContent = data.type; document.getElementById('info-bouwjaar').textContent = data.bouwjaar; document.getElementById('info-oppervlakte').textContent = data.oppervlakte; // --- WOZ Waarde --- document.getElementById('info-woz-waarde').textContent = formatCurrency(data.woz_waarde); // --- Energielabel --- document.getElementById('info-energielabel').textContent = data.energielabel; document.getElementById('info-energiekosten').textContent = `${formatCurrency(data.geschatte_energiekosten)}`; // --- Buurtstatistieken --- document.getElementById('info-inwoners').textContent = data.buurtstatistieken.inwoners.toLocaleString('nl-NL'); document.getElementById('info-gem-leeftijd').textContent = `${data.buurtstatistieken.gemiddelde_leeftijd} jaar`; document.getElementById('info-groen-score').textContent = data.buurtstatistieken.groen_score; document.getElementById('info-veiligheid-score').textContent = data.buurtstatistieken.veiligheid_score; // --- Verkoophistorie --- const historyBody = document.getElementById('verkoophistorie-body'); historyBody.innerHTML = ''; // Clear previous results data.verkoophistorie.forEach(tx => { const row = document.createElement('tr'); row.innerHTML = ` ${new Date(tx.datum).toLocaleDateString('nl-NL')} ${tx.type} ${formatCurrency(tx.prijs)} `; historyBody.appendChild(row); }); resultsContainer.style.display = 'block'; resultsContainer.scrollIntoView({ behavior: 'smooth' }); }; const displayError = (message) => { alert(message); }; }); // Add some CSS for the loader const style = document.createElement('style'); style.innerHTML = ` .loader { width: 18px; height: 18px; border: 2px solid #FFF; border-bottom-color: transparent; border-radius: 50%; display: inline-block; box-sizing: border-box; animation: rotation 1s linear infinite; } @keyframes rotation { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } `; document.head.appendChild(style);