{"version":3,"file":"holiday-budget-calculator.min.js","names":["holidayBudgetCalculator","q1Radios","document","querySelectorAll","q1ErrorMsg","querySelector","ppPeopleErrorMsg","ppDaysErrorMsg","tbDaysErrorMsg","page1PPFlow","getElementById","page1TotalFlow","screenOneForm","screenTwoForm","screenOne","screenTwo","screenThree","screenTwoPPTitle","textContent","screenTwoTBTitle","screenTwoTitle","screenThreePPTitle","screenThreeTBTitle","resultsLeftOverEachDay","ppCostEachDay","tbCostEachDay","screenThreeTitle","s2BackButtonText","s3BackButtonText","progressTitleOne","progressTitleTwo","progressTitleThree","progressIndicator","progressCounter","backButton","backButtonText","addSpendButton","addSpendMarkup","downloadPdfButton","ppBudgetField","ppPeopleField","ppDaysField","tbBudgetField","tbDaysField","travelCostsField","accommodationCostsField","travelInsuranceCostsField","petCareCostsField","foodAndDrinkCostsField","mealsOutCostsField","activitiesCostsField","giftsCostsField","screenThreeFields","resultsDaysFields","resultsBudgetField","resultsTotalSpendFieldPPOnly","resultsTotalSpendFields","resultsLeftOverFields","resulstLeftOverPerDayFieldPP","resulstLeftOverPerDayFieldTB","mode","q1Answered","dnClass","currentScreen","addCategoryEventAttached","customFieldCounter","ppBudget","ppPeople","ppDays","tbBudget","tbDays","travelCosts","accommodationCosts","travelInsuranceCosts","petCareCosts","foodAndDrinkCosts","mealsOutCosts","activitiesCosts","giftsCosts","customCosts","init","handleQ1","isValidUserInput","handleScreenOneSubmit","handleScreenTwoSubmit","handleBackButton","showAddSpendField","calculateAndPopulateResults","handlePdfDownload","handleRemoveErrors","forEach","radio","addEventListener","input","event","target","value","field","toggleClasses","selector","classname","classList","toggle","showError","element","closest","add","hideError","remove","toggleScreens","s1","s2","screen","updateProgressTracker","t1","t2","stepToGoTo","updateBackButtonText","text","allowDecimal","key","keyCode","shiftKey","preventDefault","cursorPos","selectionStart","decimalIndex","indexOf","substring","length","formatPrice","price","asNumber","Number","isInteger","Math","abs","toFixed","createPdfCost","labelText","cost","newCostElement","createElement","style","breakInside","letterSpacing","display","justifyContent","marginBottom","fontSize","lineHeight","htmlToInject","innerHTML","isZeroOrEmpty","chosenFlow","console","log","Array","from","some","checked","scrollIntoView","behavior","block","inline","handleAddCategory","addCategoryField","handleAddCustomCost","newField","className","parentNode","insertBefore","newCostField","id","getAttribute","trim","parseFloat","ppTotalSpend","totalSpend","ppAmountLeft","ppBudgetPerDay","amountLeft","amountLeftEachDay","sumOfCustomCosts","hasOwnProperty","reduce","total","parentElement","isPP","pdfDaysFields","pdfBudgetPerPersonWrapper","pdfBudgetPerPerson","pdfPpText","totalBudget","pdfCostsList","ppText","paragraphs","i","removeChild","item","tCost","isNaN","appendChild","amountLeftPerDay","generatePDF","html2pdf","margin","filename","image","type","quality","html2canvas","scale","jsPDF","unit","format","orientation"],"sources":["holiday-budget-calculator/holiday-budget-calculator.js"],"mappings":"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","ignoreList":[],"sourcesContent":["const holidayBudgetCalculator = {\r\n\t// Elements on page\r\n\tq1Radios: document.querySelectorAll('.question-one input[type=\"radio\"'),\r\n\tq1ErrorMsg: document.querySelector('.question-one .field-validation-error'),\r\n\tppPeopleErrorMsg: document.querySelector('.question-pp-people .field-validation-error'),\r\n\tppDaysErrorMsg: document.querySelector('.question-pp-days .field-validation-error'),\r\n\ttbDaysErrorMsg: document.querySelector('.question-tb-days .field-validation-error'),\r\n\tpage1PPFlow: document.getElementById('per-person-flow'),\r\n\tpage1TotalFlow: document.getElementById('total-budget-flow'),\r\n\tscreenOneForm: document.getElementById('budget'),\r\n\tscreenTwoForm: document.getElementById('outgoings-before'),\r\n\tscreenOne: document.querySelector('.holiday-budget-calculator__screen-1'),\r\n\tscreenTwo: document.querySelector('.holiday-budget-calculator__screen-2'),\r\n\tscreenThree: document.querySelector('.holiday-budget-calculator__screen-3'),\r\n\tscreenTwoPPTitle: document.getElementById('pp-screen-two-heading').textContent,\r\n\tscreenTwoTBTitle: document.getElementById('tb-screen-two-heading').textContent,\r\n\tscreenTwoTitle: document.getElementById('screen-two-title'),\r\n\tscreenThreePPTitle: document.getElementById('pp-screen-three-heading').textContent,\r\n\tscreenThreeTBTitle: document.getElementById('tb-screen-three-heading').textContent,\r\n\tresultsLeftOverEachDay: document.querySelector('.results--left-over--each-day--container'),\r\n\tppCostEachDay: document.getElementById('pp-cost-each-day'),\r\n\ttbCostEachDay: document.getElementById('tb-cost-each-day'),\r\n\tscreenThreeTitle: document.getElementById('screen-three-title'),\r\n\ts2BackButtonText: document.getElementById('back-button-text--screen-two')\r\n\t\t? document.getElementById('back-button-text--screen-two').textContent\r\n\t\t: 'Edit your budget',\r\n\ts3BackButtonText: document.getElementById('back-button-text--screen-three')\r\n\t\t? document.getElementById('back-button-text--screen-three').textContent\r\n\t\t: 'Edit outgoings before your trip',\r\n\tprogressTitleOne: document.getElementById('holiday-budget-calculator__progress-title-1'),\r\n\tprogressTitleTwo: document.getElementById('holiday-budget-calculator__progress-title-2'),\r\n\tprogressTitleThree: document.getElementById('holiday-budget-calculator__progress-title-3'),\r\n\tprogressIndicator: document.querySelector('.holiday-budget-calculator__progress--indicator'),\r\n\tprogressCounter: document.querySelector('.holiday-budget-calculator__progress--count'),\r\n\tbackButton: document.querySelector('.edit-previous'),\r\n\tbackButtonText: document.querySelector('.edit-previous .arrow-link__title'),\r\n\taddSpendButton: document.getElementById('add-another-spend'),\r\n\taddSpendMarkup: document.querySelector('.add-category'),\r\n\tdownloadPdfButton: document.getElementById('download-pdf'),\r\n\r\n\t// Per Person flow\r\n\tppBudgetField: document.getElementById('pp-budget'),\r\n\tppPeopleField: document.getElementById('pp-people'),\r\n\tppDaysField: document.getElementById('pp-days'),\r\n\r\n\t// Total budget flow\r\n\ttbBudgetField: document.getElementById('tb-budget'),\r\n\ttbDaysField: document.getElementById('tb-days'),\r\n\r\n\t// Outgoings fields\r\n\ttravelCostsField: document.getElementById('outgoings-travel-costs'),\r\n\taccommodationCostsField: document.getElementById('outgoings-accommodation-costs'),\r\n\ttravelInsuranceCostsField: document.getElementById('outgoings-travel-insurance-costs'),\r\n\tpetCareCostsField: document.getElementById('outgoings-pet-costs'),\r\n\tfoodAndDrinkCostsField: document.getElementById('outgoings-food-and-drink-costs'),\r\n\tmealsOutCostsField: document.getElementById('outgoings-meals-out-costs'),\r\n\tactivitiesCostsField: document.getElementById('outgoings-activities-costs'),\r\n\tgiftsCostsField: document.getElementById('outgoings-gifts-costs'),\r\n\tscreenThreeFields: document.querySelectorAll('.holiday-budget-calculator__screen-3 input[type=\"text\"]'),\r\n\r\n\t// Results\r\n\tresultsDaysFields: document.querySelectorAll('.results--days'),\r\n\tresultsBudgetField: document.querySelector('.results--budget'),\r\n\tresultsTotalSpendFieldPPOnly: document.querySelector('.results--total-spend__pp-only'),\r\n\tresultsTotalSpendFields: document.querySelectorAll('.results--spend'),\r\n\tresultsLeftOverFields: document.querySelectorAll('.results--left-over'),\r\n\tresulstLeftOverPerDayFieldPP: document.getElementById('results--left-over-pp--each-day'),\r\n\tresulstLeftOverPerDayFieldTB: document.getElementById('results--left-over-tb--each-day'),\r\n\r\n\t// Calculator state vars\r\n\tmode: null, // pp (per person) or total\r\n\tq1Answered: false,\r\n\tdnClass: 'display-none',\r\n\tcurrentScreen: 's1',\r\n\taddCategoryEventAttached: false,\r\n\tcustomFieldCounter: 1,\r\n\r\n\t// START: Question values updated on keyup\r\n\r\n\t// Per person\r\n\tppBudget: 0,\r\n\tppPeople: 5,\r\n\tppDays: 7,\r\n\r\n\t// Total budget\r\n\ttbBudget: 0,\r\n\ttbDays: 7,\r\n\r\n\t// Outgoings\r\n\ttravelCosts: 0,\r\n\taccommodationCosts: 0,\r\n\ttravelInsuranceCosts: 0,\r\n\tpetCareCosts: 0,\r\n\tfoodAndDrinkCosts: 0,\r\n\tmealsOutCosts: 0,\r\n\tactivitiesCosts: 0,\r\n\tgiftsCosts: 0,\r\n\tcustomCosts: {},\r\n\r\n\t// END: Question values updated on keyup\r\n\r\n\tinit: () => {\r\n\t\tconst {\r\n\t\t\tq1Radios,\r\n\t\t\thandleQ1,\r\n\t\t\tppBudgetField,\r\n\t\t\tisValidUserInput,\r\n\t\t\tppPeopleField,\r\n\t\t\tppDaysField,\r\n\t\t\ttbBudgetField,\r\n\t\t\ttbDaysField,\r\n\t\t\tscreenOneForm,\r\n\t\t\thandleScreenOneSubmit,\r\n\t\t\thandleScreenTwoSubmit,\r\n\t\t\ttravelCostsField,\r\n\t\t\taccommodationCostsField,\r\n\t\t\ttravelInsuranceCostsField,\r\n\t\t\tpetCareCostsField,\r\n\t\t\tfoodAndDrinkCostsField,\r\n\t\t\tmealsOutCostsField,\r\n\t\t\tactivitiesCostsField,\r\n\t\t\tgiftsCostsField,\r\n\t\t\tscreenTwoForm,\r\n\t\t\tbackButton,\r\n\t\t\thandleBackButton,\r\n\t\t\taddSpendButton,\r\n\t\t\tshowAddSpendField,\r\n\t\t\tscreenThreeFields,\r\n\t\t\tcalculateAndPopulateResults,\r\n\t\t\tdownloadPdfButton,\r\n\t\t\thandlePdfDownload,\r\n\t\t\thandleRemoveErrors,\r\n\t\t} = holidayBudgetCalculator;\r\n\r\n\t\t// Set up Event Listeners\r\n\t\tq1Radios.forEach(radio => radio.addEventListener('change', () => handleQ1(radio)));\r\n\r\n\t\t// Removes the default \"0\" on enter on the text box\r\n\t\tdocument.querySelectorAll('input[type=\"text\"]').forEach(input => {\r\n\t\t\tinput.addEventListener('focus', event => {\r\n\t\t\t\tconst value = event.target.value;\r\n\t\t\t\tif (value === '0') event.target.value = '';\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t// Stops illegal chars being entered to inputs\r\n\r\n\t\t// Allow decimals\r\n\t\t[\r\n\t\t\tppBudgetField,\r\n\t\t\ttbBudgetField,\r\n\t\t\ttravelCostsField,\r\n\t\t\taccommodationCostsField,\r\n\t\t\ttravelInsuranceCostsField,\r\n\t\t\tpetCareCostsField,\r\n\t\t\tfoodAndDrinkCostsField,\r\n\t\t\tmealsOutCostsField,\r\n\t\t\tactivitiesCostsField,\r\n\t\t\tgiftsCostsField,\r\n\t\t].forEach(input => input.addEventListener('keydown', event => isValidUserInput(event)));\r\n\r\n\t\t// No decimals\r\n\t\t[ppPeopleField, ppDaysField, tbDaysField].forEach(input =>\r\n\t\t\tinput.addEventListener('keydown', event => isValidUserInput(event, false))\r\n\t\t);\r\n\r\n\t\t// Per person\r\n\t\tppBudgetField.addEventListener('keyup', event => (holidayBudgetCalculator.ppBudget = event.target.value));\r\n\t\tppPeopleField.addEventListener('keyup', event => (holidayBudgetCalculator.ppPeople = event.target.value));\r\n\t\tppDaysField.addEventListener('keyup', event => (holidayBudgetCalculator.ppDays = event.target.value));\r\n\r\n\t\t// Total Budget\r\n\t\ttbBudgetField.addEventListener('keyup', event => (holidayBudgetCalculator.tbBudget = event.target.value));\r\n\t\ttbDaysField.addEventListener('keyup', event => (holidayBudgetCalculator.tbDays = event.target.value));\r\n\r\n\t\ttravelCostsField.addEventListener('keyup', event => (holidayBudgetCalculator.travelCosts = event.target.value));\r\n\t\taccommodationCostsField.addEventListener(\r\n\t\t\t'keyup',\r\n\t\t\tevent => (holidayBudgetCalculator.accommodationCosts = event.target.value)\r\n\t\t);\r\n\t\ttravelInsuranceCostsField.addEventListener(\r\n\t\t\t'keyup',\r\n\t\t\tevent => (holidayBudgetCalculator.travelInsuranceCosts = event.target.value)\r\n\t\t);\r\n\t\tpetCareCostsField.addEventListener(\r\n\t\t\t'keyup',\r\n\t\t\tevent => (holidayBudgetCalculator.petCareCosts = event.target.value)\r\n\t\t);\r\n\t\tfoodAndDrinkCostsField.addEventListener(\r\n\t\t\t'keyup',\r\n\t\t\tevent => (holidayBudgetCalculator.foodAndDrinkCosts = event.target.value)\r\n\t\t);\r\n\t\tmealsOutCostsField.addEventListener(\r\n\t\t\t'keyup',\r\n\t\t\tevent => (holidayBudgetCalculator.mealsOutCosts = event.target.value)\r\n\t\t);\r\n\t\tactivitiesCostsField.addEventListener(\r\n\t\t\t'keyup',\r\n\t\t\tevent => (holidayBudgetCalculator.activitiesCosts = event.target.value)\r\n\t\t);\r\n\t\tgiftsCostsField.addEventListener('keyup', event => (holidayBudgetCalculator.giftsCosts = event.target.value));\r\n\r\n\t\t// Form submissions\r\n\t\tscreenOneForm.addEventListener('submit', event => handleScreenOneSubmit(event));\r\n\t\tscreenTwoForm.addEventListener('submit', event => handleScreenTwoSubmit(event));\r\n\r\n\t\t// Removing errors\r\n\t\t[ppPeopleField, ppDaysField, tbDaysField].forEach(field =>\r\n\t\t\tfield.addEventListener('keyup', event => handleRemoveErrors(event))\r\n\t\t);\r\n\r\n\t\t// Add custom spend\r\n\t\taddSpendButton.addEventListener('click', event => showAddSpendField(event));\r\n\r\n\t\t// Screen three update on input\r\n\t\tscreenThreeFields.forEach(input => input.addEventListener('keyup', () => calculateAndPopulateResults()));\r\n\r\n\t\t// Download button\r\n\t\tdownloadPdfButton.addEventListener('click', () => handlePdfDownload());\r\n\r\n\t\t// Back button\r\n\t\tbackButton.addEventListener('click', () => handleBackButton());\r\n\t},\r\n\r\n\t// Utility functions\r\n\ttoggleClasses: (selector, classname) => selector.classList.toggle(classname),\r\n\tshowError: element => element.closest('.field-group').classList.add('field-group--error'),\r\n\thideError: element => element.closest('.field-group').classList.remove('field-group--error'),\r\n\ttoggleScreens: (s1, s2) => {\r\n\t\t[s1, s2].forEach(screen => screen.classList.toggle('display-none'));\r\n\t},\r\n\tupdateProgressTracker: (t1, t2, stepToGoTo) => {\r\n\t\tconst { progressIndicator, progressCounter } = holidayBudgetCalculator;\r\n\t\t[t1, t2].forEach(screen => screen.classList.toggle('display-none'));\r\n\t\tif (stepToGoTo == 'screen-two') {\r\n\t\t\tprogressIndicator.classList = 'holiday-budget-calculator__progress--indicator step-two';\r\n\t\t\tprogressCounter.textContent = '2';\r\n\t\t} else if (stepToGoTo == 'screen-three') {\r\n\t\t\tprogressIndicator.classList = 'holiday-budget-calculator__progress--indicator complete';\r\n\t\t\tprogressCounter.textContent = '3';\r\n\t\t} else {\r\n\t\t\tprogressIndicator.classList = 'holiday-budget-calculator__progress--indicator';\r\n\t\t\tprogressCounter.textContent = '1';\r\n\t\t}\r\n\t},\r\n\tupdateBackButtonText: text => (holidayBudgetCalculator.backButtonText.textContent = text),\r\n\tisValidUserInput: (event, allowDecimal = true) => {\r\n\t\tconst input = event.target;\r\n\t\tconst key = event.key;\r\n\t\tconst keyCode = event.keyCode;\r\n\t\tconst shiftKey = event.shiftKey;\r\n\r\n\t\t// Prevent symbols when Shift key is pressed with number keys\r\n\t\tif (shiftKey && keyCode >= 48 && keyCode <= 57) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Allow numbers (0-9) and numeric keypad keys (96-105) without Shift key\r\n\t\tif (!shiftKey && ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105))) {\r\n\t\t\tconst value = input.value;\r\n\t\t\tconst cursorPos = input.selectionStart;\r\n\r\n\t\t\t// Check if there's a decimal point and the cursor is after it\r\n\t\t\tconst decimalIndex = value.indexOf('.');\r\n\t\t\tif (decimalIndex !== -1 && cursorPos > decimalIndex) {\r\n\t\t\t\t// Allow only two digits after the decimal point\r\n\t\t\t\tconst decimalPart = value.substring(decimalIndex + 1);\r\n\t\t\t\tif (decimalPart.length >= 2) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// Allow backspace (8), delete (46), arrow keys (37-40), tab (9), and enter (13)\r\n\t\tif (keyCode === 8 || keyCode === 46 || (keyCode >= 37 && keyCode <= 40) || keyCode === 9 || keyCode === 13) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// Allow a single decimal point if allowDecimal is true\r\n\t\tif (allowDecimal && key === '.' && input.value.indexOf('.') === -1) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// Prevent any other keys (including symbols)\r\n\t\tevent.preventDefault();\r\n\t\treturn false;\r\n\t},\r\n\tformatPrice: price => {\r\n\t\tconst asNumber = Number(price);\r\n\t\tif (Number.isInteger(price)) {\r\n\t\t\treturn asNumber < 0 ? `-£${Math.abs(asNumber)}` : `£${asNumber}`;\r\n\t\t} else {\r\n\t\t\treturn asNumber < 0 ? `-£${Math.abs(asNumber).toFixed(2)}` : `£${asNumber.toFixed(2)}`;\r\n\t\t}\r\n\t},\r\n\tcreatePdfCost: (labelText, cost) => {\r\n\t\tconst { formatPrice } = holidayBudgetCalculator;\r\n\t\tconst newCostElement = document.createElement('p');\r\n\t\tnewCostElement.style.breakInside = 'avoid';\r\n\t\tnewCostElement.style.letterSpacing = 'normal';\r\n\t\tnewCostElement.style.display = 'flex';\r\n\t\tnewCostElement.style.justifyContent = 'space-between';\r\n\t\tnewCostElement.style.marginBottom = '4px';\r\n\t\tnewCostElement.style.fontSize = '18px';\r\n\t\tnewCostElement.style.lineHeight = '26px';\r\n\t\tconst htmlToInject = `\r\n ${labelText}\r\n ${formatPrice(cost)}\r\n `;\r\n\t\tnewCostElement.innerHTML = htmlToInject;\r\n\t\treturn newCostElement;\r\n\t},\r\n\tisZeroOrEmpty: value => Number(value) === 0 || value === '',\r\n\r\n\t// Handling initial question answered\r\n\thandleQ1: radio => {\r\n\t\tconst {\r\n\t\t\tpage1PPFlow,\r\n\t\t\tpage1TotalFlow,\r\n\t\t\ttoggleClasses,\r\n\t\t\tdnClass,\r\n\t\t\tq1ErrorMsg,\r\n\t\t\thideError,\r\n\t\t\tscreenTwoPPTitle,\r\n\t\t\tscreenTwoTBTitle,\r\n\t\t} = holidayBudgetCalculator;\r\n\t\tconst { screenTwoTitle } = holidayBudgetCalculator;\r\n\t\thideError(q1ErrorMsg);\r\n\t\tholidayBudgetCalculator.mode = radio.value;\r\n\t\tscreenTwoTitle.textContent = holidayBudgetCalculator.mode == 'pp' ? screenTwoPPTitle : screenTwoTBTitle;\r\n\t\tif (holidayBudgetCalculator.q1Answered) {\r\n\t\t\t[page1PPFlow, page1TotalFlow].forEach(selector => toggleClasses(selector, dnClass));\r\n\t\t} else {\r\n\t\t\tconst chosenFlow = holidayBudgetCalculator.mode == 'pp' ? page1PPFlow : page1TotalFlow;\r\n\t\t\ttoggleClasses(chosenFlow, dnClass);\r\n\t\t\tholidayBudgetCalculator.q1Answered = true;\r\n\t\t}\r\n\t},\r\n\r\n\thandleRemoveErrors: event => {\r\n\t\tconsole.log(event.target.value);\r\n\t\tconst element = event.target;\r\n\t\tif (holidayBudgetCalculator.isZeroOrEmpty(element.value)) return;\r\n\t\tholidayBudgetCalculator.hideError(element);\r\n\t},\r\n\r\n\t// Handling form submissions\r\n\thandleScreenOneSubmit: event => {\r\n\t\tconst {\r\n\t\t\tq1Radios,\r\n\t\t\tq1ErrorMsg,\r\n\t\t\tshowError,\r\n\t\t\ttoggleScreens,\r\n\t\t\tupdateProgressTracker,\r\n\t\t\tscreenOne,\r\n\t\t\tscreenTwo,\r\n\t\t\tprogressTitleOne,\r\n\t\t\tprogressTitleTwo,\r\n\t\t\tbackButton,\r\n\t\t\ttoggleClasses,\r\n\t\t\tisZeroOrEmpty,\r\n\t\t\tppDays,\r\n\t\t\tppPeople,\r\n\t\t\ttbDays,\r\n\t\t\tppDaysErrorMsg,\r\n\t\t\tppPeopleErrorMsg,\r\n\t\t\ttbDaysErrorMsg,\r\n\t\t} = holidayBudgetCalculator;\r\n\t\tevent.preventDefault();\r\n\r\n\t\t// Check for errors\r\n\t\tconst radiosValid = Array.from(q1Radios).some(radio => radio.checked);\r\n\t\tif (!radiosValid) {\r\n\t\t\tshowError(q1ErrorMsg);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (holidayBudgetCalculator.mode == 'pp') {\r\n\t\t\tif (isZeroOrEmpty(ppPeople)) {\r\n\t\t\t\tshowError(ppPeopleErrorMsg);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (isZeroOrEmpty(ppDays)) {\r\n\t\t\t\tshowError(ppDaysErrorMsg);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (isZeroOrEmpty(tbDays)) {\r\n\t\t\t\tshowError(tbDaysErrorMsg);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttoggleScreens(screenOne, screenTwo);\r\n\t\tupdateProgressTracker(progressTitleOne, progressTitleTwo, 'screen-two');\r\n\t\ttoggleClasses(backButton, 'display-none');\r\n\t\tholidayBudgetCalculator.currentScreen = 's2';\r\n\r\n\t\tholidayBudgetCalculator.progressIndicator.closest('.row').scrollIntoView({\r\n\t\t\tbehavior: 'smooth',\r\n\t\t\tblock: 'start',\r\n\t\t\tinline: 'nearest',\r\n\t\t});\r\n\t},\r\n\r\n\thandleScreenTwoSubmit: event => {\r\n\t\tconst {\r\n\t\t\tscreenTwo,\r\n\t\t\tscreenThree,\r\n\t\t\ttoggleScreens,\r\n\t\t\tupdateProgressTracker,\r\n\t\t\tprogressTitleTwo,\r\n\t\t\tprogressTitleThree,\r\n\t\t\tupdateBackButtonText,\r\n\t\t\tcalculateAndPopulateResults,\r\n\t\t\tscreenThreePPTitle,\r\n\t\t\tscreenThreeTBTitle,\r\n\t\t\tmode,\r\n\t\t\ts3BackButtonText,\r\n\t\t} = holidayBudgetCalculator;\r\n\t\tconst { screenThreeTitle } = holidayBudgetCalculator;\r\n\t\tevent.preventDefault();\r\n\t\tscreenThreeTitle.textContent = mode == 'pp' ? screenThreePPTitle : screenThreeTBTitle;\r\n\t\ttoggleScreens(screenTwo, screenThree);\r\n\t\tupdateProgressTracker(progressTitleTwo, progressTitleThree, 'screen-three');\r\n\t\tupdateBackButtonText(s3BackButtonText);\r\n\t\tholidayBudgetCalculator.currentScreen = 's3';\r\n\r\n\t\t// Calculate results\r\n\t\tcalculateAndPopulateResults();\r\n\r\n\t\tholidayBudgetCalculator.progressIndicator.closest('.row').scrollIntoView({\r\n\t\t\tbehavior: 'smooth',\r\n\t\t\tblock: 'start',\r\n\t\t\tinline: 'nearest',\r\n\t\t});\r\n\t},\r\n\r\n\thandleBackButton: () => {\r\n\t\tconst {\r\n\t\t\tupdateBackButtonText,\r\n\t\t\ts2BackButtonText,\r\n\t\t\ttoggleScreens,\r\n\t\t\tscreenOne,\r\n\t\t\tscreenTwo,\r\n\t\t\tscreenThree,\r\n\t\t\tupdateProgressTracker,\r\n\t\t\tprogressTitleOne,\r\n\t\t\tprogressTitleTwo,\r\n\t\t\tprogressTitleThree,\r\n\t\t\tbackButton,\r\n\t\t\ttoggleClasses,\r\n\t\t} = holidayBudgetCalculator;\r\n\t\tif (holidayBudgetCalculator.currentScreen == 's2') {\r\n\t\t\ttoggleClasses(backButton, 'display-none');\r\n\t\t\ttoggleScreens(screenTwo, screenOne);\r\n\t\t\tupdateProgressTracker(progressTitleTwo, progressTitleOne, 'screen-one');\r\n\t\t\tholidayBudgetCalculator.currentScreen = 's1';\r\n\t\t} else {\r\n\t\t\tupdateBackButtonText(s2BackButtonText);\r\n\t\t\ttoggleScreens(screenTwo, screenThree);\r\n\t\t\tupdateProgressTracker(progressTitleTwo, progressTitleThree, 'screen-two');\r\n\t\t\tholidayBudgetCalculator.currentScreen = 's2';\r\n\t\t}\r\n\r\n\t\tholidayBudgetCalculator.progressIndicator.closest('.row').scrollIntoView({\r\n\t\t\tbehavior: 'smooth',\r\n\t\t\tblock: 'start',\r\n\t\t\tinline: 'nearest',\r\n\t\t});\r\n\t},\r\n\r\n\tshowAddSpendField: event => {\r\n\t\tevent.preventDefault();\r\n\t\tconst { addSpendMarkup, toggleClasses, addSpendButton, handleAddCategory } = holidayBudgetCalculator;\r\n\t\t[addSpendMarkup, addSpendButton].forEach(element => toggleClasses(element, 'display-none'));\r\n\t\tif (!holidayBudgetCalculator.addCategoryEventAttached)\r\n\t\t\tdocument.getElementById('add-category-button').addEventListener('click', event => handleAddCategory(event));\r\n\t},\r\n\r\n\thandleAddCategory: event => {\r\n\t\tevent.preventDefault();\r\n\t\tconst addCategoryField = document.getElementById('add-category-field');\r\n\t\tconst labelText = addCategoryField.value;\r\n\t\tif (labelText === '') return;\r\n\t\tconst { addSpendMarkup, addSpendButton, toggleClasses, handleAddCustomCost, isValidUserInput } =\r\n\t\t\tholidayBudgetCalculator;\r\n\t\tconst newField = document.createElement('fieldset');\r\n\t\tnewField.className = 'field-group field-group--small field-group--underline';\r\n\t\tnewField.innerHTML = `\r\n