`;
document.getElementById('download-pdf-btn').addEventListener('click', generatePdf);
}
function saveFormData() {
const currentFields = assessmentData[currentTabIndex].fields;
if (!currentFields) return;
currentFields.forEach(field => {
const el = document.getElementById(field.id);
if (el) formData[field.id] = el.value;
});
}
function calculateScore() {
let score = 0;
assessmentData.forEach(tab => {
if (!tab.fields) return;
tab.fields.forEach(field => {
const userValue = formData[field.id];
if (field.type === 'number') {
const age = parseInt(userValue);
if (age >= 61) score += field.points['61+'];
else if (age >= 51) score += field.points['51-60'];
else if (age >= 40) score += field.points['40-50'];
} else {
if (field.points[userValue]) {
score += field.points[userValue];
}
}
});
});
return score;
}
window.goToTab = function(index) {
if (index > currentTabIndex && !validateCurrentTab()) {
alert("Please fill out all fields before proceeding.");
return;
}
saveFormData();
currentTabIndex = index;
renderFormContent();
updateUI();
};
function validateCurrentTab() {
const currentFields = assessmentData[currentTabIndex].fields;
if (!currentFields) return true;
for (const field of currentFields) {
const el = document.getElementById(field.id);
if (!el || !el.value) return false;
}
return true;
}
function updateUI() {
// Update tab buttons
document.querySelectorAll('.tab-btn').forEach((btn, index) => {
btn.classList.toggle('active', index === currentTabIndex);
});
// Update nav buttons
prevBtn.classList.toggle('invisible', currentTabIndex === 0);
nextBtn.classList.toggle('invisible', currentTabIndex === assessmentData.length - 1);
nextBtn.textContent = (currentTabIndex === assessmentData.length - 2) ? 'See Results' : 'Next →';
}
function handleNav(direction) {
if (direction === 'next' && !validateCurrentTab()) {
alert("Please fill out all fields before proceeding.");
return;
}
saveFormData();
currentTabIndex += (direction === 'next' ? 1 : -1);
renderFormContent();
updateUI();
}
function generatePdf() {
prepareReportData();
const reportContainer = document.getElementById('pdf-report-container');
reportContainer.style.display = 'block';
html2canvas(reportContainer, { scale: 2, useCORS: true }).then(canvas => {
const { jsPDF } = window.jspdf;
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 imgHeight = pdfWidth / ratio;
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, imgHeight);
pdf.save('Bone-Health-Assessment.pdf');
reportContainer.style.display = 'none';
});
}
function prepareReportData() {
document.getElementById('report-date').textContent = new Date().toLocaleDateString('en-US');
const reportBody = document.getElementById('pdf-report-body');
const resultsContent = document.getElementById('results-content').cloneNode(true);
resultsContent.querySelector('#download-pdf-btn').remove(); // Remove button from PDF
let inputsHtml = `
Your Inputs
`;
Object.keys(formData).forEach(key => {
const fieldLabel = assessmentData.flatMap(t => t.fields || []).find(f => f.id === key)?.label || key;
inputsHtml += `
${fieldLabel}
${formData[key]}
`;
});
inputsHtml += `
`;
let resultsHtml = `
Assessment Results
${resultsContent.innerHTML}`;
reportBody.innerHTML = inputsHtml + resultsHtml;
}
// --- Event Listeners ---
nextBtn.addEventListener('click', () => handleNav('next'));
prevBtn.addEventListener('click', () => handleNav('prev'));
// --- Initial Setup ---
renderTabs();
renderFormContent();
updateUI();
});