{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_bab_core/cartridge/client/default/js/storeLocator.js","webpack:///./cartridges/app_bab_core/cartridge/client/default/js/storeLocator/storeLocator.js","webpack:///./cartridges/app_bab_core/cartridge/client/default/js/utils/utilities.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/storeLocator/storeLocator.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/util.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;;AAEb,qBAAqB,mBAAO,CAAC,uFAAW;;AAExC;AACA,mBAAmB,mBAAO,CAAC,uHAA6B;AACxD,CAAC;;;;;;;;;;;;;ACND;;AAEa;;AAEb,kBAAkB,mBAAO,CAAC,oGAAoB;AAC9C,mBAAmB,mBAAO,CAAC,iIAAgC;;AAE3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8DAA8D;AAC9D;AACA;;AAEA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,SAAS;;AAET;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,0BAA0B;AAC7C,2DAA2D,oBAAoB,GAAG;AAClF,0GAA0G;AAC1G;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4EAA4E,iBAAiB;AAC7F,aAAa;AACb,wCAAwC,iBAAiB;AACzD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAA0C;AACnH;AACA;AACA,wDAAwD,0CAA0C;AAClG;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL,CAAC;;AAED;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0DAA0D;;AAE1D;AACA,sBAAsB,sBAAsB;AAC5C;AACA;AACA;AACA;AACA,oCAAoC,uBAAuB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C,UAAU;AACpD;AACA,cAAc,IAAI;AAClB,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,IAAI;AAC9B,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,SAAS,IAAI,eAAe,QAAQ,eAAe,IAAI,oBAAoB;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,6BAA6B;AAC7B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,8EAA8E,IAAI;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,eAAe;AACzE,6BAA6B;AAC7B;AACA,wFAAwF,sCAAsC;AAC9H,8DAA8D,eAAe;AAC7E;AACA,yBAAyB;AACzB,4DAA4D,SAAS,IAAI,eAAe,QAAQ,eAAe,IAAI,oBAAoB;AACvI;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,yBAAyB;AACzB,4DAA4D,SAAS,IAAI,eAAe,QAAQ,eAAe,IAAI,oBAAoB;AACvI;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;AAEA;;;;;;;;;;;;;ACvhCa;;AAEb;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,UAAU;AACrB,WAAW,IAAI;AACf,YAAY,OAAO;AACnB;AACA;;AAEA;AACA,8BAA8B;AAC9B,yDAAyD;AACzD;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,oBAAoB,cAAc,EAAE,gBAAgB,EAAE,wBAAwB,uBAAuB,QAAQ;;AAE7G;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxDA;AACa;;AAEb;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,SAAS;;AAET;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;;AAET;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,YAAY;AACvB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB,0DAA0D;;AAE1D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;ACvQa;;AAEb;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA","file":"default/js/storeLocator.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_bab_core/cartridge/client/default/js/storeLocator.js\");\n","'use strict';\n\nvar processInclude = require('base/util');\n\n$(document).ready(function () {\n processInclude(require('./storeLocator/storeLocator'));\n});\n","/* globals google */\n\n'use strict';\n\nconst utilities = require('../utils/utilities');\nlet storeLocator = require('base/storeLocator/storeLocator');\n\nconst isStoreLocator = $('body').find('.store-locator-main').length > 0;\nconst isPDP = $('body').find('.product-detail').length > 0;\nconst isPLP = $('body').find('.search-results').length > 0;\nconst isCheckout = $('body').find('#checkout-main').length > 0;\nconst isCart = $('body').find('.cart-page').length > 0;\nconst isStoreLanding = $('body').find('.store-landing').length > 0;\nconst isModal = isPLP || isCheckout || isCart;\nlet prevWidth = window.innerWidth;\nconst miles = 0.000621371;\n\nfunction appendToUrl(url, params) {\n let newUrl = url;\n newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n return key + '=' + encodeURIComponent(params[key]);\n }).join('&');\n\n return newUrl;\n}\n\nfunction getPageLoadDistances() {\n let pageLatitude = $('.store-locator-main').data('currLatitude');\n let pageLongitude = $('.store-locator-main').data('currLongitude');\n let pageLocation = new google.maps.LatLng(pageLatitude, pageLongitude);\n let $storeResults = $('.results .results-list .store-details');\n\n $storeResults.each(function () {\n let lat = $(this).data('latitude');\n let long = $(this).data('longitude');\n let $storeDistance = $(this).find('.store-distance');\n\n let storeLocation = new google.maps.LatLng(lat, long);// eslint-disable-next-line\n let distance = google.maps.geometry.spherical.computeDistanceBetween(pageLocation, storeLocation) * miles;\n distance = distance.toFixed(1);\n\n $storeDistance.text(distance + ' miles');\n });\n}\n\nfunction maps() {\n let map;\n let $mapCanvas = $('.map-canvas');\n // eslint-disable-next-line\n let infowindow = new google.maps.InfoWindow();\n\n // Init U.S. Map in the center of the viewport\n // eslint-disable-next-line\n let latlng = new google.maps.LatLng(37.09024, -95.712891);\n let mapOptions = {\n scrollwheel: false,\n zoom: 4,\n center: latlng\n };\n // eslint-disable-next-line\n map = new google.maps.Map($mapCanvas[0], mapOptions);\n let mapdiv = $mapCanvas.attr('data-locations');\n\n mapdiv = JSON.parse(mapdiv);\n\n // eslint-disable-next-line\n let bounds = new google.maps.LatLngBounds();\n\n let markerDefault = $mapCanvas.data('iconDefault');\n let markerMyWorkshop = $mapCanvas.data('iconMyWorkshop');\n\n Object.keys(mapdiv).forEach(function (key) {\n let item = mapdiv[key];\n // let label = parseInt(key, 10) + 1;\n let storeLocation = new google.maps.LatLng(item.latitude, item.longitude);\n let marker = new google.maps.Marker({\n position: storeLocation,\n map: map,\n title: item.name,\n icon: {\n url: item.isPreferred || item.isLanding ? markerMyWorkshop : markerDefault,\n anchor: new google.maps.Point(13, 30),\n scaledSize: new google.maps.Size(40, 40)\n }\n // label: { text: label.toString(), color: 'green', fontSize: '16px' }\n });\n\n marker.addListener('click', function () {\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 if (mapdiv && mapdiv.length === 1) {\n map.setZoom(17);\n map.setCenter(marker.position);\n }\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 > 1) {\n map.fitBounds(bounds);\n }\n\n getPageLoadDistances();\n}\n\nfunction getPrefferdStoreAddress(storeAddress) {\n let address = storeAddress.address1;\n if (storeAddress.address2.length > 0) {\n address += ' ' + storeAddress.address2;\n }\n if (storeAddress.city.length > 0) {\n address += ' ' + storeAddress.city;\n }\n if (storeAddress.stateCode.length > 0) {\n address += ', ' + storeAddress.stateCode;\n }\n address += ' ' + storeAddress.postalCode;\n return address;\n}\n\nfunction updatePrefferedDirections(direction) {\n let $direction = $('a.store-get-directions');\n let directionHref = $direction.attr('href');\n let updatedDIrectionHref = directionHref.split('=');\n let newDirectionHref = updatedDIrectionHref[0] + '=' + updatedDIrectionHref[1] + '=' + direction.address1 + ',' + direction.city + ',' + direction.stateCode + ',' + direction.postalCode;\n return newDirectionHref;\n}\n\nfunction updateStorePhone(storePhone) {\n let $storePhone = $('a.storelocator-phone');\n let storePhoneHref = $storePhone.attr('href');\n let updatedPhoneHref = storePhoneHref.split(':');\n let newPhoneHref = updatedPhoneHref[0] + '=' + storePhone.phone;\n return newPhoneHref;\n}\n\nfunction toggleCardVisibility(storeID, $cardBodies) {\n $cardBodies.each(function () {\n let $cardBody = $(this);\n let cardStoreID = $cardBody.data('store-id');\n\n if ((storeID !== undefined) && (cardStoreID !== undefined)) {\n if (cardStoreID === storeID) {\n $cardBody.closest('.card').addClass('preffered d-none');\n } else {\n $cardBody.closest('.card').removeClass('preffered d-none');\n }\n }\n });\n}\n\nfunction makeMyWorkshop($this) {\n let $selectedCard = $this.closest('.card');\n let $selectedCardMakeBtn = $selectedCard.find('.makeItMyWorkshopBtn');\n let $selectedFlag = $selectedCard.find('.preferred-ribbon');\n let $currentWorkshop = $selectedCard.siblings('.my-workshop');\n let $currentWorkshopMakeBtn = $currentWorkshop.find('.makeItMyWorkshopBtn');\n let $currentFlag = $currentWorkshop.find('.preferred-ribbon');\n\n $selectedCard.addClass('my-workshop');\n $selectedFlag.removeClass('d-none');\n $selectedCardMakeBtn.removeClass('d-inline-flex').addClass('d-none');\n\n $currentWorkshop.removeClass('my-workshop');\n $currentFlag.addClass('d-none');\n $currentWorkshopMakeBtn.removeClass('d-none').addClass('d-inline-flex');\n}\n\nfunction makeMyWorkshopPDP($this, prefferedStoreData, storeHours) {\n let $selectedCard = $this.closest('.card');\n let $previousCard = $selectedCard.siblings('.my-workshop');\n let $prefferedStore = $('.prefered-store');\n let $bedged = $prefferedStore.find('.preferred-ribbon');\n let $storePhone = $('.store-phone-no');\n let storeDistance = $selectedCard.find('.store-distance').text();\n let $myPrefferedWorkshop = $('.myPrefferedWorkshop .store-details');\n\n // Stock msg update\n let $stockDiv = $selectedCard.find('.stockMsg').clone(true).html();\n $myPrefferedWorkshop.find('.stockMsg').removeClass('d-none').empty().append($stockDiv);\n $myPrefferedWorkshop.find('.stocksInfo').addClass('d-none');\n\n $prefferedStore.removeClass('d-none');\n $bedged.removeClass('d-none');\n $storePhone.removeClass('d-none');\n\n if ($previousCard.length > 0) {\n $previousCard.find('.preferred-ribbon').addClass('d-none');\n $previousCard.find('.makeItMyWorkshopBtn').removeClass('d-none');\n $previousCard.removeClass('my-workshop preffered d-none');\n }\n\n $selectedCard.addClass('my-workshop preffered d-none');\n\n // Adding preffered store value\n // Updating Store ID\n let storeId = $this.closest('.card-body').data('store-id');\n $myPrefferedWorkshop.data('store-id', storeId);\n // Updating Store Name\n $myPrefferedWorkshop.find('.store-name .storeName').text(prefferedStoreData.name);\n // updating store Address\n let storeAddress = getPrefferdStoreAddress(prefferedStoreData);\n $myPrefferedWorkshop.find('.store-full-address').text(storeAddress);\n // Updating Store Direction\n let directionHref = updatePrefferedDirections(prefferedStoreData);\n $myPrefferedWorkshop.find('a.store-get-direction').attr('href', directionHref);\n $myPrefferedWorkshop.find('.store-distance').text(storeDistance);\n // Updating Store Phone Number\n let phoneHref = updateStorePhone(prefferedStoreData);\n $myPrefferedWorkshop.find('a.storelocator-phone').attr('href', phoneHref).text(prefferedStoreData.phone);\n // Updating Store Hours\n $myPrefferedWorkshop.find('.store-hours .store-availability-info').removeClass('d-none').html(storeHours);\n\n if (prefferedStoreData.buildParty) {\n $myPrefferedWorkshop.find('.store-book-party').removeClass('d-none');\n } else {\n $myPrefferedWorkshop.find('.store-book-party').addClass('d-none');\n }\n}\n\nfunction makeMyWorkshopForCheckout($this, prefferedStoreData, storeHours) {\n let $selectCardID = prefferedStoreData.ID;\n let $selectResults = $('.results .card-body[data-store-id=' + $selectCardID + ']');\n let $selectedCard = $selectResults.closest('.card');\n let $prefferedStore = $('.prefered-store');\n let $bedged = $prefferedStore.find('.preferred-ribbon');\n let $storePhone = $('.store-phone-no');\n let storeDistance = $selectedCard.find('.store-distance').text();\n let $myPrefferedWorkshop = $('.myPrefferedWorkshop .store-details');\n\n $prefferedStore.removeClass('d-none');\n $bedged.removeClass('d-none');\n $storePhone.removeClass('d-none');\n $('.results .card-body').closest('.card.prefered-store').removeClass('previous');\n if ($selectResults.hasClass('checked') || $selectResults.closest('.prefered-store').hasClass('preffered') || $selectResults.closest('.prefered-store').hasClass('previous')) {\n $selectResults.closest('.card.prefered-store').addClass('previous d-none');\n $selectResults.find('.custom-control-input').prop('checked', '');\n }\n\n let $prefferedStoreResults = $('.results-card .results');\n let $storeSelected = $prefferedStoreResults.find('.card.preffered');\n $storeSelected.removeClass('preffered d-none');\n\n // Adding preffered store value\n // Updating Store ID\n let storeId = $selectResults.closest('.card-body').data('store-id');\n $myPrefferedWorkshop.attr('data-store-id', storeId);\n // Updating Store Name\n $myPrefferedWorkshop.find('.name-distance .name').text(prefferedStoreData.name);\n $myPrefferedWorkshop.find('.name-distance .store-distance').text(storeDistance);\n // updating store Address\n $myPrefferedWorkshop.find('.address1').text(prefferedStoreData.address1);\n $myPrefferedWorkshop.find('.city').text(prefferedStoreData.city);\n $myPrefferedWorkshop.find('.stateCode .statecode').text(prefferedStoreData.stateCode);\n $myPrefferedWorkshop.find('.stateCode .postalCode').text(prefferedStoreData.postalCode);\n $myPrefferedWorkshop.closest('.card.custom-store-card').find('.custom-control-input').prop('checked', 'checked');\n $myPrefferedWorkshop.closest('.card.custom-store-card').find('.card-body').addClass('checked');\n\n // Updating Store Phone Number\n let phoneHref = updateStorePhone(prefferedStoreData);\n $myPrefferedWorkshop.find('a.storelocator-phone').attr('href', phoneHref).text(prefferedStoreData.phone);\n // Updating Store Hours\n $myPrefferedWorkshop.find('.store-hours .store-availability-info').removeClass('d-none').html(storeHours);\n}\n\nfunction getCoordinates(storePosition) {\n let isPhoneModal = $('#modal-storeLocator-sm').length > 0;\n let phoneModalPin = $('#modal-storeLocator-sm #store-postal-code').val();\n let pincode = $('#store-postal-code').val();\n\n if (isPhoneModal && (phoneModalPin !== '')) {\n pincode = $('#modal-storeLocator-sm #store-postal-code').val();\n }\n // eslint-disable-next-line\n let geocoder = new google.maps.Geocoder();\n\n if (pincode) {\n // User provided a pincode\n geocoder.geocode({ address: pincode }, function (results, status) {\n // eslint-disable-next-line\n if (status === google.maps.GeocoderStatus.OK) {\n let userLatitude = results[0].geometry.location.lat();\n let userLongitude = results[0].geometry.location.lng();\n // eslint-disable-next-line\n let userLocation = new google.maps.LatLng(userLatitude, userLongitude);\n calculateDistances(storePosition, userLocation, miles);\n }\n });\n } else {\n // User clicked on detect location button\n // eslint-disable-next-line\n if (navigator.geolocation) {\n // eslint-disable-next-line\n navigator.geolocation.getCurrentPosition(\n function (position) {\n let userLatitude = position.coords.latitude;\n let userLongitude = position.coords.longitude;// eslint-disable-next-line\n let userLocation = new google.maps.LatLng(userLatitude, userLongitude);\n calculateDistances(storePosition, userLocation, miles);\n }\n );\n } else {\n // Error\n }\n }\n}\n\nfunction calculateDistances(storePosition, userLocation, miles) {\n for (let i = 0; i < storePosition.length; i++) {\n let $storeID = $('.card').find(`.card-body#store-${storePosition[i].ID}`);// eslint-disable-next-line\n let storeLocation = new google.maps.LatLng(storePosition[i].latitude, storePosition[i].longitude);// eslint-disable-next-line\n let distanceInMeters = google.maps.geometry.spherical.computeDistanceBetween(userLocation, storeLocation) * miles;\n storePosition[i] = distanceInMeters.toFixed(1);\n let $storeDistance = $storeID.find('.store-distance');\n $storeDistance.text(storePosition[i] + ' miles');\n\n let $anchorTag = $storeID.find('.btn-workshop-details');\n if ($anchorTag.is(':visible')) {\n let currentHref = $anchorTag.attr('href');\n if (currentHref.includes('dist=undefined')) {\n currentHref = currentHref.replace('dist=undefined', `dist=${storePosition[i]}`);\n } else if (!currentHref.includes('dist=')) {\n currentHref += `&dist=${storePosition[i]}`;\n }\n $anchorTag.attr('href', currentHref);\n }\n }\n}\n\nfunction pickup() {\n const $pickupinfoSection = $('.pickupinfo-section');\n const $shippingAddressBlock = $('.shipping-address-block');\n const $formGroupNone = $shippingAddressBlock.find('.form-group');\n\n if ($(\"#PickUp\").is(\":checked\")) {\n $pickupinfoSection.removeClass('d-none');\n $formGroupNone.addClass('d-none');\n $shippingAddressBlock.find('.form-group.dwfrm_shipping_shippingAddress_addressFields_firstName').addClass('d-block');\n $shippingAddressBlock.find('.form-group.dwfrm_shipping_shippingAddress_addressFields_lastName').addClass('d-block');\n $shippingAddressBlock.find('.form-group.dwfrm_shipping_shippingAddress_addressFields_phone').addClass('d-block');\n $('.shipping-form ').attr('data-address-mode', 'new');\n $('.shipping-form ').find('.shipment-selector-block').addClass('d-none');\n } else {\n $pickupinfoSection.addClass('d-none');\n $formGroupNone.removeClass('d-none');\n $shippingAddressBlock.find('.form-group.dwfrm_shipping_shippingAddress_addressFields_firstName').removeClass('d-block');\n $shippingAddressBlock.find('.form-group.dwfrm_shipping_shippingAddress_addressFields_lastName').removeClass('d-block');\n $shippingAddressBlock.find('.form-group.dwfrm_shipping_shippingAddress_addressFields_phone').removeClass('d-block');\n $('.shipping-form ').find('.shipment-selector-block').removeClass('d-none');\n }\n}\n\n$('input[name=\"pickupstore\"]').on('click', function () {\n pickup();\n let inStoreOOS = $('.inStoreOOS').length > 0;\n let url = $(this).data('url');\n let isStore = {\n isStore: $(this).data('istore'),\n isStoreOOS: inStoreOOS\n };\n $.spinner().start();\n $.ajax({\n url: url,\n type: 'POST',\n dataType: 'json',\n data: isStore,\n success: function (data) {\n if (data.order) {\n $('body').trigger('checkout:updateCheckoutView',\n {\n order: data.order,\n customer: data.customer,\n options: { keepOpen: true },\n shippingDiscounts: data.shippingDiscounts\n });\n }\n let $saveAddress = $('input[name=dwfrm_shipping_shippingAddress_shippingSaveForFutureUse]');\n if (data.order.shipmentType === 'isStore') {\n if ($saveAddress.is(':checked')) {\n $saveAddress.attr('checked', false);\n $saveAddress.val(false);\n }\n $saveAddress.closest('.form-group').addClass('d-none');\n $('input[name=dwfrm_shipping_shippingAddress_shippingAddressUseAsBillingAddress]').attr('checked', false);\n $('input[name=dwfrm_shipping_shippingAddress_shippingAddressUseAsBillingAddress]').closest('.form-group').addClass('d-none');\n } else {\n $saveAddress.closest('.form-group').removeClass('d-none');\n if ($saveAddress.is(':checked')) {\n $saveAddress.attr('checked', true);\n $saveAddress.val(true);\n }\n $('input[name=dwfrm_shipping_shippingAddress_shippingAddressUseAsBillingAddress]').closest('.form-group').removeClass('d-none');\n $('input[name=dwfrm_shipping_shippingAddress_shippingAddressUseAsBillingAddress]').attr('checked', true);\n }\n const $preferredStoreDetails = $('.preferredStoreDetails');\n const $shippingAddressBlock = $('.shipping-form');\n if (data.error) {\n $('.submit-shipping').attr('disabled', true);\n } else {\n $('.submit-shipping').attr('disabled', false);\n }\n if ($preferredStoreDetails.length > 0 && $(\"#PickUp\").is(\":checked\")) {\n const address1 = $preferredStoreDetails.find('address .address1').text();\n const city = $preferredStoreDetails.find('address .city').text();\n const countryCode = $preferredStoreDetails.find('address .countryCode').text();\n const statecode = $preferredStoreDetails.find('address .statecode').text();\n const postalCode = $preferredStoreDetails.find('address .postalCode').text();\n\n $shippingAddressBlock.find('.form-group .shippingAddressOne').val(address1);\n $shippingAddressBlock.find('.form-group .shippingCountry').val(countryCode);\n $shippingAddressBlock.find('.form-group .shippingState').val(statecode);\n $shippingAddressBlock.find('.form-group .State' + countryCode).val(statecode);\n $shippingAddressBlock.find('.form-group .shippingAddressCity').val(city);\n $shippingAddressBlock.find('.form-group .shippingZipCode').val(postalCode);\n } else {\n if (data.customer.addresses.length > 0) {\n $('.shipping-form ').attr('data-address-mode', 'edit');\n } else {\n $('.shipping-form ').attr('data-address-mode', 'new');\n }\n $('.shipping-form .form-group .form-control:not(.shippingCountry)').each(function () {\n $(this).val('');\n });\n $('.shipping-form .form-group .form-control.shippingCountry').val($(\".shipping-form .form-group .form-control.shippingCountry option:first\").val());\n if (data.customer.registeredUser && data.customer.addresses.length > 0) {\n const $shippingAddressforRegisterUser = $('.shipping-form .shipping-address-block');\n const $SelectedAddressData = $('#shipmentSelector-default').find('.radio-line.checked .custom-control-input');\n $shippingAddressforRegisterUser.find('.form-group .shippingFirstName').val($SelectedAddressData.data('first-name'));\n $shippingAddressforRegisterUser.find('.form-group .shippingLastName').val($SelectedAddressData.data('last-name'));\n $shippingAddressforRegisterUser.find('.form-group .shippingPhoneNumber').val($SelectedAddressData.data('phone'));\n $shippingAddressforRegisterUser.find('.form-group .shippingAddressOne').val($SelectedAddressData.data('address1'));\n $shippingAddressforRegisterUser.find('.form-group .shippingAddressTwo').val($SelectedAddressData.data('address2'));\n $shippingAddressforRegisterUser.find('.form-group .shippingCountry').val($SelectedAddressData.data('country-code'));\n $shippingAddressforRegisterUser.find('.form-group .shippingState').val($SelectedAddressData.data('state-code'));\n $shippingAddressforRegisterUser.find('.form-group .shippingAddressCity').val($SelectedAddressData.data('city'));\n $shippingAddressforRegisterUser.find('.form-group .shippingZipCode').val($SelectedAddressData.data('postal-code'));\n let $countrySelection = $('#dwfrm_shipping .countrySelection');\n $countrySelection.find('.countryHide').addClass('d-none');\n const $countryHide = $countrySelection.find(`.State${$SelectedAddressData.data('country-code')}`).closest('.countryHide');\n if ($countryHide.length) {\n $countryHide.removeClass('d-none');\n $countrySelection.find(`.State${$SelectedAddressData.data('country-code')}`).val($SelectedAddressData.data('state-code'));\n $countrySelection.find('.country-col:not(.account-country)').addClass('col-sm-6').removeClass('col-12');\n } else {\n $countrySelection.find('.country-col').addClass('col-12').removeClass('col-sm-6 col-md-6');\n }\n }\n }\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n});\n\n$('.modal-storeLocator input[name=\"radio-test\"]').on('click', function () {\n $('.modal-storeLocator .card-body').removeClass('checked');\n if ($('.modal-storeLocator .card-body').hasClass('checked')) {\n $('.modal-storeLocator .card-body').removeClass('checked');\n } else {\n $(this).closest('.card-body').addClass('checked');\n }\n});\n\nfunction findWorkshop() {\n $('.store-search').on('click', '.btn-storelocator-search', function (event) {\n event.preventDefault();\n const $inputField = $('.store-search #store-postal-code');\n const $postalCode = $inputField.val();\n const $selectPickupStore = $('#select-pickup-store');\n if ($postalCode) {\n $('.modal-storeLocator').find('#store-postal-code').val($postalCode);\n $selectPickupStore.find('.btn-storelocator-search').trigger('click');\n $selectPickupStore.modal('show');\n } else {\n $inputField.addClass('is-invalid');\n $('.store-search .invalid-feedback').text($inputField.attr('data-error-message'));\n }\n });\n}\n\nfunction selectPickupStore() {\n $('#select-pickup-store .results-card .results').on('click', '[name=\"storelocators\"]', function () {\n $(this).closest('#select-pickup-store ').find('[name=\"storelocators\"]').removeAttr('checked', '');\n $(this).closest('#select-pickup-store').find('.card-body').removeClass('checked');\n if ($(this).is(':checked')) {\n $(this).attr('checked', 'checked');\n $(this).closest('.card-body').addClass('checked');\n } else {\n $(this).closest('#select-pickup-store').find('[name=\"storelocators\"]').removeAttr('checked', '');\n $(this).closest('#select-pickup-store').find('.card-body').removeClass('checked');\n }\n });\n}\n\nfunction updateStoresResults(data) {\n let $resultsDiv = $('.results');\n let $mapDiv = $('.map-canvas');\n let hasResults = data.stores.length > 0;\n\n if (!hasResults) {\n $('.store-locator-no-results').show().removeClass('d-none');\n $('.result-set').hide();\n } else {\n $('.store-locator-no-results').hide().addClass('d-none');\n $('.result-set').show();\n }\n\n if (isModal && hasResults) {\n const $modalButtons = $('.modal-dialog-storelocator .modal-buttons');\n $modalButtons.removeClass('d-none');\n }\n\n $resultsDiv.empty()\n .data('has-results', hasResults)\n .data('radius', data.radius)\n .data('search-key', data.searchKey);\n\n $mapDiv.attr('data-locations', data.locations);\n\n if ($mapDiv.data('has-google-api')) {\n maps();\n } else {\n $('.store-locator-no-apiKey').show();\n }\n getCoordinates(data.stores);\n console.log(\"data = \", data);\n console.log(\"data.stores = \", data.stores);\n console.log(\"data.storesResultsHtml = \", data.storesResultsHtml);\n if (data.storesResultsHtml) {\n $resultsDiv.append(data.storesResultsHtml);\n let storeID = $('.custom-store-card .myPrefferedWorkshop .store-details').data('store-id');\n let $cardBodies = $('.results-card .card-body');\n\n toggleCardVisibility(storeID, $cardBodies);\n }\n\n // Show Store Locator Banner on any search\n $('.store-locator-slot').show();\n highlightDay();\n}\n\nfunction search(element) {\n let dialog = element.closest('.in-store-inventory-dialog');\n let spinner = dialog.length ? dialog.spinner() : $.spinner();\n let $form = element.closest('.store-locator');\n let radius = $('.results').data('radius');\n let url = $form.attr('action');\n let postalCode = $form.find('[name=\"postalCode\"]').val();\n // eslint-disable-next-line\n let geocoder = new google.maps.Geocoder();\n\n let urlParams = {\n radius: radius,\n isPDP: isPDP,\n isPLP: isPLP,\n isCheckout: isCheckout,\n isCart: isCart\n };\n\n spinner.start();\n if (isPDP) {\n var builderconfig = $('[data-builderconfig]').data('builderconfig');\n let allPids = [];\n Object.keys(builderconfig).forEach(function (department) {\n allPids = allPids.concat(builderconfig[department]);\n });\n if ($('body').find('.product-bundle-detail').length > 0) {\n allPids.splice(0, 1);\n }\n urlParams.allPids = JSON.stringify(allPids);\n }\n let payload = $form.is('form') ? $form.serialize() : { postalCode: postalCode };\n\n url = appendToUrl(url, urlParams);\n geocoder.geocode({ address: postalCode }, function (results, status) {\n // eslint-disable-next-line\n if (status === google.maps.GeocoderStatus.OK) {\n let lat = results[0].geometry.location.lat();\n let long = results[0].geometry.location.lng();\n url = appendToUrl(url, { lat: lat, long: long });\n $.ajax({\n url: url,\n type: $form.attr('method'),\n data: payload,\n dataType: 'json',\n success: function (data) {\n updateStoresResults(data);\n let $resultInfo = $('.results-count');\n $resultInfo.find('.search-term').html(postalCode);\n $resultInfo.find('.search-result-terms').show();\n $('.select-store').prop('disabled', true);\n spinner.stop();\n }\n });\n } else {\n $.ajax({\n url: url,\n type: $form.attr('method'),\n data: payload,\n dataType: 'json',\n success: function (data) {\n updateStoresResults(data);\n $('.select-store').prop('disabled', true);\n spinner.stop();\n }\n });\n }\n });\n return false;\n}\n\nfunction updatePDPStockMessage(pdpStockMessage, storeNAme) {\n var pdpStockMessageObj = JSON.parse(pdpStockMessage);\n if (!pdpStockMessageObj && pdpStockMessageObj.length == 0) {\n return;\n }\n $('.preffered-store-name').text(`at ${storeNAme}`);\n Object.keys(pdpStockMessageObj).forEach(function (pid) {\n $(`.${pid}stockmessage`).text(pdpStockMessageObj[pid]);\n });\n}\n\nfunction updatePDPStockHTML(stockMsgResponse) {\n var stockMsgResponseObj = JSON.parse(stockMsgResponse);\n if ($('.preffered-store-name').length === 0) {\n Object.keys(stockMsgResponseObj).forEach(function (pid) {\n $(`.replace-${pid}`).replaceWith(stockMsgResponseObj[pid]);\n });\n }\n}\n\nfunction moveSearchFields() {\n let $pageHeading = $('.page-heading');\n let $pageHeadingWrap = $('.page-heading-wrap');\n let $searchFields = $('.sl-search-fields');\n let $searchFieldsWrap = $('.sl-search-fields-wrap');\n let $map = $('.sl-map');\n\n if (window.matchMedia('(min-width: 48em)').matches) {\n $pageHeading.prependTo($pageHeadingWrap);\n $searchFields.removeClass('col-12').appendTo($searchFieldsWrap);\n } else {\n $pageHeading.insertBefore($map);\n $searchFields.addClass('col-12').insertBefore($map);\n }\n}\n\nfunction moveStoreDetails() {\n let $storeDetailsContent = $('.store-landing-details');\n let $storeDetailsDesktop = $('.store-details-desktop');\n let $storeDetailsMobile = $('.store-details-mobile');\n\n if (window.matchMedia('(min-width: 48em)').matches) {\n $storeDetailsContent.prependTo($storeDetailsDesktop);\n } else {\n $storeDetailsContent.appendTo($storeDetailsMobile);\n }\n}\n\nfunction highlightDay() {\n let days = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n const currentDay = new Date().getDay();\n const currentDayName = days[currentDay];\n let $storeCards = $('.store-details');\n let $storeHours = $storeCards.find('.store-availability-info');\n\n $storeHours.find('li:contains(' + currentDayName + ')').each(function () {\n $(this).addClass('current-day');\n });\n}\n\n/**\n * Checks for Geolocation Error\n * @param {Object} error - string to check\n */\nfunction showError(error) {\n var $detectLocationButton = $('.detect-location');\n switch (error.code) {\n case error.PERMISSION_DENIED:\n $.spinner().stop();\n console.warn('User denied the request for Geolocation.');\n $detectLocationButton.prop('disabled', true);\n $detectLocationButton.find('.detect-location-label').text($detectLocationButton.find('.detect-location-label').data('disabledmsg'));\n break;\n case error.POSITION_UNAVAILABLE:\n $.spinner().stop();\n console.warn('Location information is unavailable.');\n break;\n case error.TIMEOUT:\n $.spinner().stop();\n console.warn('The request to get user location timed out.');\n break;\n default:\n case error.UNKNOWN_ERROR:\n $.spinner().stop();\n console.warn('An unknown geolocation error occurred.');\n break;\n }\n\n $('#store-postal-code').prop('disabled', false);\n}\n\n$(document).ready(function () {\n findWorkshop();\n\n if (isCheckout) {\n pickup();\n }\n\n if (isModal) {\n selectPickupStore();\n }\n\n $('body').on('click', '.makeItMyWorkshopBtn', function (event) {\n event.preventDefault();\n const $this = $(this);\n let url = $this.data('url');\n let storeDistance = $this.parents('.store-details').find('.store-distance').text().replace(' miles', '');\n let isPDP = $('body').find('.product-detail').length > 0;\n let allPids = [];\n if (isPDP) {\n var builderconfig = $('[data-builderconfig]').data('builderconfig');\n Object.keys(builderconfig).forEach(function (department) {\n allPids = allPids.concat(builderconfig[department]);\n });\n if ($('body').find('.product-bundle-detail').length > 0) {\n allPids.splice(0, 1);\n }\n }\n\n let storeId = {\n store: $this.data('store'),\n storeDistance: $this.parents('.store-details').find('.store-distance').text(),\n isPDP: isPDP,\n allPids: JSON.stringify(allPids)\n };\n $.spinner().start();\n\n $.ajax({\n url: url,\n type: 'POST',\n dataType: 'json',\n data: storeId,\n success: function (data) {\n if (!data.error) {\n const storeURL = $('.preferred-store-url').val() + '?StoreID=' + data.storeID + '&dist=' + storeDistance;\n $('.store-detail').html(`${data.storeName}, ${data.storeCity}, ${data.storeStateCode}`);\n }\n if (data.pdpStockMessage && data.pdpStockMessage.length) {\n updatePDPStockMessage(data.pdpStockMessage, data.storeName);\n }\n if (data.stockMsgResponse && data.stockMsgResponse.length) {\n updatePDPStockHTML(data.stockMsgResponse);\n }\n\n if (isPDP) {\n makeMyWorkshopPDP($this, data.storeData, data.storeHours);\n } else {\n makeMyWorkshop($this);\n }\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n\n $('.modal-buttons .select-workshop-button').off('click').on('click', function (event) {\n event.preventDefault();\n const $this = $(this);\n let url = $this.data('url');\n const $selectPickupStore = $('#select-pickup-store');\n let storeDistance = $selectPickupStore.find('[name=\"storelocators\"]:checked').siblings('.custom-control-label').children('.store-details').find('.store-distance').text();\n let storeId = {\n store: $selectPickupStore.find('[name=\"storelocators\"]:checked').siblings('.custom-control-label').children('.store-details').attr('data-store-id'),\n storeDistance: storeDistance\n };\n $.spinner().start();\n\n $.ajax({\n url: url,\n type: 'POST',\n dataType: 'json',\n data: storeId,\n success: function (data) {\n const storeURL = $('.preferred-store-url').val() + '?StoreID=' + data.storeID + '&dist=' + storeDistance.replace(' miles', '');\n $selectPickupStore.modal('hide');\n const isPLP = $('body').find('.search-results').length > 0;\n const isChecked = $('.store-switch .storeToggle').is(\":checked\");\n if (isPLP && data.storeID && isChecked) {\n window.location.href = utilities.updateURLParams(window.location.href, 'storeid', data.storeID);\n }\n\n if (!data.error) {\n const $shippingAddressBlock = $('.shipping-form');\n $shippingAddressBlock.find('.form-group .shippingAddressOne').val(data.storeData.address1);\n $shippingAddressBlock.find('.form-group .shippingCountry').val(data.storeData.countryCode);\n $shippingAddressBlock.find('.form-group .shippingState').val(data.storeData.stateCode);\n $shippingAddressBlock.find('.form-group .State' + data.storeData.countryCode).val(data.storeData.stateCode);\n $shippingAddressBlock.find('.form-group .shippingAddressCity').val(data.storeData.city);\n $shippingAddressBlock.find('.form-group .shippingZipCode').val(data.storeData.postalCode);\n $shippingAddressBlock.find('.storeId').val(data.storeData.ID);\n $('.pickupinfo-section .preferredStoreDetails').html(data.renderedTemplate);\n $('.prefered-store button').attr('data-target', '#select-pickup-store');\n $('.card.store-search').addClass('d-none');\n if (data.order) {\n $('body').trigger('checkout:updateCheckoutView',\n {\n order: data.order,\n customer: data.customer,\n options: { keepOpen: true }\n });\n }\n if (data.isStoreOOS) {\n $('.submit-shipping').attr('disabled', true);\n } else {\n $('.submit-shipping').attr('disabled', false);\n }\n if ($('body').find('.cart-page').length > 0) {\n const storeObjlist = JSON.parse(data.inventoryMsgObj);\n Object.keys(storeObjlist).forEach(key => {\n let $uniqueIdsKey = $(`.cart-lineitem[data-uuid=${key}]`);\n let $availabilityMsg = $uniqueIdsKey.find('.availability-msg');\n $uniqueIdsKey.find('.pdp-ship-option').removeClass('check-store-available').addClass('availableStore');\n $uniqueIdsKey.find('.store-locator-cart span.store-link-name').text('Change Store');\n if (storeObjlist[key].availabilityMessage === 'Out of Stock') {\n $availabilityMsg.html(`\n Not Available for workshop pickup\n ${data.storeName}`);\n } else {\n $availabilityMsg.html(`\n ${storeObjlist[key].availabilityMessage}\n ${data.storeName}`);\n }\n });\n $('.store-detail').html(`${data.storeName}, ${data.storeCity}, ${data.storeStateCode}`);\n }\n if (isPLP) {\n let $selectStoreLink = $('.select-store-link');\n\n $selectStoreLink.each(function () {\n let $selectStore = $(this).find('.select-store');\n let $storeName = $(this).find('.store-name');\n\n if ($selectStore.length) {\n $selectStore.hide();\n $storeName.text(data.storeName).attr('data-storeid', data.storeID).removeClass('d-none');\n } else {\n $storeName.text(data.storeName).attr('data-storeid', data.storeID);\n }\n });\n $('.store-detail').html(`${data.storeName}, ${data.storeCity}, ${data.storeStateCode}`);\n }\n }\n makeMyWorkshopForCheckout($this, data.storeData, data.storeHours);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n});\n\n$(window).smartresize(function () {\n let width = window.innerWidth;\n let horzResize = false;\n if (width !== prevWidth) {\n horzResize = true;\n prevWidth = width;\n }\n\n if (isStoreLocator && horzResize) {\n moveSearchFields();\n }\n\n if (isStoreLanding && horzResize) {\n moveStoreDetails();\n }\n});\n\n\nstoreLocator.init = function () {\n if ($('.map-canvas').data('has-google-api')) {\n maps();\n } else {\n $('.store-locator-no-apiKey').show();\n }\n\n if (!$('.results').data('has-results')) {\n $('.store-locator-no-results').show();\n }\n\n if (isStoreLocator) {\n moveSearchFields();\n\n let $mapToggle = $('.btn-map-toggle');\n let $mapBlock = $('.sl-map');\n\n $mapToggle.on('click', function () {\n let $tglBtn = $(this);\n $tglBtn.siblings('.btn').removeClass('active');\n $tglBtn.addClass('active');\n\n if ($tglBtn.is('.btn-map-view')) {\n $mapBlock.addClass('js-show');\n } else {\n $mapBlock.removeClass('js-show');\n }\n });\n }\n\n if (isStoreLanding) {\n moveStoreDetails();\n }\n\n highlightDay();\n};\n\nstoreLocator.search = function () {\n $('.store-locator-container, .sl-search-fields').off('submit').on('submit', 'form.store-locator', function (event) {\n event.preventDefault();\n search($(this));\n });\n $('.store-locator-container, .sl-search-fields').off('click').on('click', '.btn-storelocator-search[type=\"button\"]', function (event) {\n event.preventDefault();\n search($(this));\n });\n};\n\nstoreLocator.detectLocation = function () {\n // clicking on detect location.\n $('.detect-location').off('click').on('click', function (event) {\n event.preventDefault();\n $.spinner().start();\n // eslint-disable-next-line\n if (!navigator.geolocation) {\n $.spinner().stop();\n return;\n }\n\n $('#store-postal-code').prop('disabled', true);\n\n // eslint-disable-next-line\n navigator.geolocation.getCurrentPosition(function (position) {\n var $detectLocationButton = $('.detect-location');\n var url = $detectLocationButton.data('action');\n var radius = $('.results').data('radius');\n let isSLPage = $('body').find('.store-locator-main').length > 0;\n let isPDP = $('body').find('.product-detail').length > 0;\n let isPLP = $('body').find('.search-results').length > 0;\n let isCheckout = $('body').find('#checkout-main').length > 0;\n let isCart = $('body').find('.cart-page').length > 0;\n\n if (isSLPage) {\n radius = $('.store-form .radius').val();\n }\n\n var urlParams = {\n radius: radius,\n lat: position.coords.latitude,\n long: position.coords.longitude,\n isSLPage: isSLPage,\n isPDP: isPDP,\n isPLP: isPLP,\n isCheckout: isCheckout,\n isCart: isCart\n };\n\n if (isPDP) {\n var builderconfig = $('[data-builderconfig]').data('builderconfig');\n let allPids = [];\n Object.keys(builderconfig).forEach(function (department) {\n allPids = allPids.concat(builderconfig[department]);\n });\n if ($('body').find('.product-bundle-detail').length > 0) {\n allPids.splice(0, 1);\n }\n urlParams.allPids = JSON.stringify(allPids);\n }\n\n url = appendToUrl(url, urlParams);\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n updateStoresResults(data);\n $('.select-store').prop('disabled', true);\n $('#store-postal-code').prop('disabled', false);\n $.spinner().stop();\n },\n error: function () {\n $('#store-postal-code').prop('disabled', false);\n $.spinner().stop();\n }\n });\n }, showError);\n });\n};\n\nstoreLocator.changeRadius = function () {\n $('.store-locator-container .refine-radius').change(function () {\n var radius = $(this).val();\n var searchKeys = $('.results').data('search-key');\n var url = $(this).data('action-url');\n var urlParams = {};\n\n if (searchKeys.postalCode) {\n urlParams = {\n radius: radius,\n postalCode: searchKeys.postalCode\n };\n } else if (searchKeys.lat && searchKeys.long) {\n urlParams = {\n radius: radius,\n lat: searchKeys.lat,\n long: searchKeys.long\n };\n }\n\n url = appendToUrl(url, urlParams);\n var dialog = $(this).closest('.in-store-inventory-dialog');\n var spinner = dialog.length ? dialog.spinner() : $.spinner();\n spinner.start();\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n spinner.stop();\n updateStoresResults(data);\n $('.select-store').prop('disabled', true);\n }\n });\n });\n};\n\nmodule.exports = storeLocator;\n","'use strict';\n\n/**\n * appends params to a url\n * @param {string} url - Original url\n * @param {Object} params - Parameters to append\n * @returns {string} result url with appended parameters\n */\nconst appendParamsToUrl = function (url, params) {\n var newUrl = url;\n newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n return key + '=' + encodeURIComponent(params[key]);\n }).join('&');\n\n return newUrl;\n};\n\nconst showAlertMsg = function ($toastBox, duration) {\n $toastBox.removeClass('d-none').removeAttr('style');\n setTimeout(function () {\n $toastBox.addClass('d-none');\n }, duration);\n};\n\n/**\n *\n * @param {string} url - Orignial URL\n * @param {string} paramName - Name of the Parameter\n * @param {null} paramValue - Parameters will be delete\n * @param {undefined} paramValue - Parameters will be created\n * @param {any} paramValue - paramName value will be updated\n * @return {string} - Updated URL\n *\n */\n\nconst updateURLParams = function (url, paramName, paramValue) {\n let urlObj = new URL(url); // eslint-disable-line no-undef\n let urlParamObj = new URLSearchParams(urlObj.search); // eslint-disable-line no-undef\n let updatedURL = url;\n\n if (paramValue === null) {\n urlParamObj.delete(paramName);\n } else if (paramValue === undefined) {\n urlParamObj.set(paramName, '');\n } else if (paramValue) {\n urlParamObj.set(paramName, paramValue);\n }\n updatedURL = `${urlObj.origin}${urlObj.pathname}${(urlParamObj.size ? `?${urlParamObj.toString()}` : '')}`;\n\n return updatedURL;\n};\n\nmodule.exports = {\n appendParamsToUrl: appendParamsToUrl,\n showAlertMsg: showAlertMsg,\n updateURLParams: updateURLParams\n};\n","/* globals google */\n'use strict';\n\n/**\n * appends params to a url\n * @param {string} url - Original url\n * @param {Object} params - Parameters to append\n * @returns {string} result url with appended parameters\n */\nfunction appendToUrl(url, params) {\n var newUrl = url;\n newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n return key + '=' + encodeURIComponent(params[key]);\n }).join('&');\n\n return newUrl;\n}\n\n/**\n * Uses google maps api to render a map\n */\nfunction maps() {\n var map;\n var infowindow = new google.maps.InfoWindow();\n\n // Init U.S. Map in the center of the viewport\n var latlng = new google.maps.LatLng(37.09024, -95.712891);\n var mapOptions = {\n scrollwheel: false,\n zoom: 4,\n center: latlng\n };\n\n map = new google.maps.Map($('.map-canvas')[0], mapOptions);\n var mapdiv = $('.map-canvas').attr('data-locations');\n\n mapdiv = JSON.parse(mapdiv);\n\n var bounds = new google.maps.LatLngBounds();\n\n // Customized google map marker icon with svg format\n var markerImg = {\n path: 'M13.5,30.1460153 L16.8554555,25.5 L20.0024287,25.5 C23.039087,25.5 25.5,' +\n '23.0388955 25.5,20.0024287 L25.5,5.99757128 C25.5,2.96091298 23.0388955,0.5 ' +\n '20.0024287,0.5 L5.99757128,0.5 C2.96091298,0.5 0.5,2.96110446 0.5,5.99757128 ' +\n 'L0.5,20.0024287 C0.5,23.039087 2.96110446,25.5 5.99757128,25.5 L10.1445445,' +\n '25.5 L13.5,30.1460153 Z',\n fillColor: '#0070d2',\n fillOpacity: 1,\n scale: 1.1,\n strokeColor: 'white',\n strokeWeight: 1,\n anchor: new google.maps.Point(13, 30),\n labelOrigin: new google.maps.Point(12, 12)\n };\n\n Object.keys(mapdiv).forEach(function (key) {\n var item = mapdiv[key];\n var lable = parseInt(key, 10) + 1;\n var storeLocation = new google.maps.LatLng(item.latitude, item.longitude);\n var marker = new google.maps.Marker({\n position: storeLocation,\n map: map,\n title: item.name,\n icon: markerImg,\n label: { text: lable.toString(), color: 'white', fontSize: '16px' }\n });\n\n marker.addListener('click', function () {\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 // 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 * Renders the results of the search and updates the map\n * @param {Object} data - Response from the server\n */\nfunction updateStoresResults(data) {\n var $resultsDiv = $('.results');\n var $mapDiv = $('.map-canvas');\n var hasResults = data.stores.length > 0;\n\n if (!hasResults) {\n $('.store-locator-no-results').show();\n } else {\n $('.store-locator-no-results').hide();\n }\n\n $resultsDiv.empty()\n .data('has-results', hasResults)\n .data('radius', data.radius)\n .data('search-key', data.searchKey);\n\n $mapDiv.attr('data-locations', data.locations);\n\n if ($mapDiv.data('has-google-api')) {\n maps();\n } else {\n $('.store-locator-no-apiKey').show();\n }\n\n if (data.storesResultsHtml) {\n $resultsDiv.append(data.storesResultsHtml);\n }\n}\n\n/**\n * Search for stores with new zip code\n * @param {HTMLElement} element - the target html element\n * @returns {boolean} false to prevent default event\n */\nfunction search(element) {\n var dialog = element.closest('.in-store-inventory-dialog');\n var spinner = dialog.length ? dialog.spinner() : $.spinner();\n spinner.start();\n var $form = element.closest('.store-locator');\n var radius = $('.results').data('radius');\n var url = $form.attr('action');\n var urlParams = { radius: radius };\n\n var payload = $form.is('form') ? $form.serialize() : { postalCode: $form.find('[name=\"postalCode\"]').val() };\n\n url = appendToUrl(url, urlParams);\n\n $.ajax({\n url: url,\n type: $form.attr('method'),\n data: payload,\n dataType: 'json',\n success: function (data) {\n spinner.stop();\n updateStoresResults(data);\n $('.select-store').prop('disabled', true);\n }\n });\n return false;\n}\n\nmodule.exports = {\n init: function () {\n if ($('.map-canvas').data('has-google-api')) {\n maps();\n } else {\n $('.store-locator-no-apiKey').show();\n }\n\n if (!$('.results').data('has-results')) {\n $('.store-locator-no-results').show();\n }\n },\n\n detectLocation: function () {\n // clicking on detect location.\n $('.detect-location').on('click', function () {\n $.spinner().start();\n if (!navigator.geolocation) {\n $.spinner().stop();\n return;\n }\n\n navigator.geolocation.getCurrentPosition(function (position) {\n var $detectLocationButton = $('.detect-location');\n var url = $detectLocationButton.data('action');\n var radius = $('.results').data('radius');\n var urlParams = {\n radius: radius,\n lat: position.coords.latitude,\n long: position.coords.longitude\n };\n\n url = appendToUrl(url, urlParams);\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n $.spinner().stop();\n updateStoresResults(data);\n $('.select-store').prop('disabled', true);\n }\n });\n });\n });\n },\n\n search: function () {\n $('.store-locator-container form.store-locator').submit(function (e) {\n e.preventDefault();\n search($(this));\n });\n $('.store-locator-container .btn-storelocator-search[type=\"button\"]').click(function (e) {\n e.preventDefault();\n search($(this));\n });\n },\n\n changeRadius: function () {\n $('.store-locator-container .radius').change(function () {\n var radius = $(this).val();\n var searchKeys = $('.results').data('search-key');\n var url = $(this).data('action-url');\n var urlParams = {};\n\n if (searchKeys.postalCode) {\n urlParams = {\n radius: radius,\n postalCode: searchKeys.postalCode\n };\n } else if (searchKeys.lat && searchKeys.long) {\n urlParams = {\n radius: radius,\n lat: searchKeys.lat,\n long: searchKeys.long\n };\n }\n\n url = appendToUrl(url, urlParams);\n var dialog = $(this).closest('.in-store-inventory-dialog');\n var spinner = dialog.length ? dialog.spinner() : $.spinner();\n spinner.start();\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n spinner.stop();\n updateStoresResults(data);\n $('.select-store').prop('disabled', true);\n }\n });\n });\n },\n selectStore: function () {\n $('.store-locator-container').on('click', '.select-store', (function (e) {\n e.preventDefault();\n var selectedStore = $(':checked', '.results-card .results');\n var data = {\n storeID: selectedStore.val(),\n searchRadius: $('#radius').val(),\n searchPostalCode: $('.results').data('search-key').postalCode,\n storeDetailsHtml: selectedStore.siblings('label').find('.store-details').html(),\n event: e\n };\n\n $('body').trigger('store:selected', data);\n }));\n },\n updateSelectStoreButton: function () {\n $('body').on('change', '.select-store-input', (function () {\n $('.select-store').prop('disabled', false);\n }));\n }\n};\n","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n"],"sourceRoot":""}