New vs. Existing Home Cost Comparison Tool

New vs. Existing Home Cost Comparison Tool

Enter Property Details

Common Loan Details

New Construction Home

Existing (Resale) Home

Financial Comparison

Customize Financial Assumptions

AssumptionValue (%)

Monthly Cost: $${newHome.totalMonthlyCost.toLocaleString('en-US', {maximumFractionDigits: 0})}

Existing Home Estimate

Upfront Cost: $${existingHome.upfrontCost.toLocaleString('en-US', {maximumFractionDigits: 0})}

Monthly Cost: $${existingHome.totalMonthlyCost.toLocaleString('en-US', {maximumFractionDigits: 0})}

`; } function updateChart(newHome, existingHome) { const ctx = document.getElementById('comparisonChart').getContext('2d'); if (comparisonChart) { comparisonChart.destroy(); } comparisonChart = new Chart(ctx, { type: 'bar', data: { labels: ['New Home', 'Existing Home'], datasets: [{ label: 'Total Cost Over 5 Years ($)', data: [newHome.total5YearCost, existingHome.total5YearCost], backgroundColor: ['rgba(74, 144, 226, 0.7)', 'rgba(245, 166, 35, 0.7)'], borderColor: ['rgba(74, 144, 226, 1)', 'rgba(245, 166, 35, 1)'], borderWidth: 1 }] }, options: { scales: { y: { beginAtZero: true } }, plugins: { legend: { display: false }, title: { display: true, text: 'Total Cost Over 5 Years' } } } }); } function renderConfig() { configTbody.innerHTML = ` Closing Costs Rate Annual Property Tax Rate New Home Insurance Rate Existing Home Insurance Rate New Home Maintenance Rate Existing Home Maintenance Rate `; } window.updateConfig = function(element) { const { prop } = element.dataset; const value = parseFloat(element.value); if (isNaN(value)) return; configData[prop] = value; compareCosts(); } // --- TAB & NAVIGATION --- window.openTab = function(evt, tabName) { const tabContents = document.getElementsByClassName("tab-content"); Array.from(tabContents).forEach(tab => tab.style.display = "none"); const tabButtons = document.getElementsByClassName("tab-btn"); Array.from(tabButtons).forEach(btn => btn.classList.remove("active")); document.getElementById(tabName).style.display = "block"; if (evt) { evt.currentTarget.classList.add("active"); } else { const btnToActivate = Array.from(tabButtons).find(btn => btn.getAttribute('onclick').includes(`'${tabName}'`)); if (btnToActivate) btnToActivate.classList.add("active"); } updateNavButtons(); } window.navigateTabs = function(direction) { const tabs = Array.from(document.querySelectorAll('.tab-btn')); const activeTabIndex = tabs.findIndex(tab => tab.classList.contains('active')); let newIndex = (direction === 'next') ? (activeTabIndex + 1) % tabs.length : (activeTabIndex - 1 + tabs.length) % tabs.length; tabs[newIndex].click(); } function updateNavButtons() { const tabs = Array.from(document.querySelectorAll('.tab-btn')); const activeTabIndex = tabs.findIndex(tab => tab.classList.contains('active')); document.getElementById('prev-btn').style.visibility = activeTabIndex === 0 ? 'hidden' : 'visible'; document.getElementById('next-btn').style.visibility = activeTabIndex === tabs.length - 1 ? 'hidden' : 'visible'; } // --- PDF DOWNLOAD --- if(downloadPdfBtn) { downloadPdfBtn.addEventListener('click', function() { const { jsPDF } = window.jspdf; const contentToDownload = document.getElementById('results-to-download'); if (!contentToDownload || !comparisonChart) { console.warn("Please generate a comparison before downloading."); return; } const originalButtonText = downloadPdfBtn.innerHTML; downloadPdfBtn.innerHTML = 'Generating...'; downloadPdfBtn.disabled = true; html2canvas(contentToDownload, { scale: 2, useCORS: true }).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 imgProps = pdf.getImageProperties(imgData); const imgHeight = (imgProps.height * pdfWidth) / imgProps.width; pdf.addImage(imgData, 'PNG', 10, 10, pdfWidth - 20, imgHeight > 0 ? imgHeight - 20 : 0); pdf.save('New-vs-Existing-Home-Cost.pdf'); }).catch(err => { console.error("Error generating PDF:", err); }).finally(() => { downloadPdfBtn.innerHTML = originalButtonText; downloadPdfBtn.disabled = false; }); }); } // --- INITIALIZATION --- function initializeTool() { compareCosts(); renderConfig(); updateNavButtons(); } initializeTool(); });
Scroll to Top