// /public/js/calendar/modals.js function setupModalListeners() { const modal = document.getElementById('eventModal'); if (!modal) return; const closeBtn = modal.querySelector('.close'); const cancelBtn = document.getElementById('cancelBtn'); const eventForm = document.getElementById('eventForm'); if (closeBtn) closeBtn.addEventListener('click', closeModal); if (cancelBtn) cancelBtn.addEventListener('click', closeModal); if (eventForm) eventForm.addEventListener('submit', handleEventSubmit); const startDateInput = document.getElementById('eventStartDate'); const endDateInput = document.getElementById('eventEndDate'); const startTimeInput = document.getElementById('eventStartTime'); const endTimeInput = document.getElementById('eventEndTime'); if (startDateInput && endDateInput) { startDateInput.addEventListener('change', function() { endDateInput.value = this.value; }); } if (startTimeInput && endTimeInput) { startTimeInput.addEventListener('change', function() { endTimeInput.value = this.value; }); } } function setupEventDetailsModalListeners() { const modal = document.getElementById('eventDetailsModal'); if (!modal) return; const closeBtn = modal.querySelector('.close'); if (closeBtn) { closeBtn.addEventListener('click', closeEventDetailsModal); } } function setupAllDayToggle() { const allDayCheckbox = document.getElementById('eventAllDay'); if (!allDayCheckbox) return; const startTimeGroup = document.getElementById('startTimeGroup'); const endTimeGroup = document.getElementById('endTimeGroup'); allDayCheckbox.addEventListener('change', function() { if (this.checked) { startTimeGroup.style.display = 'none'; endTimeGroup.style.display = 'none'; document.getElementById('eventStartTime').value = '00:00'; document.getElementById('eventEndTime').value = '23:59'; } else { startTimeGroup.style.display = 'block'; endTimeGroup.style.display = 'block'; } }); } function openAddEventModal() { const modal = document.getElementById('eventModal'); const modalTitle = document.getElementById('modalTitle'); const form = document.getElementById('eventForm'); modalTitle.textContent = 'Add New Event'; form.reset(); document.getElementById('eventId').value = ''; document.getElementById('eventColor').value = '#3788d8'; const today = new Date(); const dateStr = today.toISOString().split('T')[0]; document.getElementById('eventStartDate').value = dateStr; document.getElementById('eventEndDate').value = dateStr; modal.style.display = 'block'; } function openEditModal(event) { const modal = document.getElementById('eventModal'); const modalTitle = document.getElementById('modalTitle'); modalTitle.textContent = 'Edit Event'; document.getElementById('eventId').value = event.id; document.getElementById('eventTitle').value = event.title; document.getElementById('eventDescription').value = event.description || ''; document.getElementById('eventCategory').value = event.category || ''; document.getElementById('eventColor').value = event.color; document.getElementById('eventAllDay').checked = event.all_day == 1; const startDateTime = event.start_date.split(' '); const endDateTime = event.end_date.split(' '); document.getElementById('eventStartDate').value = startDateTime[0]; document.getElementById('eventEndDate').value = endDateTime[0]; document.getElementById('eventStartTime').value = startDateTime[1] ? startDateTime[1].substring(0, 5) : '00:00'; document.getElementById('eventEndTime').value = endDateTime[1] ? endDateTime[1].substring(0, 5) : '23:59'; document.querySelectorAll('.attendee-checkbox-input').forEach(checkbox => { checkbox.checked = false; }); if (event.attendees) { const attendeeIds = event.attendees.split(',').map(id => id.trim()); attendeeIds.forEach(id => { const checkbox = document.querySelector(`.attendee-checkbox-input[value="${id}"]`); if (checkbox) checkbox.checked = true; }); } if (event.all_day == 1) { document.getElementById('startTimeGroup').style.display = 'none'; document.getElementById('endTimeGroup').style.display = 'none'; } modal.style.display = 'block'; } function closeModal() { const modal = document.getElementById('eventModal'); if (modal) modal.style.display = 'none'; } function closeEventDetailsModal() { const modal = document.getElementById('eventDetailsModal'); if (modal) modal.style.display = 'none'; } function handleEventSubmit(e) { e.preventDefault(); const formData = new FormData(e.target); const eventId = formData.get('id'); const allDay = formData.get('all_day') ? 1 : 0; const startDate = formData.get('start_date'); const endDate = formData.get('end_date'); const startTime = allDay ? '00:00:00' : formData.get('start_time') + ':00'; const endTime = allDay ? '23:59:59' : formData.get('end_time') + ':00'; const startDateTime = new Date(`${startDate}T${startTime.substring(0, 5)}`); const endDateTime = new Date(`${endDate}T${endTime.substring(0, 5)}`); if (endDateTime < startDateTime) { alert('End date cannot be before start date'); return; } const body = new URLSearchParams(); if (eventId) { body.append('id', eventId); } body.append('title', formData.get('title')); body.append('description', formData.get('description') || ''); body.append('start_date', `${startDate} ${startTime}`); body.append('end_date', `${endDate} ${endTime}`); body.append('all_day', allDay); body.append('category', formData.get('category') || ''); body.append('color', formData.get('color')); document.querySelectorAll('.attendee-checkbox-input:checked').forEach(checkbox => { body.append('attendees[]', checkbox.value); }); const url = eventId ? '/calendar/edit' : '/calendar/add'; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: body }) .then(response => response.json()) .then(result => { if (result.success) { closeModal(); if (isManagementPage) { location.reload(); } else { loadEvents(); } } else { alert('Error: ' + (result.error || 'Unknown error')); } }) .catch(error => { console.error('Error saving event:', error); alert('Failed to save event'); }); } document.addEventListener('click', function(e) { const eventModal = document.getElementById('eventModal'); const detailsModal = document.getElementById('eventDetailsModal'); if (e.target === eventModal) { closeModal(); } if (e.target === detailsModal) { closeEventDetailsModal(); } }); document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { closeModal(); closeEventDetailsModal(); } });