document.addEventListener('DOMContentLoaded', function () { const refreshButton = document.getElementById('refresh-weather-btn'); const weatherContent = document.getElementById('weather-content'); const weatherLoading = document.getElementById('weather-loading'); const weatherError = document.getElementById('weather-error'); const weatherIcon = document.getElementById('weather-icon'); const weatherTemp = document.getElementById('weather-temp'); const weatherFeelsLike = document.getElementById('weather-feels-like'); const weatherDesc = document.getElementById('weather-desc'); const weatherLastUpdated = document.getElementById('weather-last-updated'); const weatherAlerts = document.getElementById('weather-alerts'); const weatherPlaceholder = document.getElementById('weather-placeholder'); async function fetchWeather() { // Show loading state weatherContent.style.display = 'none'; weatherError.style.display = 'none'; weatherLoading.style.display = 'block'; refreshButton.disabled = true; try { const response = await fetch('api/weather-fetch.php'); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); if (data.error) { throw new Error(data.error); } // Update UI if (weatherPlaceholder) { weatherPlaceholder.style.display = 'none'; } weatherIcon.src = `https://openweathermap.org/img/wn/${data[':weather_icon']}@2x.png`; weatherTemp.innerHTML = `${Math.round(data[':temperature_f'])}°F`; weatherFeelsLike.innerHTML = `Feels like ${Math.round(data[':feels_like_f'])}°F`; weatherDesc.textContent = data[':weather_description'].charAt(0).toUpperCase() + data[':weather_description'].slice(1); const observationDate = new Date(data[':observation_time'].replace(/-/g, '/')); weatherLastUpdated.textContent = observationDate.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' }); // Clear and build alerts weatherAlerts.innerHTML = ''; if (data[':is_extreme_heat'] == 1) { weatherAlerts.innerHTML += `