{"version":3,"file":"traffic-school-registration.min.js","names":["Ntss","submitting","_resetAddressForm","regVm","streetAddress","city","stateOption","document","querySelector","selected","state","value","zipCode","ko","validation","init","insertMessages","messageTemplate","errorElementClass","decorateElement","errorsAsTitle","parseInputAttributes","messagesOnModified","decorateElementOnModified","decorateInputElement","submitButtonText","observable","ticketInfoIsRequired","reasonToAttend","e","caseNumberRequired","includes","locationId","extend","required","locationSelected","computed","courseTypeId","message","onlyIf","courseSelected","courseDate","classDateSelected","firstName","maxLength","middleName","lastName","JSON","stringify","emailAddress","phoneNumber","driversLicenseNumber","dateOfBirth","court","ticketDate","ticketNumber","caseNumber","referralSource","validator","val","parseInt","referralValueForOther","remarks","errors","group","isFormValid","showAllMessages","hasErrors","length","submitHasBeenClicked","onSubmit","form","timeout","setTimeout","alert","clearTimeout","addEventListener","evt","key","preventDefault","addressComponents","street_number","route","locality","administrative_area_level_1","country","postal_code","addressComponentValues","autocomplete","google","maps","places","Autocomplete","getElementById","types","addListener","getPlace","address_components","forEach","ac","index","addressType","matchingOption","Array","from","querySelectorAll","find","option","textContent","_initGoogleMapsAutocomplete","streetInput","_addListenerForClearingAddress","target","formattedVal","formatPhone","trim","licenseNumberInput","parseLettersAndDigits","toUpperCase","_addFormatDriversLicenseListener","ticketNumberInput","_addFormatTickeNumberListener","firstNameInput","lastNameInput","middleNameInput","toTitleCase","_addFormatNameFieldsListeners","applyBindings","initListGroup","register","FormInput_Loc","FormInput_ClassName","FormInput_ClassDate","FormInput_Reason","abbreviation","matchingCountyOption","countyName"],"sources":["traffic-school-registration.js"],"mappings":"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","ignoreList":[],"sourcesContent":["var Ntss;\n(function (Ntss) {\n let submitting = false;\n // KO Validation setup\n const koValidationSettings = {\n insertMessages: true, // show message next to input or not \n messageTemplate: \"customErrorTemplate\",\n errorElementClass: 'inputError',\n decorateElement: false,\n errorsAsTitle: true,\n parseInputAttributes: false,\n messagesOnModified: true,\n decorateElementOnModified: false,\n decorateInputElement: false\n };\n ko.validation.init(koValidationSettings);\n ;\n // KO viewmodel\n Ntss.regVm = {\n submitButtonText: ko.observable(\"Submit \")\n };\n Ntss.regVm.ticketInfoIsRequired = () => {\n try {\n return Ntss.regVm.reasonToAttend() !== 'BDI - Employer Requirement'\n && Ntss.regVm.reasonToAttend() !== 'BDI - Mature Driver Insurance Discount'\n && Ntss.regVm.reasonToAttend() !== 'Personal Election (Under 25 Defensive Driver School)'\n && Ntss.regVm.reasonToAttend() !== '8 Hour DDS/Intermediate - Elective'\n && Ntss.regVm.reasonToAttend() !== '8 Hour Aggressive Driver - Employer Required'\n && Ntss.regVm.reasonToAttend() !== 'Florida DMV Requirement Points Suspension'\n && Ntss.regVm.reasonToAttend() !== 'Florida DMV Requirement for HTO Hardship Request'\n && Ntss.regVm.reasonToAttend() !== 'Florida DMV Requirement for 3 Collisions in 3 Years'\n && Ntss.regVm.reasonToAttend() !== '12 Hour ADI - Employer/Business Purpose'\n && Ntss.regVm.reasonToAttend() !== 'TLSAE Course for First Time Drivers/Learners Permit'\n && Ntss.regVm.reasonToAttend() !== 'Insurance Discount';\n }\n catch (e) {\n return true;\n }\n };\n Ntss.regVm.caseNumberRequired = () => {\n try {\n const reason = Ntss.regVm.reasonToAttend();\n return reason.includes('Court Order');\n }\n catch (e) {\n return false;\n }\n };\n Ntss.regVm.locationId = ko.observable().extend({ required: true });\n Ntss.regVm.locationSelected = ko.computed(() => {\n return Ntss.regVm.locationId() != null && Ntss.regVm.locationId() !== \"\";\n });\n Ntss.regVm.courseTypeId = ko.observable().extend({\n required: {\n message: \"This field is required\",\n onlyIf: () => {\n return Ntss.regVm.locationSelected();\n }\n }\n });\n Ntss.regVm.courseSelected = ko.computed(() => {\n return Ntss.regVm.courseTypeId() != null && Ntss.regVm.courseTypeId() !== \"\";\n });\n Ntss.regVm.courseDate = ko.observable().extend({\n required: {\n message: \"This field is required\",\n onlyIf: () => {\n return Ntss.regVm.courseSelected();\n }\n }\n });\n Ntss.regVm.classDateSelected = ko.computed(() => {\n return Ntss.regVm.courseDate() != null && Ntss.regVm.courseDate() !== \"\";\n });\n Ntss.regVm.reasonToAttend = ko.observable().extend({\n required: {\n message: \"This field is required\",\n onlyIf: () => {\n return Ntss.regVm.classDateSelected();\n }\n }\n });\n Ntss.regVm.firstName = ko.observable(Ntss.firstName).extend({ required: true, maxLength: 64 });\n Ntss.regVm.middleName = ko.observable(Ntss.middleName);\n Ntss.regVm.lastName = ko.observable(Ntss.lastName).extend({ required: true, maxLength: 64 });\n Ntss.regVm.streetAddress = ko.observable(Ntss.streetAddress).extend({ required: true });\n Ntss.regVm.city = ko.observable(Ntss.city).extend({ required: true });\n Ntss.regVm.state = ko.observable(JSON.stringify(Ntss.state)).extend({ required: true });\n Ntss.regVm.zipCode = ko.observable(Ntss.zipCode).extend({ required: true, maxLength: 10 });\n Ntss.regVm.emailAddress = ko.observable(Ntss.emailAddress).extend({ required: true });\n Ntss.regVm.phoneNumber = ko.observable(Ntss.phoneNumber).extend({ required: true });\n Ntss.regVm.driversLicenseNumber = ko.observable(Ntss.driversLicenseNumber).extend({\n required: {\n message: \"This field is required\",\n onlyIf: () => {\n return !Ntss.regVm.reasonToAttend() || Ntss.regVm.reasonToAttend() !== \"TLSAE Course for First Time Drivers/Learners Permit\" || !Ntss.regVm.ticketInfoIsRequired();\n }\n },\n maxLength: 128\n });\n Ntss.regVm.dateOfBirth = ko.observable(Ntss.dateOfBirth).extend({ required: true });\n Ntss.regVm.court = ko.observable(JSON.stringify(Ntss.court)).extend({\n required: {\n message: \"This field is required\",\n onlyIf: () => {\n return Ntss.regVm.ticketInfoIsRequired();\n }\n }\n });\n Ntss.regVm.ticketDate = ko.observable(Ntss.ticketDate).extend({\n required: {\n message: \"This field is required\",\n onlyIf: () => {\n return Ntss.regVm.ticketInfoIsRequired();\n }\n }\n });\n Ntss.regVm.ticketNumber = ko.observable(Ntss.ticketNumber).extend({\n required: {\n message: \"This field is required\",\n onlyIf: () => {\n return Ntss.regVm.ticketInfoIsRequired();\n }\n },\n maxLength: 128\n });\n Ntss.regVm.caseNumber = ko.observable(Ntss.caseNumber).extend({\n required: {\n message: \"This field is required\",\n onlyIf: () => {\n return Ntss.regVm.caseNumberRequired();\n }\n },\n maxLength: 128\n });\n Ntss.regVm.referralSource = ko.observable(Ntss.referralSource).extend({\n validation: {\n validator: (val) => {\n return val && parseInt(val) > 0;\n },\n message: \"Please tell us how you found us\",\n insertMessages: false\n }\n });\n Ntss.regVm.referralValueForOther = ko.observable(Ntss.referralValueForOther).extend({\n required: {\n message: \"Please specify how you were referred to us\",\n onlyIf: function () {\n return Ntss.regVm.referralSource() == 7;\n }\n },\n maxLength: 64\n });\n Ntss.regVm.remarks = ko.observable(Ntss.remarks).extend({ maxLength: 1023 });\n Ntss.regVm.errors = ko.validation.group(Ntss.regVm);\n Ntss.regVm.isFormValid = () => {\n Ntss.regVm.errors.showAllMessages();\n const hasErrors = Ntss.regVm.errors().length > 0;\n Ntss.regVm.hasErrors();\n return !hasErrors;\n };\n Ntss.regVm.submitHasBeenClicked = ko.observable(false);\n Ntss.regVm.hasErrors = ko.computed(() => {\n return Ntss.regVm.errors().length > 0 && Ntss.regVm.submitHasBeenClicked();\n });\n Ntss.regVm.onSubmit = (form) => {\n Ntss.regVm.submitHasBeenClicked(true);\n if (!Ntss.regVm.isFormValid()) {\n return false;\n }\n //const submitButton = document.querySelector('input[type=\"submit\"]') as HTMLInputElement;\n //submitButton.textContent = 'Submitting...';\n //submitButton.classList.add('loading');\n Ntss.regVm.submitButtonText('Submitting... ');\n if (submitting) {\n return false;\n }\n else {\n submitting = true;\n //form.dataset.submitted = true;\n const timeout = setTimeout(() => {\n //submitButton.classList.remove('loading');\n Ntss.regVm.submitButtonText('Send ');\n alert('Form failed to completely submit within 5 minutes, please refresh the page and try again.');\n submitting = false;\n clearTimeout(timeout);\n }, 300000);\n return true;\n }\n };\n // This gets called when the document loads\n document.addEventListener('DOMContentLoaded', () => {\n _preventEnterDefault();\n _initGoogleMapsAutocomplete();\n _addListenerForClearingAddress();\n _addFormatPhoneListener();\n _addFormatDriversLicenseListener();\n _addFormatTickeNumberListener();\n _addFormatNameFieldsListeners();\n ko.applyBindings(Ntss.regVm);\n initListGroup('courses', document.register.FormInput_Loc, document.register.FormInput_ClassName, document.register.FormInput_ClassDate, document.register.FormInput_Reason, 'cs');\n const matchingOption = Array.from(document.querySelectorAll('#FormInput_State option')).find(option => option.textContent.includes(Ntss.state.abbreviation));\n if (matchingOption) {\n matchingOption.selected = true;\n Ntss.regVm.state(matchingOption.value);\n }\n else {\n Ntss.regVm.state(\"\");\n }\n const matchingCountyOption = Array.from(document.querySelectorAll('#FormInput_Court option')).find(option => option.textContent.includes(Ntss.court.countyName));\n if (matchingCountyOption) {\n matchingCountyOption.selected = true;\n Ntss.regVm.court(matchingCountyOption.value);\n }\n else {\n Ntss.regVm.court(\"\");\n }\n Ntss.regVm.errors.showAllMessages(false);\n });\n function _addFormatPhoneListener() {\n document.getElementById(\"FormInput_PhoneNumber\").addEventListener(\"keyup\", (evt) => {\n const phoneElement = evt.target;\n const val = phoneElement.value;\n if (!val) {\n return;\n }\n const formattedVal = Ntss.formatPhone(val).trim();\n Ntss.regVm.phoneNumber(formattedVal);\n });\n }\n function _addFormatDriversLicenseListener() {\n const licenseNumberInput = document.getElementById(\"FormInput_LicenseNumber\");\n licenseNumberInput.addEventListener(\"blur\", (evt) => {\n const val = licenseNumberInput.value;\n const formattedVal = val.parseLettersAndDigits().toUpperCase().trim();\n Ntss.regVm.driversLicenseNumber(formattedVal);\n });\n }\n function _addFormatNameFieldsListeners() {\n const firstNameInput = document.getElementById(\"FormInput_FirstName\");\n const lastNameInput = document.getElementById(\"FormInput_LastName\");\n const middleNameInput = document.getElementById(\"FormInput_MI\");\n firstNameInput.addEventListener(\"blur\", (evt) => {\n const targetElement = evt.target;\n const firstName = targetElement.value.toTitleCase().trim();\n Ntss.regVm.firstName(firstName);\n });\n lastNameInput.addEventListener(\"blur\", (evt) => {\n const targetElement = evt.target;\n const lastName = targetElement.value.toTitleCase().trim();\n Ntss.regVm.lastName(lastName);\n });\n middleNameInput.addEventListener(\"blur\", (evt) => {\n const targetElement = evt.target;\n const middleName = targetElement.value.toTitleCase().trim();\n Ntss.regVm.middleName(middleName);\n });\n }\n function _addFormatTickeNumberListener() {\n const ticketNumberInput = document.getElementById(\"FormInput_TicketNbr\");\n ticketNumberInput.addEventListener(\"blur\", (evt) => {\n const val = ticketNumberInput.value;\n const formattedVal = val.toUpperCase().trim();\n Ntss.regVm.ticketNumber(formattedVal);\n });\n }\n /**\n * Resets the address part of the form\n */\n function _resetAddressForm() {\n // Reset the form values\n Ntss.regVm.streetAddress('');\n Ntss.regVm.city('');\n const stateOption = document.querySelector(\"#FormInput_State option[value='']\");\n stateOption.selected = true;\n Ntss.regVm.state(stateOption.value);\n Ntss.regVm.zipCode('');\n }\n /**\n * Adds an blur event listener on the street address input so that if its value is null or empty\n * the rest of the address form inputs get reset as well.\n */\n function _addListenerForClearingAddress() {\n const streetInput = document.getElementById(\"FormInput_Street\");\n streetInput.addEventListener(\"blur\", (evt) => {\n const val = streetInput.value;\n if (!val) {\n _resetAddressForm();\n }\n });\n }\n /**\n * Initializes the Google places API so that the address can autocomplete\n */\n function _initGoogleMapsAutocomplete() {\n // Create an object that represents the parts of what google places api returns\n const addressComponents = {\n street_number: \"short_name\",\n route: \"long_name\",\n locality: 'long_name',\n administrative_area_level_1: 'short_name',\n country: 'long_name',\n postal_code: 'short_name'\n };\n // Now create an object that will hold the values of what google places API returns\n const addressComponentValues = {\n street_number: \"\",\n route: \"\",\n locality: \"\",\n administrative_area_level_1: \"\",\n country: \"\",\n postal_code: \"\"\n };\n const autocomplete = new google.maps.places.Autocomplete((document.getElementById(\"FormInput_Street\")), { types: [\"geocode\"] });\n // Add listener callback function for when the address selection (from google places api) changes\n autocomplete.addListener(\"place_changed\", () => {\n // Reset the address input values\n _resetAddressForm();\n // Get the current selected place \n const place = autocomplete.getPlace();\n // Extract the values out of the google results and into the local addressComponentValues object\n place.address_components.forEach((ac, index) => {\n const addressType = ac.types[0];\n if (addressComponents[addressType]) {\n addressComponentValues[addressType] = ac[addressComponents[addressType]];\n }\n });\n // Map the values that were set on the addressComponentValues object into the form\n Ntss.regVm.streetAddress(`${addressComponentValues.street_number} ${addressComponentValues.route}`);\n Ntss.regVm.city(`${addressComponentValues.locality}`);\n const matchingOption = Array.from(document.querySelectorAll('#FormInput_State option'))\n .find((option) => option.textContent === addressComponentValues.administrative_area_level_1);\n matchingOption.selected = true;\n Ntss.regVm.state(matchingOption.value);\n Ntss.regVm.zipCode(`${addressComponentValues.postal_code}`);\n });\n }\n /**\n * Prevents the enter key press from submitting the form prematurely\n */\n function _preventEnterDefault() {\n document.addEventListener('keydown', (evt) => {\n if (evt.key === 'Enter') {\n evt.preventDefault();\n return;\n }\n });\n }\n})(Ntss || (Ntss = {}));\n"]}