${formatCurrency(rec.amount)}
Savings left: ${formatCurrency(savingsLeft - rec.amount)}
`;
elements.recommendationList.appendChild(card);
savingsLeft -= rec.amount;
});
};
// --- EVENT HANDLERS --- //
const allInputs = Object.values(elements).filter(el => el.tagName === 'INPUT' || el.tagName === 'SELECT');
allInputs.forEach(input => {
input.addEventListener('input', optimizeSavings);
input.addEventListener('change', optimizeSavings);
});
elements.has401k.addEventListener('change', () => {
elements.details401k.style.display = elements.has401k.checked ? 'block' : 'none';
});
elements.downloadPdfBtn.addEventListener('click', () => {
const { jsPDF } = window.jspdf;
const pdfContent = elements.pdfContent;
const originalWidth = pdfContent.style.width;
pdfContent.style.width = '1000px';
window.scrollTo(0, 0);
html2canvas(pdfContent, { scale: 2, useCORS: true }).then(canvas => {
pdfContent.style.width = originalWidth;
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'portrait', unit: 'px', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const ratio = canvas.width / canvas.height;
const pdfHeight = (pdfWidth - 40) / ratio;
pdf.addImage(imgData, 'PNG', 20, 20, pdfWidth - 40, pdfHeight);
pdf.save('Tax_Optimized_Plan.pdf');
});
});
// --- INITIALIZATION --- //
elements.details401k.style.display = elements.has401k.checked ? 'block' : 'none';
optimizeSavings();
});