let rennplanData = {}; let resultsData = {}; let messageData = {}; document.addEventListener("DOMContentLoaded", () => { initAppUI(); initTabs(); loadData(); setInterval(loadData, CONFIG.REFRESH_INTERVAL); }); function initAppUI() { const fullTitle = `${CONFIG.EVENT_NAME} – Rennplan & Ergebnisse`; document.title = fullTitle; const titleEl = document.getElementById("app-title"); if (titleEl) { titleEl.textContent = fullTitle; } } function initTabs() { const rennplanBtn = document.getElementById("tab-rennplan"); const resultsBtn = document.getElementById("tab-ergebnisse"); const rennplanView = document.getElementById("rennplan-view"); const resultsView = document.getElementById("ergebnisse-view"); rennplanBtn.addEventListener("click", () => { rennplanView.classList.remove("hidden"); resultsView.classList.add("hidden"); setTabActive(rennplanBtn, resultsBtn); }); resultsBtn.addEventListener("click", () => { resultsView.classList.remove("hidden"); rennplanView.classList.add("hidden"); setTabActive(resultsBtn, rennplanBtn); }); } function setTabActive(active, inactive) { active.className = "flex-1 py-4 text-indigo-600 border-b-4 border-indigo-600 font-medium"; inactive.className = "flex-1 py-4 text-slate-500 font-medium"; } async function loadData() { try { const scrollY = window.scrollY; const [rennplanRes, resultsRes, messageRes] = await Promise.all([ fetch(CONFIG.RENNPLAN_URL), fetch(CONFIG.RESULTS_URL), fetch(CONFIG.MESSAGE_URL) ]); rennplanData = await rennplanRes.json(); resultsData = await resultsRes.json(); messageData = await messageRes.json(); renderMessage(); renderRennplan(); renderResults(); requestAnimationFrame(() => { window.scrollTo(0, scrollY); }); } catch (err) { console.error("API Fehler:", err); } } function renderMessage() { const box = document.getElementById("message-box"); if (!messageData?.message) { box.classList.add("hidden"); return; } let style = ""; switch (messageData.type) { case "danger": style = "bg-red-50 border-red-400 text-red-900"; break; case "warning": style = "bg-amber-50 border-amber-400 text-amber-900"; break; default: style = "bg-blue-50 border-blue-400 text-blue-900"; } box.className = `border-l-4 p-4 rounded-xl shadow-sm ${style}`; box.innerHTML = `