Remaining
$${budgetRemaining.toLocaleString()}
${event.name} (${event.date})
`).join('');
}
function renderMasterTaskList() {
taskList.innerHTML = masterTasks.map(task => `
${task.name}
`).join('');
}
// --- EVENT HANDLERS ---
function handleAddEvent(e) {
e.preventDefault();
const name = document.getElementById('event-name').value;
const date = document.getElementById('event-date').value;
const totalBudget = parseFloat(document.getElementById('event-budget').value);
if (name && date && totalBudget >= 0) {
const newEvent = {
id: Date.now(),
name, date, totalBudget,
tasks: masterTasks.map(t => ({ id: t.id, done: false })),
budget: {}
};
events.push(newEvent);
addEventForm.reset();
renderAll();
}
}
function handleDeleteEvent(e) {
if (e.target.classList.contains('delete-event-btn')) {
const eventId = parseInt(e.target.dataset.id);
events = events.filter(ev => ev.id !== eventId);
renderAll();
}
}
function handleAddTask(e) {
e.preventDefault();
const nameInput = document.getElementById('task-name');
const name = nameInput.value.trim();
if (name) {
masterTasks.push({ id: Date.now(), name });
nameInput.value = '';
renderAll();
}
}
function handleDeleteTask(e) {
if (e.target.classList.contains('delete-task-btn')) {
const taskId = parseInt(e.target.dataset.id);
masterTasks = masterTasks.filter(t => t.id !== taskId);
renderAll();
}
}
function handleTaskToggle(e) {
if (e.target.type === 'checkbox') {
const selectedEventId = eventSelect.value;
const event = events.find(ev => ev.id == selectedEventId);
if (event) {
const taskId = parseInt(e.target.dataset.taskId);
const task = event.tasks.find(t => t.id === taskId);
if (task) {
task.done = e.target.checked;
}
}
}
}
function generatePdf() {
const { jsPDF } = window.jspdf;
const pdfContent = document.getElementById('pdf-content');
const pdfTitleEl = document.getElementById('pdf-title');
if (!pdfContent || !eventSelect.value) return;
const event = events.find(e => e.id == eventSelect.value);
pdfTitleEl.textContent = `Event Plan: ${event.name} - ${event.date}`;
html2canvas(pdfContent, { scale: 2, useCORS: true, logging: false })
.then(canvas => {
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const ratio = canvas.width / canvas.height;
const imgHeight = (pdfWidth - 20) / ratio;
pdf.addImage(imgData, 'PNG', 10, 10, pdfWidth - 20, imgHeight);
pdf.save(`Event-Plan-${event.name}.pdf`);
pdfTitleEl.textContent = '';
});
}
// --- EVENT LISTENERS ---
function addEventListeners() {
tabButtons.forEach(button => {
button.addEventListener('click', () => {
const tab = button.dataset.tab;
tabButtons.forEach(btn => btn.classList.toggle('active', btn.dataset.tab === tab));
tabContents.forEach(content => content.classList.toggle('active', content.id.startsWith(tab)));
});
});
eventSelect.addEventListener('change', (e) => renderDashboard(e.target.value));
addEventForm.addEventListener('submit', handleAddEvent);
eventList.addEventListener('click', handleDeleteEvent);
addTaskForm.addEventListener('submit', handleAddTask);
taskList.addEventListener('click', handleDeleteTask);
eventDashboardContent.addEventListener('change', handleTaskToggle);
downloadPdfBtn.addEventListener('click', generatePdf);
}
initialize();
});
