{"version":3,"file":"vehicle-status-checker.min.js","names":["sInputKeyValidationHelper","sIsValidCarReg","vehicleStatusChecker","tabSection","motTabContent","taxTabContent","motRegField","motRegInput","regForm","submitRegButton","motApiUrl","taxApiUrl","apiSubKey","vehicleDetailsSection","vehicleReg","vehicleDetails","resetAppButton","enterCarRegistrationNumber","registrationValueError","vehicleNotFound","taxNotFound","motNotFound","isLoading","init","getFormLabels","getFormAndInputNodes","getTabSectionNodes","getApiNodes","getVehicleDetailsSection","addEventListener","e","checkRegInput","resetApp","document","getElementById","innerText","closest","motEndPointNode","taxEndPointNode","subKeyNode","textContent","console","error","validateRegInput","motRegInputValue","errorMessages","empty","tooShort","tooLong","invalidFormat","isValid","errorMessage","removeRegErrorMessage","messageNode","field","key","keyCode","which","preventDefault","classList","remove","displayRegErorrMessage","input","add","errorMessageNode","querySelector","carRegNotFound","formErrorMessage","value","inputWithoutSpaces","replaceAll","fetchVehicleData","toggleUiVisibilityHelper","element","contains","showResultsNotFound","notFoundText","blockQuote","createElement","blockQuoteTitle","appendChild","organiseMotResults","motTests","sort","a","b","Date","completedDate","motTestsByYear","forEach","motTest","motTestYear","split","hasOwnProperty","push","populateMotTab","toggleAccordionContent","itemContainer","question","answer","closeAccordion","openAccordion","style","display","createAccordionMarkup","questionText","accordionContent","questionLink","underline","modRowDiv","modRowContainerDiv","organiseMotComments","comments","failComments","advisoryComments","comment","type","toLowerCase","text","formatDate","date","isYearOnly","day","getUTCDate","month","getUTCMonth","year","getUTCFullYear","toString","padStart","parseDateTime","dateTime","hasTime","includes","parsedDateTime","replace","populateMotAccordions","accordionContentContainer","testResult","odometerValue","rfrAndComments","resultBox","formattedDate","innerHTML","parseFloat","toLocaleString","length","join","populateMotQuoteBox","latestTestWithExpiryDate","motTestPassed","filter","expiryDate","undefined","latestExpiryDate","latestTest","parsedExpiryDate","formattedExpiryDate","populateTaxQuoteBox","taxStatus","taxDueDate","fragment","createRange","createContextualFragment","sortedTests","Object","keys","parseInt","motBoxHTML","accordionHTML","map","outerHTML","addAccordionEListeners","clearPriorMotResults","hasChildNodes","querySelectorAll","accordionItem","item","processMotTab","motData","processTaxTab","taxData","processVehicleDetailsSection","userReg","engineCapacity","monthOfFirstRegistration","fuelType","model","make","monthOfFirstRegistrationString","parsedMonthOfFirstRegistration","vehicleDetailsString","toUpperCase","checkVehicleStatusData","async","fetchDataHelper","log","url","endpoint","response","fetch","method","headers","ok","Error","json"],"sources":["vehicle-status-checker/vehicle-status-checker.js"],"mappings":"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","ignoreList":[],"sourcesContent":["import { sInputKeyValidationHelper } from '../../shared.min.js';\r\nimport { sIsValidCarReg } from '../../shared.min.js';\r\n\r\nconst vehicleStatusChecker = {\r\n\ttabSection: null,\r\n\tmotTabContent: null,\r\n\ttaxTabContent: null,\r\n\r\n\tmotRegField: null,\r\n\tmotRegInput: null,\r\n\tregForm: null,\r\n\tsubmitRegButton: null,\r\n\r\n\tmotApiUrl: null,\r\n\ttaxApiUrl: null,\r\n\tapiSubKey: null,\r\n\r\n\tvehicleDetailsSection: null,\r\n\tvehicleReg: null,\r\n\tvehicleDetails: null,\r\n\tresetAppButton: null,\r\n\r\n\tenterCarRegistrationNumber: null,\r\n\tregistrationValueError: null,\r\n\tvehicleNotFound: null,\r\n\ttaxNotFound: null,\r\n\tmotNotFound: null,\r\n\r\n\tisLoading: false,\r\n\r\n\tinit: () => {\r\n\t\t// FORM LABELS FORM THE CMS\r\n\t\tvehicleStatusChecker.getFormLabels();\r\n\r\n\t\t//FORM & INPUT NODES\r\n\t\tvehicleStatusChecker.getFormAndInputNodes();\r\n\t\t//TABS\r\n\t\tvehicleStatusChecker.getTabSectionNodes();\r\n\t\t//API NODES\r\n\t\tvehicleStatusChecker.getApiNodes();\r\n\r\n\t\tvehicleStatusChecker.getVehicleDetailsSection();\r\n\r\n\t\t//E-LISTENERS\r\n\r\n\t\tsInputKeyValidationHelper(vehicleStatusChecker.motRegInput, 'alphaNumeric', vehicleStatusChecker.motRegField);\r\n\r\n\t\tvehicleStatusChecker.regForm?.addEventListener('submit', e =>\r\n\t\t\tvehicleStatusChecker.checkRegInput(e, vehicleStatusChecker.motRegInput)\r\n\t\t);\r\n\t\tif (vehicleStatusChecker.vehicleDetailsSection)\r\n\t\t\tvehicleStatusChecker.resetAppButton?.addEventListener('click', vehicleStatusChecker.resetApp);\r\n\t},\r\n\r\n\tgetFormLabels: () => {\r\n\t\tvehicleStatusChecker.enterCarRegistrationNumber =\r\n\t\t\tdocument.getElementById('enter-car-registration-number')?.innerText ?? '';\r\n\t\tvehicleStatusChecker.registrationValueError =\r\n\t\t\tdocument.getElementById('registration-validation-error')?.innerText ?? '';\r\n\t\tvehicleStatusChecker.vehicleNotFound = document.getElementById('vehicle-not-found')?.innerText ?? '';\r\n\r\n\t\tvehicleStatusChecker.taxNotFound = document.getElementById('no-tax-information-found')?.innerText ?? '';\r\n\t\tvehicleStatusChecker.motNotFound = document.getElementById('no-mot-information-found')?.innerText ?? '';\r\n\t},\r\n\r\n\tgetFormAndInputNodes: () => {\r\n\t\tvehicleStatusChecker.regForm = document.getElementById('cnfsd-vsc-form');\r\n\t\tvehicleStatusChecker.motRegInput = document.getElementById('cnfsd-vsc-reg');\r\n\t\tvehicleStatusChecker.motRegField = vehicleStatusChecker.motRegInput.closest('fieldset.field-group');\r\n\t\tvehicleStatusChecker.submitRegButton = document.getElementById('cnfsd-vsc-submit-reg');\r\n\t},\r\n\r\n\tgetTabSectionNodes: () => {\r\n\t\tvehicleStatusChecker.tabSection = document.getElementById('cnfsd-vsc-car-tabs');\r\n\t\tvehicleStatusChecker.motTabContent = document.getElementById('cnfsd-vsc-mot-tab');\r\n\t\tvehicleStatusChecker.taxTabContent = document.getElementById('cnfsd-vsc-tax-tab');\r\n\t},\r\n\r\n\tgetApiNodes: () => {\r\n\t\tconst motEndPointNode = document.getElementById('mot-api-endpoint');\r\n\t\tconst taxEndPointNode = document.getElementById('tax-api-endpoint');\r\n\t\tconst subKeyNode = document.getElementById('sub-key');\r\n\r\n\t\tvehicleStatusChecker.motApiUrl = motEndPointNode\r\n\t\t\t? motEndPointNode.textContent\r\n\t\t\t: 'http://localhost:3000/vehicle-lookup/mot?registrationNumber';\r\n\t\tvehicleStatusChecker.taxApiUrl = taxEndPointNode\r\n\t\t\t? taxEndPointNode.textContent\r\n\t\t\t: 'http://localhost:3000/vehicle-lookup/tax?registrationNumber';\r\n\t\tvehicleStatusChecker.apiSubKey = subKeyNode ? subKeyNode.textContent : '';\r\n\r\n\t\tif (!motEndPointNode || !subKeyNode || !taxEndPointNode)\r\n\t\t\tconsole.error(\r\n\t\t\t\t'Missing endpoint HTML node(s) with ids of mot-api-endpoint, tax-api-endpoint, or sub-key. Ignore if in dev mode'\r\n\t\t\t);\r\n\t},\r\n\r\n\tgetVehicleDetailsSection: () => {\r\n\t\tvehicleStatusChecker.vehicleDetailsSection = document.getElementById('cnfsd-vsc-vehicle-details');\r\n\t\tvehicleStatusChecker.vehicleReg = document.getElementById('cnfsd-vsc-vehicle-details__reg');\r\n\t\tvehicleStatusChecker.vehicleDetails = document.getElementById('cnfsd-vsc-vehicle-details__details');\r\n\t\tvehicleStatusChecker.resetAppButton = document.getElementById('cnfsd-vsc-vehicle-details__reset');\r\n\t},\r\n\r\n\tvalidateRegInput: motRegInputValue => {\r\n\t\tconst errorMessages = {\r\n\t\t\tempty: vehicleStatusChecker.enterCarRegistrationNumber,\r\n\t\t\ttooShort: vehicleStatusChecker.vehicleNotFound,\r\n\t\t\ttooLong: vehicleStatusChecker.vehicleNotFound,\r\n\t\t\tinvalidFormat: vehicleStatusChecker.vehicleNotFound,\r\n\t\t};\r\n\r\n\t\tconst { isValid, errorMessage } = sIsValidCarReg(motRegInputValue, errorMessages);\r\n\t\tif (!isValid) return errorMessage;\r\n\t},\r\n\r\n\tremoveRegErrorMessage: (e, messageNode, field) => {\r\n\t\tconst key = e.keyCode || e.which || e.key;\r\n\t\tif (key === 'Enter' || key === 13) {\r\n\t\t\te.preventDefault();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tmessageNode.innerText = '';\r\n\t\tfield.classList.remove('field-group--error');\r\n\t},\r\n\r\n\tdisplayRegErorrMessage: (errorMessage, input) => {\r\n\t\tvehicleStatusChecker.motRegField.classList.add('field-group--error');\r\n\r\n\t\tconst errorMessageNode = vehicleStatusChecker.motRegField.querySelector('.error-message');\r\n\t\terrorMessageNode.innerText = errorMessage;\r\n\r\n\t\tinput.addEventListener('keyup', e =>\r\n\t\t\tvehicleStatusChecker.removeRegErrorMessage(e, errorMessageNode, vehicleStatusChecker.motRegField)\r\n\t\t);\r\n\t},\r\n\r\n\tcarRegNotFound: () => {\r\n\t\tconst errorMessage = vehicleStatusChecker.registrationValueError;\r\n\t\tvehicleStatusChecker.displayRegErorrMessage(errorMessage, vehicleStatusChecker.motRegInput);\r\n\t},\r\n\r\n\tcheckRegInput: (e, input) => {\r\n\t\te.preventDefault();\r\n\r\n\t\t//IF BUTTON IS IN PROCESS OF BEING CLICKED, STOP ADDITIONAL CLICKS\r\n\t\tif (vehicleStatusChecker.isLoading) return;\r\n\r\n\t\tvehicleStatusChecker.submitRegButton.classList.add('btn--loading');\r\n\t\tvehicleStatusChecker.isLoading = true;\r\n\r\n\t\tconst formErrorMessage = vehicleStatusChecker.validateRegInput(input.value);\r\n\r\n\t\tif (formErrorMessage) {\r\n\t\t\tvehicleStatusChecker.displayRegErorrMessage(formErrorMessage, input);\r\n\t\t\tvehicleStatusChecker.isLoading = false;\r\n\t\t\tvehicleStatusChecker.submitRegButton.classList.remove('btn--loading');\r\n\t\t} else {\r\n\t\t\tconst inputWithoutSpaces = input.value.replaceAll(' ', '');\r\n\t\t\tvehicleStatusChecker.fetchVehicleData(inputWithoutSpaces);\r\n\t\t}\r\n\t},\r\n\r\n\ttoggleUiVisibilityHelper: element => {\r\n\t\telement.classList.contains('display-none')\r\n\t\t\t? element.classList.remove('display-none')\r\n\t\t\t: element.classList.add('display-none');\r\n\t},\r\n\r\n\tshowResultsNotFound: (tabSection, notFoundText) => {\r\n\t\t//MOT TESTS DON'T EXIST\r\n\t\tconst blockQuote = document.createElement('div');\r\n\t\tconst blockQuoteTitle = document.createElement('div');\r\n\t\tblockQuote.classList.add('mod-blockquote', 'bg-product--primary', 'mod-blockquote--fail');\r\n\r\n\t\tblockQuoteTitle.classList.add('mod-blockquote__title');\r\n\t\tblockQuoteTitle.textContent = `${notFoundText}`;\r\n\t\tblockQuote.appendChild(blockQuoteTitle);\r\n\t\ttabSection.appendChild(blockQuote);\r\n\t},\r\n\r\n\torganiseMotResults: motTests => {\r\n\t\tmotTests.sort((a, b) => new Date(b.completedDate) - new Date(a.completedDate));\r\n\r\n\t\tconst motTestsByYear = {};\r\n\t\tmotTests.forEach(motTest => {\r\n\t\t\tconst motDate = motTest.completedDate;\r\n\t\t\tconst motTestYear = motDate.split('.')[0];\r\n\r\n\t\t\t//YEAR DOES EXIST IN MOT TESTS OBJ\r\n\t\t\tif (motTestsByYear.hasOwnProperty(motTestYear)) {\r\n\t\t\t\tmotTestsByYear[motTestYear].push(motTest);\r\n\t\t\t} else {\r\n\t\t\t\tmotTestsByYear[motTestYear] = [motTest];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tvehicleStatusChecker.populateMotTab(motTestsByYear);\r\n\t},\r\n\r\n\ttoggleAccordionContent: (itemContainer, question, answer) => {\r\n\t\tconst accordionExpanded = question.classList.contains('active');\r\n\t\taccordionExpanded\r\n\t\t\t? vehicleStatusChecker.closeAccordion(itemContainer, question, answer)\r\n\t\t\t: vehicleStatusChecker.openAccordion(itemContainer, question, answer);\r\n\t},\r\n\r\n\topenAccordion: (itemContainer, question, answer) => {\r\n\t\tanswer.style.display = 'block';\r\n\t\titemContainer.classList.add('open');\r\n\t\tquestion.classList.add('active');\r\n\t},\r\n\r\n\tcloseAccordion: (itemContainer, question, answer) => {\r\n\t\tquestion.classList.remove('active');\r\n\t\titemContainer.classList.remove('open');\r\n\t\tanswer.style.display = 'none';\r\n\t},\r\n\r\n\tcreateAccordionMarkup: (questionText, accordionContent) => {\r\n\t\tconst itemContainer = document.createElement('div');\r\n\t\titemContainer.classList.add('mod-accordion__item');\r\n\r\n\t\tconst question = document.createElement('h3');\r\n\t\tquestion.classList.add('mod-accordion__question');\r\n\r\n\t\tconst questionLink = document.createElement('span');\r\n\t\tquestionLink.classList.add('mod-accordion__link', 'constrain');\r\n\r\n\t\tconst underline = document.createElement('span');\r\n\t\tunderline.classList.add('mod-accordion__underline');\r\n\t\tunderline.textContent = questionText;\r\n\r\n\t\tconst modRowDiv = document.createElement('div');\r\n\t\tmodRowDiv.classList.add('mod-row');\r\n\t\tmodRowDiv.style.display = 'none';\r\n\r\n\t\tconst modRowContainerDiv = document.createElement('div');\r\n\t\tmodRowContainerDiv.classList.add('mod-row__container');\r\n\r\n\t\t//APPEND QUESTION TO ACCORDION ITEM\r\n\t\tquestionLink.appendChild(underline);\r\n\t\tquestion.appendChild(questionLink);\r\n\t\titemContainer.appendChild(question);\r\n\r\n\t\t//APPEND CONTENT TO ACCORDION ITEM\r\n\t\tmodRowContainerDiv.appendChild(accordionContent);\r\n\t\tmodRowDiv.appendChild(modRowContainerDiv);\r\n\t\titemContainer.appendChild(modRowDiv);\r\n\r\n\t\treturn itemContainer;\r\n\t},\r\n\r\n\torganiseMotComments: comments => {\r\n\t\tconst failComments = [];\r\n\t\tconst advisoryComments = [];\r\n\t\tcomments.forEach(comment => {\r\n\t\t\tif (comment.type.toLowerCase() === 'advisory') {\r\n\t\t\t\tadvisoryComments.push(comment.text);\r\n\t\t\t} else {\r\n\t\t\t\tfailComments.push(comment.text);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn [failComments, advisoryComments];\r\n\t},\r\n\r\n\tformatDate: (date, isYearOnly) => {\r\n\t\tconst day = date.getUTCDate();\r\n\t\tconst month = date.getUTCMonth() + 1;\r\n\t\tconst year = date.getUTCFullYear();\r\n\r\n\t\tif (isYearOnly) return year;\r\n\r\n\t\tconst formattedDate = `${day.toString().padStart(2, '0')}/${month.toString().padStart(2, '0')}/${year}`;\r\n\r\n\t\treturn formattedDate;\r\n\t},\r\n\r\n\tparseDateTime: dateTime => {\r\n\t\tconst hasTime = dateTime.includes(':');\r\n\r\n\t\tlet parsedDateTime = dateTime.replace(/\\./g, '-');\r\n\r\n\t\t//CHECKS IF DATETIME HAS TIME SECTION AND IF NOT, ADD IT\r\n\t\tif (hasTime) {\r\n\t\t\tparsedDateTime = `${parsedDateTime.replace(' ', 'T')}Z`;\r\n\t\t} else {\r\n\t\t\tparsedDateTime += 'T00:00:00Z';\r\n\t\t}\r\n\r\n\t\treturn parsedDateTime;\r\n\t},\r\n\r\n\tpopulateMotAccordions: (year, motTestsByYear) => {\r\n\t\t//CREATE ACCORDION MARKUP\r\n\t\tconst accordionContentContainer = document.createElement('div');\r\n\t\taccordionContentContainer.classList.add('mod-accordion__content');\r\n\r\n\t\t//LOOP THROUGH EACH MOT TEST AND CREATE AN ACCORDION BOX FOR EACH ONE\r\n\t\tmotTestsByYear[year].forEach(motTest => {\r\n\t\t\tconst { testResult, completedDate, odometerValue, rfrAndComments } = motTest;\r\n\r\n\t\t\tconst resultBox = document.createElement('div');\r\n\t\t\tresultBox.classList.add('result-box');\r\n\r\n\t\t\t//FORMAT DATA\r\n\t\t\tconst [failComments, advisoryComments] = vehicleStatusChecker.organiseMotComments(rfrAndComments);\r\n\r\n\t\t\tconst parsedDateTime = vehicleStatusChecker.parseDateTime(completedDate);\r\n\t\t\tconst formattedDate = vehicleStatusChecker.formatDate(new Date(parsedDateTime));\r\n\r\n\t\t\tresultBox.innerHTML = `\r\n
\r\n ${testResult.toLowerCase()}\r\n
\r\n \r\n `;\r\n\r\n\t\t\t//ADD EACH ACCORDION BOX TO THE CONTENT CONTAINER\r\n\t\t\taccordionContentContainer.appendChild(resultBox);\r\n\t\t});\r\n\r\n\t\tconst accordionScaffold = vehicleStatusChecker.createAccordionMarkup(year, accordionContentContainer);\r\n\t\treturn accordionScaffold;\r\n\t},\r\n\r\n\tpopulateMotQuoteBox: motTestsByYear => {\r\n\t\tconst latestTestWithExpiryDate = {};\r\n\r\n\t\tfor (const year in motTestsByYear) {\r\n\t\t\tconst motTestPassed = motTestsByYear[year].filter(\r\n\t\t\t\tmotTest => motTest.expiryDate !== '' && motTest.expiryDate !== undefined\r\n\t\t\t);\r\n\r\n\t\t\tif (motTestPassed.length) latestTestWithExpiryDate['latestTest'] = motTestPassed[0];\r\n\t\t}\r\n\r\n\t\tlet latestExpiryDate = '';\r\n\r\n\t\tif (\r\n\t\t\tlatestTestWithExpiryDate &&\r\n\t\t\tlatestTestWithExpiryDate.latestTest &&\r\n\t\t\tlatestTestWithExpiryDate.latestTest.expiryDate\r\n\t\t) {\r\n\t\t\tlatestExpiryDate = latestTestWithExpiryDate.latestTest.expiryDate;\r\n\t\t}\r\n\r\n\t\tconst parsedExpiryDate = new Date(vehicleStatusChecker.parseDateTime(latestExpiryDate));\r\n\t\tconst formattedExpiryDate = vehicleStatusChecker.formatDate(parsedExpiryDate);\r\n\t\tconst today = new Date();\r\n\r\n\t\tconst motBoxHTML = `\r\n ${\r\n\t\t\t\t\tparsedExpiryDate > today\r\n\t\t\t\t\t\t? `
MOT currently valid
Expires: ${formattedExpiryDate}
`\r\n\t\t\t\t\t\t: `
No valid MOT
Expired: ${latestExpiryDate ? formattedExpiryDate : '-'}
`\r\n\t\t\t\t}\r\n \r\n `;\r\n\t\treturn motBoxHTML;\r\n\t},\r\n\r\n\tpopulateTaxQuoteBox: (taxStatus, taxDueDate) => {\r\n\t\tconst parsedDateTime = vehicleStatusChecker.parseDateTime(taxDueDate);\r\n\t\tconst formattedDate = vehicleStatusChecker.formatDate(new Date(parsedDateTime));\r\n\r\n\t\tconst fragment = document.createRange().createContextualFragment(\r\n\t\t\t`\r\n ${\r\n\t\t\t\ttaxStatus === 'Taxed'\r\n\t\t\t\t\t? `\r\n
\r\n
Tax currently valid
\r\n\r\n Expires: ${formattedDate}\r\n
`\r\n\t\t\t\t\t: `\r\n
\r\n
Tax not valid
\r\n\r\n ${taxStatus !== 'SORN' ? `Expired: ${formattedDate}` : ''}\r\n Sorn: ${taxStatus === 'SORN' ? 'Yes' : 'No'}
\r\n `\r\n\t\t\t}\r\n `\r\n\t\t);\r\n\r\n\t\tvehicleStatusChecker.taxTabContent.appendChild(fragment);\r\n\t},\r\n\r\n\tpopulateMotTab: motTestsByYear => {\r\n\t\tconst sortedTests = Object.keys(motTestsByYear).sort((a, b) => parseInt(b) - parseInt(a));\r\n\r\n\t\t// Get HTML string for MOT quote box\r\n\t\tconst motBoxHTML = vehicleStatusChecker.populateMotQuoteBox(motTestsByYear);\r\n\r\n\t\t// Get HTML strings for MOT accordions and join them\r\n\t\tconst accordionHTML = sortedTests\r\n\t\t\t.map(key => {\r\n\t\t\t\tconst content = vehicleStatusChecker.populateMotAccordions(key, motTestsByYear);\r\n\t\t\t\treturn content.outerHTML;\r\n\t\t\t})\r\n\t\t\t.join('');\r\n\r\n\t\t// Create a document fragment using createContextualFragment\r\n\t\tconst fragment = document.createRange().createContextualFragment(\r\n\t\t\t`\r\n ${motBoxHTML}\r\n

MOT details and history

\r\n
\r\n ${accordionHTML}\r\n
\r\n `\r\n\t\t);\r\n\r\n\t\tvehicleStatusChecker.motTabContent.appendChild(fragment);\r\n\r\n\t\tvehicleStatusChecker.addAccordionEListeners();\r\n\t\t//HIDE FORM UI\r\n\t},\r\n\r\n\tclearPriorMotResults: () => {\r\n\t\tif (vehicleStatusChecker.motTabContent.hasChildNodes()) {\r\n\t\t\tvehicleStatusChecker.motTabContent.innerHTML = '';\r\n\t\t}\r\n\t},\r\n\r\n\taddAccordionEListeners: () => {\r\n\t\tconst accordions = document.querySelectorAll('.mod-accordion__item');\r\n\r\n\t\taccordions.forEach(accordionItem => {\r\n\t\t\tconst item = accordionItem,\r\n\t\t\t\tquestion = accordionItem.querySelector('.mod-accordion__question'),\r\n\t\t\t\tanswer = accordionItem.querySelector('.mod-row');\r\n\r\n\t\t\tquestion.addEventListener('click', () =>\r\n\t\t\t\tvehicleStatusChecker.toggleAccordionContent(item, question, answer)\r\n\t\t\t);\r\n\t\t});\r\n\t},\r\n\r\n\tresetApp: () => {\r\n\t\tif (vehicleStatusChecker.motTabContent.hasChildNodes()) vehicleStatusChecker.motTabContent.innerHTML = '';\r\n\t\tif (vehicleStatusChecker.taxTabContent.hasChildNodes()) vehicleStatusChecker.taxTabContent.innerHTML = '';\r\n\r\n\t\tvehicleStatusChecker.toggleUiVisibilityHelper(vehicleStatusChecker.tabSection);\r\n\t\tvehicleStatusChecker.toggleUiVisibilityHelper(vehicleStatusChecker.vehicleDetailsSection);\r\n\t\tvehicleStatusChecker.toggleUiVisibilityHelper(vehicleStatusChecker.regForm);\r\n\t},\r\n\r\n\tprocessMotTab: motData => {\r\n\t\tconst { motTests } = motData[0];\r\n\r\n\t\tif (motTests) {\r\n\t\t\tvehicleStatusChecker.organiseMotResults(motTests);\r\n\t\t} else {\r\n\t\t\tvehicleStatusChecker.showResultsNotFound(\r\n\t\t\t\tvehicleStatusChecker.motTabContent,\r\n\t\t\t\tvehicleStatusChecker.motNotFound\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n\r\n\tprocessTaxTab: taxData => {\r\n\t\tif (Object.keys(taxData).length) {\r\n\t\t\tconst { taxStatus, taxDueDate } = taxData;\r\n\t\t\tvehicleStatusChecker.populateTaxQuoteBox(taxStatus, taxDueDate);\r\n\t\t} else {\r\n\t\t\tvehicleStatusChecker.showResultsNotFound(\r\n\t\t\t\tvehicleStatusChecker.taxTabContent,\r\n\t\t\t\tvehicleStatusChecker.taxNotFound\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n\r\n\tprocessVehicleDetailsSection: (motData, taxData, userReg) => {\r\n\t\tconst { engineCapacity, monthOfFirstRegistration } = taxData || {};\r\n\t\tconst { fuelType, model, make } = (motData && motData[0]) || {};\r\n\r\n\t\tlet monthOfFirstRegistrationString = '';\r\n\t\tif (monthOfFirstRegistration) {\r\n\t\t\tconst parsedMonthOfFirstRegistration = vehicleStatusChecker.parseDateTime(monthOfFirstRegistration);\r\n\t\t\tconst formattedRegistrationDate = vehicleStatusChecker.formatDate(\r\n\t\t\t\tnew Date(parsedMonthOfFirstRegistration),\r\n\t\t\t\ttrue\r\n\t\t\t);\r\n\t\t\tmonthOfFirstRegistrationString = `, ${formattedRegistrationDate}`;\r\n\t\t}\r\n\r\n\t\tconst makeString = make ? `${make}` : '';\r\n\t\tconst modelString = model ? `, ${model}` : '';\r\n\t\tconst fuelTypeString = fuelType ? `, ${fuelType}` : '';\r\n\t\tconst engineCapacityString = engineCapacity ? `, ${engineCapacity}cc` : '';\r\n\r\n\t\tconst vehicleDetailsString = `${makeString}${modelString}${fuelTypeString}${monthOfFirstRegistrationString}${engineCapacityString}`;\r\n\t\tvehicleStatusChecker.vehicleReg.innerText = userReg.toUpperCase();\r\n\t\tvehicleStatusChecker.vehicleDetails.innerText = vehicleDetailsString;\r\n\t},\r\n\r\n\tcheckVehicleStatusData: (motData, taxData, userReg) => {\r\n\t\tif (!Object.keys(taxData).length && !Object.keys(motData).length) {\r\n\t\t\t//NO DATA RETURNED FROM EITHER API\r\n\t\t\treturn vehicleStatusChecker.carRegNotFound();\r\n\t\t} else {\r\n\t\t\tvehicleStatusChecker.processMotTab(motData);\r\n\t\t\tvehicleStatusChecker.processTaxTab(taxData);\r\n\t\t\tvehicleStatusChecker.processVehicleDetailsSection(motData, taxData, userReg);\r\n\r\n\t\t\t// TOGGLE VISIBILITY OF ELEMENTS\r\n\t\t\tvehicleStatusChecker.toggleUiVisibilityHelper(vehicleStatusChecker.regForm);\r\n\t\t\tvehicleStatusChecker.toggleUiVisibilityHelper(vehicleStatusChecker.vehicleDetailsSection);\r\n\t\t\tvehicleStatusChecker.toggleUiVisibilityHelper(vehicleStatusChecker.tabSection);\r\n\t\t}\r\n\t},\r\n\r\n\tfetchVehicleData: async userReg => {\r\n\t\tlet motData = {};\r\n\t\tlet taxData = {};\r\n\r\n\t\ttry {\r\n\t\t\tmotData = await vehicleStatusChecker.fetchDataHelper(vehicleStatusChecker.motApiUrl, userReg);\r\n\t\t} catch (error) {\r\n\t\t\tconsole.log(`MOT Error: ${error}`);\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\ttaxData = await vehicleStatusChecker.fetchDataHelper(vehicleStatusChecker.taxApiUrl, userReg);\r\n\t\t} catch (error) {\r\n\t\t\tconsole.log(`Tax Error: ${error}`);\r\n\t\t}\r\n\r\n\t\tvehicleStatusChecker.checkVehicleStatusData(motData, taxData, userReg);\r\n\r\n\t\tvehicleStatusChecker.isLoading = false;\r\n\t\tvehicleStatusChecker.submitRegButton.classList.remove('btn--loading');\r\n\t},\r\n\r\n\tfetchDataHelper: async (url, userReg) => {\r\n\t\tconst endpoint = `${url}=${userReg}`;\r\n\t\tconst response = await fetch(endpoint, {\r\n\t\t\tmethod: 'GET',\r\n\t\t\theaders: {\r\n\t\t\t\t'Ocp-Apim-Subscription-Key': vehicleStatusChecker.apiSubKey,\r\n\t\t\t},\r\n\t\t});\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error('Failed to fetch data');\r\n\t\t}\r\n\t\treturn response.json();\r\n\t},\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tconst motAndTaxCalc = document.getElementById('cnfsd-vsc');\r\n\r\n\tif (motAndTaxCalc) {\r\n\t\tvehicleStatusChecker.init();\r\n\t}\r\n});\r\n"]}