{"version":3,"file":"Areas/HomeInstead/Static/dist/CustomerServiceForm.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/CustomerServiceForm.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\n\r\nclass CustomerServiceForm {\r\n    constructor() {\r\n        // Find the Form\r\n        this.frmCustomerServiceFormSelector = \".customer-service-form\";\r\n        this.frmCustomerServiceForm = document.querySelector(this.frmCustomerServiceFormSelector);\r\n\r\n        if (!this.frmCustomerServiceForm)\r\n            return;\r\n\r\n        console.log(\"***** CustomerServiceForm is running\");\r\n        this.formHelper = new FormHelpers();\r\n\r\n        // Get the Unique Form ID\r\n        this.formId = this.frmCustomerServiceForm.getAttribute(\"data-form-id\");\r\n\r\n        // Setup Selectors\r\n        this.allFormFields = this.frmCustomerServiceForm.querySelectorAll(\".form-control\");\r\n\r\n        this.submitButton = this.frmCustomerServiceForm.querySelector(\".customer-service-form-button\");\r\n        this.buttonSpinner = this.frmCustomerServiceForm.querySelector(\".spinner\");\r\n\r\n        this.grpFranchiseLocationSelector = \".Franchise_Number-group\";\r\n        this.grpFranchiseLocation = this.frmCustomerServiceForm.querySelector(this.grpFranchiseLocationSelector);\r\n        this.dropDownFranchiseLocation = this.grpFranchiseLocation.querySelector(\"select\");\r\n\r\n        this.grpFirstName = this.frmCustomerServiceForm.querySelector(\".First_Name-group\");\r\n        this.fieldFirstName = this.grpFirstName.querySelector(\"input\");\r\n\r\n        this.grpLastName = this.frmCustomerServiceForm.querySelector(\".Last_Name-group\");\r\n        this.fieldLastName = this.grpLastName.querySelector(\"input\");\r\n\r\n        this.grpEmail = this.frmCustomerServiceForm.querySelector(\".Email_Address-group\");\r\n        this.fieldEmail = this.grpEmail.querySelector(\"input\");\r\n\r\n        this.grpPhone = this.frmCustomerServiceForm.querySelector(\".Phone_Number-group\");\r\n        this.fieldPhone = this.grpPhone.querySelector(\"input\");\r\n\r\n        this.grpPostalCode = this.frmCustomerServiceForm.querySelector(\".Postal_Code-group\");\r\n        this.fieldPostalCode = this.grpPostalCode.querySelector(\"input\");\r\n        this.labelPostalCode = this.grpPostalCode.querySelector(\"label\");\r\n\r\n        this.grpFeedback = this.frmCustomerServiceForm.querySelector(\".Feedback-group\");\r\n        this.fieldFeedback = this.grpFeedback.querySelector(\"textarea\");\r\n        this.labelFeedback = this.grpFeedback.querySelector(\"label\");\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        ////////////////////////////\r\n        // Handle valid Postal Codes, searching for Franchise Locations\r\n        // Note: The Postal Code Input only appears on Corporate Pages\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.frmCustomerServiceForm, this.grpFranchiseLocationSelector);\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            }\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    // 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.frmCustomerServiceForm.querySelectorAll(\".invalid-feedback\"));\r\n\r\n        ////////////////////////////////////////////////////////////////////////\r\n        // Start: Special Field Validation for Drop Down Menus\r\n        if (this.dropDownFranchiseLocation !== null &&\r\n            this.dropDownFranchiseLocation.selectedIndex < 1) {\r\n            this.formHelper.markSelectFieldInvalid(this.grpFranchiseLocation, \"Please choose a Home Instead Location.\");\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 (this.dropDownFranchiseLocation.options.length <= 1) {\r\n            this.formHelper.markInputFieldInvalid(this.grpPostalCode, \"Sorry, but there were no locations found for your search. Try to double-check postal code for typos.\");\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        else if (this.dropDownFranchiseLocation.selectedIndex < 1) {\r\n            this.formHelper.markInputFieldInvalid(this.grpPostalCode, \"Please select the location you're providing feedback for.\");\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        if (this.fieldFeedback.value.trim() === \"\") {\r\n            this.formHelper.markTextAreaFieldInvalid(this.grpFeedback, \"Please enter your feedback.\");\r\n            validSubmission = false;\r\n        }\r\n\r\n        // Reset the Form Validation Text & Styles for each Error Message\r\n        if (validSubmission == false || this.frmCustomerServiceForm.querySelectorAll(\".form-group .is-invalid\").length > 0) {\r\n            console.log(\"Found a Validation Error\");\r\n            this.formHelper.focusOnFirstError(this.frmCustomerServiceForm);\r\n            await this.formHelper.gtmTrackFormSubmission(\"customer-service-form-submit\", this.dropDownFranchiseLocation.value,\r\n                \"\", this.frmCustomerServiceForm.id, \"customer-service\", \"validation-error\");\r\n        }\r\n\r\n        console.log(\"ValidSubmission Complete, result is \", validSubmission);\r\n        return validSubmission;\r\n    }\r\n\r\n    handleCustomerServiceSuccess(parsedResult) {\r\n        this.hasSubmitted = true;\r\n        console.log(\"Starting Valid Customer Service Submission\");\r\n\r\n        // Set submitted trigger to true\r\n        this.formHelper.setCookie(\"submission-\" + this.frmCustomerServiceForm.id + \"-\" + this.dropDownFranchiseLocation.value, \"true\", 450);\r\n\r\n        //let thankYouPage = \"/location/\" + this.dropDownFranchiseLocation.value + \"/thank-you\";\r\n        let thankYouPage = \"/\";\r\n        if (this.frmCustomerServiceForm.dataset.ResultPage && this.frmCustomerServiceForm.dataset.ResultPage !== \"\") {\r\n            thankYouPage = this.frmCustomerServiceForm.dataset.ResultPage;\r\n        }\r\n\r\n        // Track Customer Service success in Content Recommendations\r\n        if (typeof _iaq !== 'undefined') {\r\n            try {\r\n                _iaq.push(['goal', 'CustomerServiceForm']);\r\n                _iaq.push(['track', 'convert']);\r\n            } catch (e) {\r\n                console.log(\"_iaq error on customer service success\", e);\r\n            }\r\n        }\r\n        else {\r\n            console.log(\"_iaq doesn't exist\");\r\n        }\r\n\r\n        // Track Customer Service 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.frmCustomerServiceForm.id,\r\n                'form_submission_intent': \"customer-service\",\r\n                'form_submission_result': \"success\",\r\n                'page_url': window.location.href,\r\n                'event': \"custome-service-form-submit\",\r\n                'eventCallback': () => {\r\n                    window.location.href = (thankYouPage);\r\n                }\r\n            });\r\n        } catch (e) {\r\n            console.log(\"gtm error (success)\", e);\r\n            window.location.href = (thankYouPage);\r\n        }\r\n    }\r\n\r\n    async handleCustomerServiceError(parsedResult) {\r\n        const parsedMessage = parsedResult.message.toLowerCase();\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.frmCustomerServiceForm.querySelector(\".form-box\");\r\n            formFields.style.display = \"block\";\r\n\r\n            let requiredMsg = this.frmCustomerServiceForm.querySelector(\".form-fields-required\");\r\n            requiredMsg.style.display = \"none\";\r\n\r\n            let errorBlockClass = this.errorServerSelector;\r\n            let errorBlock = this.frmCustomerServiceForm.querySelector(errorBlockClass);\r\n            errorBlock.style.display = \"block\";\r\n\r\n            // Remove out\r\n            await this.formHelper.gtmTrackFormSubmission('customer-service-form-submit', this.dropDownFranchiseLocation.value,\r\n               \"\", this.frmCustomerServiceForm.id, 'customer-service', \"server-error\");\r\n        }\r\n        // Validation Errors Found\r\n        else {\r\n            submissionResult = \"validation-error\";\r\n            this.formHelper.processFormErrors(this.frmCustomerServiceForm, parsedResult.Errors);\r\n        }\r\n\r\n        await this.formHelper.gtmTrackFormSubmission(\"customer-service-form-submit\", this.dropDownFranchiseLocation.value,\r\n            \"\", this.frmCustomerServiceForm.id, \"customer-service\", submissionResult);\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        this.formHelper.disableFormButton(this.submitButton);\r\n\r\n        // GTM DataLayer variable Setup\r\n        window.dataLayer = window.dataLayer || [];\r\n\r\n        // Obtain Form details & data\r\n        let hiscFormData = new FormData(this.frmCustomerServiceForm);\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        // Convert Form Data to json string - (Handles multi-select)\r\n        let json = this.formHelper.ConvertFormDataToJson(hiscFormData); //, token\r\n        console.log(\"Starting Customer Service Submission\", json);\r\n\r\n        await fetch(\"/api/data/customerServiceFeedback\", {\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.handleCustomerServiceSuccess(parsedResult);\r\n            } else {\r\n                await this.handleCustomerServiceError(parsedResult);\r\n            }\r\n        })\r\n        .catch(async (error) => {\r\n            console.log(\"An Exception Occurred: \", error);\r\n            await this.formHelper.gtmTrackFormSubmission(\"customer-service-form-submit\", this.dropDownFranchiseLocation.value,\r\n                \"\", this.frmCustomerServiceForm.id, \"customer-service\", \"exception-error\");\r\n        }).then(() => {\r\n            // Mark form as validated and focus on the first error\r\n            this.frmCustomerServiceForm.classList.add(\"was-validated\");\r\n            this.formHelper.focusOnFirstError(this.frmCustomerServiceForm);\r\n\r\n            // Check if the form has been submitted and prevent Submit Button renablement\r\n            let cookie = false;// this.formHelper.getCookie(\"submission-\" + this.jobId + \"-\" + 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    // Update the Franchise Location Drop Down menu\r\n    // TODO make this async\r\n    async updateFranchiseLocationsDropDown() {\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        let options = await this.formHelper.getFranchiseLocationOptions(this.fieldPostalCode.value, true);\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        // Handle the No Franchise Found issue\r\n        if (options.length == 0)\r\n            this.formHelper.markInputFieldInvalid(this.grpPostalCode, \"Sorry, but there were no locations found for your search. Try to double-check postal code for typos.\");\r\n    }\r\n\r\n    ExistsOnPage() {\r\n        return this.frmCustomerServiceForm !== undefined && this.frmCustomerServiceForm !== null;\r\n    }\r\n}\r\nexport default new CustomerServiceForm();"],"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","frmCustomerServiceFormSelector","frmCustomerServiceForm","getAttribute","allFormFields","submitButton","buttonSpinner","grpFranchiseLocationSelector","grpFranchiseLocation","dropDownFranchiseLocation","grpFirstName","fieldFirstName","grpLastName","fieldLastName","grpEmail","fieldEmail","grpPhone","fieldPhone","grpPostalCode","fieldPostalCode","labelPostalCode","grpFeedback","fieldFeedback","labelFeedback","parentNode","addEventListener","updateFranchiseLocationsDropDown","dispatchEvent","Event","ev","preventDefault","submitForm","once","validSubmission","selectedIndex","gtmTrackFormSubmission","id","handleCustomerServiceSuccess","parsedResult","hasSubmitted","thankYouPage","ResultPage","_iaq","parsedMessage","message","includes","errorBlockClass","errorServerSelector","Errors","FormData","validateForm_ClientSide","body","ok","isError","handleCustomerServiceError","getFranchiseLocationOptions","numRecords","ExistsOnPage"],"sourceRoot":""}