Student Travel Discount Eligibility Checker

Student Travel Discount Eligibility Checker

Your Profile

Eligibility Results

Enter your details to see available discounts.

Customize Discount Data

Based on your profile, you may not qualify for specific student deals, but age-based "youth" discounts might still be available.

`; listHtml = ''; } resultsContent.innerHTML = bannerHtml + `
${listHtml}
`; } function renderConfig() { let tableHTML = ` `; discountData.discounts.forEach(d => { tableHTML += ` `; }); tableHTML += '
NameProviderMin AgeMax AgeStatus
Status can be: full-time, part-time, none. Separate multiple with commas.'; configContainer.innerHTML = `
${tableHTML}
`; } window.updateConfig = function(element) { const { id, prop } = element.dataset; let value = element.value; const discount = discountData.discounts.find(d => d.id == id); if (discount) { if (prop === 'minAge' || prop === 'maxAge') { value = parseInt(value, 10); } else if (prop === 'status') { value = value.split(',').map(s => s.trim().toLowerCase()); } discount[prop] = value; checkEligibility(); } } // --- 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 || !document.querySelector('.status-banner')) { console.warn("Please generate a report 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('Student-Discount-Report.pdf'); }).catch(err => { console.error("Error generating PDF:", err); }).finally(() => { downloadPdfBtn.innerHTML = originalButtonText; downloadPdfBtn.disabled = false; }); }); } // --- INITIALIZATION --- function initializeTool() { checkEligibility(); renderConfig(); updateNavButtons(); } initializeTool(); });
Scroll to Top