{"version":3,"file":"Areas/HomeInstead/Static/dist/LocationManager.js","mappings":"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","sources":["webpack://static/./Static/js/Utility/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/./Areas/HomeInstead/Static/js/Locations/LocationSearchMap.js","webpack://static/./Areas/HomeInstead/Static/js/Locations/LocationSearchList.js","webpack://static/./Static/js/Utility/CookieManager.js","webpack://static/./Static/js/Search/Geolocation.js","webpack://static/./Static/js/Search/SearchBox.js","webpack://static/./Areas/HomeInstead/Static/js/Locations/LocationManager.js"],"sourcesContent":["Object.defineProperty(String.prototype, \"Cleanse\", {\r\n    value: function Cleanse() {\r\n        return this.replace(/[^\\w\\.@!? ,/:+()'´_#*-]/gi, \" \");\r\n    },\r\n    writable: true,\r\n    configurable: true\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 { Office, Attribute, Organization } from '/Static/js/Organization/Organization.js';\r\nexport class LocationSearchMap {\r\n    constructor() {\r\n        let component = this;\r\n        component.scope = document.querySelector(\".hisc-search-map\");\r\n\r\n        if (component.scope) {\r\n            component.googleInitialized = false;\r\n            component.map = undefined;\r\n            component.markers = [];\r\n\r\n            component.placeholderImage = component.scope.querySelector(\".js-map-noresults\");\r\n            component.mapContainerElement = component.scope.querySelector(\".js-map\");\r\n\r\n            document.addEventListener('location-list-item-selected', function (ev) {\r\n                component.Highlight(ev.detail, true);\r\n            });\r\n        }\r\n    }\r\n\r\n    ExistsOnPage() {\r\n        return this.scope !== undefined && this.scope !== null;\r\n    }\r\n\r\n    InitializeMap(callback) {\r\n        var component = this;\r\n\r\n        if (component.googleInitialized) {\r\n            console.log(\"gmap already initialized\");\r\n            return callback();\r\n        }\r\n\r\n        if (component.scope) {\r\n            component.scope.classList.toggle(\"loading\");\r\n            var apiKey = component.scope.getAttribute(\"data-api-key\");\r\n            var mapContainer = component.scope.querySelector(\".js-map\");\r\n\r\n            // Create the script tag, set the appropriate attributes\r\n            var script = document.createElement('script');\r\n            script.src = 'https://maps.googleapis.com/maps/api/js?key=' + apiKey + '&callback=initMap';\r\n            script.defer = true;\r\n            script.async = true;\r\n\r\n            // Attach your callback function to the `window` object\r\n            window.initMap = function () {\r\n                component.map = new google.maps.Map(mapContainer,\r\n                    {\r\n                        zoom: 13,\r\n                        zoomControl: true,\r\n                        mapTypeControl: false,\r\n                        scaleControl: false,\r\n                        streetViewControl: false,\r\n                        rotateControl: false,\r\n                        fullscreenControl: false\r\n                    });\r\n                google.maps.event.addListenerOnce(component.map, 'idle', () => {\r\n                    document.getElementsByTagName('iframe')[0].title = \"Google Maps\";\r\n                });\r\n\r\n                component.googleInitialized = true;\r\n                component.scope.classList.remove(\"loading\");\r\n                callback();\r\n            }\r\n\r\n            // Append the 'script' element to 'head'\r\n            document.head.appendChild(script);\r\n        }\r\n    }\r\n\r\n    Draw(pins) {\r\n        var component = this;\r\n        if (!component.googleInitialized) return;\r\n\r\n        if (pins && pins.length > 0) {\r\n            this.scope.classList.remove(\"empty\");\r\n        }\r\n\r\n        //create empty LatLngBounds object\r\n        var bounds = new google.maps.LatLngBounds();\r\n        for (var i = 0; i < pins.length; i++) {\r\n\r\n            let organization = new Organization(pins[i]);\r\n            var marker = new google.maps.Marker({\r\n                position: new google.maps.LatLng(organization.getAttributeByName('Latitude'), organization.getAttributeByName('Longitude')),\r\n                map: component.map,\r\n                icon: {\r\n                    url: \"/Static/img/map-pin-icon-green.svg\"\r\n                },\r\n                franchiseNum: organization.Number\r\n            });\r\n\r\n            //extend the bounds to include each marker's position\r\n            bounds.extend(marker.position);\r\n\r\n            marker.addListener('click', function (ev) {\r\n                var event = new CustomEvent('map-location-selected', { detail: this.franchiseNum });\r\n                document.dispatchEvent(event);\r\n                component.Highlight(this.franchiseNum, true);\r\n            });\r\n\r\n            component.markers.push(marker);\r\n        }\r\n\r\n        // Don't zoom in too far on only one marker\r\n        if (bounds.getNorthEast().equals(bounds.getSouthWest())) {\r\n            var extendPoint1 = new google.maps.LatLng(bounds.getNorthEast().lat() + 0.01, bounds.getNorthEast().lng() + 0.01);\r\n            var extendPoint2 = new google.maps.LatLng(bounds.getNorthEast().lat() - 0.01, bounds.getNorthEast().lng() - 0.01);\r\n            bounds.extend(extendPoint1);\r\n            bounds.extend(extendPoint2);\r\n        }\r\n\r\n        //now fit the map to the newly inclusive bounds\r\n        component.map.fitBounds(bounds);\r\n    }\r\n\r\n    Clear() {\r\n        if (this.map && this.markers.length > 0) {\r\n            for (var i = 0; i < this.markers.length; i++) {\r\n                var marker = this.markers[i];\r\n                marker.setMap(null);\r\n            }\r\n            this.markers.length = 0;\r\n        }\r\n    }\r\n\r\n    Hide() {\r\n        if (this.scope) {\r\n            // this.scope.style.display = \"none\";\r\n            this.scope.classList.toggle(\"empty\");\r\n        }\r\n    }\r\n\r\n    ShowHideMapElement(hide) {\r\n        if (this.mapContainerElement) {\r\n            if (hide) {\r\n                this.mapContainerElement.style.display = \"block\";\r\n            } else {\r\n                this.mapContainerElement.style.display = \"none\";\r\n            }\r\n        }\r\n    }\r\n\r\n    ShowHidePlaceholderImage(show) {\r\n        if (this.placeholderImage) {\r\n            if (show) {\r\n                this.placeholderImage.style.display = \"block\";\r\n            } else {\r\n                this.placeholderImage.style.display = \"none\";\r\n            }\r\n        }\r\n    }\r\n\r\n    Highlight(franchise, center) {\r\n        let component = this;\r\n        this.markers.forEach(function(marker) {\r\n            if (marker.franchiseNum == franchise) {\r\n                marker.setIcon({\r\n                    url: \"/Static/img/map-pin-icon-focus.svg\"\r\n                });\r\n\r\n                if (center && center === true) {\r\n                    component.map.setCenter(marker.getPosition());\r\n                }\r\n            } else {\r\n                marker.setIcon({\r\n                    url: \"/Static/img/map-pin-icon-green.svg\"\r\n                });\r\n            }\r\n        });\r\n    }\r\n}","import { Office, Attribute, Organization } from '/Static/js/Organization/Organization.js';\r\n\r\nexport class LocationSearchList {\r\n    constructor() {\r\n        this.scope = document.querySelector(\".hisc-location-results\");\r\n        if (this.scope) {\r\n            this.list = this.scope.querySelector(\".js-list\");\r\n            this.noResults = this.scope.querySelector(\".js-no-result-text\");\r\n            this.SetLoadingState(true);\r\n        }\r\n    }\r\n\r\n    ExistsOnPage() {\r\n        return this.scope !== undefined && this.scope !== null;\r\n    }\r\n\r\n    Clear() {\r\n        if (this.list) {\r\n            this.list.innerHTML = '';\r\n        }\r\n    }\r\n\r\n    HideNoResults() {\r\n        if (this.noResults) {\r\n            this.noResults.style.display = \"none\";\r\n            this.list.classList.remove(\"empty\");\r\n        }\r\n    }\r\n\r\n    Hide() {\r\n        if (this.list)\r\n            this.list.classList.add('d-none');\r\n    }\r\n\r\n    Show() {\r\n        if (this.list)\r\n            this.list.classList.remove('d-none');\r\n    }\r\n\r\n    ShowNoResults() {\r\n        if (this.noResults) {\r\n            this.noResults.style.display = \"block\";\r\n            this.list.innerHTML = '';\r\n            this.list.classList.add(\"empty\");\r\n            this.SetLoadingState(false);\r\n        }\r\n    }\r\n\r\n    GenerateLocationSearchResults(searchResults) {\r\n        let component = this;\r\n\r\n        if (component.list && component.scope) {\r\n            let templateMarkup = component.scope.querySelector(\"script.franchise-search-results\").textContent;\r\n            let pageParams = new URLSearchParams(window.location.search);\r\n            templateMarkup = templateMarkup.replace(\"{{SEARCH_TERM}}\", pageParams.get('q').replace(/[&\\/\\\\#,+()$~%.'\":*?<>{}]/g, ''));\r\n            templateMarkup = templateMarkup.replace(\"{{NUMBER_OF_RECORDS}}\", searchResults.length);\r\n\r\n            const renderTemplate = (results) => {\r\n                return templateMarkup.replace(\"{{RENDERED_RESULTS}}\", results.map((result, index) => {\r\n                    let organization = new Organization(result);\r\n                    return `\r\n                <div class=\"result-wrapper\" data-franchise-num=\"${organization.Number}\" data-tag-payload=\"{'event':'tracked_click','element_name':'results_card','page_zone':'corp_service_results','result_rank':${(index + 1)},'franchise_number':${organization.Number}}\">\r\n                    <div class=\"location-tile-title-row\">\r\n                        <h2>${organization.getAttributeByName('Name')}</h2>\r\n                        <ul class=\"score-call-to-action list-unstyled list-group-horizontal-sm\">\r\n                            <li class=\"d-inline\">\r\n                            <a href=\"${organization.Canonical}\" class=\"location-page-button\">More info <span class=\"sr-only visually-hidden\" data-tag-payload=\"{'event':'tracked_click','element_name':'results_card_link','page_zone':'corp_service_results','result_rank':${(index + 1)},'franchise_number':${organization.Number}}\">for ${organization.getAttributeByName('Name')}</a>\r\n                            </li>\r\n                        </ul>\r\n                    </div>\r\n                    <p>\r\n                        <a href=\"tel:${organization.offices[0].Phone}\" class=\"call\" data-tag-payload=\"{'event':'tracked_click','element_name':'phone','page_zone':'corp_service_results','result_rank':${(index + 1)},'franchise_number':${organization.Number}}\">\r\n                            ${organization.offices[0].getFormattedPhoneNumber()}\r\n                        </a>\r\n                    </p>\r\n                </div>`;\r\n                }).join(''));\r\n            };\r\n\r\n            const compiled = renderTemplate(searchResults);\r\n            component.SetLoadingState(false);\r\n            component.list.innerHTML = compiled;\r\n\r\n            component.list.querySelectorAll(\".result-wrapper\").forEach(function (listItem) {\r\n                var franchiseNum = listItem.getAttribute(\"data-franchise-num\");\r\n                if (franchiseNum) {\r\n                    listItem.addEventListener('click', function (ev) {\r\n                        component._clearActive();\r\n                        listItem.classList.toggle(\"active\");\r\n\r\n                        var event = new CustomEvent('location-list-item-selected', { detail: franchiseNum });\r\n                        document.dispatchEvent(event);\r\n                    });\r\n\r\n                    // analytics\r\n                    listItem.querySelector(\".location-page-button\").addEventListener('click', function (ev) {\r\n                        window.dataLayer = window.dataLayer || [];\r\n                        window.dataLayer.push({\r\n                            'page_url': window.location.href || \"\",\r\n                            'franchise_number': franchiseNum,\r\n                            'event': 'location-page-btn-click'\r\n                        });\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    ScrollToResult(franchiseNum) {\r\n        if (this.list) {\r\n            // remove active everywhere\r\n            this.list.querySelectorAll(\".active\").forEach(function (elem) {\r\n                elem.classList.remove(\"active\");\r\n            });\r\n\r\n            // find element, scroll it into view, throw active class on it\r\n            var franchise = this.list.querySelector(\"[data-franchise-num='\" + franchiseNum + \"']\");\r\n            franchise.classList.toggle(\"active\");\r\n\r\n            // different scroll behavior between mobile/desktop\r\n            if (window.innerWidth >= 992) {\r\n                franchise.parentNode.scrollTop = franchise.offsetTop;\r\n            } else {\r\n                // accomodate header height if it exists\r\n                var headerHeight = 0;\r\n                var header = document.querySelector(\"header\");\r\n                if (header) {\r\n                    headerHeight = header.offsetHeight;\r\n                }\r\n\r\n                // scroll position is the top of this franchise's box minus the header height\r\n                var scrollPosition = franchise.getBoundingClientRect().top - headerHeight - 8; // give it 8px of room to look nice\r\n                window.scrollTo({ top: scrollPosition, behavior: 'smooth' }); // make sure it's smooth\r\n            }\r\n        }\r\n    }\r\n\r\n    SetLoadingState(state) {\r\n        if (this.scope) {\r\n            if (state) {\r\n                this.Clear();\r\n                this.scope.classList.toggle(\"loading\");\r\n            } else {\r\n                this.scope.classList.remove(\"loading\");\r\n            }\r\n        }\r\n    }\r\n\r\n    _clearActive() {\r\n        if (this.scope && this.list) {\r\n            this.list.querySelectorAll(\".active\").forEach(function(elem) {\r\n                elem.classList.remove(\"active\");\r\n            });\r\n        }\r\n    }\r\n}","// adapted from here: https://stackoverflow.com/a/4825695/873599\r\nexport class CookieManager {\r\n    constructor() {\r\n\r\n    }\r\n\r\n    CreateCookie(name, value, days) {\r\n        let expires;\r\n        if (days) {\r\n            let date = new Date();\r\n            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n            expires = \"; expires=\" + date.toGMTString();\r\n        }\r\n        else {\r\n            expires = \"\";\r\n        }\r\n        document.cookie = name + \"=\" + value + expires + \"; path=/\";\r\n    }\r\n\r\n    GetCookie(name) {\r\n        if (document.cookie.length > 0) {\r\n            let start = document.cookie.indexOf(name + \"=\");\r\n            if (start !== -1) {\r\n                start = start + name.length + 1;\r\n                let end = document.cookie.indexOf(\";\", start);\r\n                if (end === -1) {\r\n                    end = document.cookie.length;\r\n                }\r\n                return unescape(document.cookie.substring(start, end));\r\n            }\r\n        }\r\n        return \"\";\r\n    }\r\n\r\n    DestroyCookie(name) {\r\n        let expires = \"expires=Thu, 01 Jan 1970 00:00:00 UTC;\";\r\n        let path = \"path=/;\";\r\n\r\n        document.cookie = name + \"=;\" + expires + path;\r\n    }\r\n}","import { CookieManager } from '../Utility/CookieManager.js';\r\n\r\nexport class Geolocation {\r\n    constructor(type) {\r\n        let componentSelector = \".hisc-\" + type + \"-search-box\";\r\n        this.scope = document.querySelector(componentSelector);\r\n        this.searchTerm = \"\";\r\n        let cookieName = \"hisc-location-preference\";\r\n\r\n        console.log(\"Geolocation\");\r\n\r\n        if (navigator.permission) {\r\n            navigator.permissions.query({ name: 'geolocation' })\r\n                .then(function(permissionStatus) {\r\n                    console.log('Geolocation permission state is ', permissionStatus.state);\r\n\r\n                    permissionStatus.onchange = function(e) {\r\n                        console.log('Geolocation permission state is changed to ', permissionStatus.state);\r\n\r\n                        if (permissionStatus.state === 'granted') {\r\n                            // TODO check if this part is needed or some of logic should be moved here\r\n                        } else if (permissionStatus.state === 'denied' || permissionStatus.state === 'prompt') {\r\n                            var cookieManager = new CookieManager();\r\n                            cookieManager.DestroyCookie(cookieName);\r\n                        }\r\n                    };\r\n                });\r\n        } else {\r\n            this.SearchLocation(() => {\r\n                console.log('GeoLocation Failed');\r\n            });;\r\n        }\r\n        \r\n    }\r\n\r\n    SearchLocation(errorCallback) {\r\n        var component = this;\r\n        if (navigator && navigator.geolocation) {\r\n            navigator.geolocation.getCurrentPosition(\r\n                (position) => {\r\n                    console.log('Geolocation permissions granted');\r\n                    console.log(\"Latitude: \", position.coords.latitude);\r\n                    console.log(\"Longitude: \", position.coords.longitude);\r\n\r\n                    component.CallGoogleApi(position.coords.latitude, position.coords.longitude);\r\n                }, errorCallback);\r\n        }\r\n    }\r\n\r\n    CallGoogleApi(latitude, longitude) {\r\n        var apiKey = this.scope.getAttribute(\"data-api-key\");\r\n        var component = this;\r\n\r\n        fetch(\"https://maps.googleapis.com/maps/api/geocode/json?latlng=\" + latitude + \",\" + longitude + \"&key=\" + apiKey, {\r\n            method: 'POST',\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(data => {\r\n                var location = component.GetLocationResult(data.results);\r\n\r\n                if (location) {\r\n                    var event = new CustomEvent('user-location-found', { detail: location });\r\n                    document.dispatchEvent(event);\r\n                }\r\n            })\r\n            .catch(error => {\r\n                console.log(error);\r\n            });\r\n    }\r\n\r\n    GetAddressComponentValueByType(address_components, requested_component_type, long_or_short_name) {\r\n        var i, j;\r\n\r\n        // Loop through the Geocoder's address_components result set.\r\n        for (i = 0; i < address_components.length; i++) {\r\n            // Check the types and make sure it is what we \r\n            for (j = 0; j < address_components[i].types.length; j++) {\r\n                if (address_components[i].types[j] === requested_component_type) {\r\n                    if (long_or_short_name === \"short_name\")\r\n                        return address_components[i].short_name;\r\n                    else \r\n                        return address_components[i].long_name;\r\n                }\r\n\r\n            }\r\n        }\r\n    }\r\n\r\n    GetLocationResult(results) {\r\n        var location = \"\";\r\n\r\n        if (results.length > 0) {\r\n            for (var i = 0; i < results.length; i++) {\r\n\r\n                // USA and CAN have the same result set\r\n                if (results[i][\"types\"][0] === \"premise\" || results[i][\"types\"][0] === \"street_address\") {\r\n                    location = results[i][\"address_components\"];\r\n                    console.log(\"Location found: \", location);\r\n\r\n                    var postalCode = this.GetAddressComponentValueByType(location, \"postal_code\", \"long_name\");\r\n                    if (postalCode !== undefined && postalCode !== null && postalCode !== \"\" ) {\r\n                        console.log(\"Postal Code found: \" + postalCode);\r\n                        return postalCode;\r\n                    }\r\n\r\n                    var city = this.GetAddressComponentValueByType(location, \"locality\", \"long_name\");\r\n                    var state = this.GetAddressComponentValueByType(location, \"administrative_area_level_1\", \"short_name\");\r\n                    if (city !== undefined && state !== undefined && city !== null && city !== \"\" && state !== null && state !== \"\") {\r\n                        console.log(\"City/State found: \" + city + \", \" + state);\r\n                        return city + \", \" + state;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        // this line wont be triggered\r\n        return location;\r\n    }\r\n};","import { Geolocation } from './Geolocation.js';\r\nimport { CookieManager } from '../Utility/CookieManager.js';\r\nimport '../Utility/StringExtensions.js';\r\n\r\nfunction initiateSearch(type, destination, query) {\r\n    var searchEvent = '';\r\n    if (type === 'location') {\r\n        searchEvent = 'search-location';\r\n    }\r\n    if (type === 'career') {\r\n        searchEvent = 'search-career';\r\n    }\r\n\r\n    var event = new CustomEvent(searchEvent, { detail: { d: destination, q: query.Cleanse() } });\r\n    document.dispatchEvent(event);\r\n}\r\n\r\nexport class SearchBox {\r\n    constructor(searchType, query) {\r\n        let searchComponentSelector = \".hisc-\" + searchType + \"-search-box\";\r\n        document.querySelectorAll(searchComponentSelector).forEach(function(element) {\r\n            let searchTextSelector = \".\" + searchType + \"-search-text\";\r\n            let searchButtonSelector = \".\" + searchType + \"-search-button\";\r\n\r\n            let cookieManager = new CookieManager();\r\n            let cookieName = \"hisc-location-preference\";\r\n            let cookieExpiration = 365;\r\n\r\n            if (!element)\r\n                return;\r\n\r\n            element.input = element.querySelector(searchTextSelector);\r\n            if (!element.input)\r\n                return;\r\n\r\n            var resultPageUrl = window.location; // default to current page\r\n            element.geolocation = element.querySelector(\".hisc-use-location\");\r\n\r\n            // set query if passed in\r\n            if (query) {\r\n                element.input.value = query;\r\n            } else { // otherwise grab location from cookie if available\r\n                let currentLocation = cookieManager.GetCookie(cookieName);\r\n                if (currentLocation) {\r\n                    element.input.value = currentLocation;\r\n                }\r\n            }\r\n\r\n            if (element.getAttribute(\"data-result-page\")) {\r\n                resultPageUrl = element.getAttribute(\"data-result-page\");\r\n            }\r\n\r\n            element.input.addEventListener(\"keyup\",\r\n                event => {\r\n                    if (event.keyCode === 13) {\r\n                        let value = element.input.value.trim();\r\n                        if (value && value.length == 0)\r\n                            return;\r\n                        initiateSearch(searchType, resultPageUrl, value);\r\n                    }\r\n                });\r\n\r\n            if (!document.querySelector('.duo-search-button')) {\r\n                element.querySelector(searchButtonSelector).addEventListener(\"click\",\r\n                    async (event) => {\r\n                        let value = element.input.value.split(\", Canada\")[0].split(\", USA\")[0].trim();\r\n                        if (value && value.length == 0)\r\n                            return;\r\n                        initiateSearch(searchType, resultPageUrl, value);\r\n                        // GA Analytics Event\r\n                        if (event.target.classList && event.target.classList.contains('location-search-button')) {\r\n                            window.dataLayer = window.dataLayer || [];\r\n                            let payload = {\r\n                                'page_url': window.location.href || \"\",\r\n                                'event': 'location-search-btn-click'\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                        }\r\n                    });\r\n            }\r\n\r\n            // check first if the 'Use current location' link is on page\r\n            if (element.geolocation) {\r\n                element.geolocation.addEventListener(\"click\",\r\n                    async (event) => {\r\n                        event.preventDefault();\r\n                        try {\r\n                            console.log(\"Use location\");\r\n                            var location = new Geolocation(searchType);\r\n                            location.SearchLocation(() => {\r\n                                console.log('GeoLocation Failed');\r\n                                alert('Please enable Geo Location Access in your browser settings');\r\n                            });\r\n\r\n                            // GA Analytics Event\r\n                            window.dataLayer = window.dataLayer || [];\r\n                            let payload = {\r\n                                'page_url': window.location.href || \"\",\r\n                                'event': 'use-current-location-click'\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 (ex) {\r\n                            console.log('GeoLocation Failed');\r\n                            alert('Geo Location Access may not be enabled in your browser settings');\r\n                        }\r\n                    });\r\n\r\n                document.addEventListener('user-location-found', event => {\r\n                    let value = event.detail;\r\n                    element.input.value = value;\r\n                    cookieManager.CreateCookie(cookieName, value, cookieExpiration);\r\n                });\r\n            }\r\n        });\r\n    }\r\n}\r\n","import { LocationSearchMap } from './LocationSearchMap.js';\r\nimport { LocationSearchList } from './LocationSearchList.js';\r\nimport { SearchBox } from '/Static/js/Search/SearchBox.js';\r\nimport '/Static/js/Utility/StringExtensions.js';\r\nimport { Organization } from '/Static/js/Organization/Organization.js';\r\n\r\nfunction LocationManager() {\r\n    const getUrlParameter = (location, name) => {\r\n        name = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\r\n        let regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\r\n        let results = regex.exec(location);\r\n        return results === null ? null : decodeURIComponent(results[1].replace(/\\+/g, ' '));\r\n    };\r\n\r\n    let query = getUrlParameter(window.location.search, \"q\");\r\n    if (query) {\r\n        query = query.Cleanse();\r\n    }\r\n    let searchText = query;\r\n    \r\n    var searchResults = \"\";\r\n\r\n    const map = new LocationSearchMap();\r\n    const list = new LocationSearchList();\r\n    const searchBox = new SearchBox(\"location\", searchText);\r\n    const blankSearchHelper = document.querySelector('.blank-search-helper-text');\r\n\r\n    function callSearchApi(data) {\r\n        if (blankSearchHelper)\r\n            blankSearchHelper.classList.add('d-none');\r\n        list.HideNoResults();\r\n        list.SetLoadingState(true);\r\n\r\n        const config = {\r\n            // We use the header object to customize request headers\r\n            headers: { \"Content-Type\": \"application/json; charset=utf-8\" }\r\n        };\r\n\r\n        data = data || \"\";\r\n\r\n        const url = \"/api/data/getLocations?forceProximitySearch=false&geoSearchTerm=\" + data.Cleanse();\r\n\r\n        fetch(url, {\r\n            method: 'POST',\r\n            headers: config.headers\r\n        })\r\n            .then(response => response.json())\r\n            .then(data => {\r\n                searchResults = data;\r\n\r\n                renderResults();\r\n            })\r\n            .catch(error => {\r\n                list.Clear();\r\n                list.ShowNoResults();\r\n                map.Clear();\r\n                map.ShowHidePlaceholderImage(true);\r\n\r\n                console.log(error);\r\n            })\r\n            .finally(() => {\r\n                list.Show();\r\n                list.SetLoadingState(false);\r\n            });\r\n    }\r\n\r\n    function renderResults() {\r\n        list.Clear();\r\n        map.Clear();\r\n        map.ShowHidePlaceholderImage(true);\r\n\r\n        if (searchResults && searchResults.length > 0) {\r\n            // just in case\r\n            list.HideNoResults();\r\n            map.ShowHideMapElement(true);\r\n            list.GenerateLocationSearchResults(searchResults);\r\n\r\n            map.ShowHidePlaceholderImage(false);\r\n            map.InitializeMap(function () {\r\n                var locations = searchResults.filter(function (location) {\r\n                    let organization = new Organization(location);\r\n                    return organization.getAttributeByName('Latitude') !== 0 && organization.getAttributeByName('Longitude') !== 0;\r\n                });\r\n                map.Draw(locations);\r\n            });\r\n        } else {\r\n            list.ShowNoResults();\r\n            map.ShowHideMapElement(false);\r\n        }\r\n    }\r\n\r\n    function componentsExist() {\r\n        if (map.ExistsOnPage() || list.ExistsOnPage()) {\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    if (componentsExist() && !isNullOrWhitespace(searchText)) {\r\n        if (blankSearchHelper)\r\n            blankSearchHelper.classList.add('d-none');\r\n        list.Show();\r\n        callSearchApi(searchText);\r\n    }\r\n    else if (isNullOrWhitespace(searchText)) {\r\n        list.SetLoadingState(false);\r\n        list.Hide();\r\n        map.ShowHidePlaceholderImage(true);\r\n        if (blankSearchHelper)\r\n            blankSearchHelper.classList.remove('d-none');\r\n    }\r\n\r\n    document.addEventListener('search-location',\r\n        event => {\r\n            if (componentsExist() && event && event.detail) {\r\n                // grab query parameter from the event\r\n                var q = event.detail.q;\r\n\r\n                callSearchApi(q); // initiate search with query parameter\r\n\r\n                // Create an URLSearchParams object from current URL\r\n                var queryParams = new URLSearchParams(window.location.search);\r\n\r\n                // Set a new parameter value for 'q'\r\n                queryParams.set(\"q\", q);\r\n\r\n                // Build the full url\r\n                const url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + \"?\" + queryParams.toString();\r\n\r\n                // Create the new 'state'\r\n                const state = { 'q': q };\r\n\r\n                // Replace the current Query String with the new one, add it to the Back Button History\r\n                window.history.pushState(state, null, url);\r\n            } else if (event && event.detail && event.detail.d) {\r\n                window.location = event.detail.d + \"?q=\" + event.detail.q;\r\n            }\r\n        });\r\n\r\n    document.addEventListener(\"map-location-selected\", function (event) {\r\n        if (list) {\r\n            list.ScrollToResult(event.detail);\r\n        }\r\n    });\r\n\r\n    function isNullOrWhitespace(str) {\r\n        return !str || !str.trim();\r\n    }\r\n};\r\nexport default LocationManager();"],"names":["Object","defineProperty","String","prototype","value","this","replace","writable","configurable","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","d","definition","key","o","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","match","Attribute","typeName","category","TypeName","Value","Category","Organization","data","Region","Status","Type","Canonical","window","settings","env","Array","isArray","Offices","offices","map","officeData","Attributes","attributes","attrData","CarePlatform","getAttributeByName","attribute","find","attr","LocationSearchMap","component","scope","document","querySelector","googleInitialized","markers","placeholderImage","mapContainerElement","addEventListener","ev","Highlight","detail","ExistsOnPage","InitializeMap","callback","console","log","classList","toggle","apiKey","getAttribute","mapContainer","script","createElement","src","defer","async","initMap","google","maps","Map","zoom","zoomControl","mapTypeControl","scaleControl","streetViewControl","rotateControl","fullscreenControl","event","addListenerOnce","getElementsByTagName","title","remove","head","appendChild","Draw","pins","length","bounds","LatLngBounds","i","organization","marker","Marker","position","LatLng","icon","url","franchiseNum","extend","addListener","CustomEvent","dispatchEvent","push","getNorthEast","equals","getSouthWest","extendPoint1","lat","lng","extendPoint2","fitBounds","Clear","setMap","Hide","ShowHideMapElement","hide","style","display","ShowHidePlaceholderImage","show","franchise","center","forEach","setIcon","setCenter","getPosition","LocationSearchList","list","noResults","SetLoadingState","innerHTML","HideNoResults","add","Show","ShowNoResults","GenerateLocationSearchResults","searchResults","templateMarkup","textContent","pageParams","URLSearchParams","location","search","compiled","results","result","index","join","querySelectorAll","listItem","_clearActive","dataLayer","href","ScrollToResult","elem","innerWidth","parentNode","scrollTop","offsetTop","headerHeight","header","offsetHeight","scrollPosition","getBoundingClientRect","top","scrollTo","behavior","state","CookieManager","CreateCookie","name","days","expires","date","Date","setTime","getTime","toGMTString","cookie","GetCookie","start","indexOf","end","unescape","substring","DestroyCookie","Geolocation","type","componentSelector","searchTerm","navigator","permission","permissions","query","then","permissionStatus","onchange","e","SearchLocation","errorCallback","geolocation","getCurrentPosition","coords","CallGoogleApi","fetch","method","response","ok","Error","status","json","GetLocationResult","catch","error","GetAddressComponentValueByType","address_components","requested_component_type","long_or_short_name","j","types","short_name","long_name","initiateSearch","destination","searchEvent","q","Cleanse","SearchBox","searchType","searchComponentSelector","element","searchTextSelector","searchButtonSelector","cookieManager","cookieName","input","resultPageUrl","currentLocation","keyCode","trim","split","target","contains","payload","gtm_enabled","segment_enabled","analytics","track","eventCallback","preventDefault","alert","ex","getUrlParameter","RegExp","exec","decodeURIComponent","searchText","blankSearchHelper","callSearchApi","headers","locations","filter","finally","componentsExist","isNullOrWhitespace","str","queryParams","set","protocol","host","pathname","toString","history","pushState"],"sourceRoot":""}