Power of Attorney Prep Sheet
No powers selected.
'; if (data.powers.length > 0) { powersHTML = '- ';
data.powers.forEach(power => {
powersHTML += `
- ${power} `; }); powersHTML += '
Principal (You)
Full Name: ${data.principal.name}
Address: ${data.principal.address}, ${data.principal.city}
Phone: ${data.principal.phone}
Primary Agent
Full Name: ${data.agent.name}
Relationship: ${data.agent.relationship}
Address: ${data.agent.address}, ${data.agent.city}
Phone: ${data.agent.phone}
Successor Agent
${successorHTML}Granted Powers
${powersHTML}Terms
Effective Date: ${data.settings.effective}
Durable: ${data.settings.durable}
This is a preparation sheet, NOT a legal document.
`; } function downloadPDF() { const { jsPDF } = window.jspdf; const doc = new jsPDF(); const data = getFormData(); const pageHeight = doc.internal.pageSize.height; const margin = 20; let currentY = margin; const checkPageBreak = (spaceNeeded) => { if (currentY + spaceNeeded > pageHeight - margin) { doc.addPage(); currentY = margin; } }; const addSection = (title, items) => { checkPageBreak(30); doc.setFontSize(16); doc.setFont(undefined, 'bold'); doc.text(title, margin, currentY); currentY += 10; doc.setLineWidth(0.5); doc.line(margin, currentY, doc.internal.pageSize.width - margin, currentY); currentY += 10; doc.setFontSize(11); doc.setFont(undefined, 'normal'); items.forEach(item => { if (item.label && item.value) { checkPageBreak(10); doc.setFont(undefined, 'bold'); doc.text(item.label + ":", margin, currentY); doc.setFont(undefined, 'normal'); doc.text(item.value, margin + 40, currentY); currentY += 8; } }); currentY += 10; // Extra space after section }; // --- PDF Content --- doc.setFontSize(20); doc.setFont(undefined, 'bold'); doc.text("Power of Attorney Prep Sheet", doc.internal.pageSize.width / 2, currentY, { align: 'center' }); currentY += 15; // Principal addSection("Principal (You)", [ { label: "Name", value: data.principal.name }, { label: "Address", value: `${data.principal.address}, ${data.principal.city}` }, { label: "Phone", value: data.principal.phone } ]); // Agent addSection("Primary Agent", [ { label: "Name", value: data.agent.name }, { label: "Relationship", value: data.agent.relationship }, { label: "Address", value: `${data.agent.address}, ${data.agent.city}` }, { label: "Phone", value: data.agent.phone } ]); // Successor Agent if (data.successor.name) { addSection("Successor Agent", [ { label: "Name", value: data.successor.name }, { label: "Relationship", value: data.successor.relationship }, { label: "Address", value: `${data.successor.address}, ${data.successor.city}` }, { label: "Phone", value: data.successor.phone } ]); } // Terms addSection("Terms", [ { label: "Effective", value: data.settings.effective }, { label: "Durable", value: data.settings.durable } ]); // Powers checkPageBreak(30 + (data.powers.length * 8)); doc.setFontSize(16); doc.setFont(undefined, 'bold'); doc.text("Granted Powers", margin, currentY); currentY += 10; doc.setLineWidth(0.5); doc.line(margin, currentY, doc.internal.pageSize.width - margin, currentY); currentY += 10; doc.setFontSize(11); doc.setFont(undefined, 'normal'); data.powers.forEach(power => { checkPageBreak(8); doc.text(`• ${power}`, margin + 5, currentY); currentY += 8; }); currentY += 10; // Footer Disclaimer checkPageBreak(20); currentY = pageHeight - margin - 10; doc.setFontSize(10); doc.setFont(undefined, 'bold'); doc.text("This is a preparation sheet, NOT a legal document.", doc.internal.pageSize.width / 2, currentY, { align: 'center' }); doc.setFont(undefined, 'normal'); doc.text("Consult with a legal professional to draft an official POA.", doc.internal.pageSize.width / 2, currentY + 7, { align: 'center' }); doc.save('poa-prep-sheet.pdf'); } // --- Tab Navigation --- function switchTab(tabIndex) { tabs.forEach((tab, index) => { tab.classList.toggle('active', index === tabIndex); contents[index].classList.toggle('active', index === tabIndex); }); currentTab = tabIndex; updateNavButtons(); } function updateNavButtons() { prevBtn.disabled = currentTab === 0; nextBtn.disabled = currentTab === tabs.length - 1; } tabs.forEach((tab, index) => { tab.addEventListener('click', () => switchTab(index)); }); nextBtn.addEventListener('click', () => { if (currentTab < tabs.length - 1) switchTab(currentTab + 1); }); prevBtn.addEventListener('click', () => { if (currentTab > 0) switchTab(currentTab - 1); }); // --- Event Listeners --- generateBtn.addEventListener('click', () => { // IV.D.1: This is type="button", so no preventDefault needed renderReviewSheet(); switchTab(1); // Switch to review tab }); pdfDownloadBtn.addEventListener('click', downloadPDF); // --- Initial Setup --- populatePowersChecklist(); updateNavButtons(); });