const forms = document.querySelectorAll('.booking-form'); const formatCurrency = (cents) => new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR', }).format(cents / 100); const calculateRentalDays = (start, end) => { if (!start || !end) return null; const startDate = new Date(start); const endDate = new Date(end); if (Number.isNaN(startDate.valueOf()) || Number.isNaN(endDate.valueOf())) { return null; } const milliseconds = endDate.getTime() - startDate.getTime(); const rentalDays = Math.floor(milliseconds / 86400000); return rentalDays > 0 ? rentalDays : null; }; forms.forEach((form) => { const startInput = form.querySelector('[data-booking-start]'); const endInput = form.querySelector('[data-booking-end]'); const daysOutput = form.querySelector('[data-summary-days]'); const totalOutput = form.querySelector('[data-summary-total]'); const rateInput = form.querySelector('input[name="price_per_day_cents"]'); const defaultRate = Number(form.dataset.dayRate || rateInput?.value || 9999); const render = () => { const rentalDays = calculateRentalDays(startInput?.value, endInput?.value); const rate = Number(rateInput?.value || defaultRate); if (!rentalDays || rate < 0) { if (daysOutput) daysOutput.textContent = 'Noch nicht gewählt'; if (totalOutput) totalOutput.textContent = formatCurrency(defaultRate); return; } if (daysOutput) { daysOutput.textContent = `${rentalDays} ${rentalDays === 1 ? 'Miettag' : 'Miettage'}`; } if (totalOutput) { totalOutput.textContent = formatCurrency(rentalDays * rate); } }; startInput?.addEventListener('input', render); endInput?.addEventListener('input', render); rateInput?.addEventListener('input', render); render(); });