{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_custom_neuhaus_webshop/cartridge/client/default/js/storeLocator/mapOptions.js","webpack:///./cartridges/app_custom_neuhaus_webshop/cartridge/client/default/js/storeLocator/storeLocatorDetail.js","webpack:///./cartridges/app_custom_neuhaus_webshop/cartridge/client/default/js/storeLocator/storeLocatorHelper.js","webpack:///./cartridges/app_custom_neuhaus_webshop/cartridge/client/default/js/storeLocatorDetail.js","webpack:///./cartridges/app_custom_neuhaus_webshop/cartridge/client/default/js/util/distance.js"],"names":[],"mappings":";QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzLa;AACb,2BAA2B,mBAAO,CAAC,oIAAsB;;AAEzD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;ACXa;AACb;;AAEA,wBAAwB,mBAAO,CAAC,oHAAc;AAC9C,sBAAsB,mBAAO,CAAC,8GAAkB;;AAEhD;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA,mBAAmB,kCAAkC;AACrD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0DAA0D;AAC1D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnZa;;AAEb;AACA,IAAI,mBAAO,CAAC,iJAAmC;AAC/C,CAAC;;;;;;;;;;;;;ACJY;;AAEb;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA","file":"default/js/storeLocatorDetail.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./cartridges/app_custom_neuhaus_webshop/cartridge/client/default/js/storeLocatorDetail.js\");\n","module.exports = [\n {\n elementType: 'geometry',\n stylers: [\n {\n color: '#f5f5f5'\n }\n ]\n },\n {\n elementType: 'labels.icon',\n stylers: [\n {\n visibility: 'off'\n }\n ]\n },\n {\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#616161'\n }\n ]\n },\n {\n elementType: 'labels.text.stroke',\n stylers: [\n {\n color: '#f5f5f5'\n }\n ]\n },\n {\n featureType: 'administrative.land_parcel',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#bdbdbd'\n }\n ]\n },\n {\n featureType: 'poi',\n elementType: 'geometry',\n stylers: [\n {\n color: '#eeeeee'\n }\n ]\n },\n {\n featureType: 'poi',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#757575'\n }\n ]\n },\n {\n featureType: 'poi.park',\n elementType: 'geometry',\n stylers: [\n {\n color: '#e5e5e5'\n }\n ]\n },\n {\n featureType: 'poi.park',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#9e9e9e'\n }\n ]\n },\n {\n featureType: 'road',\n elementType: 'geometry',\n stylers: [\n {\n color: '#ffffff'\n }\n ]\n },\n {\n featureType: 'road.arterial',\n elementType: 'labels',\n stylers: [\n {\n visibility: 'off'\n }\n ]\n },\n {\n featureType: 'road.arterial',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#757575'\n }\n ]\n },\n {\n featureType: 'road.highway',\n elementType: 'geometry',\n stylers: [\n {\n color: '#dadada'\n }\n ]\n },\n {\n featureType: 'road.highway',\n elementType: 'labels',\n stylers: [\n {\n visibility: 'off'\n }\n ]\n },\n {\n featureType: 'road.highway',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#616161'\n }\n ]\n },\n {\n featureType: 'road.local',\n stylers: [\n {\n visibility: 'off'\n }\n ]\n },\n {\n featureType: 'road.local',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#9e9e9e'\n }\n ]\n },\n {\n featureType: 'transit.line',\n elementType: 'geometry',\n stylers: [\n {\n color: '#e5e5e5'\n }\n ]\n },\n {\n featureType: 'transit.station',\n elementType: 'geometry',\n stylers: [\n {\n color: '#eeeeee'\n }\n ]\n },\n {\n featureType: 'water',\n elementType: 'geometry',\n stylers: [\n {\n color: '#c9c9c9'\n }\n ]\n },\n {\n featureType: 'water',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#9e9e9e'\n }\n ]\n }\n];\n","'use strict';\nconst storeLocatorHelper = require('./storeLocatorHelper');\n\nconst init = () => {\n storeLocatorHelper.calculateCurrentlyOpen();\n storeLocatorHelper.getLocation();\n storeLocatorHelper.initMap();\n};\n\nmodule.exports = {\n init: init\n};\n","'use strict';\n/* globals google */\n\nconst mapStyleOptions = require('./mapOptions');\nconst distanceUtils = require('../util/distance');\n\n/**\n * gets open or closed date from opening hours string\n * @param {date} localDate localized date of today\n * @param {string} timeString open or close string with open/close hours\n * @returns {date} open/close date & time\n */\nfunction getOpenHours(localDate, timeString) {\n const [hours, minutes] = timeString.split(':');\n\n var openDate = new Date(localDate);\n openDate.setHours(hours, minutes);\n\n return openDate;\n}\n\n/**\n * Converts am and pm to 24 hour format\n * @param {string} time - time to convert\n * @returns {string} - 24 hour format of time var\n */\nfunction convert12To24HourFormat(time) {\n var hours = Number(time.match(/^(\\d+)/)[1]);\n var minutes = Number(time.match(/:(\\d+)/)[1]);\n\n var AMPM = time.match(/\\s(.*)$/)[1];\n if ((AMPM === 'pm' || AMPM === 'PM') && hours < 12) {\n hours += 12;\n }\n if ((AMPM === 'am' || AMPM === 'AM') && hours === 12) {\n hours -= 12;\n }\n\n var sHours = hours.toString();\n var sMinutes = minutes.toString();\n if (hours < 10) {\n sHours = '0' + sHours;\n }\n if (minutes < 10) {\n sMinutes = '0' + sMinutes;\n }\n\n return sHours + ':' + sMinutes;\n}\n\n/**\n * calculates if the store is currently open\n */\nfunction calculateCurrentlyOpen() {\n var openMessage = $('.openingHours').data('message-open');\n var closeMessage = $('.openingHours').data('message-close');\n\n var storeIDs = $('.storeID, .store-detail');\n storeIDs.each(function (i, data) {\n var storeID = $('#' + $(data).attr('id').toString());\n\n var localTimeZone = storeID.find('.openingHours').data('time-zone');\n var hourFormat = storeID.find('.openingHours').data('hour-format');\n var localTime = new Date().toLocaleString('en-US', {\n timeZone: localTimeZone\n });\n var localDate = new Date(localTime);\n\n const days = [\n 'sunday',\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday'\n ];\n const day = days[localDate.getDay()];\n var openingshours = storeID.find('.' + day).data(day);\n if (openingshours) {\n var openTime = openingshours.open;\n var closeTime = openingshours.close;\n if ((openTime && openTime !== 'closed') && (closeTime && closeTime !== 'closed')) {\n if (!hourFormat) {\n openTime = convert12To24HourFormat(openTime);\n closeTime = convert12To24HourFormat(closeTime);\n }\n\n if (closeTime) {\n var openDate = getOpenHours(localDate, openTime);\n var closeDate = getOpenHours(localDate, closeTime);\n\n if (openDate <= localDate && closeDate > localDate) {\n storeID.find('.openinfotext').text(openMessage + ' ' + openingshours.close);\n return;\n }\n }\n }\n }\n\n storeID.find('.openinfo').addClass('openinfoclosed');\n storeID.find('.circle').addClass('circleClosed');\n storeID.find('.openinfotext').text(closeMessage);\n });\n}\n\n/**\n * Sort stores by distance\n * @param {Object} a - fist element to sort\n * @param {Object} b - second element to sort\n * @returns {integer} -\n */\nfunction sortAscending(a, b) {\n return parseInt($(a).find('.distance-result').text(), 10) - parseInt($(b).find('.distance-result').text(), 10);\n}\n\n/**\n *\n * @param {Object} position the current position of the client\n */\nfunction calculateDistances(position) {\n var elements = document.getElementsByClassName('distance-result');\n $('.distance-text').removeClass('d-none');\n\n for (var i = 0; i < $('.distance-result').length; i++) {\n var distance = distanceUtils.getDistanceFromLatLon(\n position,\n parseFloat(elements[i].getAttribute('data-latitude')),\n parseFloat(elements[i].getAttribute('data-longitude'))\n );\n\n elements[i].innerHTML = $('html').data('country').toLowerCase() === 'us' ? distance.mi : distance.km;\n }\n\n // start to rearrange the tiles based on distance\n var storeLocatorResults = $('.store-locator-container .results');\n var pickupInStoreResults = $('.pickup-in-store-form .results');\n\n if (storeLocatorResults.length) {\n var sortedStores = storeLocatorResults.children().toArray().sort(sortAscending);\n storeLocatorResults.html('');\n storeLocatorResults.append(sortedStores);\n }\n if (pickupInStoreResults.length) {\n var sortedShops = pickupInStoreResults.children().toArray().sort(sortAscending);\n pickupInStoreResults.html('');\n pickupInStoreResults.append(sortedShops);\n }\n}\n\n/**\n * gets the position of the client\n */\nfunction getLocation() {\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(calculateDistances);\n }\n}\n\n/**\n * Adds custom zoom buttons to the map\n * @param {Object} div Div that will be created\n * @param {Object} map Google Map that will be updated\n */\nfunction zoomControl(div, map) {\n // Get the control DIV. We'll attach our control UI to this DIV.\n var controlDiv = div;\n\n controlDiv.className = 'zoomButtons';\n\n var zoomin = document.createElement('div');\n zoomin.title = 'Zoom in';\n controlDiv.appendChild(zoomin);\n\n var zoominText = document.createElement('div');\n zoominText.innerHTML = '+';\n zoomin.appendChild(zoominText);\n\n var zoomout = document.createElement('div');\n zoomout.title = 'Zoom out';\n controlDiv.appendChild(zoomout);\n\n var zoomoutText = document.createElement('div');\n zoomoutText.innerHTML = \"-\";\n zoomout.appendChild(zoomoutText);\n\n // Setup the click event listeners for zoom-in, zoom-out:\n google.maps.event.addDomListener(zoomout, 'click', function () {\n var currentZoomLevel = map.getZoom();\n if (currentZoomLevel !== 0) {\n map.setZoom(currentZoomLevel - 1);\n }\n });\n\n google.maps.event.addDomListener(zoomin, 'click', function () {\n var currentZoomLevel = map.getZoom();\n if (currentZoomLevel !== 21) {\n map.setZoom(currentZoomLevel + 1);\n }\n });\n}\n\n/**\n *\n * @param {float} zoomLevel the default zoom level of the map\n * @param {Object} latlng the latitude and longitude of the client\n * @returns {Object} the map options\n */\nfunction getMapOptions(zoomLevel, latlng) {\n return {\n zoom: zoomLevel,\n maxZoom: 17,\n center: latlng,\n gestureHandling: 'cooperative',\n mapTypeControl: false,\n fullscreenControl: false,\n streetViewControl: false,\n disableDefaultUI: true,\n styles: mapStyleOptions\n };\n}\n\n/**\n * handles generation and positioning markers\n * @param {Object} item - store object\n * @param {*} map - google maps item\n * @param {Object} markerImg - marker icon svg\n * @returns {*} marker\n */\nfunction generateMapsMarker(item, map, markerImg) {\n var storeLocation = new google.maps.LatLng(\n item.latitude,\n item.longitude\n );\n var marker = new google.maps.Marker({\n position: storeLocation,\n map: map,\n title: item.name,\n icon: markerImg\n });\n\n return marker;\n}\n\n/**\n * Customized google map marker icon with svg format\n * @param {string} color - color of the marker\n * @returns {Object} Marker\n */\nfunction markerImg(color) {\n var object = {\n path: 'M17.0347 11.5901C17.0347 14.7891 14.46 17.384 11.2841 17.384C8.10821 17.384 5.53356 14.7891 5.53356 11.5901C5.53356 8.39107 8.10821 5.79618 11.2841 5.79618C14.46 5.79389 17.0347 8.38878 17.0347 11.5901ZM23 11.5901C23 5.1875 17.853 0 11.5011 0C5.14929 0 0 5.1875 0 11.5901C0 14.4046 0.996855 16.9835 2.6515 18.9926L11.5102 31.871L20.4977 18.805C20.8209 18.3977 21.1171 17.9698 21.3838 17.519L21.4742 17.3885H21.4584C22.4371 15.6792 23 13.6999 23 11.5901Z',\n fillColor: color,\n fillOpacity: 1,\n width: 23,\n height: 32,\n fill: 'none',\n strokeWeight: 0,\n anchor: new google.maps.Point(13, 30),\n labelOrigin: new google.maps.Point(12, 12)\n };\n\n return object;\n}\n\n/**\n * Uses google maps api to render a map\n * @param {Object} centerPosition the latitude and longitude that will be used for the center\n * @param {string} radius the radius that will be used\n * @param {bool} openNearestShop boolean to indicate that the nearest shop should open on the map\n */\nfunction maps(centerPosition, radius, openNearestShop) {\n var map;\n var infowindow = new google.maps.InfoWindow();\n var latlng;\n var zoomLevel = 4;\n\n if (centerPosition) {\n latlng = centerPosition;\n switch (radius) {\n case '15':\n zoomLevel = 11; // ~16 miles in map width\n break;\n case '30':\n zoomLevel = 10;\n break;\n case '50':\n zoomLevel = 9.2;\n break;\n case '100':\n zoomLevel = 8.4;\n break;\n case '300':\n zoomLevel = 6.5;\n break;\n default:\n zoomLevel = 11;\n }\n } else {\n var searchKeys = $('.store-locator-container .results').data('search-key');\n if (searchKeys && searchKeys.lat && searchKeys.long) {\n latlng = new google.maps.LatLng(searchKeys.lat, searchKeys.long);\n zoomLevel = 11;\n } else if ($('html').data('country').toLowerCase() === 'us') {\n // Init U.S. Map in the center of the viewport\n latlng = new google.maps.LatLng(37.09024, -95.712891);\n } else {\n // Init EU Map in the center of the viewport\n latlng = new google.maps.LatLng(50.8499966, -4.3499986);\n }\n }\n\n var mapOptions = getMapOptions(zoomLevel, latlng);\n map = new google.maps.Map($('.map-canvas')[0], mapOptions);\n\n // Loads custom zoom controls\n var zoomDiv = document.createElement('div');\n zoomControl(zoomDiv, map);\n zoomDiv.index = 1;\n map.controls[google.maps.ControlPosition.BOTTOM_RIGHT].push(zoomDiv);\n\n var bounds = new google.maps.LatLngBounds();\n\n if ($('.store-detail').data('store')) {\n var object = $('.store-detail').data('store');\n var marker = generateMapsMarker(object, map, markerImg('#cf7c58'));\n\n bounds.extend(marker.position);\n map.fitBounds(bounds);\n } else {\n var mapdiv = $('.map-canvas').attr('data-locations');\n mapdiv = JSON.parse(mapdiv);\n\n Object.keys(mapdiv).forEach(function (key) {\n var item = mapdiv[key];\n\n var marker = generateMapsMarker(item, map, markerImg('#503223'));\n\n marker.addListener('click', function () {\n infowindow.setOptions({\n content: item.infoWindowHtml\n });\n infowindow.open(map, marker);\n });\n\n var searchKeys = $('.store-locator-container .results').data('search-key');\n if (openNearestShop && item.latitude === searchKeys.lat && item.longitude === searchKeys.long) {\n infowindow.setOptions({\n content: item.infoWindowHtml\n });\n infowindow.open(map, marker);\n }\n\n // Create a minimum bound based on a set of storeLocations\n bounds.extend(marker.position);\n });\n\n // Fit the all the store marks in the center of a minimum bounds when any store has been found.\n if (mapdiv && mapdiv.length !== 0) {\n map.fitBounds(bounds);\n }\n }\n}\n\n/**\n * gets map function depending on open nearest state\n */\nfunction createMapAndMarkers() {\n if ($('.store-locator-container').data('open-nearest')) {\n var searchKeys = $('.store-locator-container .results').data('search-key');\n if (searchKeys) {\n maps(new google.maps.LatLng(\n searchKeys.lat,\n searchKeys.long\n ), '', true);\n } else {\n maps();\n }\n } else {\n maps();\n }\n}\n\n/**\n * Initializes google map\n * @returns {boolean} retuns true if map is loaded\n */\nfunction initMap() {\n if ($('.map-canvas').data('has-google-api')) {\n createMapAndMarkers();\n return true;\n }\n\n $('.store-locator-no-apiKey').show();\n return false;\n}\n\nmodule.exports = {\n calculateCurrentlyOpen: calculateCurrentlyOpen,\n getLocation: getLocation,\n initMap: initMap,\n maps: maps,\n calculateDistances: calculateDistances\n};\n","'use strict';\n\n$(document).ready(function () {\n require('./storeLocator/storeLocatorDetail').init();\n});\n","'use strict';\n\n/**\n * auxiliary function to calculate the distance\n * @param {float} deg degrees\n * @returns {float} radius\n */\nfunction deg2rad(deg) {\n return deg * (Math.PI / 180);\n}\n\n/**\n *\n * @param {Object} position the current position of the client\n * @param {float} lat2 latitude of the store\n * @param {float} lon2 longitude of the store\n * @returns {float} the distance between the client and the store\n */\nfunction getDistanceFromLatLon(position, lat2, lon2) {\n var lat1 = position.coords.latitude;\n var lon1 = position.coords.longitude;\n\n var R = 6371; // Radius of the earth in km\n var dLat = deg2rad(lat2 - lat1); // deg2rad below\n var dLon = deg2rad(lon2 - lon1);\n\n /* eslint-disable no-mixed-operators */\n var a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(deg2rad(lat1)) *\n Math.cos(deg2rad(lat2)) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2);\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n var d = R * c; // Distance in km\n var dmi = Math.round(d * 0.621371192); // Distance in miles\n /* eslint-enable no-mixed-operators */\n\n return {\n mi: dmi,\n km: Math.round(d)\n };\n}\n\nmodule.exports = {\n getDistanceFromLatLon: getDistanceFromLatLon\n};\n"],"sourceRoot":""}