{"version":3,"file":"Areas/HomeInstead/Static/dist/ContactUsForm.js","mappings":"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","sources":["webpack://static/./Static/js/Utility/Extensions/StringExtensions.js","webpack://static/webpack/bootstrap","webpack://static/webpack/runtime/define property getters","webpack://static/webpack/runtime/hasOwnProperty shorthand","webpack://static/./Static/js/Organization/Organization.js","webpack://static/./Static/js/Utility/FormHelpers.js","webpack://static/./Areas/HomeInstead/Static/js/Forms/ContactUsForm.js"],"sourcesContent":["String.prototype.parseURL = function () {\r\n let path = \"\", query = \"\", hash = \"\", url = this, params;\r\n if (url.indexOf(\"#\") > 0) {\r\n hash = url.substring(url.indexOf(\"#\") + 1);\r\n url = url.substring(0, url.indexOf(\"#\"));\r\n }\r\n if (url.indexOf(\"?\") > 0) {\r\n path = url.substring(0, url.indexOf(\"?\"));\r\n query = url.substring(url.indexOf(\"?\") + 1);\r\n params = query.split('&');\r\n } else\r\n path = url;\r\n return {\r\n getHost: function () {\r\n let hostexp = /\\/\\/([\\w.-]*)/;\r\n let match = hostexp.exec(path);\r\n if (match != null && match.length > 1)\r\n return match[1];\r\n return \"\";\r\n },\r\n getPath: function () {\r\n let pathexp = /\\/\\/[\\w.-]*(?:\\/([^?]*))/;\r\n let match = pathexp.exec(path);\r\n if (match != null && match.length > 1)\r\n return match[1];\r\n return \"\";\r\n },\r\n getHash: function () {\r\n return hash;\r\n },\r\n getParams: function () {\r\n return params\r\n },\r\n getQuery: function () {\r\n return query;\r\n },\r\n setHash: function (value) {\r\n if (query.length > 0)\r\n query = \"?\" + query;\r\n if (value.length > 0)\r\n query = query + \"#\" + value;\r\n return path + query;\r\n },\r\n setParam: function (name, value) {\r\n if (!params) {\r\n params = new Array();\r\n }\r\n params.push(name + '=' + value);\r\n for (let i = 0; i < params.length; i++) {\r\n if (query.length > 0)\r\n query += \"&\";\r\n query += params[i];\r\n }\r\n if (query.length > 0)\r\n query = \"?\" + query;\r\n if (hash.length > 0)\r\n query = query + \"#\" + hash;\r\n return path + query;\r\n },\r\n insertParam: function (name, value, index) {\r\n if (!params) {\r\n params = new Array();\r\n }\r\n\r\n let newParam = name + '=' + value;\r\n\r\n if (index <= 0)\r\n params.unshift(newParam);\r\n else if (index >= params.length)\r\n params.push(newParam);\r\n else\r\n params.splice(index, 0, name + '=' + value);\r\n\r\n query = \"\";\r\n for (let i = 0; i < params.length; i++) {\r\n if (query.length > 0)\r\n query += \"&\";\r\n query += params[i];\r\n }\r\n if (query.length > 0)\r\n query = \"?\" + query;\r\n if (hash.length > 0)\r\n query = query + \"#\" + hash;\r\n return path + query;\r\n },\r\n getParam: function (name) {\r\n if (params) {\r\n for (let i = 0; i < params.length; i++) {\r\n let pair = params[i].split('=');\r\n if (decodeURIComponent(pair[0]) == name)\r\n return decodeURIComponent(pair[1]);\r\n }\r\n }\r\n console.log('Query variable %s not found', name);\r\n },\r\n hasParam: function (name) {\r\n if (params) {\r\n for (let i = 0; i < params.length; i++) {\r\n let pair = params[i].split('=');\r\n if (decodeURIComponent(pair[0]) == name)\r\n return true;\r\n }\r\n }\r\n console.log('Query variable %s not found', name);\r\n },\r\n removeParam: function (name) {\r\n query = \"\";\r\n if (params) {\r\n let newparams = new Array();\r\n for (let i = 0; i < params.length; i++) {\r\n let pair = params[i].split('=');\r\n if (decodeURIComponent(pair[0]) != name)\r\n newparams.push(params[i]);\r\n }\r\n params = newparams;\r\n for (let i = 0; i < params.length; i++) {\r\n if (query.length > 0)\r\n query += \"&\";\r\n query += params[i];\r\n }\r\n }\r\n if (query.length > 0)\r\n query = \"?\" + query;\r\n if (hash.length > 0)\r\n query = query + \"#\" + hash;\r\n return path + query;\r\n },\r\n deduplicateParams: function (order = 'FIFO') {\r\n query = \"\";\r\n if (params) {\r\n let newparams = new Array();\r\n if (order.toLowerCase() === 'lifo') {\r\n for (let i = params.length - 1; i >= 0; i--) {\r\n let pair = params[i].split('=');\r\n if (!newparams.find(p => p.startsWith(pair[0] + '=')))\r\n newparams.push(params[i]);\r\n }\r\n }\r\n if (order.toLowerCase() === 'fifo') {\r\n for (let i = 0; i < params.length; i++) {\r\n let pair = params[i].split('=');\r\n if (!newparams.find(p => p.startsWith(pair[0] + '=')))\r\n newparams.push(params[i]);\r\n }\r\n }\r\n params = newparams;\r\n for (let i = 0; i < params.length; i++) {\r\n if (query.length > 0)\r\n query += \"&\";\r\n query += params[i];\r\n }\r\n if (query.length > 0)\r\n query = \"?\" + query;\r\n if (hash.length > 0)\r\n query = query + \"#\" + hash;\r\n return path + query;\r\n }\r\n },\r\n reconstitute: function () {\r\n return `https://${this.getHost()}/${this.getPath()}${this.getQuery()}`;\r\n }\r\n }\r\n}\r\n\r\nString.prototype.Cleanse = function () {\r\n return this.replace(/[^\\w\\.@!? ,/:+()'´_#*-]/gi, \" \");\r\n}\r\n\r\nString.prototype.isNullOrWhitespace = function () {\r\n if (!this)\r\n return true;\r\n if (typeof this === 'string') {\r\n let trimmed = this.trim();\r\n let len = trimmed.length;\r\n if (len == 0)\r\n return true;\r\n else\r\n return false;\r\n }\r\n\r\n return false;\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","class Office {\r\n constructor(number, active, isHhc, address, suite, city, stateProvince, postalCode, country, latitude, longitude, phone, created, modified) {\r\n this.Number = number;\r\n this.Active = active;\r\n this.IsHhc = isHhc;\r\n this.Address = address;\r\n this.Suite = suite;\r\n this.City = city;\r\n this.StateProvince = stateProvince;\r\n this.PostalCode = postalCode;\r\n this.Country = country;\r\n this.Latitude = latitude;\r\n this.Longitude = longitude;\r\n this.Phone = phone;\r\n this.Created = created;\r\n this.Modified = modified;\r\n }\r\n\r\n getFormattedPhoneNumber() {\r\n return this.formatPhoneNumber(this.Phone);\r\n }\r\n\r\n formatPhoneNumber(phoneNumber) {\r\n const cleaned = ('' + phoneNumber).replace(/\\D/g, '');\r\n const match = cleaned.match(/^(\\d{3})(\\d{3})(\\d{4})$/);\r\n\r\n if (match) {\r\n return '(' + match[1] + ') ' + match[2] + '-' + match[3];\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\r\nclass Attribute {\r\n constructor(typeName, value, number, created, modified, category) {\r\n this.TypeName = typeName;\r\n this.Value = value;\r\n this.Number = number;\r\n this.Created = created;\r\n this.Modified = modified;\r\n this.Category = category;\r\n }\r\n}\r\n\r\nclass Organization {\r\n constructor(data) {\r\n this.Number = data.Number;\r\n this.Region = data.Region;\r\n this.Status = data.Status;\r\n this.Active = data.Active;\r\n this.Type = data.Type;\r\n this.Created = data.Created;\r\n this.Modified = data.Modified;\r\n this.Canonical = data.Canonical.replace(`www.`, window.settings.env + `.`);\r\n\r\n if (Array.isArray(data.Offices)) {\r\n this.offices = data.Offices.map(officeData => new Office(officeData.Number, officeData.Active, officeData.IsHhc, officeData.Address, officeData.Suite, officeData.City, officeData.StateProvince, officeData.PostalCode, officeData.Country, officeData.Latitude, officeData.Longitude, officeData.Phone, officeData.Created, officeData.Modified));\r\n } else {\r\n this.offices = [];\r\n }\r\n\r\n if (Array.isArray(data.Attributes)) {\r\n this.attributes = data.Attributes.map(attrData => new Attribute(attrData.TypeName, attrData.Value, attrData.Number, attrData.Created, attrData.Modified, attrData.Category));\r\n } else {\r\n this.attributes = [];\r\n }\r\n\r\n this.CarePlatform = this.getAttributeByName('MigratedToCarePlatform');\r\n }\r\n getAttributeByName(typeName) {\r\n const attribute = this.attributes.find(attr => attr.TypeName === typeName);\r\n return attribute ? attribute.Value : \"\";\r\n }\r\n}\r\n\r\nexport { Office, Attribute, Organization };\r\n","import { Organization } from '/Static/js/Organization/Organization.js';\r\nimport \"/Static/js/Utility/Extensions/StringExtensions.js\";\r\n\r\nexport class FormHelpers {\r\n constructor() {\r\n }\r\n\r\n // Clear out the Drop Down list\r\n // stopDeletingAt - default will remove all elements\r\n clearDropDown(dropDown, stopDeletingAt=-1) {\r\n for (let i = dropDown.length; i > stopDeletingAt; i--) {\r\n dropDown.remove(i);\r\n }\r\n }\r\n\r\n // Reset the Form Validation Styles for each Input/Select field\r\n clearFieldValidation(elementList) {\r\n if (elementList !== null) {\r\n elementList.forEach((input) => {\r\n input.classList.remove(\"is-invalid\");\r\n input.classList.remove(\"is-valid\");\r\n });\r\n }\r\n }\r\n\r\n clearFormGroupValidation(hiscForm, formGroupSelector) {\r\n const formHelper = new FormHelpers();\r\n formHelper.clearFieldValidation(hiscForm.querySelectorAll(formGroupSelector + \" .form-control\"));\r\n formHelper.clearValidationMessages(hiscForm.querySelectorAll(formGroupSelector + \" .invalid-feedback\"));\r\n }\r\n\r\n // Reset the Form Validation Messages for each Input/Select field\r\n clearValidationMessages(elementList) {\r\n if (elementList !== null) {\r\n elementList.forEach((errorMessage) => {\r\n errorMessage.style.display = \"none\";\r\n errorMessage.textContent = \"\";\r\n });\r\n }\r\n }\r\n\r\n // Convert Form Data to json string - (Handles multi-select)\r\n ConvertFormDataToJson(hiscFormData) {\r\n const object = {};\r\n hiscFormData.forEach((value, key) => {\r\n if (!Reflect.has(object, key)) {\r\n object[key] = value;\r\n return;\r\n }\r\n if (!Array.isArray(object[key])) {\r\n object[key] = [object[key]];\r\n }\r\n object[key].push(value);\r\n });\r\n\r\n return JSON.stringify(object);\r\n }\r\n\r\n focusOnFirstError(theForm, scroll = true) {\r\n // Grab the first element in the form that is set to .is-invalid\r\n const firstError = theForm.querySelector(\".is-invalid\");\r\n if (typeof firstError !== \"undefined\" && firstError !== null) {\r\n let focusDelay = scroll ? 350 : 5;\r\n \r\n // Set the focus of the field before we start positioning\r\n setTimeout(function () {\r\n firstError.focus();\r\n }, focusDelay);\r\n\r\n if (!scroll)\r\n return;\r\n\r\n const firstErrorPosition = firstError.getBoundingClientRect().top;\r\n\r\n // accomodate header height if it exists\r\n let headerHeight = 0;\r\n const header = document.querySelector(\"header\");\r\n if (header) {\r\n headerHeight = header.offsetHeight + header.getBoundingClientRect().top;\r\n }\r\n\r\n const scrollPosition = firstErrorPosition - headerHeight - 40; // give it 40px of room to look nice\r\n window.scrollBy({ top: scrollPosition, left: 0, behavior: \"smooth\" });\r\n }\r\n }\r\n\r\n async gtmTrackFormSubmission(gtmEvent, franchiseNumber, jobId, formId, formIntent, submissionResult) { \r\n try {\r\n if (franchiseNumber === null) franchiseNumber = \"\";\r\n if (jobId === null) jobId = \"\";\r\n\r\n let payload = {\r\n 'franchise_number': franchiseNumber,\r\n 'job_id': jobId,\r\n 'form_id': formId,\r\n 'form_submission_intent': formIntent,\r\n 'form_submission_result': submissionResult,\r\n 'page_url': window.location.href,\r\n 'event': gtmEvent\r\n };\r\n\r\n // Fire dataLayer.push(payload)\r\n if (window.settings.gtm_enabled) {\r\n window.dataLayer.push(payload);\r\n }\r\n if (window.settings.segment_enabled) {\r\n await analytics.track(payload.event, payload);\r\n\r\n if (payload.eventCallback) {\r\n payload.eventCallback();\r\n }\r\n }\r\n } catch (e) { console.log(`gtm error (${submissionResult})`, e); }\r\n }\r\n\r\n isValidEmail(email) {\r\n const emailClean = email?.replace(/\\s+/g, ''); // Remove white spaces\r\n if (!emailClean || (emailClean.length < 6 && emailClean.length > 256)) return false; // Check length for a valid Email (white space removed)\r\n\r\n // Check regex for a valid Email Address\r\n const regex_email = /^(?![_.-])((?![_.-][_.-])[a-zA-Z\\d_.+-]){0,63}[a-zA-Z\\d]@((?!-)((?!--)[a-zA-Z\\d-]){0,63}[a-zA-Z\\d]\\.){1,2}([a-zA-Z]{2,14}\\.)?[a-zA-Z]{2,14}$/;\r\n if (regex_email.test(emailClean)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isValidPhone(phoneNumber) {\r\n const phoneNumberClean = phoneNumber?.replace(/\\s+/g, ''); // Remove white spaces\r\n if (!phoneNumberClean || phoneNumberClean.length < 10) return false; // Check length for a valid Postal Code (white space removed)\r\n\r\n // Check regex for a valid Phone Number\r\n const regex_phone = /^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4}$/;\r\n if (regex_phone.test(phoneNumberClean)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isValidPostalCode(postalCode) {\r\n const postalCodeClean = postalCode?.replace(/\\s+/g, ''); // remove white spaces\r\n if (!postalCodeClean || (postalCodeClean.length < 5 && postalCodeClean.length > 6)) return false; // Check length for a valid Postal Code (white space removed)\r\n\r\n const usPostalCodeRegex = /^[0-9]{5}$/;\r\n const caPostalCodeRegex = /^[A-Za-z]\\d[A-Za-z][ -]?\\d[A-Za-z]\\d$/;\r\n\r\n // Check regex for a valid Postal Code\r\n if (usPostalCodeRegex.test(postalCodeClean) || caPostalCodeRegex.test(postalCodeClean)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // Mark a Input Field as Invalid - to show that it didn't pass validation\r\n markInputFieldInvalid(fieldGroup, errorMessage) {\r\n const field = fieldGroup.querySelector(\"input\");\r\n field.classList.add(\"is-invalid\");\r\n const errorMessageContainer = fieldGroup.querySelector(\".invalid-feedback\");\r\n errorMessageContainer.textContent = errorMessage;\r\n errorMessageContainer.style.display = \"block\";\r\n }\r\n\r\n // Mark a Input Field as Invalid - to show that it didn't pass validation\r\n markTextAreaFieldInvalid(fieldGroup, errorMessage) {\r\n const field = fieldGroup.querySelector(\"textarea\");\r\n field.classList.add(\"is-invalid\");\r\n const errorMessageContainer = fieldGroup.querySelector(\".invalid-feedback\");\r\n errorMessageContainer.textContent = errorMessage;\r\n errorMessageContainer.style.display = \"block\";\r\n }\r\n\r\n // Mark a Select Field as Invalid - to show that it didn't pass validation\r\n markSelectFieldInvalid(fieldGroup, errorMessage) {\r\n const field = fieldGroup.querySelector(\"select\");\r\n field.classList.add(\"is-invalid\");\r\n const errorMessageContainer = fieldGroup.querySelector(\".invalid-feedback\");\r\n errorMessageContainer.textContent = errorMessage;\r\n errorMessageContainer.style.display = \"block\";\r\n }\r\n\r\n // Mark a Radio Input Fields as Invalid - to show that it didn't pass validation\r\n markRadioFieldInvalid(fieldGroup, errorMessage) {\r\n fieldGroup.querySelectorAll(\"input\").forEach(field => {\r\n field.classList.add(\"is-invalid\");\r\n })\r\n const errorMessageContainer = fieldGroup.querySelector(\".invalid-feedback\");\r\n errorMessageContainer.textContent = errorMessage;\r\n errorMessageContainer.style.display = \"block\";\r\n }\r\n\r\n // Mark a Radio Input Fields as Valid - (clear invalid classes)\r\n markRadioFieldValid(fieldGroup) {\r\n fieldGroup.querySelectorAll(\"input\").forEach(field => {\r\n field.classList.remove(\"is-invalid\");\r\n })\r\n const errorMessageContainer = fieldGroup.querySelector(\".invalid-feedback\");\r\n errorMessageContainer.textContent = \"\";\r\n errorMessageContainer.style.display = \"none\";\r\n }\r\n\r\n // Process the form errors and mark fields invalid and set error messages\r\n processFormErrors(theForm, errorList) {\r\n for (let i = 0; i < errorList.length; i++) {\r\n const errObj = errorList[i];\r\n\r\n let fieldSelector = errObj.source;\r\n if (fieldSelector === \"PostalCode\") fieldSelector = \"Zip_Code\";\r\n if (fieldSelector === \"Phone\") fieldSelector = \"Phone_Number\";\r\n\r\n const formFieldGroup = theForm.querySelector(\".\" + fieldSelector +\"-group\");\r\n if (formFieldGroup !== null) {\r\n const formField = formFieldGroup.querySelector(\".\" + fieldSelector + \"-field\");\r\n if (formField !== null) {\r\n // Set Bootstrap Error Style on Field\r\n formField.classList.add(\"is-invalid\");\r\n\r\n // Set Text & Bootstrap Style on Error Message Feedback\r\n const errorMessage = formFieldGroup.querySelector(\".invalid-feedback\");\r\n //errorMessage.classList.add(\"invalid-feedback\");\r\n errorMessage.style.display = \"block\";\r\n errorMessage.textContent = errObj.detail;\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateInternalErrorMsg(errorContainer, franchiseName, franchiseUrl, franchisePhone) {\r\n const locationLink = errorContainer.querySelector(\"a.location-url\");\r\n if (locationLink != null) {\r\n locationLink.setAttribute(\"href\", franchiseUrl);\r\n locationLink.innerHTML = franchiseName;\r\n }\r\n\r\n const phoneLink = errorContainer.querySelector(\"a.location-phone\");\r\n if (phoneLink != null) {\r\n phoneLink.innerHTML = franchisePhone;\r\n phoneLink.setAttribute(\"href\", `tel:${franchisePhone}`);\r\n }\r\n }\r\n\r\n setCookie(name, value, maxAgeSeconds) {\r\n const maxAgeSegment = `; max-age=${maxAgeSeconds}`;\r\n document.cookie = encodeURI(name) + \"=\" + encodeURI(value) + maxAgeSegment;\r\n }\r\n\r\n getCookie(cname) {\r\n const name = cname + \"=\";\r\n const decodedCookie = decodeURIComponent(document.cookie);\r\n const ca = decodedCookie.split(\";\");\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i];\r\n while (c.charAt(0) === \" \") {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) === 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return \"\";\r\n }\r\n\r\n disableFormButton(theButton) {\r\n theButton.disabled = true;\r\n }\r\n\r\n enableFormButton(theButton) {\r\n theButton.disabled = false;\r\n }\r\n\r\n // Show a Form Group, using Bootstrap Styles\r\n showFormGroup(formGroup) {\r\n if (formGroup !== null) {\r\n formGroup.classList.remove(\"d-none\");\r\n formGroup.classList.add(\"d-block\");\r\n }\r\n }\r\n\r\n // Hide a Form Group, using Bootstrap Styles\r\n hideFormGroup(formGroup) {\r\n if (formGroup !== null) {\r\n formGroup.classList.remove(\"d-block\");\r\n formGroup.classList.add(\"d-none\");\r\n }\r\n }\r\n\r\n async getFranchiseLocationOptions(geoLocationSearch, forceProximitySearch = false, withJobsOnly = false) {\r\n let options = [];\r\n\r\n if (window.postalResults && window.postalResults.filter(x => x.code === geoLocationSearch).length > 0) {\r\n let cachedResults = window.postalResults.filter(x => x.code === geoLocationSearch)[0].results;\r\n options = this.getLocationOptionsFromResultsArray(cachedResults);\r\n return options;\r\n }\r\n\r\n const url = `/api/data/getLocations?forceProximitySearch=${forceProximitySearch}&geoSearchTerm=${geoLocationSearch}${withJobsOnly ? '&withJobsOnly=true' : ''}`;\r\n const config = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json; charset=utf-8'\r\n }\r\n };\r\n\r\n await fetch(url, config)\r\n .then(response => {\r\n if (response.status >= 200 && response.status < 400) {\r\n return response;\r\n } else {\r\n throw new Error('Network response was not ok.');\r\n }\r\n })\r\n .then(response => response.json())\r\n .then(searchResults => {\r\n options = this.getLocationOptionsFromResultsArray(searchResults);\r\n\r\n window.postalResults = window.postalResults ?? [];\r\n window.postalResults.push(\r\n {\r\n \"code\": geoLocationSearch,\r\n \"results\": searchResults\r\n });\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n })\r\n\r\n return options;\r\n }\r\n\r\n getLocationOptionsFromResultsArray(searchResults) {\r\n let options = [];\r\n\r\n if (!Array.isArray(searchResults))\r\n return options;\r\n\r\n searchResults.forEach((result) => {\r\n const organization = new Organization(result);\r\n const option = document.createElement(\"option\");\r\n option.text = organization.getAttributeByName('Name');\r\n option.value = organization.Number;\r\n option.setAttribute(\"data-franchise-phone\", organization.offices[0].Phone);\r\n option.setAttribute(\"data-franchise-name\", organization.getAttributeByName('Name'));\r\n option.setAttribute(\"data-franchise-url\", \"/location/\" + organization.Number);\r\n option.setAttribute(\"data-franchise-migrated\", organization.CarePlatform);\r\n option.dataset.Organization = JSON.stringify(result);\r\n\r\n options.push(option);\r\n });\r\n\r\n return options;\r\n }\r\n\r\n async getJobsForFranchise(franchiseNum) {\r\n let jobs = [];\r\n\r\n if (window.franchiseJobs && window.franchiseJobs[franchiseNum]) {\r\n return window.franchiseJobs[franchiseNum];\r\n }\r\n\r\n window.franchiseJobs = window.franchiseJobs ?? [];\r\n\r\n const url = `/api/data/getJobsByFranchise?franchiseNum=${franchiseNum}`;\r\n const config = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json; charset=utf-8'\r\n }\r\n };\r\n\r\n await fetch(url, config)\r\n .then(response => {\r\n if (response.status >= 200 && response.status < 400) {\r\n return response;\r\n } else {\r\n throw new Error('Network response was not ok.');\r\n }\r\n })\r\n .then(response => response.json())\r\n .then(jobResults => {\r\n window.franchiseJobs[franchiseNum] = jobResults;\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n });\r\n\r\n return window.franchiseJobs[franchiseNum] ?? [];\r\n }\r\n}","import { FormHelpers } from \"../../../../../Static/js/Utility/FormHelpers.js\";\r\nimport { Organization } from '/Static/js/Organization/Organization.js';\r\nimport \"/Static/js/Utility/Extensions/StringExtensions.js\";\r\n\r\nclass ContactUsForm {\r\n hasSubmitted = false;\r\n\r\n constructor() {\r\n // Find the Form\r\n this.frmContactUsFormSelector = \".contact-us-form\";\r\n this.frmContactUsForm = document.querySelector(this.frmContactUsFormSelector);\r\n this.contactUsForm = this.frmContactUsForm;\r\n\r\n if (!this.frmContactUsForm) {\r\n return;\r\n }\r\n\r\n this.formHelper = new FormHelpers();\r\n\r\n // Get the Unique Form ID\r\n this.formId = this.frmContactUsForm.getAttribute(\"data-form-id\");\r\n\r\n let queryParams = new URLSearchParams(window.location.search);\r\n\r\n // Set the Application ID\r\n this.applicantIdField = this.frmContactUsForm.querySelector(\"#applid-\" + this.formId);\r\n if (queryParams.has('applid')) {\r\n this.applicantIdField.value = queryParams.get('applid');\r\n }\r\n else if (queryParams.has('tlr_sid')) {\r\n this.applicantIdField.value = queryParams.get('tlr_sid');\r\n }\r\n\r\n // Get Form Attributes\r\n this.maxResultsJobs = this.frmContactUsForm.getAttribute(\"data-max-jobs\");\r\n\r\n // Set the default Timeout for the forms\r\n // Requested by PHD to delay submission to give time for SA360's conversion tracking to fire.\r\n this.defaultTimeout = 1200;\r\n if (window.location.hostname.endsWith(\".ca\")) this.defaultTimeout = 2000;\r\n\r\n // Setup Selectors\r\n this.allFormFields = this.frmContactUsForm.querySelectorAll(\".form-control\");\r\n\r\n this.submitButton = this.frmContactUsForm.querySelector(\".contact-us-form-button\");\r\n this.buttonSpinner = this.frmContactUsForm.querySelector(\".spinner\");\r\n\r\n this.errorDupeSelector = \".contact-us-form-duplicate\";\r\n this.errorDupe = this.frmContactUsForm.querySelector(this.errorDupeSelector);\r\n this.errorServerSelector = \".contact-us-form-error\";\r\n this.errorServer = this.frmContactUsForm.querySelector(this.errorServerSelector);\r\n\r\n this.grpJobIdSelector = \".JobID-group\";\r\n this.grpJobId = this.frmContactUsForm.querySelector(this.grpJobIdSelector);\r\n this.dropDownJobId = this.grpJobId.querySelector(\"select\");\r\n\r\n this.grpFranchiseLocationSelector = \".FranchiseNumber-group\";\r\n this.grpFranchiseLocation = this.frmContactUsForm.querySelector(this.grpFranchiseLocationSelector);\r\n this.dropDownFranchiseLocation = this.grpFranchiseLocation.querySelector(\"select\");\r\n\r\n this.grpFirstName = this.frmContactUsForm.querySelector(\".FirstName-group\");\r\n this.fieldFirstName = this.grpFirstName.querySelector(\"input\");\r\n\r\n this.grpLastName = this.frmContactUsForm.querySelector(\".LastName-group\");\r\n this.fieldLastName = this.grpLastName.querySelector(\"input\");\r\n\r\n this.grpEmail = this.frmContactUsForm.querySelector(\".Email-group\");\r\n this.fieldEmail = this.grpEmail.querySelector(\"input\");\r\n\r\n this.grpPhone = this.frmContactUsForm.querySelector(\".Phone-group\");\r\n this.fieldPhone = this.grpPhone.querySelector(\"input\");\r\n\r\n this.grpPostalCode = this.frmContactUsForm.querySelector(\".PostalCode-group\");\r\n this.fieldPostalCode = this.grpPostalCode.querySelector(\"input\");\r\n this.labelPostalCode = this.grpPostalCode.querySelector(\"label\");\r\n\r\n // Inquiry Type\r\n this.grpInquiryTypeSelector = \".Inquiry_Type-group\";\r\n this.grpInquiryType = this.frmContactUsForm.querySelector(this.grpInquiryTypeSelector);\r\n this.InquiryTypeAllRadios = this.grpInquiryType.querySelectorAll('input');\r\n\r\n this.serviceLegalLanguage = this.frmContactUsForm.querySelector(\".service-legal-disclaimer\");\r\n this.employmentLegalLanguage = this.frmContactUsForm.querySelector(\".employment-legal-disclaimer\");\r\n\r\n ////////////////////////////////////////////////////////\r\n // Listeners to clear Field Validatin once the user attempts to correct the error\r\n this.allFormFields.forEach((field) => {\r\n let fieldGroup = field.parentNode;\r\n field.addEventListener('input', () => {\r\n this.formHelper.clearFieldValidation([field]);\r\n this.formHelper.clearValidationMessages(fieldGroup.querySelectorAll(\".invalid-feedback\"));\r\n });\r\n });\r\n\r\n // Add a keyboard event listener to all radio button labels\r\n const radioLabels = document.querySelectorAll(this.grpInquiryTypeSelector + \" .custom-radio.btn\");\r\n radioLabels.forEach(label => {\r\n label.addEventListener(\"keydown\", (ev) => {\r\n if (ev.keyCode === 13 || ev.keyCode === 32) {\r\n ev.target.click();\r\n }\r\n });\r\n });\r\n\r\n ////////////////////////////////////////////////////////\r\n // Fire Inquiry Type radio button click when parent button control is clicked\r\n this.frmContactUsForm.querySelectorAll(this.grpInquiryTypeSelector + \" .custom-radio.btn\")\r\n .forEach(element => {\r\n element.addEventListener(\"click\", (ev) => {\r\n // Get the Radio Button that was clicked and set it to checked\r\n let radio = element.querySelector(\"input\");\r\n if (radio && radio.dataset && radio.dataset.radioValue) { \r\n this.setInquiryType(radio.dataset.radioValue);\r\n }\r\n });\r\n });\r\n\r\n // Setup form after page load\r\n this.makeFormUIAdjustments(queryParams);\r\n\r\n ////////////////////////////////////////////////////////\r\n // A Franchise Location has been selected.\r\n // Note: The Franchise Location DD only appears on Corporate Pages\r\n this.dropDownFranchiseLocation.addEventListener(\"change\", async (ev) => {\r\n\r\n // Get Jobs from the API\r\n await this.updateJobsDropDown();\r\n\r\n // If Jobs has been selected and the jobs drop down is still hidden, show it\r\n if (this.getInquiryType() === \"employment\" && this.grpJobId.classList.contains(\"d-none\")) {\r\n this.formHelper.showFormGroup(this.grpJobId);\r\n this.resetLegalLanguage();\r\n }\r\n\r\n if (this.dropDownFranchiseLocation.selectedIndex > 0) {\r\n // Set the Internal Error Messages in case we need them\r\n let franchiseName = this.dropDownFranchiseLocation.options[this.dropDownFranchiseLocation.selectedIndex].getAttribute(\"data-franchise-name\");\r\n let franchiseUrl = this.dropDownFranchiseLocation.options[this.dropDownFranchiseLocation.selectedIndex].getAttribute(\"data-franchise-url\");\r\n let franchisePhone = this.dropDownFranchiseLocation.options[this.dropDownFranchiseLocation.selectedIndex].getAttribute(\"data-franchise-phone\");\r\n this.formHelper.updateInternalErrorMsg(this.errorDupe, franchiseName, franchiseUrl, franchisePhone);\r\n this.formHelper.updateInternalErrorMsg(this.errorServer, franchiseName, franchiseUrl, franchisePhone);\r\n\r\n let isCarePlatform = this.dropDownFranchiseLocation.options[this.dropDownFranchiseLocation.selectedIndex].getAttribute(\"data-franchise-migrated\");\r\n let carePlatformMsg = document.querySelector(\".carePlatformMsg\");\r\n if (carePlatformMsg !== null) {\r\n if (isCarePlatform === \"true\" || isCarePlatform === true) {\r\n carePlatformMsg.classList.remove(\"d-none\");\r\n } else {\r\n carePlatformMsg.classList.add(\"d-none\");\r\n }\r\n }\r\n\r\n // Set the Drop Down Text\r\n if ((isCarePlatform === \"true\" || isCarePlatform === true) && this.getInquiryType() === \"employment\") {\r\n this.submitButton.innerHTML = this.submitButton.innerHTML.replace('Submit', 'Complete Application on honorcare.com');\r\n } else {\r\n this.submitButton.innerHTML = this.submitButton.innerHTML.replace('Complete Application on honorcare.com', 'Submit');\r\n }\r\n }\r\n });\r\n\r\n ////////////////////////////\r\n // Handle valid Postal Codes, searching for Franchise Locations\r\n // Note: The Postal Code Input only appears on Corporate Pages\r\n // TODO - This is causing the validation error to trigger too quickly, adjust\r\n /////////////////////// => {\r\n this.fieldPostalCode.addEventListener(\"input\", async (ev) => {\r\n // Check a valid Postal Code\r\n if (this.formHelper.isValidPostalCode(this.fieldPostalCode.value)) {\r\n // Update the Franchise Locations Drop Down\r\n await this.updateFranchiseLocationsDropDown();\r\n\r\n // Clear the form validation\r\n this.formHelper.clearFormGroupValidation(this.frmContactUsForm, this.grpFranchiseLocationSelector);\r\n this.formHelper.clearFormGroupValidation(this.frmContactUsForm, this.grpJobIdSelector);\r\n\r\n // reset the Drop Down selection\r\n this.dropDownFranchiseLocation.dispatchEvent(new Event(\"change\"));\r\n } else {\r\n // We don't have a valid Postal Code, make sure the Franchise Location & Jobs drop down is hidden.\r\n this.formHelper.hideFormGroup(this.grpFranchiseLocation);\r\n this.formHelper.hideFormGroup(this.grpJobId);\r\n }\r\n\r\n // Reset the Legal Language\r\n this.resetLegalLanguage();\r\n });\r\n\r\n ////////////////////////////////////////////////////////\r\n // Form Submission\r\n ////////////////////////////////////////////////////////\r\n this.submitButton.addEventListener(\"click\", (ev) => { ev.preventDefault(); this.formHelper.disableFormButton(this.submitButton); });\r\n this.submitButton.addEventListener(\"click\", (ev) => this.submitForm(ev), { once: true });\r\n }\r\n\r\n async makeFormUIAdjustments(queryParams) {\r\n ////////////////////////////////////////////////////////\r\n // Form & UI Adjustments once Window is fully loaded \r\n /////////////////////////////////////////////////////////////////////////////////\r\n // Sent to Form by Location Search Page (only fires on corp page), reset based on Selected Franchise\r\n if (queryParams.has(\"fid\") && queryParams.has(\"type\") && window.settings.organization.Number == \"1\") {\r\n // Get the Franchise Details from the Franchise Number\r\n let fid = queryParams.get('fid');\r\n\r\n if (!queryParams.has('zip')) {\r\n await fetch(`/api/organization/getSingle/?orgNumber=${fid}`)\r\n .then(response => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n throw new Error(`HTTP Error Status: ${response.status}`);\r\n }\r\n })\r\n .then(async (currentFranchise) => {\r\n // Set the Postal Code as the Franchise Office's Postal Code\r\n this.fieldPostalCode.value = currentFranchise.Offices[0].PostalCode;\r\n\r\n // Set the Inquiry Type\r\n if (queryParams.has(\"type\")) {\r\n this.setInquiryType(queryParams.get(\"type\"));\r\n }\r\n\r\n // Update the Franchise Locations Drop Down\r\n await this.updateFranchiseLocationsDropDown(fid);\r\n\r\n // Reset the Legal Language\r\n this.resetLegalLanguage();\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n });\r\n }\r\n else {\r\n // Set the Postal Code as the Franchise Office's Postal Code\r\n this.fieldPostalCode.value = queryParams.get(\"zip\");\r\n\r\n // Set the Inquiry Type\r\n if (queryParams.has(\"type\")) {\r\n this.setInquiryType(queryParams.get(\"type\"));\r\n }\r\n\r\n // Update the Franchise Locations Drop Down\r\n let fid = queryParams.get(\"fid\");\r\n await this.updateFranchiseLocationsDropDown(fid);\r\n\r\n // Reset the Legal Language\r\n this.resetLegalLanguage();\r\n }\r\n }\r\n\r\n ///////////////////////////////////////////////////////////////////\r\n // Adjust the form if we are on a Franchise Site home Page\r\n if (window.settings.organization.Number != \"1\") {\r\n\r\n // Set the Postal Code as the Franchise Office's Postal Code\r\n this.fieldPostalCode.value = window.settings.organization.Offices[0].PostalCode ?? \"\";\r\n\r\n // Create a Franchise Location option from the current Franchise and auto select it\r\n let option = this.getCurrentFranchiseDropDown();\r\n this.dropDownFranchiseLocation.add(option);\r\n this.dropDownFranchiseLocation.selectedIndex = 1;\r\n\r\n // Auto Populate the Franchise's Jobs\r\n await this.updateJobsDropDown();\r\n\r\n // Set the Inquiry Type based on what is currently selected\r\n if (this.getInquiryType()) {\r\n this.setInquiryType(this.getInquiryType());\r\n }\r\n\r\n // If Job is selected, then show the jobs\r\n this.resetLegalLanguage();\r\n\r\n // Set the Internal Error Messages in case we need them\r\n let franchiseName = window.settings.organization.Name;\r\n let franchiseUrl = window.settings.organization.Canonical;\r\n let franchisePhone = window.settings.organization.Offices[0].Phone;\r\n this.formHelper.updateInternalErrorMsg(this.errorDupe, franchiseName, franchiseUrl, franchisePhone);\r\n this.formHelper.updateInternalErrorMsg(this.errorServer, franchiseName, franchiseUrl, franchisePhone);\r\n\r\n // Hide the Franchise Drop Down\r\n this.formHelper.hideFormGroup(this.grpFranchiseLocation);\r\n }\r\n else {\r\n ///////////////////////////////////////////////////////////////////\r\n // Adjust the form when a visitor uses the back button, set the drop downs back up \r\n if (this.formHelper.isValidPostalCode(this.fieldPostalCode.value)) {\r\n // Update the Franchise Locations Drop Down\r\n await this.updateFranchiseLocationsDropDown();\r\n } else {\r\n // We don't have a valid Postal Code, make sure the Franchise Location & Jobs drop down is hidden.\r\n this.formHelper.hideFormGroup(this.grpFranchiseLocation);\r\n this.formHelper.hideFormGroup(this.grpJobId);\r\n }\r\n\r\n // Set the Inquiry Type\r\n if (this.getInquiryType()) {\r\n this.setInquiryType(this.getInquiryType());\r\n }\r\n\r\n // Reset the Legal Language\r\n this.resetLegalLanguage();\r\n }\r\n }\r\n\r\n getCurrentFranchiseDropDown() {\r\n let organization = new Organization(window.settings.organization);\r\n let option = document.createElement(\"option\");\r\n option.text = organization.getAttributeByName('Name');\r\n option.value = organization.Number;\r\n\r\n option.setAttribute(\"data-franchise-phone\", organization.offices[0].Phone);\r\n option.setAttribute(\"data-franchise-name\", organization.getAttributeByName('Name'));\r\n option.setAttribute(\"data-franchise-url\", \"/location/\" + organization.Number);\r\n option.setAttribute(\"data-franchise-migrated\", organization.CarePlatform);\r\n\r\n return option;\r\n }\r\n\r\n getInquiryType() {\r\n let ddInquiryType = this.grpInquiryType.querySelector(\"input:checked\");\r\n\r\n if (ddInquiryType && ddInquiryType.dataset) {\r\n return ddInquiryType.dataset.radioValue || null;\r\n }\r\n }\r\n\r\n setInquiryType(type) {\r\n if (!type) return;\r\n else if (type.toLowerCase() === \"care\") type = \"service\";\r\n else if (type.toLowerCase() === \"job\") type = \"employment\";\r\n\r\n let radiobutton = this.grpInquiryType.querySelector(\".type-\" + type);\r\n if (radiobutton != null) {\r\n // First Unset all types\r\n this.InquiryTypeAllRadios.forEach((radio) => {\r\n radio.checked = false;\r\n });\r\n\r\n // Set the Active Type and its styles\r\n radiobutton.checked = true;\r\n\r\n // Set the Active Type's style\r\n let parentDiv = radiobutton.parentNode;\r\n parentDiv.classList.add(\"btn-primary\");\r\n\r\n // Unset all other Inquiry types\r\n this.frmContactUsForm.querySelectorAll(this.grpInquiryTypeSelector + \" input:not(:checked)\").forEach(sibling => {\r\n sibling.parentElement.classList.remove(\"btn-primary\");\r\n });\r\n\r\n // Show/Hide Job Drop Down and specific Legal Language\r\n if (this.getInquiryType() === \"employment\" && this.dropDownFranchiseLocation.selectedIndex > 0) {\r\n // Show the Job Drop Down\r\n this.formHelper.showFormGroup(this.grpJobId);\r\n this.formHelper.showFormGroup(this.employmentLegalLanguage);\r\n this.formHelper.hideFormGroup(this.serviceLegalLanguage);\r\n } else {\r\n // Hide the Job Drop Down\r\n this.formHelper.hideFormGroup(this.grpJobId);\r\n this.formHelper.hideFormGroup(this.employmentLegalLanguage);\r\n this.formHelper.showFormGroup(this.serviceLegalLanguage);\r\n }\r\n\r\n // Update the Postal Code Label with Inquiry Type specific labels\r\n if (this.labelPostalCode != null && this.frmContactUsForm.hasAttribute(\"data-care-label\") && this.frmContactUsForm.hasAttribute(\"data-job-label\")) {\r\n let newLabel = null;\r\n\r\n if (this.getInquiryType() === \"employment\") {\r\n newLabel = this.frmContactUsForm.getAttribute(\"data-job-label\");\r\n } else {\r\n newLabel = this.frmContactUsForm.getAttribute(\"data-care-label\");\r\n }\r\n if (newLabel != null && newLabel.trim() !== \"\") {\r\n this.labelPostalCode.textContent = newLabel;\r\n }\r\n }\r\n\r\n if (this.dropDownFranchiseLocation.selectedIndex > 0) {\r\n // Set the Drop Down Text\r\n let isCarePlatform = this.dropDownFranchiseLocation[this.dropDownFranchiseLocation.selectedIndex].getAttribute(\"data-franchise-migrated\");\r\n if ((isCarePlatform === \"true\" || isCarePlatform === true) && this.getInquiryType() === \"employment\") {\r\n this.submitButton.innerHTML = this.submitButton.innerHTML.replace('Submit', 'Complete Application on honorcare.com');\r\n } else {\r\n this.submitButton.innerHTML = this.submitButton.innerHTML.replace('Complete Application on honorcare.com', 'Submit');\r\n }\r\n }\r\n\r\n // Force a Postal Code Search\r\n this.fieldPostalCode.dispatchEvent(new Event(\"input\"));\r\n\r\n // Clear out Validation on Inquiry Type\r\n this.formHelper.markRadioFieldValid(this.grpInquiryType);\r\n this.formHelper.clearFormGroupValidation(this.frmContactUsForm, this.grpInquiryTypeSelector);\r\n }\r\n else {\r\n console.log(\"Could not find inquiry type of \" + type);\r\n }\r\n }\r\n\r\n // Validate the Form prior to submission\r\n async validateForm_ClientSide() {\r\n let validSubmission = true;\r\n\r\n // Reset the Form Validation Styles for each Input/Select field\r\n this.formHelper.clearFieldValidation(this.allFormFields);\r\n\r\n // Reset the Form Validation Text & Styles for each Error Message\r\n this.formHelper.clearValidationMessages(this.frmContactUsForm.querySelectorAll(\".invalid-feedback\"));\r\n\r\n ////////////////////////////////////////////////////////////////////////\r\n // Start: Special Field Validation for Drop Down Menus\r\n if (this.getInquiryType() !== \"employment\" && this.getInquiryType() !== \"service\") {\r\n this.formHelper.markRadioFieldInvalid(this.grpInquiryType, \"Please choose either option, Care or Job.\");\r\n validSubmission = false;\r\n }\r\n if (this.dropDownFranchiseLocation !== null &&\r\n this.dropDownFranchiseLocation.selectedIndex < 1 &&\r\n this.getInquiryType() &&\r\n this.getInquiryType().trim().length > 0) {\r\n this.formHelper.markSelectFieldInvalid(this.grpFranchiseLocation, \"Please choose a Home Instead Location.\");\r\n validSubmission = false;\r\n }\r\n if (this.dropDownJobId !== null && this.dropDownJobId.selectedIndex < 1 && this.getInquiryType() === \"employment\") {\r\n this.formHelper.markSelectFieldInvalid(this.grpJobId, \"Please choose a Job at Home Instead.\");\r\n validSubmission = false;\r\n }\r\n if (!this.formHelper.isValidPostalCode(this.fieldPostalCode.value)) {\r\n this.formHelper.markInputFieldInvalid(this.grpPostalCode, \"Please enter a valid Postal Code.\");\r\n validSubmission = false;\r\n }\r\n // If a Corporate Form and no Franchise Location is selected, then show an error (The zero index is \"Please Select a Location\")\r\n if (this.dropDownFranchiseLocation.selectedIndex < 1 && window.settings.organization.Number == \"1\") {\r\n this.formHelper.markInputFieldInvalid(this.grpPostalCode, \"Sorry, but there were no locations found for your search. Try to double-check the postal code for typos.\");\r\n validSubmission = false;\r\n }\r\n if (this.fieldFirstName.value.trim() === \"\") {\r\n this.formHelper.markInputFieldInvalid(this.grpFirstName, \"Missing Required First Name.\");\r\n validSubmission = false;\r\n }\r\n if (this.fieldLastName.value.trim() === \"\") {\r\n this.formHelper.markInputFieldInvalid(this.grpLastName, \"Missing Required Last Name.\");\r\n validSubmission = false;\r\n }\r\n if (!this.formHelper.isValidPhone(this.fieldPhone.value)) {\r\n this.formHelper.markInputFieldInvalid(this.grpPhone, \"Please Enter your Phone Number.\");\r\n validSubmission = false;\r\n }\r\n if (!this.formHelper.isValidEmail(this.fieldEmail.value)) {\r\n this.formHelper.markInputFieldInvalid(this.grpEmail, \"Please enter a valid email address.\");\r\n validSubmission = false;\r\n }\r\n\r\n let formIntent = (this.getInquiryType() == \"service\") ? \"service\" : \"career\";\r\n let eventName = (this.getInquiryType() == \"service\") ? \"contact-us-form-submit\" : \"career-form-submit\";\r\n\r\n // Reset the Form Validation Text & Styles for each Error Message\r\n if (validSubmission == false || this.frmContactUsForm.querySelectorAll(\".form-group .is-invalid\").length > 0) {\r\n console.log(\"Found a Validation Error\");\r\n this.formHelper.focusOnFirstError(this.frmContactUsForm);\r\n await this.formHelper.gtmTrackFormSubmission(eventName, this.dropDownFranchiseLocation.value,\r\n this.dropDownJobId.value, this.frmContactUsForm.id, formIntent, \"validation-error\");\r\n }\r\n\r\n return validSubmission;\r\n }\r\n\r\n // Reset the Legal Language\r\n resetLegalLanguage() {\r\n if (this.getInquiryType() === \"employment\") {\r\n this.formHelper.showFormGroup(this.employmentLegalLanguage);\r\n this.formHelper.hideFormGroup(this.serviceLegalLanguage);\r\n } else {\r\n this.formHelper.showFormGroup(this.serviceLegalLanguage);\r\n this.formHelper.hideFormGroup(this.employmentLegalLanguage);\r\n }\r\n }\r\n\r\n redirectToThankYouPage(redirectPage) {\r\n setTimeout(() => {\r\n console.log(\"Redirecting to Thank You Page\");\r\n window.location.href = redirectPage;\r\n }, this.defaultTimeout);\r\n };\r\n\r\n async submitForm(ev) {\r\n // Prevent the normal Form Submission Process\r\n ev.preventDefault();\r\n\r\n // GTM DataLayer variable Setup\r\n window.dataLayer = window.dataLayer || [];\r\n\r\n // Disable the button and show the spinner\r\n this.formHelper.disableFormButton(this.submitButton);\r\n\r\n // Obtain Form details & data\r\n let hiscFormData = new FormData(this.frmContactUsForm);\r\n\r\n // Add the OptIn values to the FormData\r\n hiscFormData.set(\"OptInEmail\", true);\r\n hiscFormData.set(\"OptInSms\", (hiscFormData.get(\"OptInSms\") == \"True\") ? true : false);\r\n\r\n let isValid = await this.validateForm_ClientSide();\r\n\r\n // Client Side validation on the Form prior to submission\r\n if (!isValid) {\r\n // Invalid Submission, return the user to the form to correct the errors\r\n this.formHelper.enableFormButton(this.submitButton, this.buttonSpinner);\r\n this.submitButton.addEventListener(\"click\", (ev) => this.submitForm(ev), { once: true });\r\n return;\r\n }\r\n\r\n const json = this.formHelper.ConvertFormDataToJson(hiscFormData); //, token\r\n\r\n ////////////////////////////////////////////\r\n // Process a Care Submission\r\n if (this.getInquiryType() === \"service\") {\r\n await fetch(\"/api/data/careLead\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=utf-8\"\r\n },\r\n body: json\r\n })\r\n .then(response => {\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! Status: ${response.status}`);\r\n }\r\n return response.json();\r\n })\r\n .then(async (parsedResult) => {\r\n if (!parsedResult.isError) {\r\n await this.handleServiceLeadSuccess(parsedResult);\r\n } else {\r\n await this.handleServiceLeadError(parsedResult);\r\n }\r\n })\r\n .catch(async (error) => {\r\n console.log(\"An Exception Occurred: \", error);\r\n await this.formHelper.gtmTrackFormSubmission(\"contact-us-form-submit\", this.dropDownFranchiseLocation.value,\r\n this.dropDownJobId.value, this.frmContactUsForm.id, \"service\", \"exception-error\");\r\n })\r\n .then(() => {\r\n // Mark form as validated and focus on the first error\r\n this.frmContactUsForm.classList.add(\"was-validated\");\r\n this.formHelper.focusOnFirstError(this.frmContactUsForm);\r\n\r\n let cookie = false;// this.formHelper.getCookie(\"submission-\" + this.formId);\r\n if (cookie || this.hasSubmitted) {\r\n return;\r\n }\r\n\r\n // Re-Enable the button and hide the spinner\r\n this.formHelper.enableFormButton(this.submitButton, this.buttonSpinner);\r\n this.submitButton.addEventListener(\"click\", (ev) => this.submitForm(ev), { once: true });\r\n });\r\n }\r\n ////////////////////////////////////////////\r\n // Process a Career Lead Submission\r\n else {\r\n await fetch(\"/api/data/careerLead\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=utf-8\"\r\n },\r\n body: json\r\n })\r\n .then(response => {\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! Status: ${response.status}`);\r\n }\r\n return response.json();\r\n })\r\n .then(async (parsedResult) => {\r\n if (!parsedResult.isError) {\r\n await this.handleCareerLeadSuccess(parsedResult);\r\n } else {\r\n await this.handleCareerLeadError(parsedResult);\r\n }\r\n })\r\n .catch(async (error) => {\r\n await this.formHelper.gtmTrackFormSubmission(\"career-form-submit\", this.dropDownFranchiseLocation.value,\r\n this.dropDownJobId.value, this.frmContactUsForm.id, \"career\", \"exception-error\");\r\n })\r\n .then(() => {\r\n // Mark form as validated and focus on the first error\r\n this.frmContactUsForm.classList.add(\"was-validated\");\r\n this.formHelper.focusOnFirstError(this.frmContactUsForm);\r\n\r\n let cookie = false;// this.formHelper.getCookie(\"submission-\" + this.formId);\r\n if (cookie || this.hasSubmitted) {\r\n return;\r\n }\r\n\r\n // Re-Enable the button and hide the spinner\r\n this.formHelper.enableFormButton(this.submitButton, this.buttonSpinner);\r\n this.submitButton.addEventListener(\"click\", (ev) => this.submitForm(ev), { once: true });\r\n });\r\n }\r\n }\r\n\r\n async handleServiceLeadSuccess(parsedResult) {\r\n this.hasSubmitted = true;\r\n\r\n // Set submitted trigger to true\r\n this.formHelper.setCookie(\"submission-\" + this.formId, \"true\", 450);\r\n\r\n // Track Service Lead success in Content Recommendations\r\n if (typeof _iaq !== 'undefined') {\r\n try {\r\n _iaq.push(['goal', 'ServiceInquiry']);\r\n _iaq.push(['track', 'convert']);\r\n } catch (e) {\r\n console.log(\"_iaq error on success\", e);\r\n }\r\n }\r\n else {\r\n console.log(\"_iaq doesn't exist\");\r\n }\r\n\r\n // Track Service Lead success in Optimizely Experiments\r\n try {\r\n window['optimizely'] = window['optimizely'] || [];\r\n window['optimizely'].push({\r\n type: \"event\",\r\n eventName: \"service_lead_success\"\r\n });\r\n } catch (e) {\r\n console.log(\"OptiExp error on Serivce Lead success\", e);\r\n }\r\n\r\n // Determine the Thank You Page for Care Submissions\r\n let thankYouPage = this.frmContactUsForm.getAttribute(\"data-result-page\");\r\n thankYouPage = thankYouPage || `/location/${this.dropDownFranchiseLocation.value}/thank-you`;\r\n\r\n // Track Service Lead success in Google Tag manager\r\n try {\r\n let payload = {\r\n 'franchise_number': this.dropDownFranchiseLocation.value,\r\n 'form_id': this.frmContactUsForm.id,\r\n 'form_submission_intent': \"service\",\r\n 'form_submission_result': \"success\",\r\n 'page_url': window.location.href,\r\n 'event': \"contact-us-form-submit\",\r\n 'eventCallback': () => {\r\n this.redirectToThankYouPage(thankYouPage);\r\n }\r\n };\r\n\r\n // Fire dataLayer.push(payload)\r\n if (window.settings.gtm_enabled) {\r\n window.dataLayer.push(payload);\r\n }\r\n if (window.settings.segment_enabled) {\r\n await analytics.track(payload.event, payload);\r\n\r\n if (payload.eventCallback) {\r\n payload.eventCallback();\r\n }\r\n }\r\n } catch (e) {\r\n console.log(\"gtm error (success)\", e);\r\n this.redirectToThankYouPage(thankYouPage);\r\n }\r\n }\r\n\r\n async handleServiceLeadError(parsedResult) {\r\n const parsedMessage = parsedResult.message.toLowerCase();\r\n const isErrorDueToDuplicate = parsedMessage.includes(\"duplicate\");\r\n const isErrorInternal = parsedMessage.includes(\"fail\");\r\n let submissionResult;\r\n\r\n // A Duplicate Lead or Server Error occurred\r\n if (isErrorDueToDuplicate || isErrorInternal) {\r\n if (isErrorDueToDuplicate)\r\n this.hasSubmitted = true;\r\n\r\n submissionResult = isErrorDueToDuplicate ? \"duplicate\" : \"server-error\";\r\n\r\n let formFields = this.frmContactUsForm.querySelector(\".form-box\");\r\n formFields.style.display = \"none\";\r\n\r\n let requiredMsg = this.frmContactUsForm.querySelector(\".form-fields-required\");\r\n requiredMsg.style.display = \"none\";\r\n\r\n let errorBlockClass = isErrorDueToDuplicate ? this.errorDupeSelector : this.errorServerSelector;\r\n let errorBlock = this.frmContactUsForm.querySelector(errorBlockClass);\r\n errorBlock.style.display = \"block\";\r\n }\r\n // Validation Error occurred\r\n else {\r\n submissionResult = \"validation-error\";\r\n this.formHelper.processFormErrors(this.frmContactUsForm, parsedResult.Errors);\r\n }\r\n\r\n // Track the Error result in GTM\r\n await this.formHelper.gtmTrackFormSubmission(\"contact-us-form-submit\", this.dropDownFranchiseLocation.value,\r\n this.dropDownJobId.value, this.frmContactUsForm.id, \"service\", submissionResult);\r\n }\r\n\r\n handleCareerLeadSuccess(parsedResult) {\r\n this.hasSubmitted = true;\r\n\r\n // Get the correct full Job Application url\r\n let selectedJobUrl = this.dropDownJobId.options[this.dropDownJobId.selectedIndex].getAttribute(\"data-job-url\");\r\n\r\n // Set submitted trigger to true\r\n this.formHelper.setCookie(\"submission-\" + this.formId, \"true\", 450);\r\n\r\n // Track Career Lead success in Content Recommendations\r\n if (typeof _iaq !== 'undefined') {\r\n try {\r\n _iaq.push(['goal', 'EmploymentInquiry']);\r\n _iaq.push(['track', 'convert']);\r\n } catch (e) {\r\n console.log(\"_iaq error on employment success\", e);\r\n }\r\n }\r\n else {\r\n console.log(\"_iaq doesn't exist\");\r\n }\r\n\r\n // Track Career Lead success in Optimizely Experiments\r\n try {\r\n window['optimizely'] = window['optimizely'] || [];\r\n window['optimizely'].push({\r\n type: \"event\",\r\n eventName: \"career_lead_success\"\r\n });\r\n } catch (e) {\r\n console.log(\"OptiExp error on employment success\", e);\r\n }\r\n\r\n // Track Career Lead success in Google Tag Manager\r\n try {\r\n window.dataLayer.push({\r\n 'franchise_number': this.dropDownFranchiseLocation.value,\r\n 'form_id': this.frmContactUsForm.id,\r\n 'job_id': this.dropDownJobId.value,\r\n 'applicant_id': this.applicantIdField.value,\r\n 'form_submission_intent': \"career\",\r\n 'form_submission_result': \"success\",\r\n 'page_url': window.location.href,\r\n 'event': \"career-form-submit\",\r\n 'eventCallback': () => {\r\n this.redirectToThankYouPage(selectedJobUrl);\r\n }\r\n });\r\n } catch (e) {\r\n console.log(\"gtm error (success)\", e);\r\n this.redirectToThankYouPage(selectedJobUrl);\r\n }\r\n };\r\n\r\n async handleCareerLeadError(parsedResult) {\r\n const parsedMessage = parsedResult.message.toLowerCase();\r\n const isErrorDueToDuplicate = parsedMessage.includes(\"duplicate\");\r\n const isErrorInternal = parsedMessage.includes(\"fail\") || parsedMessage.includes(\"campaign\");\r\n let submissionResult;\r\n\r\n // A Server Error Occurred\r\n if (isErrorInternal) {\r\n submissionResult = \"server-error\";\r\n\r\n let formFields = this.frmContactUsForm.querySelector(\".form-box\");\r\n formFields.style.display = \"block\";\r\n\r\n let requiredMsg = this.frmContactUsForm.querySelector(\".form-fields-required\");\r\n requiredMsg.style.display = \"none\";\r\n\r\n let errorBlockClass = this.errorServerSelector;\r\n let errorBlock = this.frmContactUsForm.querySelector(errorBlockClass);\r\n errorBlock.style.display = \"block\";\r\n }\r\n // A Duplicate Lead Occurred\r\n else if (isErrorDueToDuplicate) {\r\n this.hasSubmitted = true;\r\n submissionResult = \"duplicate\";\r\n\r\n // Forward to the correct full Job Application Form Page\r\n let selectedJobUrl = this.dropDownJobId.options[this.dropDownJobId.selectedIndex].getAttribute(\"data-job-url\");\r\n\r\n // Set submitted trigger to true\r\n this.formHelper.setCookie(\"submission-\" + this.formId, \"true\", 450);\r\n\r\n // Track Career Lead success in Content Recommendations\r\n if (typeof _iaq !== 'undefined') {\r\n try {\r\n _iaq.push(['goal', 'EmploymentInquiry']);\r\n _iaq.push(['track', 'convert']);\r\n } catch (e) {\r\n console.log(\"_iaq error on employment success\", e);\r\n }\r\n }\r\n else {\r\n console.log(\"_iaq doesn't exist\");\r\n }\r\n\r\n // Track Career Lead success in Optimizely Experiments\r\n try {\r\n window['optimizely'] = window['optimizely'] || [];\r\n window['optimizely'].push({\r\n type: \"event\",\r\n eventName: \"career_lead_success\"\r\n });\r\n } catch (e) {\r\n console.log(\"OptiExp error on employment duplicate\", e);\r\n }\r\n\r\n // Track Career Lead duplicate in Content Recommendations\r\n try {\r\n window.dataLayer.push({\r\n 'franchise_number': this.dropDownFranchiseLocation.value,\r\n 'form_id': this.frmContactUsForm.id,\r\n 'job_id': this.dropDownJobId.value,\r\n 'applicant_id': this.applicantIdField.value,\r\n 'form_submission_intent': \"career\",\r\n 'form_submission_result': \"duplicate\",\r\n 'page_url': window.location.href,\r\n 'event': \"career-form-submit\",\r\n 'eventCallback': () => {\r\n this.redirectToThankYouPage(selectedJobUrl);\r\n }\r\n });\r\n } catch (e) {\r\n console.log(\"gtm error (success)\", e);\r\n this.redirectToThankYouPage(selectedJobUrl);\r\n }\r\n }\r\n // Validation Errors Found\r\n else {\r\n submissionResult = \"validation-error\";\r\n this.formHelper.processFormErrors(this.frmContactUsForm, parsedResult.Errors);\r\n }\r\n\r\n await this.formHelper.gtmTrackFormSubmission(\"career-form-submit\", this.dropDownFranchiseLocation.value,\r\n this.dropDownJobId.value, this.frmContactUsForm.id, \"career\", submissionResult);\r\n }\r\n\r\n // Update the Franchise Location Dropdown\r\n async updateFranchiseLocationsDropDown(franNumPreselect = \"\") {\r\n const maxResults = 15;\r\n\r\n // Franchise Location Drop Down\r\n this.formHelper.clearDropDown(this.dropDownFranchiseLocation, 0);\r\n\r\n // On a Franchise Page, only show that Franchise\r\n if (window.settings?.organization?.Number && window.settings.organization.Number != \"1\") {\r\n // Create a Franchise Location option from the current Franchise and auto select it\r\n let options = this.getCurrentFranchiseDropDown();\r\n this.dropDownFranchiseLocation.add(options);\r\n this.dropDownFranchiseLocation.selectedIndex = 1;\r\n\r\n return;\r\n }\r\n // On a Corporate Page, allow for a Location Search\r\n else {\r\n let options = await this.formHelper.getFranchiseLocationOptions(this.fieldPostalCode.value, false);\r\n\r\n const numRecords = options.length > maxResults ? maxResults : options.length;\r\n\r\n for (let i = 0; i < numRecords; i++)\r\n this.dropDownFranchiseLocation.add(options[i]);\r\n\r\n // Show the Franchise Location drop down\r\n this.formHelper.showFormGroup(this.grpFranchiseLocation);\r\n\r\n if (options.length > 0) {\r\n // Select the First Franchise Location Option\r\n if (franNumPreselect !== \"\") this.dropDownFranchiseLocation.value = franNumPreselect;\r\n else this.dropDownFranchiseLocation.selectedIndex = 1;\r\n\r\n // Set the Internal Error Messages in case we need them\r\n let thisOrg = new Organization(JSON.parse(this.dropDownFranchiseLocation.options[this.dropDownFranchiseLocation.selectedIndex].dataset.Organization));\r\n this.formHelper.updateInternalErrorMsg(this.errorDupe, thisOrg.getAttributeByName('Name'),\r\n \"/location/\" + thisOrg.Number, thisOrg.offices[0].Phone);\r\n this.formHelper.updateInternalErrorMsg(this.errorServer, thisOrg.getAttributeByName('Name'),\r\n \"/location/\" + thisOrg.Number, thisOrg.offices[0].Phone);\r\n\r\n if (this.grpJobId !== null) {\r\n // Update the Jobs Drop Down\r\n await this.updateJobsDropDown();\r\n\r\n // Show Locations and/or Jobs depending on the Inquiry Type\r\n if (this.getInquiryType() === \"employment\" && this.dropDownFranchiseLocation.selectedIndex > 0) {\r\n this.formHelper.showFormGroup(this.grpJobId);\r\n } else {\r\n this.formHelper.hideFormGroup(this.grpJobId);\r\n }\r\n }\r\n\r\n if (this.dropDownFranchiseLocation.selectedIndex > 0) {\r\n // Set the Drop Down Text\r\n let isCarePlatform = this.dropDownFranchiseLocation[this.dropDownFranchiseLocation.selectedIndex].getAttribute(\"data-franchise-migrated\");\r\n if ((isCarePlatform === \"true\" || isCarePlatform === true) && this.getInquiryType() === \"employment\") {\r\n this.submitButton.innerHTML = this.submitButton.innerHTML.replace('Submit', 'Complete Application on honorcare.com');\r\n } else {\r\n this.submitButton.innerHTML = this.submitButton.innerHTML.replace('Complete Application on honorcare.com', 'Submit');\r\n }\r\n\r\n let carePlatformMsg = document.querySelector(\".carePlatformMsg\");\r\n if (carePlatformMsg !== null) {\r\n if (isCarePlatform === \"true\" || isCarePlatform === true) {\r\n carePlatformMsg.classList.remove(\"d-none\");\r\n } else {\r\n carePlatformMsg.classList.add(\"d-none\");\r\n }\r\n }\r\n }\r\n } else {\r\n // Handle the No Franchise Found issue\r\n this.formHelper.markInputFieldInvalid(this.grpPostalCode, \"Sorry, but there were no locations found for your search. Try to double-check the postal code for typos.\");\r\n }\r\n }\r\n\r\n }\r\n\r\n // Update the Jobs Drop Down menu\r\n async updateJobsDropDown() {\r\n let numJobsToShow;\r\n\r\n const url = `/api/data/getJobsByFranchise?franchiseNum=${this.dropDownFranchiseLocation.value}`;\r\n await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=utf-8\"\r\n }\r\n })\r\n .then(response => {\r\n if (response.status >= 200 && response.status < 400) {\r\n return response.json();\r\n } else {\r\n throw new Error('Network response was not ok.');\r\n }\r\n })\r\n .then(data => {\r\n this.formHelper.clearDropDown(this.dropDownJobId, 0);\r\n\r\n if (data && data.length > 0) {\r\n numJobsToShow = data.length;\r\n if (this.maxResultsJobs > 0) {\r\n numJobsToShow = data.length > this.maxResultsJobs ? this.maxResultsJobs : data.length;\r\n }\r\n\r\n const urlParams = JSON.parse(this.frmContactUsForm.dataset.urlParams);\r\n\r\n let i = 0;\r\n for (const jobOpp of data) {\r\n // Create the Option with Job Details\r\n const option = document.createElement(\"option\");\r\n option.text = jobOpp.jobTitle;\r\n option.value = jobOpp.jobExternalID;\r\n\r\n let jobURL = jobOpp.jobURL;\r\n\r\n let objUrl = jobURL.parseURL();\r\n objUrl.deduplicateParams('LIFO');\r\n\r\n let paramKeys = Object.keys(urlParams);\r\n for (const key of paramKeys) {\r\n objUrl.insertParam(key, urlParams[key], 0);\r\n }\r\n\r\n objUrl.deduplicateParams();\r\n\r\n let cleanJobURL = objUrl.reconstitute();\r\n\r\n option.setAttribute(\"data-job-url\", cleanJobURL);\r\n option.setAttribute(\"data-job-id\", jobOpp.jobID);\r\n option.setAttribute(\"data-job-ext-id\", jobOpp.jobExternalID);\r\n option.setAttribute(\"data-franchise-number\", jobOpp.franchiseNumber);\r\n //option.setAttribute(\"data-franchise-name\", jobOpp.franchise.franchiseName);\r\n this.dropDownJobId.add(option);\r\n\r\n i++;\r\n if (i >= numJobsToShow)\r\n break;\r\n }\r\n\r\n // Select the First Option\r\n this.dropDownJobId.selectedIndex = 1;\r\n }\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n });\r\n }\r\n\r\n ExistsOnPage() {\r\n return typeof this.contactUsForm !== 'undefined' && this.contactUsForm !== undefined && this.contactUsForm !== null;\r\n }\r\n}\r\nexport default new ContactUsForm();"],"names":["String","prototype","parseURL","params","path","query","hash","url","this","indexOf","substring","split","getHost","match","exec","length","getPath","getHash","getParams","getQuery","setHash","value","setParam","name","Array","push","i","insertParam","index","newParam","unshift","splice","getParam","pair","decodeURIComponent","console","log","hasParam","removeParam","newparams","deduplicateParams","order","toLowerCase","find","p","startsWith","reconstitute","Cleanse","replace","isNullOrWhitespace","trim","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","hasOwnProperty","call","Office","constructor","number","active","isHhc","address","suite","city","stateProvince","postalCode","country","latitude","longitude","phone","created","modified","Number","Active","IsHhc","Address","Suite","City","StateProvince","PostalCode","Country","Latitude","Longitude","Phone","Created","Modified","getFormattedPhoneNumber","formatPhoneNumber","phoneNumber","Attribute","typeName","category","TypeName","Value","Category","Organization","data","Region","Status","Type","Canonical","window","settings","env","isArray","Offices","offices","map","officeData","Attributes","attributes","attrData","CarePlatform","getAttributeByName","attribute","attr","FormHelpers","clearDropDown","dropDown","stopDeletingAt","remove","clearFieldValidation","elementList","forEach","input","classList","clearFormGroupValidation","hiscForm","formGroupSelector","formHelper","querySelectorAll","clearValidationMessages","errorMessage","style","display","textContent","ConvertFormDataToJson","hiscFormData","object","Reflect","has","JSON","stringify","focusOnFirstError","theForm","scroll","firstError","querySelector","setTimeout","focus","firstErrorPosition","getBoundingClientRect","top","headerHeight","header","document","offsetHeight","scrollPosition","scrollBy","left","behavior","async","gtmEvent","franchiseNumber","jobId","formId","formIntent","submissionResult","payload","location","href","gtm_enabled","dataLayer","segment_enabled","analytics","track","event","eventCallback","e","isValidEmail","email","emailClean","test","isValidPhone","phoneNumberClean","isValidPostalCode","postalCodeClean","markInputFieldInvalid","fieldGroup","add","errorMessageContainer","markTextAreaFieldInvalid","markSelectFieldInvalid","markRadioFieldInvalid","field","markRadioFieldValid","processFormErrors","errorList","errObj","fieldSelector","source","formFieldGroup","formField","detail","updateInternalErrorMsg","errorContainer","franchiseName","franchiseUrl","franchisePhone","locationLink","setAttribute","innerHTML","phoneLink","setCookie","maxAgeSeconds","maxAgeSegment","cookie","encodeURI","getCookie","cname","ca","c","charAt","disableFormButton","theButton","disabled","enableFormButton","showFormGroup","formGroup","hideFormGroup","geoLocationSearch","forceProximitySearch","withJobsOnly","options","postalResults","filter","x","code","cachedResults","results","getLocationOptionsFromResultsArray","fetch","method","headers","then","response","status","Error","json","searchResults","catch","error","result","organization","option","createElement","text","dataset","franchiseNum","franchiseJobs","jobResults","hasSubmitted","frmContactUsFormSelector","frmContactUsForm","contactUsForm","getAttribute","queryParams","URLSearchParams","search","applicantIdField","maxResultsJobs","defaultTimeout","hostname","endsWith","allFormFields","submitButton","buttonSpinner","errorDupeSelector","errorDupe","errorServerSelector","errorServer","grpJobIdSelector","grpJobId","dropDownJobId","grpFranchiseLocationSelector","grpFranchiseLocation","dropDownFranchiseLocation","grpFirstName","fieldFirstName","grpLastName","fieldLastName","grpEmail","fieldEmail","grpPhone","fieldPhone","grpPostalCode","fieldPostalCode","labelPostalCode","grpInquiryTypeSelector","grpInquiryType","InquiryTypeAllRadios","serviceLegalLanguage","employmentLegalLanguage","parentNode","addEventListener","label","ev","keyCode","target","click","element","radio","radioValue","setInquiryType","makeFormUIAdjustments","updateJobsDropDown","getInquiryType","contains","resetLegalLanguage","selectedIndex","isCarePlatform","carePlatformMsg","updateFranchiseLocationsDropDown","dispatchEvent","Event","preventDefault","submitForm","once","fid","ok","currentFranchise","getCurrentFranchiseDropDown","Name","ddInquiryType","type","radiobutton","checked","sibling","parentElement","hasAttribute","newLabel","validSubmission","eventName","gtmTrackFormSubmission","id","redirectToThankYouPage","redirectPage","FormData","set","validateForm_ClientSide","body","parsedResult","isError","handleServiceLeadError","handleServiceLeadSuccess","handleCareerLeadError","handleCareerLeadSuccess","_iaq","thankYouPage","parsedMessage","message","isErrorDueToDuplicate","includes","isErrorInternal","errorBlockClass","Errors","selectedJobUrl","franNumPreselect","getFranchiseLocationOptions","numRecords","thisOrg","parse","numJobsToShow","urlParams","jobOpp","jobTitle","jobExternalID","objUrl","jobURL","paramKeys","keys","cleanJobURL","jobID","ExistsOnPage"],"sourceRoot":""}