`).join('');
}
function updateNavButtons() {
const currentIndex = tabOrder.indexOf(currentTab);
nav.prev.disabled = currentIndex === 0;
nav.next.disabled = currentIndex === tabOrder.length - 1;
if (currentTab === 'instructions') nav.next.textContent = 'Start Questionnaire';
else if (currentTab === 'questionnaire') nav.next.textContent = 'See Results';
else nav.next.textContent = 'Next';
}
function setActiveTab(tabName) {
if (!tabs[tabName] || !sections[tabName] || tabs[tabName].disabled) return;
Object.values(tabs).forEach(t => t.classList.remove('tab-active'));
Object.values(sections).forEach(s => s.classList.add('hidden'));
tabs[tabName].classList.add('tab-active');
sections[tabName].classList.remove('hidden');
currentTab = tabName;
updateNavButtons();
}
function calculateScore() {
const formData = new FormData(dryEyeForm);
let sumOfScores = 0;
let questionsAnswered = 0;
assessmentData.responses = [];
for (const q of questions) {
const value = formData.get(q.id);
if (value !== null) {
sumOfScores += parseInt(value, 10);
questionsAnswered++;
assessmentData.responses.push({ question: q.text, answerValue: parseInt(value, 10) });
} else {
alert('Please answer all questions before proceeding.');
return false;
}
}
// OSDI formula: (Sum of scores * 25) / Number of questions answered
const osdiScore = (sumOfScores * 25) / questionsAnswered;
assessmentData.score = Math.round(osdiScore);
let level = '';
let interpretation = '';
if (osdiScore <= 12) {
level = 'Normal';
interpretation = 'Your score is within the normal range, suggesting you likely do not have significant dry eye symptoms.';
} else if (osdiScore <= 22) {
level = 'Mild';
interpretation = 'Your score suggests mild dry eye symptoms. Over-the-counter lubricating eye drops and environmental awareness (like taking breaks from screens) may help.';
} else if (osdiScore <= 32) {
level = 'Moderate';
interpretation = 'Your score suggests moderate dry eye symptoms. It is advisable to consult with an eye care professional for a proper diagnosis and management plan.';
} else {
level = 'Severe';
interpretation = 'Your score suggests severe dry eye symptoms. It is highly recommended to see an eye care professional soon for a comprehensive evaluation and treatment.';
}
assessmentData.level = level;
assessmentData.interpretation = interpretation;
return true;
}
function displayResults() {
resultScoreEl.textContent = assessmentData.score;
resultLevelEl.textContent = assessmentData.level;
resultsInterpretationEl.innerHTML = `
${assessmentData.interpretation}
`; tabs.results.disabled = false; setActiveTab('results'); } async function generatePdf() { const { jsPDF } = window.jspdf; const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' }); doc.setFont('Inter', 'bold'); doc.setFontSize(22); doc.setTextColor('#b45309'); // amber-700 doc.text('Dry Eye Symptom Checker Report', 105, 25, { align: 'center' }); doc.setFont('Inter', 'normal'); doc.setFontSize(10); doc.setTextColor('#6b7280'); doc.text(`Assessment Date: ${new Date().toLocaleDateString('en-US')}`, 105, 33, { align: 'center' }); doc.setLineWidth(0.5); doc.setDrawColor('#b45309'); doc.line(20, 40, 190, 40); let startY = 55; doc.setFillColor(255, 251, 235); // amber-50 doc.rect(15, startY - 10, 180, 30, 'F'); doc.setFont('Inter', 'bold'); doc.setFontSize(14); doc.setTextColor('#1f2937'); doc.text('Symptom Score (OSDI-like):', 40, startY); doc.text('Assessed Severity:', 120, startY); doc.setFontSize(28); doc.setTextColor('#b45309'); doc.text(`${assessmentData.score} / 100`, 50, startY + 10, { align: 'center' }); doc.text(assessmentData.level, 135, startY + 10, { align: 'center' }); startY += 35; doc.setFont('Inter', 'bold'); doc.setFontSize(16); doc.setTextColor('#1f2937'); doc.text('Interpretation', 20, startY); startY += 8; doc.setFont('Inter', 'normal'); doc.setFontSize(11); doc.text(assessmentData.interpretation, 22, startY, { maxWidth: 165, lineHeightFactor: 1.5 }); startY = 265; doc.setLineWidth(0.2); doc.setDrawColor('#d1d5db'); doc.line(20, startY, 190, startY); startY += 8; doc.setFontSize(9); doc.setTextColor('#6b7280'); doc.text('This report is for informational purposes only and is not a substitute for a professional diagnosis. Consult an optometrist or ophthalmologist for a complete evaluation of your eye health.', 105, startY, { align: 'center', maxWidth: 170 }); doc.save('Dry_Eye_Symptom_Report.pdf'); } // --- Event Listeners --- nav.next.addEventListener('click', () => { if (currentTab === 'instructions') { setActiveTab('questionnaire'); } else if (currentTab === 'questionnaire') { if (calculateScore()) { displayResults(); } } }); nav.prev.addEventListener('click', () => { if (currentTab === 'questionnaire') setActiveTab('instructions'); if (currentTab === 'results') setActiveTab('questionnaire'); }); downloadPdfBtn.addEventListener('click', generatePdf); // --- Initial Load --- renderQuestions(); setActiveTab('instructions'); });