{"version":3,"file":"maps.Dgp4ykjK.js","sources":["../Scripts/global/modules/map-inventory_wp.js","../Scripts/maps.js"],"sourcesContent":["import axios from 'axios';\r\nimport { locateStore } from'./gtmdata_wp';\r\nimport { scrollToTarget } from'../../utils';\r\n\r\nlet map;\r\nlet fs;\r\nlet filteredJsonInventory = [];\r\nconst inventoryShowAll = document.getElementById('inventoryShowAll');\r\nconst postalCodeInput = document.getElementById('inventoryPostnumber');\r\n\r\nconst ajax = axios.create({\r\n    headers: {\r\n        'X-Requested-With': 'XMLHttpRequest'\r\n    },\r\n});\r\n\r\nconst favourite = id => {\r\n    if (fs == id) {\r\n        return ' is-favourite';\r\n    } else {\r\n        return '';\r\n    }\r\n};\r\n\r\nconst clearStore = (store) => {\r\n    store.removeAttribute('checked');\r\n    store.classList.remove('is-active');\r\n};\r\n\r\nconst resetFields = () => {\r\n    inventoryShowAll.classList.remove('is-hidden');\r\n    const inventoryPostnumber = document.getElementById('inventoryPostnumber');\r\n    if (inventoryPostnumber) {\r\n        inventoryPostnumber.classList.remove('invalid');\r\n    }\r\n    const inventoryNoHits = document.getElementById('inventoryNohits');\r\n    if (inventoryNoHits) {\r\n        inventoryNoHits.classList.add('is-hidden');\r\n    }\r\n};\r\n\r\nconst updatePosition = () => {\r\n    // User enters po-number\r\n    const searchInput = document.getElementById('inventoryPostnumber').value;\r\n    useMyLocationButton.forEach(el => {\r\n        el.classList.remove('disabled');\r\n    });\r\n\r\n    // Define if search i text or PO number\r\n    function searchQuery() {\r\n        if (searchInput > 0 && searchInput < 9999) {\r\n            return '?postalCode=' + searchInput;\r\n        } else {\r\n            return '?postalPlace=' + searchInput;\r\n        }\r\n    }\r\n\r\n    // Generate url\r\n    const postNordApiUrl = '/publicapi/findstore';\r\n    const postNordQuery = searchQuery(searchInput);\r\n    const postNordUrl = postNordApiUrl + postNordQuery;\r\n    const inventoryPostnumber = document.getElementById('inventoryPostnumber');\r\n\r\n    ajax.get(postNordUrl)\r\n        .then(response => {\r\n            if (response.status === 204) {\r\n                // Handle 204 No Content response same way as 404 Not Found\r\n                if (inventoryPostnumber) {\r\n                    inventoryPostnumber.classList.add('invalid');\r\n                }\r\n                filteredJsonInventory = [];\r\n                updateMapList(59.9142366, 10.75309029999994, 1000);\r\n            } else {\r\n                if (inventoryPostnumber) {\r\n                filteredJsonInventory = response.data;\r\n                const lat = parseFloat(response.data[0].latitude);\r\n                const long = parseFloat(response.data[0].longitude);\r\n                mapInventory(\r\n                    lat,\r\n                    long,\r\n                    false,\r\n                    1000,\r\n                    response.data,\r\n                    window.jsonInventory,\r\n                );\r\n                updateMapList(\r\n                    lat,\r\n                    long,\r\n                    1000);\r\n            }\r\n            resetFields();\r\n        }})\r\n        .catch(e => {\r\n            if (e && e.response && e.response.status === 404) {\r\n                if (inventoryPostnumber) {\r\n                    inventoryPostnumber.classList.add('invalid');\r\n                }\r\n                filteredJsonInventory = [];\r\n                updateMapList(59.9142366, 10.75309029999994, 1000);\r\n            }\r\n        });\r\n};\r\n\r\n// If less than 1km use meters\r\nconst distanceRounder = (located, dist) => {\r\n    if (located && dist >= 1) {\r\n        return parseFloat(dist).toFixed(2) + 'km';\r\n    } else if (located && dist < 1) {\r\n        return parseFloat(dist * 1000).toFixed(0) + 'm';\r\n    } else {\r\n        return '';\r\n    }\r\n};\r\n\r\n// HTML list\r\n// Make class is-hidden in list if too far from user\r\nconst toofar = (radius, located, where) => {\r\n    if (where > radius && located) {\r\n        return 'is-hidden';\r\n    } else {\r\n        return 'is-visible';\r\n    }\r\n};\r\n\r\nconst decodeEntities = encodedString => {\r\n    const parser = new DOMParser;\r\n    const dom = parser.parseFromString(\r\n        '<!doctype html><body>' + encodedString,\r\n        'text/html');\r\n    return dom.body.textContent;\r\n};\r\n\r\nconst mapInventory = (userLat, userLng, located, accuracy, stores, jsonInventory, sortOnDistance = false) => {\r\n    const storeItems = document.querySelectorAll('._js-inventory-store');\r\n    if (window.google) {\r\n        // Initial map setup\r\n        let isInitial = true;\r\n        if (storeItems.length > 0) {\r\n            storeItems.forEach(el => {\r\n                el.classList.add('is-hidden');\r\n            });\r\n            isInitial = false;\r\n        }\r\n\r\n        if (!isInitial) {\r\n            document.querySelectorAll('._js-inventory-store').forEach(el => {\r\n                el.remove();\r\n            });\r\n        }\r\n\r\n        useMyLocationButton.forEach(el => {\r\n            el.classList.remove('disabled');\r\n        });\r\n\r\n        const myLatLng = {lat: userLat, lng: userLng};\r\n        const markers = [];\r\n        const storeCounter = [];\r\n\r\n        const radius = 20;\r\n\r\n        // Make bounds to zoom map to correct position\r\n        const bounds = new window.google.maps.LatLngBounds();\r\n        const boundsAll = new window.google.maps.LatLngBounds();\r\n\r\n        // Make infowindow displayed on markers\r\n        let infowindow = new window.google.maps.InfoWindow();\r\n\r\n        // Giving the map som options\r\n        const mapOptions = {\r\n            center: myLatLng,\r\n            fullscreenControl: false,\r\n            mapTypeControl: false,\r\n            zoom: 2,\r\n            maxZoom: 18,\r\n            styles: [\r\n                {\r\n                    'featureType': 'poi.business',\r\n                    'stylers': [\r\n                        {\r\n                            'visibility': 'off'\r\n                        }\r\n                    ]\r\n                }\r\n            ]\r\n        };\r\n\r\n        if (map) {\r\n            map = null;\r\n        }\r\n        // Creating the map\r\n        const mapDiv = document.getElementById('mapInventory');\r\n        if (mapDiv) {\r\n            map = new window.google.maps.Map(document.getElementById('mapInventory'), mapOptions);\r\n        }\r\n\r\n        function currentStore(el) {\r\n            const selectedStore = document.getElementById(el);\r\n            if (selectedStore) {\r\n                document.querySelectorAll('._js-inventory-store').forEach(store => {\r\n                    clearStore(store);\r\n                });\r\n\r\n                selectedStore.querySelector('input').setAttribute('checked', true);\r\n                selectedStore.classList.add('is-active');\r\n            }\r\n        }\r\n\r\n        // Click events\r\n        // Adding a new click event listener for the object\r\n        // In map\r\n        function addClicker(marker, content, id) {\r\n            window.google.maps.event.addListener(marker,\r\n                'click',\r\n                function () {\r\n                    currentStore(id);\r\n                    const mq = window.matchMedia('(min-width: 64em)');\r\n                    if (mq.matches) {\r\n                        if (infowindow) {\r\n                            infowindow.close();\r\n                        }\r\n                        infowindow = new window.google.maps.InfoWindow({content: content});\r\n                        infowindow.open(map, marker);\r\n                    }\r\n                    map.setZoom(14);\r\n                    map.panTo(marker.position);\r\n                    document.getElementById('storeInventory').classList.add('has-store-selected');\r\n                }\r\n            );\r\n        }\r\n\r\n        let usersPositionMarker = null;\r\n        function setUserPosition(lat, lng) {\r\n            const currentLat = lat;\r\n            const currentLng = lng;\r\n\r\n            // Marker style\r\n            const userPin = {\r\n                path: window.google.maps.SymbolPath.CIRCLE,\r\n                fillColor: '#507cec',\r\n                fillOpacity: 1,\r\n                scale: 7,\r\n                strokeColor: 'white',\r\n                strokeWeight: 2,\r\n                anchor: new window.google.maps.Point(0, 0)\r\n            };\r\n            usersPositionMarker = new window.google.maps.Marker({\r\n                map: map,\r\n                position: new window.google.maps.LatLng(currentLat, currentLng),\r\n                title: 'Deg',\r\n                icon: userPin,\r\n                zIndex: 1000,\r\n                id:'usersPositionMarker'\r\n            });\r\n            markers.push(usersPositionMarker);\r\n            const clicker = addClicker(usersPositionMarker,'Her er du');\r\n        }\r\n\r\n        //Set user postion\r\n        if (located && accuracy < 300) {\r\n            setUserPosition(userLat, userLng);\r\n        }\r\n        if (stores && stores.length > 0) {\r\n            let objs = [].concat(stores).map((store) => {\r\n                return { distance: getDistanceFromLatLonInKm(store.latitude, store.longitude, userLat, userLng),  obj: store,\r\n                };\r\n            });\r\n            \r\n            if(sortOnDistance) {\r\n                objs = objs.sort((a, b) => {\r\n                    return a.distance < b.distance ? -1 : 1;\r\n                });\r\n            }\r\n            \r\n            objs.forEach(({ distance, obj }) => {\r\n                const sizes = ((jsonInventory || []).find(x => x.id === obj.id) || obj).sizes;\r\n\r\n                const distanceRound = distanceRounder(located, distance);\r\n\r\n                const fav = favourite(obj.id);\r\n                const far = toofar(radius, located, distance);\r\n\r\n                const HTMLid = String(obj.id);\r\n                const HTMLtitle = '<h3 class=\"store-inventory__title\">' + obj.title + '</h3>';\r\n                const HTMLfav = '<button role=\"button\" hidden class=\"store-inventory__fav-btn _js-fs-button ' +\r\n                    fav +\r\n                    '\" value=\"' +\r\n                    obj.id +\r\n                    '\">Favoritt</button>';\r\n                const HTMLsizes = sizes ?\r\n                    '<ul class=\"store-instock\"><li class=\"store-instock__item\">' + sizes +'</li></ul>' :\r\n                    '';\r\n                const HTMLadress = '<p class=\"store-inventory__adress\">' +\r\n                    HTMLfav +\r\n                    obj.adress +\r\n                    '<br>' +\r\n                    obj.openinghours +\r\n                    '</p>';\r\n                let HTMLphone = '';\r\n                if (obj.tel && obj.tel.length > 0) {\r\n                    HTMLphone = '<a href=\"tel:' +\r\n                        obj.tel.replace(/\\s/g, '') +\r\n                        '\" class=\"store-inventory__link\" tabindex=\"0\">Ring: ' +\r\n                        obj.tel +\r\n                        ' </a> ';\r\n                }\r\n                const HTMLnav = '<a href=\"https://www.google.com/maps/search/?api=1&query=' +\r\n                    encodeURIComponent(obj.adress) +\r\n                    '+' +\r\n                    encodeURIComponent(obj.title) +\r\n                    '\" class=\"store-inventory__link\" target=\"_blank\">Finn veien</a>';\r\n\r\n                const decodedTitle = decodeEntities(obj.title);\r\n\r\n                // Content\r\n                const contentString = '<div class=\"store-inventory__list__item--align\">' +\r\n                    '<span class=\"store-inventory__distance\">' +\r\n                    distanceRound +\r\n                    '</span>' +\r\n                    HTMLtitle +\r\n                    HTMLadress +\r\n                    '<div class=\"store-inventory__actions\">' +\r\n                    HTMLsizes +\r\n                    '<div class=\"store-inventory__links\">' +\r\n                    HTMLphone +\r\n                    HTMLnav +\r\n                    '</div>' +\r\n                    '</div>' +\r\n                    '<input type=\"radio\" name=\"storeInventoryStore\" class=\"sr-only\" value=\"' +\r\n                    obj.id +\r\n                    '\" aria-label=\"Velg i kart\" />' +\r\n                    '</div>';\r\n\r\n                // Marker style\r\n                const pin = {\r\n                    path:\r\n                        'M14,2.6c-4.3,0-7.9,3.5-7.9,7.9c0,1.2,0.5,2.6,1.2,4.2c0.7,1.5,1.5,3.2,2.4,4.7c1.8,3.1,3.6,5.6,3.6,5.6l0.7,1l0.7-1c0,0,1.8-2.6,3.6-5.6c0.9-1.5,1.8-3.2,2.4-4.7c0.7-1.5,1.2-3,1.2-4.2C21.9,6.2,18.3,2.6,14,2.6z M14,14.3c-2.1,0-3.8-1.7-3.8-3.8c0-2.1,1.7-3.8,3.8-3.8s3.8,1.7,3.8,3.8C17.8,12.6,16.1,14.3,14,14.3z',\r\n                    fillColor: 'red',\r\n                    fillOpacity: 1,\r\n                    scale: 1.5,\r\n                    strokeColor: 'white',\r\n                    strokeWeight: 1,\r\n                    anchor: new window.google.maps.Point(15, 30)\r\n                };\r\n\r\n                // Marker style Favourite store\r\n                const pinFav = {\r\n                    path:\r\n                        'M19.3,11.7L9.9,22.1c-0.2,0.2-0.5,0.2-0.7,0l0,0l-9.4-10.4C-3,8.6-3,3.8-0.2,0.7c2.4-2.8,6.7-3.1,9.5-0.6c0.1,0.1,0.2,0.2,0.3,0.3c1.3-1.2,2.9-1.9,4.7-1.9c1.9,0,3.8,0.8,5.1,2.3C22,3.9,22,8.6,19.3,11.7z',\r\n                    fillColor: 'red',\r\n                    fillOpacity: 1,\r\n                    scale: 1,\r\n                    strokeColor: 'white',\r\n                    strokeWeight: 2,\r\n                    anchor: new window.google.maps.Point(15, 30)\r\n                };\r\n\r\n                // Decide if favourite store\r\n                if (fs == obj.id) {\r\n                    // Adding a new marker for the object\r\n                    var marker = new window.google.maps.Marker({\r\n                        position: new window.google.maps.LatLng(obj.latitude, obj.longitude),\r\n                        icon: pinFav,\r\n                        map: map,\r\n                        infowindow: infowindow, // this works, giving the marker a title with the correct title,\r\n                        title: decodedTitle,\r\n                        id: HTMLid\r\n                    });\r\n\r\n                    // Push marker to markers list\r\n                    markers.push(marker);\r\n                } else {\r\n                    // Adding a new marker for the object\r\n                    var marker = new window.google.maps.Marker({\r\n                        position: new window.google.maps.LatLng(obj.latitude, obj.longitude),\r\n                        icon: pin,\r\n                        map: map,\r\n                        infowindow: infowindow, // this works, giving the marker a title with the correct title,\r\n                        title: decodedTitle,\r\n                        id: HTMLid\r\n                    });\r\n\r\n                    // Push marker to markers list\r\n                    markers.push(marker);\r\n                }\r\n\r\n                // Adding a new info window for the object\r\n                const clicker = addClicker(marker, contentString, HTMLid);\r\n\r\n                // Add elements within 20km if located user to bounds\r\n                if (distance < radius && located) {\r\n                    //Extend bound using items-position\r\n                    bounds.extend(new window.google.maps.LatLng(obj.latitude, obj.longitude));\r\n                    storeCounter.push(obj.id);\r\n                } else if (distance < 3000 && !located) {\r\n                    boundsAll.extend(new window.google.maps.LatLng(obj.latitude, obj.longitude));\r\n                } else if (located) {\r\n                    boundsAll.extend(new window.google.maps.LatLng(obj.latitude, obj.longitude));\r\n                }\r\n\r\n                // Add to html-list\r\n                const HTMLlistItem = '<li class=\"store-inventory__list__item _js-inventory-store ' +\r\n                    far +\r\n                    fav +\r\n                    '\" id=\"' +\r\n                    HTMLid +\r\n                    '\" data-distance=\"' +\r\n                    distance +\r\n                    '\">' +\r\n                    contentString +\r\n                    '</li>';\r\n\r\n                const list = document.querySelector('._js-inventory-list');\r\n\r\n                if (list) {\r\n                    list.insertAdjacentHTML('beforeend', HTMLlistItem);\r\n                }\r\n            });\r\n        }\r\n\r\n        if (map) {\r\n            if (storeCounter.length > 0) {\r\n                map.fitBounds(bounds);\r\n            } else {\r\n                map.fitBounds(boundsAll);\r\n            }\r\n        }\r\n\r\n        document.querySelectorAll('._js-inventory-store').forEach(el => {\r\n            el.addEventListener('click', e => {\r\n                if (window.matchMedia('(max-width: 64em)').matches) {\r\n                    scrollToTarget('#mapInventory');\r\n                }\r\n\r\n                if (el && el.id) {\r\n                    const marker = markers.find(m => m.id === el.id);\r\n                    if (marker && map) {\r\n                        window.google.maps.event.trigger(marker, 'click');\r\n                        map.setZoom(14);\r\n                        map.panTo(marker.position);\r\n                        locateStore(marker.title);\r\n                    }\r\n                }\r\n            });\r\n        });\r\n\r\n        document.querySelectorAll('._js-fs-button').forEach(b => {\r\n            b.addEventListener('click', e => {\r\n                const targetElement = e.target;\r\n                const favId = targetElement.value;\r\n\r\n                document.querySelectorAll('.is-favourite').forEach(fav => {\r\n                    fav.classList.remove('is-favourite');\r\n                });\r\n                targetElement.classList.add('is-favourite');\r\n                document.getElementById(favId).classList.add('is-favourite');\r\n                setFavoriteStore(favId);\r\n            });\r\n        });\r\n    }\r\n};\r\n\r\n// Changing postnumber (click on button or enter in input)\r\nconst postalCodeInputButton = document.getElementById('inventoryPostnumberButton');\r\nif (postalCodeInputButton) {\r\n    postalCodeInputButton.addEventListener('click', updatePosition);\r\n}\r\n\r\nif (postalCodeInput) {\r\n    postalCodeInput.addEventListener('keypress', e => {\r\n        if (e.keyCode == 13) {\r\n            updatePosition();\r\n        }\r\n    });\r\n}\r\n\r\n// Show all button\r\nif (inventoryShowAll) {\r\n    const inventoryShowAllEvent = () => {\r\n        updateMapList(59.9142366, 10.75309029999994, 1000);\r\n        initialMap();\r\n        inventoryShowAll.classList.add('is-hidden');\r\n        postalCodeInput.value ='';\r\n    };\r\n    inventoryShowAll.addEventListener('click', inventoryShowAllEvent);\r\n}\r\n\r\nconst initialMap = () => {\r\n    resetFields();\r\n    mapInventory(59.9142366, 10.75309029999994, false, 10000, window.jsonInventory);\r\n    inventoryShowAll.classList.add('is-hidden');\r\n};\r\n\r\nconst getFavoriteStore = () => ajax.get('/publicapi/findstore/getFavoriteStore/');\r\nconst setFavoriteStore = storeId => {\r\n    const bodyFormData = new URLSearchParams();\r\n    bodyFormData.append('', storeId);\r\n    ajax({\r\n        method: 'post', url: '/publicapi/findstore/setFavoriteStore/', data: bodyFormData, headers: {\r\n            'Content-Type': 'application/x-www-form-urlencoded'\r\n        }\r\n    });\r\n};\r\n\r\n// Updating the bounds of the map\r\nconst updateMapList = (updatedLat, updatedLng, updateRadius) => {\r\n    document.querySelectorAll('._js-inventory-store').forEach(el => {\r\n        clearStore(el);\r\n        el.classList.add('is-hidden');\r\n    });\r\n\r\n    // Define new bounds\r\n    const bounds = new window.google.maps.LatLngBounds();\r\n\r\n    // Add user lnglat to bounds\r\n    bounds.extend(new window.google.maps.LatLng(updatedLat, updatedLng));\r\n\r\n    const storeCount = [];\r\n\r\n    for (let i = 0; i < filteredJsonInventory.length; i++) {\r\n        const obj = filteredJsonInventory[i];\r\n\r\n        //Find distance in km\r\n        const distance = getDistanceFromLatLonInKm(obj.latitude, obj.longitude, updatedLat, updatedLng);\r\n        const storeElement = document.getElementById(obj.id);\r\n\r\n        if (distance < updateRadius) {\r\n            //Extend bound using items-position\r\n            bounds.extend(new window.google.maps.LatLng(obj.latitude, obj.longitude));\r\n            if (storeElement) {\r\n                storeElement.classList.remove('is-hidden');\r\n            }\r\n            storeCount.push(obj.id); // Count number of stores within radius\r\n        } else {\r\n            if (storeElement) {\r\n                storeElement.classList.remove('is-visible');\r\n                storeElement.classList.add('is-hidden');\r\n            }\r\n        }\r\n    }\r\n\r\n    // Only fit bounds if any store hits\r\n    if (storeCount.length > 0) {\r\n        if (map) {\r\n            // update bounds\r\n            map.fitBounds(bounds);\r\n        }\r\n        document.getElementById('inventoryNohits').classList.add('is-hidden');\r\n        document.getElementById('inventoryShowAll').classList.add('is-hidden');\r\n    } else {\r\n        document.getElementById('inventoryNohits').classList.remove('is-hidden');\r\n        document.getElementById('inventoryShowAll').classList.remove('is-hidden');\r\n    }\r\n};\r\n\r\n// Tools\r\n// **************************\r\n\r\nconst getDistanceFromLatLonInKm = (lat1, lon1, lat2, lon2) => {\r\n    const R = 6371; // Radius of the earth in km\r\n    const dLat = deg2rad(lat2 - lat1); // deg2rad below\r\n    const dLon = deg2rad(lon2 - lon1);\r\n    const a =\r\n        Math.sin(dLat / 2) * Math.sin(dLat / 2) +\r\n        Math.cos(deg2rad(lat1)) *\r\n        Math.cos(deg2rad(lat2)) *\r\n        Math.sin(dLon / 2) *\r\n        Math.sin(dLon / 2);\r\n    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n    const d = R * c; // Distance in km\r\n    return d;\r\n};\r\nconst useMyLocationButton = document.querySelectorAll('._js-use-my-location');\r\n\r\n\r\nconst deg2rad = deg => deg * (Math.PI / 180);\r\n\r\nexport const initMap = () => {\r\n    getFavoriteStore()\r\n        .then(response => {\r\n            fs ='';\r\n            if (response && response.data !== '') {\r\n                fs = response.data;\r\n            }\r\n            initialMap();\r\n        })\r\n        .catch(error => {\r\n            initialMap();\r\n            //console.log(error)\r\n        });\r\n\r\n    function onGeolocateSuccess(pos) {\r\n        if (navigator.geolocation) {\r\n            const crd = pos.coords;\r\n            mapInventory(crd.latitude,\r\n                crd.longitude,\r\n                true,\r\n                crd.accuracy,\r\n                window.jsonInventory,\r\n                null,\r\n                true,\r\n            ); // True used to indicate if we actually have a user position\r\n            resetFields();\r\n        }\r\n    }\r\n\r\n    function onGeolocateError() {\r\n        useMyLocationButton.forEach(el => {\r\n            el.classList.add('disabled');\r\n        });\r\n    }\r\n\r\n    useMyLocationButton.forEach(el => {\r\n        el.addEventListener('click', e => {\r\n            navigator.geolocation.getCurrentPosition(onGeolocateSuccess, onGeolocateError, { timeout: 5000 });\r\n        });\r\n    });\r\n};\r\n\r\n\r\nexport const init = () => {\r\n    initMap();\r\n\r\n    /* Trigger \"show all\" button if list remains empty after 2 seconds to avoid grey map */\r\n    setTimeout(function () {\r\n        if (document.querySelectorAll('._js-inventory-store').length == 0) {\r\n            inventoryShowAll.click();\r\n        }\r\n    }, 2000);\r\n};\r\n","import * as mapInventory from \"./global/modules/map-inventory_wp\";\r\nmapInventory.init();\r\n"],"names":["map","fs","filteredJsonInventory","inventoryShowAll","postalCodeInput","ajax","axios","favourite","id","clearStore","store","resetFields","inventoryPostnumber","inventoryNoHits","updatePosition","searchInput","useMyLocationButton","el","searchQuery","postNordApiUrl","postNordQuery","postNordUrl","response","updateMapList","lat","long","mapInventory","e","distanceRounder","located","dist","toofar","radius","where","decodeEntities","encodedString","userLat","userLng","accuracy","stores","jsonInventory","sortOnDistance","storeItems","currentStore","selectedStore","addClicker","marker","content","infowindow","setUserPosition","lng","currentLat","currentLng","userPin","usersPositionMarker","markers","isInitial","myLatLng","storeCounter","bounds","boundsAll","mapOptions","objs","getDistanceFromLatLonInKm","b","distance","obj","sizes","x","distanceRound","fav","far","HTMLid","HTMLtitle","HTMLfav","HTMLsizes","HTMLadress","HTMLphone","HTMLnav","decodedTitle","contentString","pin","pinFav","HTMLlistItem","list","scrollToTarget","locateStore","targetElement","favId","setFavoriteStore","postalCodeInputButton","inventoryShowAllEvent","initialMap","getFavoriteStore","storeId","bodyFormData","updatedLat","updatedLng","updateRadius","storeCount","i","storeElement","lat1","lon1","lat2","lon2","dLat","deg2rad","dLon","a","deg","initMap","error","onGeolocateSuccess","pos","crd","onGeolocateError","init","mapInventory.init"],"mappings":"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"}