{"version":3,"sources":["webpack:///chunk.map.7072e794d621736b8525.js","webpack:///./js/plugins/jquery.waitforimages.js?1c54*","webpack:///./js/plugins/infobox.js","webpack:///./js/app/generic/generic.map.js"],"names":["webpackJsonp",7,"module","exports","__webpack_require__","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","factory","apply","undefined","$","eventNamespace","waitForImages","hasImageProperties","hasImageAttributes","expr","obj","is","uncached","complete","fn","finishedCallback","eachCallback","waitForAll","allImgsLength","allImgsLoaded","deferred","Deferred","isPlainObject","arguments","each","finished","length","type","noop","isFunction","TypeError","this","allImgs","hasImgProperties","matchUrl","find","addBack","element","push","src","attr","i","property","match","propertyValue","css","exec","attribute","attributeValues","attributeValue","split","value","trim","call","resolveWith","img","image","Image","events","one","me","event","eachArguments","notifyWith","off","promise",13,"global","InfoBox","opt_opts","google","maps","OverlayView","content_","content","disableAutoPan_","disableAutoPan","maxWidth_","maxWidth","pixelOffset_","pixelOffset","Size","position_","position","LatLng","zIndex_","zIndex","boxClass_","boxClass","boxStyle_","boxStyle","closeBoxMargin_","closeBoxMargin","closeBoxURL_","closeBoxURL","infoBoxClearance_","infoBoxClearance","isHidden_","isHidden","alignBottom_","alignBottom","pane_","pane","enableEventPropagation_","enableEventPropagation","div_","closeListener_","eventListener1_","eventListener2_","eventListener3_","moveListener_","contextListener_","fixedWidthSet_","prototype","createInfoBoxDiv_","bw","cancelHandler","e","cancelBubble","stopPropagation","ignoreHandler","returnValue","preventDefault","document","createElement","setBoxStyle_","nodeType","innerHTML","getCloseBoxImg_","appendChild","getPanes","addClickHandler_","style","width","offsetWidth","overflow","getBoxWidths_","left","right","panBox_","addDomListener","trigger","closeBox","firstChild","getCloseClickHandler_","close","disablePan","map","bounds","xOffset","yOffset","getMap","getBounds","contains","setCenter","mapDiv","getDiv","mapWidth","mapHeight","offsetHeight","iwOffsetX","iwOffsetY","height","iwWidth","iwHeight","padX","padY","pixPosition","getProjection","fromLatLngToContainerPixel","x","y","getCenter","panBy","className","cssText","hasOwnProperty","opacity","filter","visibility","computedStyle","top","bottom","box","defaultView","getComputedStyle","ownerDocument","parseInt","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","documentElement","currentStyle","onRemove","parentNode","removeChild","draw","fromLatLngToDivPixel","setOptions","setContent","setPosition","setZIndex","removeListener","latlng","index","getContent","getPosition","getZIndex","show","hide","open","anchor","addListener","setMap",25,"root","mapContainer","settings","templates","_elements","updateMapVisibility","isMapInited","_defaults","extend","_templates","init","window","on","bind","GLOBE_WIDTH","view","latitude","longitude","storename","address","phone","siteid","isquoteurlexternal","externalquoteurl","maxzoom","minzoom","radius","markers","changemode","changestoremode","viewmode","referringSelector","url","centerId","defaultzoom","autozoom","loadtimeout","infoWindowWidth","infoWindowSvg","infoWindowPng","tracking","category","label","citymode","pagesize","pagesizegrid","searchinitiator","centralMarker","viewTypes","simple","extended","medium","combined","viewModes","general","grid","statuses","topped","fixed","absolute","mapColumn","contentColumn","mapLoader","contentLoader","mapGrid","header","sticky","mapWrapper","stores","oldStores","storesGaSent","jsmap","hadCustomScroll","dimensions","prevDimensions","center","prevCenter","zoom","status","loadmorecenter","loadmorezoom","infowindow","infowindwsOpened","tween","ajaxCall","loadingTimeout","isLocked","isInitialLoad","isSearchResultsLoad","closedStorePopupTemplateObj","infobox","id","template","infoboxSimple","markerPaths","initial","centerX","centerY","gicon","infooffset","mouseover","clickable","hover","initialSmallUpp","hoverSmallUpp","nearSmallUpp","initialBelgium","hoverBelgium","nearBelgium","initialSpain","hoverSpain","nearSpain","centralWithCircle","central","near","controls","zoomin","classSelector","eventListener","minviewMode","zoomout","loadmore","emptySearch","head","getElementsByTagName","insertBefore","newElement","referenceElement","href","indexOf","createIcons","viewInt","initExtended","initSimple","initMedium","initCombined","getMetersFromMiles","miles","initMap","Map","lat","parseFloat","lng","minZoom","maxZoom","disableDefaultUI","scrollwheel","gestureHandling","circle","Circle","east","getNorthEast","west","getSouthWest","angle","Math","floor","log","outerWidth","LN2","setZoom","App","globals","isMobileSmall","getZoom","initControls","initialCenter","idleListener","onIdle","isEnquiryProcessPage","location","setMapVisibility","shouldShowMap","removeClass","addClass","hasClass","data","draggable","isMobile","disableDoubleClickZoom","setMarker","boundsChangeProcess","culture","appState","viewmodeInt","currentPage","totalPages","totalItems","remove","Handlebars","waitforimages","templateName","templateSource","compile","html","slice","updateCountersFromStores","fillContent","totallyLoaded","fillHeader","initExtendedLoaded","initialMarkersSet","marker","setTimeout","fitBoundsToMarker","nearMarker","includes","replace","infoContent","map1Points","newClosestStores","getClosestStores","closedPopupInit","heightSet","initialScrollSet","referringItemMouseenter","referringItemMouseleave","resize","removeMapLoader","onScrollElement","onScroll","toAnimate","toanimate","scrollTop","getTop","round","cookieRealHeight","offset","offsetTop","isCustomScroll","stickyAndMap","add","transition","-webkit-transition","isTabletSmall","transform","-webkit-transform","-ms-transform","topMin","topMax","outerHeight","console","max","isFromFillContent","contentItems","children","loadbutton","minheight","changeHeight","eq","min","first","mapRefresh","maxHeight","ie","navigator","userAgent","TweenMax","fromTo","onComplete","icon","MarkerImage","Point","scrollToTop","currentTop","scrollElement","stop","animate","setView","tweenPromote","TimelineMax","setViewAnimationEnd","contentChildren","to","marginRight","play","progress","pause","destroy","display","forced","selectors","control","minveiwMode","controlEl","val","currentZoomLevel","target","callToLoadNewItems","showAllMarkers","hideOutOfViewMarkers","changeview","link","parents","sendTrackingData","setMarkersFromObject","pSize","ceil","markerArr","toEraseOld","emptyMarkers","point","SiteId","Latitude","Longitude","newMarkers","grep","setVisible","infoboxContent","getVisible","zind","self","Marker","markerMouseover","markerMouseout","Modernizr","svg","markerClick","infowWindowClose","setIcon","markerid","areMarkersInBounds","checkIfInBounds","LatLngBounds","fitBounds","showall","newHtml","templateObj","counter","searchInitiator","shift","initTracking","popup","reinit","number","openedStores","forEach","item","IsClosed","result","sort","item1","item2","DistanceFloat","storeName","currentTarget","storeLocationName","storeTrackingName","cssClass","trackingData","ecommerce","impressions","l","StoreName","siteId","storePosition","name","list","dataLayer","currentItems","getMapBounds","northEast","southWest","northeast","southwest","newDimensions","isDimensionsChange","abs","isDimensionsChangeToPrev","isCenterChange","isCenterChangeToPrev","isZoomChange","isMapSimple","isViewMapAndNeedsLoading","lock","unlock","clearTimeout","loadNewItems","iscitypage","ajaxAbort","ajax","method","dataType","success","ajaxSuccess","error","ajaxError","Status","abort","ex","referringItem","referringItemTrigger","eventName","referringId"],"mappings":"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","file":"chunk.map.7072e794d621736b8525.js","sourcesContent":["webpackJsonp([7],{\n\n/***/ 7:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! waitForImages jQuery Plugin - v2.0.2 - 2015-06-02\r\n\t* https://github.com/alexanderdickson/waitForImages\r\n\t* Copyright (c) 2015 Alex Dickson; Licensed MIT */\r\n\t;(function (factory) {\r\n\t if (true) {\r\n\t // AMD. Register as an anonymous module.\r\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t } else if (typeof exports === 'object') {\r\n\t // CommonJS / nodejs module\r\n\t module.exports = factory(require('jquery'));\r\n\t } else {\r\n\t // Browser globals\r\n\t factory(jQuery);\r\n\t }\r\n\t}(function ($) {\r\n\t // Namespace all events.\r\n\t var eventNamespace = 'waitForImages';\r\n\t\r\n\t // CSS properties which contain references to images.\r\n\t $.waitForImages = {\r\n\t hasImageProperties: [\r\n\t 'backgroundImage',\r\n\t 'listStyleImage',\r\n\t 'borderImage',\r\n\t 'borderCornerImage',\r\n\t 'cursor'\r\n\t ],\r\n\t hasImageAttributes: ['srcset']\r\n\t };\r\n\t\r\n\t // Custom selector to find all `img` elements with a valid `src` attribute.\r\n\t $.expr[':']['has-src'] = function (obj) {\r\n\t // Ensure we are dealing with an `img` element with a valid\r\n\t // `src` attribute.\r\n\t return $(obj).is('img[src][src!=\"\"]');\r\n\t };\r\n\t\r\n\t // Custom selector to find images which are not already cached by the\r\n\t // browser.\r\n\t $.expr[':'].uncached = function (obj) {\r\n\t // Ensure we are dealing with an `img` element with a valid\r\n\t // `src` attribute.\r\n\t if (!$(obj).is(':has-src')) {\r\n\t return false;\r\n\t }\r\n\t\r\n\t return !obj.complete;\r\n\t };\r\n\t\r\n\t $.fn.waitForImages = function () {\r\n\t\r\n\t var allImgsLength = 0;\r\n\t var allImgsLoaded = 0;\r\n\t var deferred = $.Deferred();\r\n\t\r\n\t var finishedCallback;\r\n\t var eachCallback;\r\n\t var waitForAll;\r\n\t\r\n\t // Handle options object (if passed).\r\n\t if ($.isPlainObject(arguments[0])) {\r\n\t\r\n\t waitForAll = arguments[0].waitForAll;\r\n\t eachCallback = arguments[0].each;\r\n\t finishedCallback = arguments[0].finished;\r\n\t\r\n\t } else {\r\n\t\r\n\t // Handle if using deferred object and only one param was passed in.\r\n\t if (arguments.length === 1 && $.type(arguments[0]) === 'boolean') {\r\n\t waitForAll = arguments[0];\r\n\t } else {\r\n\t finishedCallback = arguments[0];\r\n\t eachCallback = arguments[1];\r\n\t waitForAll = arguments[2];\r\n\t }\r\n\t\r\n\t }\r\n\t\r\n\t // Handle missing callbacks.\r\n\t finishedCallback = finishedCallback || $.noop;\r\n\t eachCallback = eachCallback || $.noop;\r\n\t\r\n\t // Convert waitForAll to Boolean\r\n\t waitForAll = !! waitForAll;\r\n\t\r\n\t // Ensure callbacks are functions.\r\n\t if (!$.isFunction(finishedCallback) || !$.isFunction(eachCallback)) {\r\n\t throw new TypeError('An invalid callback was supplied.');\r\n\t }\r\n\t\r\n\t this.each(function () {\r\n\t // Build a list of all imgs, dependent on what images will\r\n\t // be considered.\r\n\t var obj = $(this);\r\n\t var allImgs = [];\r\n\t // CSS properties which may contain an image.\r\n\t var hasImgProperties = $.waitForImages.hasImageProperties || [];\r\n\t // Element attributes which may contain an image.\r\n\t var hasImageAttributes = $.waitForImages.hasImageAttributes || [];\r\n\t // To match `url()` references.\r\n\t // Spec: http://www.w3.org/TR/CSS2/syndata.html#value-def-uri\r\n\t var matchUrl = /url\\(\\s*(['\"]?)(.*?)\\1\\s*\\)/g;\r\n\t\r\n\t if (waitForAll) {\r\n\t\r\n\t // Get all elements (including the original), as any one of\r\n\t // them could have a background image.\r\n\t obj.find('*').addBack().each(function () {\r\n\t var element = $(this);\r\n\t\r\n\t // If an `img` element, add it. But keep iterating in\r\n\t // case it has a background image too.\r\n\t if (element.is('img:has-src')) {\r\n\t allImgs.push({\r\n\t src: element.attr('src'),\r\n\t element: element[0]\r\n\t });\r\n\t }\r\n\t\r\n\t $.each(hasImgProperties, function (i, property) {\r\n\t var propertyValue = element.css(property);\r\n\t var match;\r\n\t\r\n\t // If it doesn't contain this property, skip.\r\n\t if (!propertyValue) {\r\n\t return true;\r\n\t }\r\n\t\r\n\t // Get all url() of this element.\r\n\t while (match = matchUrl.exec(propertyValue)) {\r\n\t allImgs.push({\r\n\t src: match[2],\r\n\t element: element[0]\r\n\t });\r\n\t }\r\n\t });\r\n\t\r\n\t $.each(hasImageAttributes, function (i, attribute) {\r\n\t var attributeValue = element.attr(attribute);\r\n\t var attributeValues;\r\n\t\r\n\t // If it doesn't contain this property, skip.\r\n\t if (!attributeValue) {\r\n\t return true;\r\n\t }\r\n\t\r\n\t // Check for multiple comma separated images\r\n\t attributeValues = attributeValue.split(',');\r\n\t\r\n\t $.each(attributeValues, function(i, value) {\r\n\t // Trim value and get string before first\r\n\t // whitespace (for use with srcset).\r\n\t value = $.trim(value).split(' ')[0];\r\n\t allImgs.push({\r\n\t src: value,\r\n\t element: element[0]\r\n\t });\r\n\t });\r\n\t });\r\n\t });\r\n\t } else {\r\n\t // For images only, the task is simpler.\r\n\t obj.find('img:has-src')\r\n\t .each(function () {\r\n\t allImgs.push({\r\n\t src: this.src,\r\n\t element: this\r\n\t });\r\n\t });\r\n\t }\r\n\t\r\n\t allImgsLength = allImgs.length;\r\n\t allImgsLoaded = 0;\r\n\t\r\n\t // If no images found, don't bother.\r\n\t if (allImgsLength === 0) {\r\n\t finishedCallback.call(obj[0]);\r\n\t deferred.resolveWith(obj[0]);\r\n\t }\r\n\t\r\n\t $.each(allImgs, function (i, img) {\r\n\t\r\n\t var image = new Image();\r\n\t var events =\r\n\t 'load.' + eventNamespace + ' error.' + eventNamespace;\r\n\t\r\n\t // Handle the image loading and error with the same callback.\r\n\t $(image).one(events, function me (event) {\r\n\t // If an error occurred with loading the image, set the\r\n\t // third argument accordingly.\r\n\t var eachArguments = [\r\n\t allImgsLoaded,\r\n\t allImgsLength,\r\n\t event.type == 'load'\r\n\t ];\r\n\t allImgsLoaded++;\r\n\t\r\n\t eachCallback.apply(img.element, eachArguments);\r\n\t deferred.notifyWith(img.element, eachArguments);\r\n\t\r\n\t // Unbind the event listeners. I use this in addition to\r\n\t // `one` as one of those events won't be called (either\r\n\t // 'load' or 'error' will be called).\r\n\t $(this).off(events, me);\r\n\t\r\n\t if (allImgsLoaded == allImgsLength) {\r\n\t finishedCallback.call(obj[0]);\r\n\t deferred.resolveWith(obj[0]);\r\n\t return false;\r\n\t }\r\n\t\r\n\t });\r\n\t\r\n\t image.src = img.src;\r\n\t });\r\n\t });\r\n\t\r\n\t return deferred.promise();\r\n\t\r\n\t };\r\n\t}));\r\n\n\n/***/ },\n\n/***/ 13:\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/*** IMPORTS FROM imports-loader ***/\n\t(function() {\n\t\n\t/**\r\n\t * @name InfoBox\r\n\t * @version 1.1.3 [January 15, 2011]\r\n\t * @author Gary Little (inspired by proof-of-concept code from Pamela Fox of Google)\r\n\t * @copyright Copyright 2010 Gary Little [gary at luxcentral.com]\r\n\t * @fileoverview InfoBox extends the Google Maps JavaScript API V3 OverlayView class.\r\n\t *

\r\n\t * An InfoBox behaves like a google.maps.InfoWindow, but it supports several\r\n\t * additional properties for advanced styling. An InfoBox can also be used as a map label.\r\n\t *

\r\n\t * An InfoBox also fires the same events as a google.maps.InfoWindow.\r\n\t *

\r\n\t * Browsers tested:\r\n\t *

\r\n\t * Mac -- Safari (4.0.4), Firefox (3.6), Opera (10.10), Chrome (4.0.249.43), OmniWeb (5.10.1)\r\n\t *
\r\n\t * Win -- Safari, Firefox, Opera, Chrome (3.0.195.38), Internet Explorer (8.0.6001.18702)\r\n\t *
\r\n\t * iPod Touch/iPhone -- Safari (3.1.2)\r\n\t */\r\n\t\r\n\t/*!\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t\r\n\t/*jslint browser:true */\r\n\t/*global google */\r\n\t\r\n\t/**\r\n\t * @name InfoBoxOptions\r\n\t * @class This class represents the optional parameter passed to the {@link InfoBox} constructor.\r\n\t * @property {string|Node} content The content of the InfoBox (plain text or an HTML DOM node).\r\n\t * @property {boolean} disableAutoPan Disable auto-pan on open (default is false).\r\n\t * @property {number} maxWidth The maximum width (in pixels) of the InfoBox. Set to 0 if no maximum.\r\n\t * @property {Size} pixelOffset The offset (in pixels) from the top left corner of the InfoBox\r\n\t * (or the bottom left corner if the alignBottom property is true)\r\n\t * to the map pixel corresponding to position.\r\n\t * @property {LatLng} position The geographic location at which to display the InfoBox.\r\n\t * @property {number} zIndex The CSS z-index style value for the InfoBox.\r\n\t * Note: This value overrides a zIndex setting specified in the boxStyle property.\r\n\t * @property {string} boxClass The name of the CSS class defining the styles for the InfoBox container.\r\n\t * The default name is infoBox.\r\n\t * @property {Object} [boxStyle] An object literal whose properties define specific CSS\r\n\t * style values to be applied to the InfoBox. Style values defined here override those that may\r\n\t * be defined in the boxClass style sheet. If this property is changed after the\r\n\t * InfoBox has been created, all previously set styles (except those defined in the style sheet)\r\n\t * are removed from the InfoBox before the new style values are applied.\r\n\t * @property {string} closeBoxMargin The CSS margin style value for the close box.\r\n\t * The default is \"2px\" (a 2-pixel margin on all sides).\r\n\t * @property {string} closeBoxURL The URL of the image representing the close box.\r\n\t * Note: The default is the URL for Google's standard close box.\r\n\t * Set this property to \"\" if no close box is required.\r\n\t * @property {Size} infoBoxClearance Minimum offset (in pixels) from the InfoBox to the\r\n\t * map edge after an auto-pan.\r\n\t * @property {boolean} isHidden Hide the InfoBox on open (default is false).\r\n\t * @property {boolean} alignBottom Align the bottom left corner of the InfoBox to the position\r\n\t * location (default is false which means that the top left corner of the InfoBox is aligned).\r\n\t * @property {string} pane The pane where the InfoBox is to appear (default is \"floatPane\").\r\n\t * Set the pane to \"mapPane\" if the InfoBox is being used as a map label.\r\n\t * Valid pane names are the property names for the google.maps.MapPanes object.\r\n\t * @property {boolean} enableEventPropagation Propagate mousedown, click, dblclick,\r\n\t * and contextmenu events in the InfoBox (default is false to mimic the behavior\r\n\t * of a google.maps.InfoWindow). Set this property to true if the InfoBox\r\n\t * is being used as a map label. iPhone note: This property setting has no effect. Events are\r\n\t * always propagated for an InfoBox in the \"mapPane\" pane and they are not propagated\r\n\t * for an InfoBox in the \"floatPane\" pane.\r\n\t */\r\n\t\r\n\t/**\r\n\t * Creates an InfoBox with the options specified in {@link InfoBoxOptions}.\r\n\t * Call InfoBox.open to add the box to the map.\r\n\t * @constructor\r\n\t * @param {InfoBoxOptions} [opt_opts]\r\n\t */\r\n\tfunction InfoBox(opt_opts) {\r\n\t opt_opts = opt_opts || {};\r\n\t\r\n\t google.maps.OverlayView.apply(this, arguments);\r\n\t\r\n\t // Standard options (in common with google.maps.InfoWindow):\r\n\t //\r\n\t this.content_ = opt_opts.content || '';\r\n\t this.disableAutoPan_ = opt_opts.disableAutoPan || false;\r\n\t this.maxWidth_ = opt_opts.maxWidth || 0;\r\n\t this.pixelOffset_ = opt_opts.pixelOffset || new google.maps.Size(0, 0);\r\n\t this.position_ = opt_opts.position || new google.maps.LatLng(0, 0);\r\n\t this.zIndex_ = opt_opts.zIndex || null;\r\n\t\r\n\t // Additional options (unique to InfoBox):\r\n\t //\r\n\t this.boxClass_ = opt_opts.boxClass || 'infoBox';\r\n\t this.boxStyle_ = opt_opts.boxStyle || {};\r\n\t this.closeBoxMargin_ = opt_opts.closeBoxMargin || '2px';\r\n\t this.closeBoxURL_ =\r\n\t opt_opts.closeBoxURL || 'http://www.google.com/intl/en_us/mapfiles/close.gif';\r\n\t if (opt_opts.closeBoxURL === '') {\r\n\t this.closeBoxURL_ = '';\r\n\t }\r\n\t this.infoBoxClearance_ = opt_opts.infoBoxClearance || new google.maps.Size(1, 1);\r\n\t this.isHidden_ = opt_opts.isHidden || false;\r\n\t this.alignBottom_ = opt_opts.alignBottom || false;\r\n\t this.pane_ = opt_opts.pane || 'floatPane';\r\n\t this.enableEventPropagation_ = opt_opts.enableEventPropagation || false;\r\n\t\r\n\t this.div_ = null;\r\n\t this.closeListener_ = null;\r\n\t this.eventListener1_ = null;\r\n\t this.eventListener2_ = null;\r\n\t this.eventListener3_ = null;\r\n\t this.moveListener_ = null;\r\n\t this.contextListener_ = null;\r\n\t this.fixedWidthSet_ = null;\r\n\t}\r\n\t\r\n\t/* InfoBox extends OverlayView in the Google Maps API v3.\r\n\t */\r\n\tInfoBox.prototype = new google.maps.OverlayView();\r\n\t\r\n\t/**\r\n\t * Creates the DIV representing the InfoBox.\r\n\t * @private\r\n\t */\r\n\tInfoBox.prototype.createInfoBoxDiv_ = function() {\r\n\t var bw;\r\n\t var me = this;\r\n\t\r\n\t // This handler prevents an event in the InfoBox from being passed on to the map.\r\n\t //\r\n\t var cancelHandler = function(e) {\r\n\t e.cancelBubble = true;\r\n\t\r\n\t if (e.stopPropagation) {\r\n\t e.stopPropagation();\r\n\t }\r\n\t };\r\n\t\r\n\t // This handler ignores the current event in the InfoBox and conditionally prevents\r\n\t // the event from being passed on to the map. It is used for the contextmenu event.\r\n\t //\r\n\t var ignoreHandler = function(e) {\r\n\t e.returnValue = false;\r\n\t\r\n\t if (e.preventDefault) {\r\n\t e.preventDefault();\r\n\t }\r\n\t\r\n\t if (!me.enableEventPropagation_) {\r\n\t cancelHandler(e);\r\n\t }\r\n\t };\r\n\t\r\n\t if (!this.div_) {\r\n\t this.div_ = document.createElement('div');\r\n\t\r\n\t this.setBoxStyle_();\r\n\t\r\n\t if (typeof this.content_.nodeType === 'undefined') {\r\n\t this.div_.innerHTML = this.getCloseBoxImg_() + this.content_;\r\n\t } else {\r\n\t this.div_.innerHTML = this.getCloseBoxImg_();\r\n\t this.div_.appendChild(this.content_);\r\n\t }\r\n\t\r\n\t // Add the InfoBox DIV to the DOM\r\n\t this.getPanes()[this.pane_].appendChild(this.div_);\r\n\t\r\n\t this.addClickHandler_();\r\n\t\r\n\t if (this.div_.style.width) {\r\n\t this.fixedWidthSet_ = true;\r\n\t } else {\r\n\t if (this.maxWidth_ !== 0 && this.div_.offsetWidth > this.maxWidth_) {\r\n\t this.div_.style.width = this.maxWidth_;\r\n\t this.div_.style.overflow = 'auto';\r\n\t this.fixedWidthSet_ = true;\r\n\t } else {\r\n\t // The following code is needed to overcome problems with MSIE\r\n\t\r\n\t bw = this.getBoxWidths_();\r\n\t\r\n\t this.div_.style.width = this.div_.offsetWidth - bw.left - bw.right + 'px';\r\n\t this.fixedWidthSet_ = false;\r\n\t }\r\n\t }\r\n\t\r\n\t this.panBox_(this.disableAutoPan_);\r\n\t\r\n\t if (!this.enableEventPropagation_) {\r\n\t // Cancel event propagation.\r\n\t //\r\n\t this.eventListener1_ = google.maps.event.addDomListener(\r\n\t this.div_,\r\n\t 'mousedown',\r\n\t cancelHandler\r\n\t );\r\n\t this.eventListener2_ = google.maps.event.addDomListener(\r\n\t this.div_,\r\n\t 'click',\r\n\t cancelHandler\r\n\t );\r\n\t this.eventListener3_ = google.maps.event.addDomListener(\r\n\t this.div_,\r\n\t 'dblclick',\r\n\t cancelHandler\r\n\t );\r\n\t }\r\n\t\r\n\t this.contextListener_ = google.maps.event.addDomListener(\r\n\t this.div_,\r\n\t 'contextmenu',\r\n\t ignoreHandler\r\n\t );\r\n\t\r\n\t /**\r\n\t * This event is fired when the DIV containing the InfoBox's content is attached to the DOM.\r\n\t * @name InfoBox#domready\r\n\t * @event\r\n\t */\r\n\t google.maps.event.trigger(this, 'domready');\r\n\t }\r\n\t};\r\n\t\r\n\t/**\r\n\t * Returns the HTML tag for the close box.\r\n\t * @private\r\n\t */\r\n\tInfoBox.prototype.getCloseBoxImg_ = function() {\r\n\t var img = '';\r\n\t\r\n\t if (this.closeBoxURL_ !== '') {\r\n\t img = '\";\r\n\t }\r\n\t\r\n\t return img;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Adds the click handler to the InfoBox close box.\r\n\t * @private\r\n\t */\r\n\tInfoBox.prototype.addClickHandler_ = function() {\r\n\t var closeBox;\r\n\t\r\n\t if (this.closeBoxURL_ !== '') {\r\n\t closeBox = this.div_.firstChild;\r\n\t this.closeListener_ = google.maps.event.addDomListener(\r\n\t closeBox,\r\n\t 'click',\r\n\t this.getCloseClickHandler_()\r\n\t );\r\n\t } else {\r\n\t this.closeListener_ = null;\r\n\t }\r\n\t};\r\n\t\r\n\t/**\r\n\t * Returns the function to call when the user clicks the close box of an InfoBox.\r\n\t * @private\r\n\t */\r\n\tInfoBox.prototype.getCloseClickHandler_ = function() {\r\n\t var me = this;\r\n\t\r\n\t return function(e) {\r\n\t // 1.0.3 fix: Always prevent propagation of a close box click to the map:\r\n\t e.cancelBubble = true;\r\n\t\r\n\t if (e.stopPropagation) {\r\n\t e.stopPropagation();\r\n\t }\r\n\t\r\n\t me.close();\r\n\t\r\n\t /**\r\n\t * This event is fired when the InfoBox's close box is clicked.\r\n\t * @name InfoBox#closeclick\r\n\t * @event\r\n\t */\r\n\t google.maps.event.trigger(me, 'closeclick');\r\n\t };\r\n\t};\r\n\t\r\n\t/**\r\n\t * Pans the map so that the InfoBox appears entirely within the map's visible area.\r\n\t * @private\r\n\t */\r\n\tInfoBox.prototype.panBox_ = function(disablePan) {\r\n\t var map;\r\n\t var bounds;\r\n\t var xOffset = 0,\r\n\t yOffset = 0;\r\n\t\r\n\t if (!disablePan) {\r\n\t map = this.getMap();\r\n\t\r\n\t if (!map.getBounds().contains(this.position_)) {\r\n\t // Marker not in visible area of map, so set center\r\n\t // of map to the marker position first.\r\n\t map.setCenter(this.position_);\r\n\t }\r\n\t\r\n\t bounds = map.getBounds();\r\n\t\r\n\t var mapDiv = map.getDiv();\r\n\t var mapWidth = mapDiv.offsetWidth;\r\n\t var mapHeight = mapDiv.offsetHeight;\r\n\t var iwOffsetX = this.pixelOffset_.width;\r\n\t var iwOffsetY = this.pixelOffset_.height;\r\n\t var iwWidth = this.div_.offsetWidth;\r\n\t var iwHeight = this.div_.offsetHeight;\r\n\t var padX = this.infoBoxClearance_.width;\r\n\t var padY = this.infoBoxClearance_.height;\r\n\t var pixPosition = this.getProjection().fromLatLngToContainerPixel(this.position_);\r\n\t\r\n\t if (pixPosition.x < -iwOffsetX + padX) {\r\n\t xOffset = pixPosition.x + iwOffsetX - padX;\r\n\t } else if (pixPosition.x + iwWidth + iwOffsetX + padX > mapWidth) {\r\n\t xOffset = pixPosition.x + iwWidth + iwOffsetX + padX - mapWidth;\r\n\t }\r\n\t if (this.alignBottom_) {\r\n\t if (pixPosition.y < -iwOffsetY + padY + iwHeight) {\r\n\t yOffset = pixPosition.y + iwOffsetY - padY - iwHeight;\r\n\t } else if (pixPosition.y + iwOffsetY + padY > mapHeight) {\r\n\t yOffset = pixPosition.y + iwOffsetY + padY - mapHeight;\r\n\t }\r\n\t } else {\r\n\t if (pixPosition.y < -iwOffsetY + padY) {\r\n\t yOffset = pixPosition.y + iwOffsetY - padY;\r\n\t } else if (pixPosition.y + iwHeight + iwOffsetY + padY > mapHeight) {\r\n\t yOffset = pixPosition.y + iwHeight + iwOffsetY + padY - mapHeight;\r\n\t }\r\n\t }\r\n\t\r\n\t if (!(xOffset === 0 && yOffset === 0)) {\r\n\t // Move the map to the shifted center.\r\n\t //\r\n\t var c = map.getCenter();\r\n\t map.panBy(xOffset, yOffset);\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\t/**\r\n\t * Sets the style of the InfoBox by setting the style sheet and applying\r\n\t * other specific styles requested.\r\n\t * @private\r\n\t */\r\n\tInfoBox.prototype.setBoxStyle_ = function() {\r\n\t var i, boxStyle;\r\n\t\r\n\t if (this.div_) {\r\n\t // Apply style values from the style sheet defined in the boxClass parameter:\r\n\t this.div_.className = this.boxClass_;\r\n\t\r\n\t // Clear existing inline style values:\r\n\t this.div_.style.cssText = '';\r\n\t\r\n\t // Apply style values defined in the boxStyle parameter:\r\n\t boxStyle = this.boxStyle_;\r\n\t for (i in boxStyle) {\r\n\t if (boxStyle.hasOwnProperty(i)) {\r\n\t this.div_.style[i] = boxStyle[i];\r\n\t }\r\n\t }\r\n\t\r\n\t // Fix up opacity style for benefit of MSIE:\r\n\t //\r\n\t if (typeof this.div_.style.opacity !== 'undefined' && this.div_.style.opacity !== '') {\r\n\t this.div_.style.filter = 'alpha(opacity=' + this.div_.style.opacity * 100 + ')';\r\n\t }\r\n\t\r\n\t // Apply required styles:\r\n\t //\r\n\t this.div_.style.position = 'absolute';\r\n\t this.div_.style.visibility = 'hidden';\r\n\t if (this.zIndex_ !== null) {\r\n\t this.div_.style.zIndex = this.zIndex_;\r\n\t }\r\n\t }\r\n\t};\r\n\t\r\n\t/**\r\n\t * Get the widths of the borders of the InfoBox.\r\n\t * @private\r\n\t * @return {Object} widths object (top, bottom left, right)\r\n\t */\r\n\tInfoBox.prototype.getBoxWidths_ = function() {\r\n\t var computedStyle;\r\n\t var bw = { top: 0, bottom: 0, left: 0, right: 0 };\r\n\t var box = this.div_;\r\n\t\r\n\t if (document.defaultView && document.defaultView.getComputedStyle) {\r\n\t computedStyle = box.ownerDocument.defaultView.getComputedStyle(box, '');\r\n\t\r\n\t if (computedStyle) {\r\n\t // The computed styles are always in pixel units (good!)\r\n\t bw.top = parseInt(computedStyle.borderTopWidth, 10) || 0;\r\n\t bw.bottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;\r\n\t bw.left = parseInt(computedStyle.borderLeftWidth, 10) || 0;\r\n\t bw.right = parseInt(computedStyle.borderRightWidth, 10) || 0;\r\n\t }\r\n\t } else if (document.documentElement.currentStyle) {\r\n\t // MSIE\r\n\t\r\n\t if (box.currentStyle) {\r\n\t // The current styles may not be in pixel units, but assume they are (bad!)\r\n\t bw.top = parseInt(box.currentStyle.borderTopWidth, 10) || 0;\r\n\t bw.bottom = parseInt(box.currentStyle.borderBottomWidth, 10) || 0;\r\n\t bw.left = parseInt(box.currentStyle.borderLeftWidth, 10) || 0;\r\n\t bw.right = parseInt(box.currentStyle.borderRightWidth, 10) || 0;\r\n\t }\r\n\t }\r\n\t\r\n\t return bw;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Invoked when close is called. Do not call it directly.\r\n\t */\r\n\tInfoBox.prototype.onRemove = function() {\r\n\t if (this.div_) {\r\n\t this.div_.parentNode.removeChild(this.div_);\r\n\t this.div_ = null;\r\n\t }\r\n\t};\r\n\t\r\n\t/**\r\n\t * Draws the InfoBox based on the current map projection and zoom level.\r\n\t */\r\n\tInfoBox.prototype.draw = function() {\r\n\t this.createInfoBoxDiv_();\r\n\t\r\n\t var pixPosition = this.getProjection().fromLatLngToDivPixel(this.position_);\r\n\t\r\n\t this.div_.style.left = pixPosition.x + this.pixelOffset_.width + 'px';\r\n\t\r\n\t if (this.alignBottom_) {\r\n\t this.div_.style.bottom = -(pixPosition.y + this.pixelOffset_.height) + 'px';\r\n\t } else {\r\n\t this.div_.style.top = pixPosition.y + this.pixelOffset_.height + 'px';\r\n\t }\r\n\t\r\n\t if (this.isHidden_) {\r\n\t this.div_.style.visibility = 'hidden';\r\n\t } else {\r\n\t this.div_.style.visibility = 'visible';\r\n\t }\r\n\t};\r\n\t\r\n\t/**\r\n\t * Sets the options for the InfoBox. Note that changes to the maxWidth,\r\n\t * closeBoxMargin, closeBoxURL, and enableEventPropagation\r\n\t * properties have no affect until the current InfoBox is closed and a new one\r\n\t * is opened.\r\n\t * @param {InfoBoxOptions} opt_opts\r\n\t */\r\n\tInfoBox.prototype.setOptions = function(opt_opts) {\r\n\t if (typeof opt_opts.boxClass !== 'undefined') {\r\n\t // Must be first\r\n\t\r\n\t this.boxClass_ = opt_opts.boxClass;\r\n\t this.setBoxStyle_();\r\n\t }\r\n\t if (typeof opt_opts.boxStyle !== 'undefined') {\r\n\t // Must be second\r\n\t\r\n\t this.boxStyle_ = opt_opts.boxStyle;\r\n\t this.setBoxStyle_();\r\n\t }\r\n\t if (typeof opt_opts.content !== 'undefined') {\r\n\t this.setContent(opt_opts.content);\r\n\t }\r\n\t if (typeof opt_opts.disableAutoPan !== 'undefined') {\r\n\t this.disableAutoPan_ = opt_opts.disableAutoPan;\r\n\t }\r\n\t if (typeof opt_opts.maxWidth !== 'undefined') {\r\n\t this.maxWidth_ = opt_opts.maxWidth;\r\n\t }\r\n\t if (typeof opt_opts.pixelOffset !== 'undefined') {\r\n\t this.pixelOffset_ = opt_opts.pixelOffset;\r\n\t }\r\n\t if (typeof opt_opts.position !== 'undefined') {\r\n\t this.setPosition(opt_opts.position);\r\n\t }\r\n\t if (typeof opt_opts.zIndex !== 'undefined') {\r\n\t this.setZIndex(opt_opts.zIndex);\r\n\t }\r\n\t if (typeof opt_opts.closeBoxMargin !== 'undefined') {\r\n\t this.closeBoxMargin_ = opt_opts.closeBoxMargin;\r\n\t }\r\n\t if (typeof opt_opts.closeBoxURL !== 'undefined') {\r\n\t this.closeBoxURL_ = opt_opts.closeBoxURL;\r\n\t }\r\n\t if (typeof opt_opts.infoBoxClearance !== 'undefined') {\r\n\t this.infoBoxClearance_ = opt_opts.infoBoxClearance;\r\n\t }\r\n\t if (typeof opt_opts.isHidden !== 'undefined') {\r\n\t this.isHidden_ = opt_opts.isHidden;\r\n\t }\r\n\t if (typeof opt_opts.enableEventPropagation !== 'undefined') {\r\n\t this.enableEventPropagation_ = opt_opts.enableEventPropagation;\r\n\t }\r\n\t\r\n\t if (this.div_) {\r\n\t this.draw();\r\n\t }\r\n\t};\r\n\t\r\n\t/**\r\n\t * Sets the content of the InfoBox.\r\n\t * The content can be plain text or an HTML DOM node.\r\n\t * @param {string|Node} content\r\n\t */\r\n\tInfoBox.prototype.setContent = function(content) {\r\n\t this.content_ = content;\r\n\t\r\n\t if (this.div_) {\r\n\t if (this.closeListener_) {\r\n\t google.maps.event.removeListener(this.closeListener_);\r\n\t this.closeListener_ = null;\r\n\t }\r\n\t\r\n\t // Odd code required to make things work with MSIE.\r\n\t //\r\n\t if (!this.fixedWidthSet_) {\r\n\t this.div_.style.width = '';\r\n\t }\r\n\t\r\n\t if (typeof content.nodeType === 'undefined') {\r\n\t this.div_.innerHTML = this.getCloseBoxImg_() + content;\r\n\t } else {\r\n\t this.div_.innerHTML = this.getCloseBoxImg_();\r\n\t this.div_.appendChild(content);\r\n\t }\r\n\t\r\n\t // Perverse code required to make things work with MSIE.\r\n\t // (Ensures the close box does, in fact, float to the right.)\r\n\t //\r\n\t if (!this.fixedWidthSet_) {\r\n\t this.div_.style.width = this.div_.offsetWidth + 'px';\r\n\t this.div_.innerHTML = this.getCloseBoxImg_() + content;\r\n\t }\r\n\t\r\n\t this.addClickHandler_();\r\n\t }\r\n\t\r\n\t /**\r\n\t * This event is fired when the content of the InfoBox changes.\r\n\t * @name InfoBox#content_changed\r\n\t * @event\r\n\t */\r\n\t google.maps.event.trigger(this, 'content_changed');\r\n\t};\r\n\t\r\n\t/**\r\n\t * Sets the geographic location of the InfoBox.\r\n\t * @param {LatLng} latlng\r\n\t */\r\n\tInfoBox.prototype.setPosition = function(latlng) {\r\n\t this.position_ = latlng;\r\n\t\r\n\t if (this.div_) {\r\n\t this.draw();\r\n\t }\r\n\t\r\n\t /**\r\n\t * This event is fired when the position of the InfoBox changes.\r\n\t * @name InfoBox#position_changed\r\n\t * @event\r\n\t */\r\n\t google.maps.event.trigger(this, 'position_changed');\r\n\t};\r\n\t\r\n\t/**\r\n\t * Sets the zIndex style for the InfoBox.\r\n\t * @param {number} index\r\n\t */\r\n\tInfoBox.prototype.setZIndex = function(index) {\r\n\t this.zIndex_ = index;\r\n\t\r\n\t if (this.div_) {\r\n\t this.div_.style.zIndex = index;\r\n\t }\r\n\t\r\n\t /**\r\n\t * This event is fired when the zIndex of the InfoBox changes.\r\n\t * @name InfoBox#zindex_changed\r\n\t * @event\r\n\t */\r\n\t google.maps.event.trigger(this, 'zindex_changed');\r\n\t};\r\n\t\r\n\t/**\r\n\t * Returns the content of the InfoBox.\r\n\t * @returns {string}\r\n\t */\r\n\tInfoBox.prototype.getContent = function() {\r\n\t return this.content_;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Returns the geographic location of the InfoBox.\r\n\t * @returns {LatLng}\r\n\t */\r\n\tInfoBox.prototype.getPosition = function() {\r\n\t return this.position_;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Returns the zIndex for the InfoBox.\r\n\t * @returns {number}\r\n\t */\r\n\tInfoBox.prototype.getZIndex = function() {\r\n\t return this.zIndex_;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Shows the InfoBox.\r\n\t */\r\n\tInfoBox.prototype.show = function() {\r\n\t this.isHidden_ = false;\r\n\t this.div_.style.visibility = 'visible';\r\n\t};\r\n\t\r\n\t/**\r\n\t * Hides the InfoBox.\r\n\t */\r\n\tInfoBox.prototype.hide = function() {\r\n\t this.isHidden_ = true;\r\n\t this.div_.style.visibility = 'hidden';\r\n\t};\r\n\t\r\n\t/**\r\n\t * Adds the InfoBox to the specified map. If anchor\r\n\t * (usually a google.maps.Marker) is specified, the position\r\n\t * of the InfoBox is set to the position of the anchor. If the\r\n\t * anchor is dragged to a new location, the InfoBox moves as well.\r\n\t * @param {Map} map\r\n\t * @param {MVCObject} [anchor]\r\n\t */\r\n\tInfoBox.prototype.open = function(map, anchor) {\r\n\t var me = this;\r\n\t\r\n\t if (anchor) {\r\n\t this.position_ = anchor.getPosition();\r\n\t this.moveListener_ = google.maps.event.addListener(anchor, 'position_changed', function() {\r\n\t me.setPosition(this.getPosition());\r\n\t });\r\n\t }\r\n\t\r\n\t this.setMap(map);\r\n\t\r\n\t if (this.div_) {\r\n\t this.panBox_();\r\n\t }\r\n\t};\r\n\t\r\n\t/**\r\n\t * Removes the InfoBox from the map.\r\n\t */\r\n\tInfoBox.prototype.close = function() {\r\n\t if (this.closeListener_) {\r\n\t google.maps.event.removeListener(this.closeListener_);\r\n\t this.closeListener_ = null;\r\n\t }\r\n\t\r\n\t if (this.eventListener1_) {\r\n\t google.maps.event.removeListener(this.eventListener1_);\r\n\t google.maps.event.removeListener(this.eventListener2_);\r\n\t google.maps.event.removeListener(this.eventListener3_);\r\n\t this.eventListener1_ = null;\r\n\t this.eventListener2_ = null;\r\n\t this.eventListener3_ = null;\r\n\t }\r\n\t\r\n\t if (this.moveListener_) {\r\n\t google.maps.event.removeListener(this.moveListener_);\r\n\t this.moveListener_ = null;\r\n\t }\r\n\t\r\n\t if (this.contextListener_) {\r\n\t google.maps.event.removeListener(this.contextListener_);\r\n\t this.contextListener_ = null;\r\n\t }\r\n\t\r\n\t this.setMap(null);\r\n\t};\r\n\t\r\n\tmodule.exports = InfoBox;\r\n\t\n\t\n\t/*** EXPORTS FROM exports-loader ***/\n\tmodule.exports = InfoBox}.call(global));\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n\n/***/ 25:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/************************************\r\n\tMODULE: MAP CLASS\r\n\tWHAT IT DOES: Simple/Extended map logic\r\n\t*************************************/\r\n\t(function (root, factory) {\r\n\t if (true) {\r\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t }\r\n\t else if (typeof exports === 'object') {\r\n\t module.exports = factory(require('jquery'));\r\n\t }\r\n\t else { root.returnExports = factory(root.jQuery); }\r\n\t}(this, function ($) {\r\n\t\r\n\t function map(mapContainer, settings, templates) {\r\n\t for (var element in this._elements)\r\n\t {\r\n\t this[element] = this._elements[element];\r\n\t }\r\n\t this.mapContainer = mapContainer;\r\n\t this.map = this.mapContainer.find('.js-map-element');\r\n\t this.updateMapVisibility();\r\n\t\r\n\t this.isMapInited = false;\r\n\t\r\n\t this.settings = typeof settings == \"undefined\" ? this._defaults : $.extend({}, this._defaults, settings);\r\n\t this.templates = typeof templates == \"undefined\" ? this._templates : $.extend({}, this._templates, templates);\r\n\t\r\n\t this.init();\r\n\t\r\n\t $(window).on('map:updateVisibility', this.updateMapVisibility.bind(this));\r\n\t }\r\n\t\r\n\t $.extend(map.prototype, {\r\n\t GLOBE_WIDTH: 256,\r\n\t _defaults: {\r\n\t view: 'simple', //see viewTypes\r\n\t latitude: 0,\r\n\t longitude: 0,\r\n\t storename: '',\r\n\t address: '',\r\n\t phone: '',\r\n\t siteid: 0,\r\n\t isquoteurlexternal: false,\r\n\t externalquoteurl: '',\r\n\t maxzoom: 20,\r\n\t minzoom: 3,\r\n\t radius: -1,\r\n\t markers: null,\r\n\t changemode: true, //the default mode,\r\n\t changestoremode: true, //default\r\n\t viewmode: 'general', //see viewModes\r\n\t referringSelector: '.js-map-referring-item',\r\n\t url: '',\r\n\t centerId: 'center',\r\n\t defaultzoom: 10,\r\n\t autozoom: true,\r\n\t loadtimeout: 100,\r\n\t infoWindowWidth: 260,\r\n\t infoWindowSvg: '/App_Themes/Safestore/img/infobox-close.svg',\r\n\t infoWindowPng: '/App_Themes/Safestore/img/infobox-close.png',\r\n\t //tracking attributes\r\n\t tracking: false,\r\n\t category: '',\r\n\t label: '',\r\n\t citymode: false,\r\n\t pagesize: 11,\r\n\t pagesizegrid: 22,\r\n\t searchinitiator: 'Search Results',\r\n\t centralMarker: 'central'\r\n\t },\r\n\t\r\n\t viewTypes: {\r\n\t simple: 0,\r\n\t extended: 1,\r\n\t medium: 2,\r\n\t combined: 3\r\n\t },\r\n\t \r\n\t\r\n\t viewModes: {\r\n\t general: 0,\r\n\t map: 1,\r\n\t grid: 2\r\n\t },\r\n\t\r\n\t statuses: {\r\n\t topped: 0,\r\n\t fixed: 1,\r\n\t absolute: 2\r\n\t },\r\n\t\r\n\t //elements that [this] should be extended with\r\n\t _elements: {\r\n\t //jquery objects\r\n\t mapContainer: null,\r\n\t map: null,\r\n\t content: null,\r\n\t mapColumn: null,\r\n\t contentColumn: null,\r\n\t mapLoader: null,\r\n\t contentLoader: null,\r\n\t mapGrid: null,\r\n\t header: null,\r\n\t sticky: null,\r\n\t mapWrapper: null,\r\n\t //for loaded stores\r\n\t stores: null,\r\n\t //for sent stores by google analytics\r\n\t oldStores: null,\r\n\t // for previously loaded stores\r\n\t storesGaSent: [],\r\n\t //map object\r\n\t jsmap: null,\r\n\t hadCustomScroll: false, // SR-686\r\n\t //map current dimensions\r\n\t dimensions: null,\r\n\t prevDimensions: null,\r\n\t center: null,\r\n\t prevCenter: null,\r\n\t zoom: -1,\r\n\t //status for scroll\r\n\t status: 0,\r\n\t //lastdimensions happened during ajaxCall\r\n\t loadmorecenter: null,\r\n\t loadmorezoom: -1,\r\n\t //map markers options\r\n\t markers: {}, //map markers\r\n\t infowindow: {}, //infowindows markers\r\n\t infowindwsOpened: {}, //map for curently opened infowindows\r\n\t //animation object\r\n\t tween: null,\r\n\t //ajaxCall object\r\n\t ajaxCall: null,\r\n\t //timer for ajax Call (loadtimeout time)\r\n\t loadingTimeout: null,\r\n\t //whether or not the map is locked from interaction\r\n\t isLocked: false,\r\n\t //indicate whether items are loaded for the first time\r\n\t isInitialLoad: true,\r\n\t isSearchResultsLoad: false,\r\n\t closedStorePopupTemplateObj: {\r\n\t stores: []\r\n\t }\r\n\t },\r\n\t\r\n\t _templates: {\r\n\t infobox: {\r\n\t id: '#infobox-template',\r\n\t template: null\r\n\t },\r\n\t infoboxSimple: {\r\n\t id: '#infobox-simple-template',\r\n\t template: null\r\n\t },\r\n\t stores: {\r\n\t id: '#stores-template',\r\n\t template: null\r\n\t },\r\n\t header: {\r\n\t id: '#mapheader-template',\r\n\t template: null\r\n\t }\r\n\t },\r\n\t\r\n\t markerPaths: {\r\n\t initial: {\r\n\t url: '/App_Themes/Safestore/img/marker.png',\r\n\t width: 86,\r\n\t height: 120,\r\n\t centerX: 43,\r\n\t centerY: 120,\r\n\t gicon: null,\r\n\t infooffset: -85,\r\n\t mouseover: 'hover',\r\n\t clickable: true\r\n\t },\r\n\t hover: {\r\n\t url: '/App_Themes/Safestore/img/marker_hover.png',\r\n\t width: 86,\r\n\t height: 120,\r\n\t centerX: 43,\r\n\t centerY: 120,\r\n\t gicon: null,\r\n\t infooffset: -85,\r\n\t clickable: true\r\n\t },\r\n\t initialSmallUpp: {\r\n\t url: '/App_Themes/Safestore/img/marker_small.png',\r\n\t width: 54,\r\n\t height: 78,\r\n\t centerX: 27,\r\n\t centerY: 78,\r\n\t gicon: null,\r\n\t infooffset: -60,\r\n\t mouseover: 'hoverSmallUpp',\r\n\t clickable: true\r\n\t },\r\n\t hoverSmallUpp: {\r\n\t url: '/App_Themes/Safestore/img/marker_hover_small.png',\r\n\t width: 54,\r\n\t height: 78,\r\n\t centerX: 27,\r\n\t centerY: 78,\r\n\t gicon: null,\r\n\t infooffset: -60,\r\n\t clickable: true\r\n\t },\r\n\t nearSmallUpp: {\r\n\t url: '/App_Themes/Safestore/img/marker_small.png',\r\n\t width: 54,\r\n\t height: 78,\r\n\t centerX: 27,\r\n\t centerY: 78,\r\n\t gicon: null,\r\n\t infooffset: -60,\r\n\t mouseover: 'hoverSmallUpp',\r\n\t clickable: true\r\n\t },\r\n\t initialBelgium: {\r\n\t url: '/App_Themes/Safestore/img/marker-belgium.png',\r\n\t width: 54,\r\n\t height: 85,\r\n\t centerX: 27,\r\n\t centerY: 85,\r\n\t gicon: null,\r\n\t infooffset: -60,\r\n\t mouseover: 'hoverBelgium',\r\n\t clickable: true\r\n\t },\r\n\t hoverBelgium: {\r\n\t url: '/App_Themes/Safestore/img/marker-belgium-hover.png',\r\n\t width: 54,\r\n\t height: 85,\r\n\t centerX: 27,\r\n\t centerY: 85,\r\n\t gicon: null,\r\n\t infooffset: -60,\r\n\t clickable: true\r\n\t },\r\n\t nearBelgium: {\r\n\t url: '/App_Themes/Safestore/img/marker-belgium.png',\r\n\t width: 54,\r\n\t height: 78,\r\n\t centerX: 27,\r\n\t centerY: 78,\r\n\t gicon: null,\r\n\t infooffset: -60,\r\n\t mouseover: 'hoverBelgium',\r\n\t clickable: true\r\n\t },\r\n\t\t\t\tinitialSpain: {\r\n\t url: '/App_Themes/Safestore/img/marker_es.png',\r\n\t width: 86,\r\n\t height: 120,\r\n\t centerX: 43,\r\n\t centerY: 120,\r\n\t gicon: null,\r\n\t infooffset: -85,\r\n\t mouseover: 'hoverSpain',\r\n\t clickable: true\r\n\t },\r\n\t\t\t\thoverSpain: {\r\n\t url: '/App_Themes/Safestore/img/marker_hover_es.png',\r\n\t\t\t\t\twidth: 86,\r\n\t height: 120,\r\n\t centerX: 43,\r\n\t centerY: 120,\r\n\t gicon: null,\r\n\t infooffset: -85,\r\n\t clickable: true\r\n\t },\r\n\t nearSpain: {\r\n\t url: '/App_Themes/Safestore/img/marker_near_es.png',\r\n\t width: 86,\r\n\t height: 120,\r\n\t centerX: 43,\r\n\t centerY: 120,\r\n\t gicon: null,\r\n\t infooffset: -85,\r\n\t mouseover: 'hoverSpain',\r\n\t clickable: true\r\n\t },\r\n\t centralWithCircle: {\r\n\t url: '/App_Themes/Safestore/img/marker_center.png',\r\n\t width: 278,\r\n\t height: 278,\r\n\t centerX: 139,\r\n\t centerY: 139,\r\n\t gicon: null,\r\n\t infooffset: 0,\r\n\t clickable: false\r\n\t },\r\n\t central: {\r\n\t url: '/App_Themes/Safestore/img/marker_center_no_circle.png',\r\n\t width: 278,\r\n\t height: 278,\r\n\t centerX: 139,\r\n\t centerY: 139,\r\n\t gicon: null,\r\n\t infooffset: 0,\r\n\t clickable: false\r\n\t },\r\n\t near: {\r\n\t url: '/App_Themes/Safestore/img/marker_near.png',\r\n\t width: 86,\r\n\t height: 120,\r\n\t centerX: 43,\r\n\t centerY: 120,\r\n\t gicon: null,\r\n\t infooffset: -85,\r\n\t mouseover: 'hover',\r\n\t clickable: true\r\n\t }\r\n\t },\r\n\t\r\n\t controls: {\r\n\t zoomin: {\r\n\t classSelector: '.js-zoomin',\r\n\t eventListener: 'zoomin',\r\n\t event: 'click',\r\n\t minviewMode: 0\r\n\t },\r\n\t zoomout: {\r\n\t classSelector: '.js-zoomout',\r\n\t eventListener: 'zoomout',\r\n\t event: 'click',\r\n\t minviewMode: 0\r\n\t },\r\n\t changemode: {\r\n\t classSelector: '.js-changemode',\r\n\t eventListener: 'changemode',\r\n\t event: 'change',\r\n\t minviewMode: 1\r\n\t },\r\n\t viewmode: {\r\n\t classSelector: '.js-map-view',\r\n\t eventListener: 'changeview',\r\n\t event: 'click',\r\n\t minviewMode: 1\r\n\t },\r\n\t loadmore: {\r\n\t classSelector: '.js-map-load-more',\r\n\t eventListener: 'loadmore',\r\n\t event: 'click',\r\n\t minviewMode: 1\r\n\t },\r\n\t changestoremode: {\r\n\t classSelector: '.js-changestoremode',\r\n\t eventListener: 'changestoremode',\r\n\t event: 'change',\r\n\t minviewMode: 1\r\n\t }\r\n\t },\r\n\t\r\n\t emptySearch : false,\r\n\t\r\n\t init: function () {\r\n\t if (typeof google == \"undefined\") {\r\n\t return;\r\n\t }\r\n\t\r\n\t // Perf: Google Maps v3 - prevent API from loading Roboto font\r\n\t // http://stackoverflow.com/questions/25523806/google-maps-v3-prevent-api-from-loading-roboto-font\r\n\t var head = document.getElementsByTagName('head')[0];\r\n\t\r\n\t var insertBefore = head.insertBefore;\r\n\t\r\n\t head.insertBefore = function (newElement, referenceElement) {\r\n\t\r\n\t if (newElement.href && newElement.href.indexOf('https://fonts.googleapis.com/css?family=Roboto') === 0) {\r\n\t return;\r\n\t }\r\n\t\r\n\t insertBefore.call(head, newElement, referenceElement);\r\n\t }; \r\n\t\r\n\t //settings\r\n\t this.createIcons();\r\n\t\r\n\t this.settings.view = typeof this.viewTypes[this.settings.view] == 'undefined' ? 'simple' : this.settings.view;\r\n\t this.settings.viewInt = this.viewTypes[this.settings.view];\r\n\t\r\n\t switch(this.settings.viewInt) {\r\n\t case this.viewTypes.extended: this.initExtended(); break;\r\n\t case this.viewTypes.simple: this.initSimple(); break;\r\n\t case this.viewTypes.medium: this.initMedium(); break;\r\n\t case this.viewTypes.combined: this.initCombined(); break;\r\n\t default: break;\r\n\t }\r\n\t },\r\n\t\r\n\t getMetersFromMiles: function(miles) {\r\n\t return miles* 1609.34;\r\n\t },\r\n\t\r\n\t initMap: function (settings) {\r\n\t settings = settings || {};\r\n\t\r\n\t //map creation\r\n\t this.jsmap = new google.maps.Map(this.map[0], $.extend({\r\n\t center: {\r\n\t lat: parseFloat(this.settings.latitude),\r\n\t lng: parseFloat(this.settings.longitude)\r\n\t },\r\n\t minZoom: this.settings.minzoom,\r\n\t maxZoom: this.settings.maxzoom,\r\n\t disableDefaultUI: true,\r\n\t scrollwheel: true,\r\n\t zoom: this.settings.defaultzoom,\r\n\t gestureHandling: 'cooperative'\r\n\t }, settings));\r\n\t\r\n\t if (!this.jsmap)\r\n\t return false;\r\n\t\r\n\t if(this.settings.radius > 0) {\r\n\t var circle = new google.maps.Circle({\r\n\t radius: this.getMetersFromMiles(this.settings.radius),\r\n\t center: this.jsmap.getCenter()\r\n\t });\r\n\t\r\n\t //because fit bounds doesn't set correct zoom\r\n\t /*this.jsmap.fitBounds(circle.getBounds());*/\r\n\t //taken from http://stackoverflow.com/questions/6048975/google-maps-v3-how-to-calculate-the-zoom-level-for-a-given-bounds\r\n\t\r\n\t var bounds = circle.getBounds(),\r\n\t east = bounds.getNorthEast().lng(),\r\n\t west = bounds.getSouthWest().lng(),\r\n\t angle = east - west,\r\n\t zoom;\r\n\t\r\n\t angle += angle < 0 ? 360 : 0;\r\n\t zoom = Math.floor(Math.log(this.map.outerWidth() * 360 / angle / this.GLOBE_WIDTH) / Math.LN2);\r\n\t this.jsmap.setZoom(zoom);\r\n\t }\r\n\t\r\n\t if(window.App.globals.isMobileSmall) {\r\n\t this.jsmap.setZoom((this.jsmap.getZoom()-1) >= this.settings.minzoom ? (this.jsmap.getZoom()-1) : this.settings.minzoom);\r\n\t }\r\n\t\r\n\t //controlsCreating\r\n\t this.initControls();\r\n\t\r\n\t //events\r\n\t this.dimensions = {\r\n\t width: this.map.width(),\r\n\t height: this.map.height()\r\n\t };\r\n\t this.center = this.jsmap.getCenter();\r\n\t this.loadmorecenter = this.center;\r\n\t this.initialCenter = {\r\n\t lat: this.center.lat(),\r\n\t lng: this.center.lng()\r\n\t };\r\n\t this.idleListener = google.maps.event.addListener(this.jsmap, 'idle', this.onIdle.bind(this));\r\n\t\r\n\t return true;\r\n\t },\r\n\t\r\n\t isEnquiryProcessPage: function () {\r\n\t return window.location.href.indexOf('enquiryprocess') !== -1;\r\n\t },\r\n\t\r\n\t setMapVisibility: function (shouldShowMap) {\r\n\t if (shouldShowMap) {\r\n\t if (this.hadCustomScroll) {\r\n\t $('html').removeClass('no-custom-scroll');\r\n\t $('html').addClass('custom-scroll')\r\n\t this.hadCustomScroll = false;\r\n\t }\r\n\t this.mapContainer.css('display', 'block');\r\n\t $(window).trigger('tabs:resize');\r\n\t }\r\n\t else {\r\n\t this.mapContainer.css('display', 'none');\r\n\t if ($('html').hasClass('custom-scroll')) {\r\n\t this.hadCustomScroll = true;\r\n\t $('html').removeClass('custom-scroll');\r\n\t $('html').addClass('no-custom-scroll');\r\n\t }\r\n\t }\r\n\t },\r\n\t\r\n\t // SR-686 fix\r\n\t updateMapVisibility: function (e, data) {\r\n\t if (typeof e != 'undefined' && typeof e.preventDefault == \"function\") {\r\n\t e.preventDefault();\r\n\t }\r\n\t\r\n\t if (typeof data != 'undefined') {\r\n\t if (data.shouldShowMap) {\r\n\t this.setMapVisibility(true);\r\n\t }\r\n\t else {\r\n\t this.setMapVisibility(false);\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (this.isEnquiryProcessPage()) {\r\n\t if (this.mapContainer.css('display') === 'block') {\r\n\t this.setMapVisibility(false);\r\n\t }\r\n\t }\r\n\t else if (this.mapContainer.css('display') !== 'block') {\r\n\t this.setMapVisibility(true);\r\n\t }\r\n\t }\r\n\t },\r\n\t\r\n\t onIdle: function () {\r\n\t this.isMapInited = true;\r\n\t this.jsmap.setCenter(this.initialCenter);\r\n\t google.maps.event.removeListener(this.idleListener);\r\n\t },\r\n\t\r\n\t initSimple: function () {\r\n\t if (this.initMap({\r\n\t draggable: !window.App.globals.isMobile,\r\n\t scrollwheel: false,\r\n\t disableDoubleClickZoom: true\r\n\t })) {\r\n\t this.setMarker(this.settings.centerId, this.markerPaths.initial, this.jsmap.getCenter());\r\n\t $(window).on('resize:finished', this.boundsChangeProcess.bind(this));\r\n\t }\r\n\t },\r\n\t\r\n\t initExtended: function () {\r\n\t\r\n\t //settings\r\n\t this.settings.culture = window.appState.culture;\r\n\t this.settings.viewmode = typeof this.viewModes[this.settings.viewmode] == 'undefined' ? 'general' : this.settings.viewmode;\r\n\t this.settings.viewmodeInt = this.viewModes[this.settings.viewmode];\r\n\t this.settings.currentPage = 0;\r\n\t this.settings.totalPages = 0;\r\n\t this.settings.totalItems = 0;\r\n\t\r\n\t //elements\r\n\t this.content = this.mapContainer.find('.js-map-content');\r\n\t this.contentColumn = this.mapContainer.find('.js-map-content-column');\r\n\t this.mapColumn = this.mapContainer.find('.js-map-map-column');\r\n\t this.mapGrid = this.mapContainer.find('.js-map-grid');\r\n\t this.mapLoader = this.mapContainer.find('.js-map-loader');\r\n\t this.contentLoader = this.mapContainer.find('.js-map-content-loader');\r\n\t this.header = this.mapContainer.find('.js-map-header');\r\n\t this.sticky = this.mapContainer.find('.js-map-sticky');\r\n\t this.mapWrapper = this.mapContainer.find('.js-map-wrapper');\r\n\t\r\n\t this.content.find('noscript').remove();\r\n\t\r\n\t //requiring libraries\r\n\t if (typeof this.Handlebars == 'undefined') {\r\n\t this.Handlebars = __webpack_require__(6);\r\n\t }\r\n\t if (typeof this.waitforimages == 'undefined')\r\n\t this.waitforimages = __webpack_require__(7);\r\n\t if (typeof this.infobox == 'undefined')\r\n\t this.infobox = __webpack_require__(13);\r\n\t\r\n\t //templates\r\n\t for (var templateName in this.templates) {\r\n\t if (this.templates[templateName].template == null) {\r\n\t var templateSource = $(this.templates[templateName].id);\r\n\t if (templateSource.length)\r\n\t this.templates[templateName].template = this.Handlebars.compile(templateSource.html());\r\n\t }\r\n\t }\r\n\t\r\n\t if (this.settings.changemode)\r\n\t this.isSearchResultsLoad = true;\r\n\t\r\n\t //filling content\r\n\t if (this.settings.markers != null && typeof window[this.settings.markers] != 'undefined') {\r\n\t this.stores = { stores: window[this.settings.markers].stores.slice() };\r\n\t this.updateCountersFromStores();\r\n\t this.fillContent();\r\n\t }\r\n\t\r\n\t this.totallyLoaded();\r\n\t this.fillHeader();\r\n\t\r\n\t this.mapContainer.waitForImages(this.initExtendedLoaded.bind(this), function (loaded, count, success) { }, true);\r\n\t },\r\n\t\r\n\t\r\n\t initMedium: function () {\r\n\t if (this.initMap()) {\r\n\t\r\n\t if (typeof this.Handlebars == 'undefined')\r\n\t this.Handlebars = __webpack_require__(6);\r\n\t if (typeof this.infobox == 'undefined')\r\n\t this.infobox = __webpack_require__(13);\r\n\t //templates\r\n\t for (var templateName in this.templates) {\r\n\t if (this.templates[templateName].template == null) {\r\n\t var templateSource = $(this.templates[templateName].id);\r\n\t if (templateSource.length)\r\n\t this.templates[templateName].template = this.Handlebars.compile(templateSource.html());\r\n\t }\r\n\t }\r\n\t\r\n\t this.initialMarkersSet( this.markerPaths[this.settings.marker] || this.markerPaths.initial, false);\r\n\t\r\n\t setTimeout(this.fitBoundsToMarker(), 1000);\r\n\t }\r\n\t\r\n\t },\r\n\t\r\n\t initCombined: function () {\r\n\t\r\n\t if (this.initMap()) {\r\n\t\r\n\t if (typeof this.Handlebars == 'undefined')\r\n\t this.Handlebars = __webpack_require__(6);\r\n\t\r\n\t if (typeof this.infobox == 'undefined')\r\n\t this.infobox = __webpack_require__(13);\r\n\t //templates\r\n\t for (var templateName in this.templates) {\r\n\t if (this.templates[templateName].template == null) {\r\n\t var templateSource = $(this.templates[templateName].id);\r\n\t if (templateSource.length)\r\n\t this.templates[templateName].template = this.Handlebars.compile(templateSource.html());\r\n\t }\r\n\t }\r\n\t\r\n\t // set \"near\" version of correct marker\r\n\t var marker = this.settings.marker;\r\n\t var nearMarker = this.settings.marker.includes('initial') ? marker.replace('initial', 'near') : this.settings.marker;\r\n\t\r\n\t this.initialMarkersSet(this.markerPaths[nearMarker] || this.markerPaths.near, false);\r\n\t\r\n\t var infoContent = this.templates.infoboxSimple.template ? this.templates.infoboxSimple.template(this.settings) : '';\r\n\t\r\n\t // set \"initial\" version of correct marker\r\n\t this.setMarker(this.settings.centerId, this.markerPaths[this.settings.marker] || this.markerPaths.initial, this.jsmap.getCenter(), 10, infoContent);\r\n\t $(window).on('resize:finished', this.boundsChangeProcess.bind(this));\r\n\t }\r\n\t\r\n\t if(map1Points) {\r\n\t if (this.closedStorePopupTemplateObj.stores.length < 2 && map1Points.stores.length > this.closedStorePopupTemplateObj.stores.length) {\r\n\t var newClosestStores = this.getClosestStores(2, map1Points.stores);\r\n\t if (newClosestStores.stores.length > this.closedStorePopupTemplateObj.stores.length) {\r\n\t this.closedStorePopupTemplateObj = newClosestStores;\r\n\t }\r\n\t }\r\n\t $('.js-store-closed-popup-btn').on('click', this.closedPopupInit.bind(this));\r\n\t }\r\n\t\r\n\t },\r\n\t\r\n\t initExtendedLoaded: function () {\r\n\t //dimesions && scroll\r\n\t this.heightSet();\r\n\t this.initialScrollSet();\r\n\t\r\n\t if (!this.initMap()) {\r\n\t return;\r\n\t }\r\n\t\r\n\t //initialMarkersSet\r\n\t this.initialMarkersSet(this.markerPaths[this.settings.marker] || this.markerPaths.initial, true);\r\n\t\r\n\t //contentInteractions\r\n\t this.content.on('mouseenter', this.settings.referringSelector, this.referringItemMouseenter.bind(this));\r\n\t this.content.on('mouseleave', this.settings.referringSelector, this.referringItemMouseleave.bind(this));\r\n\t\r\n\t //resize\r\n\t $(window).on('resize:finished', this.resize.bind(this));\r\n\t this.resize(null, true); // forced resize\r\n\t\r\n\t google.maps.event.addListener(this.jsmap, 'bounds_changed', this.boundsChangeProcess.bind(this));\r\n\t\r\n\t if (this.settings.changemode) {\r\n\t this.boundsChangeProcess(true); // forced bounds change process\r\n\t }\r\n\t\r\n\t if(this.settings.totalItems && this.settings.autozoom) {\r\n\t this.fitBoundsToMarker();\r\n\t }\r\n\t\r\n\t this.removeMapLoader();\r\n\t },\r\n\t\r\n\t /****globals & settings*/\r\n\t\r\n\t initialScrollSet: function () {\r\n\t window.App.globals.onScrollElement.on('scroll touchmove', this.onScroll.bind(this));\r\n\t },\r\n\t\r\n\t onScroll: function (toAnimate) {\r\n\t\r\n\t var toanimate = (typeof toAnimate != 'undefined' && toAnimate === true),\r\n\t scrollTop = window.App.globals.getTop(),\r\n\t top = Math.round(scrollTop) + window.App.globals.cookieRealHeight,\r\n\t offset = this.mapContainer.offset(),\r\n\t offsetTop = offset.top + (window.App.globals.isCustomScroll ? scrollTop : 0),\r\n\t stickyAndMap = this.sticky.add(this.mapColumn);\r\n\t\r\n\t stickyAndMap.css({\r\n\t 'transition': '',\r\n\t '-webkit-transition': ''\r\n\t });\r\n\t\r\n\t if (top <= offsetTop || this.settings.viewmodeInt != this.viewModes.general || window.App.globals.isTabletSmall) {\r\n\t if (this.status == this.statuses.topped)\r\n\t return;\r\n\t this.status = this.statuses.topped;\r\n\t this.mapContainer.removeClass('fixed');\r\n\t \r\n\t \r\n\t this.mapWrapper.css('width', '');\r\n\t \r\n\t stickyAndMap.css({\r\n\t 'transform': '',\r\n\t '-webkit-transform': '',\r\n\t '-ms-transform': ''\r\n\t });\r\n\t return;\r\n\t }\r\n\t\r\n\t var topMin = top - offsetTop,\r\n\t topMax = Math.round(this.mapContainer.outerHeight() - parseInt(this.mapContainer.css('padding-bottom')) - this.map.height() - this.sticky.height());\r\n\t\r\n\t if (topMin < topMax) {\r\n\t if (this.status != this.status.fixed && toanimate) {\r\n\t stickyAndMap.css({\r\n\t 'transition': 'transform .5s ease',\r\n\t '-webkit-transition': '-webkit-transform .5s ease',\r\n\t '-ms-transform': 'translate3d(0, ' + topMin + 'px, 0)',\r\n\t '-webkit-transform': 'translate3d(0, ' + topMin + 'px, 0)',\r\n\t 'transform': 'translate3d(0, ' + topMin + 'px, 0)'\r\n\t });\r\n\t return;\r\n\t }\r\n\t \r\n\t if (this.mapColumn.width() > 0) {\r\n\t this.mapWrapper.css('width', this.mapColumn.width());\r\n\t } else {\r\n\t this.mapWrapper.css('width', '');\r\n\t console.log('fix2');\r\n\t }\r\n\t\r\n\t stickyAndMap.css({\r\n\t 'transform': '',\r\n\t '-webkit-transform': '',\r\n\t '-ms-transform': ''\r\n\t });\r\n\t this.mapContainer.addClass('fixed');\r\n\t\r\n\t this.status = this.statuses.fixed;\r\n\t } else {\r\n\t this.mapContainer.removeClass('fixed');\r\n\t topMax = Math.max(0, topMax);\r\n\t stickyAndMap.css({\r\n\t 'transform': 'translate3d(0, ' + topMax + 'px, 0)',\r\n\t '-webkit-transform': 'translate3d(0, ' + topMax + 'px, 0)',\r\n\t '-ms-transform': 'translate3d(0, ' + topMax + 'px, 0)'\r\n\t });\r\n\t this.mapWrapper.css('width', '');\r\n\t\r\n\t this.status = this.statuses.absolute;\r\n\t }\r\n\t },\r\n\t\r\n\t heightSet: function (isFromFillContent) {\r\n\t var offsetTop = this.mapGrid[0].offsetTop,\r\n\t contentItems = this.content.children(),\r\n\t length = contentItems.length,\r\n\t loadbutton = this.contentColumn.find('.js-map-load-more'),\r\n\t minheight = 0,\r\n\t changeHeight = false;\r\n\t\r\n\t if (length > 2) {\r\n\t minheight = this.content.outerHeight(true);\r\n\t }\r\n\t else if (length) {\r\n\t minheight = contentItems.eq(0).outerHeight(true);\r\n\t }\r\n\t if (loadbutton.length && loadbutton.css('display') != 'none') {\r\n\t minheight += loadbutton.outerHeight(true);\r\n\t }\r\n\t\r\n\t if ((this.settings.changemode || !length) && !window.App.globals.isTabletSmall) {\r\n\t minheight = Math.max(minheight, 630);\r\n\t }\r\n\t\r\n\t if (window.App.globals.isTabletSmall) {\r\n\t minheight = this.mapGrid.hasClass('map__grid_location') ? 560 : 400;\r\n\t }\r\n\t\r\n\t minheight = Math.min(window.App.globals.height - offsetTop - window.App.globals.cookieRealHeight - parseInt(this.mapContainer.css('padding-bottom')), minheight);\r\n\t\r\n\t minheight = Math.min(997, minheight); // height not larger than height of the block by design\r\n\t\r\n\t changeHeight = !this.dimensions || this.dimensions.height != minheight;\r\n\t\r\n\t if (this.isSearchResultsLoad) {\r\n\t if (changeHeight) {\r\n\t this.isInitialLoad = true;\r\n\t\r\n\t if (!this.settings.citymode){\r\n\t this.content.children().first().addClass('nearest-store');\r\n\t }\r\n\t }\r\n\t else if (typeof isFromFillContent != 'undefined' && isFromFillContent) {\r\n\t this.isSearchResultsLoad = false;\r\n\t }\r\n\t }\r\n\t\r\n\t this.mapColumn.children().first().css('height', minheight);\r\n\t this.mapWrapper.css('min-height', Math.min(minheight, parseInt(this.mapWrapper.css('min-height'))));\r\n\t\r\n\t this.mapRefresh();\r\n\t\r\n\t var maxHeight = 0;\r\n\t switch (this.settings.viewmodeInt) {\r\n\t case this.viewModes.map:\r\n\t maxHeight = minheight;\r\n\t break;\r\n\t case this.viewModes.grid:\r\n\t maxHeight = this.contentColumn.outerHeight();\r\n\t break;\r\n\t case this.viewModes.general:\r\n\t maxHeight = Math.max(minheight, this.contentColumn.outerHeight());\r\n\t break;\r\n\t }\r\n\t\r\n\t // KGP-443\r\n\t // IE fix setting of height is postponed to wait until all storages are loaded KGP \r\n\t var ie = navigator.userAgent.match(/MSIE\\s([\\d.]+)/);\r\n\t if (ie) {\r\n\t setTimeout(function(){ \r\n\t TweenMax.fromTo(this.mapGrid, 0.5, { maxHeight: this.mapGrid.outerHeight() }, { maxHeight: maxHeight, onComplete: this.onScroll.bind(this, true) });\r\n\t }, 100);\r\n\t } else {\r\n\t TweenMax.fromTo(this.mapGrid, 0.5, { maxHeight: this.mapGrid.outerHeight() }, { maxHeight: maxHeight, onComplete: this.onScroll.bind(this, true) });\r\n\t }\r\n\t \r\n\t },\r\n\t\r\n\t mapRefresh: function () {\r\n\t if(this.jsmap)\r\n\t google.maps.event.trigger(this.jsmap, 'resize');\r\n\t },\r\n\t\r\n\t createIcons: function () {\r\n\t for (var marker in this.markerPaths) {\r\n\t var icon = this.markerPaths[marker];\r\n\t if (icon.gicon != null)\r\n\t continue;\r\n\t this.markerPaths[marker].gicon = new google.maps.MarkerImage(\r\n\t icon.url,\r\n\t null,\r\n\t new google.maps.Point(0, 0),\r\n\t new google.maps.Point(Math.round(icon.centerX / 2), Math.round(icon.centerY / 2)),\r\n\t new google.maps.Size(Math.round(icon.width / 2), Math.round(icon.height / 2)));\r\n\t }\r\n\t },\r\n\t\r\n\t scrollToTop: function () {\r\n\t var currentTop = window.App.globals.getTop(),\r\n\t offset = this.mapContainer.offset(),\r\n\t offsetTop = offset.top + (window.App.globals.isCustomScroll ? currentTop : 0);\r\n\t\r\n\t if (currentTop > offsetTop && !window.App.globals.isTabletSmall) {\r\n\t window.App.globals.scrollElement.stop().animate({ scrollTop: Math.max(0, offset.top - window.App.globals.cookieRealHeight) }, 500, this.setView.bind(this));\r\n\t return false;\r\n\t } else {\r\n\t this.onScroll();\r\n\t return true;\r\n\t }\r\n\t },\r\n\t\r\n\t setView: function () {\r\n\t if (!this.contentColumn.length || !this.mapColumn.length || !this.mapGrid.length)\r\n\t return;\r\n\t\r\n\t if (!this.scrollToTop())\r\n\t return;\r\n\t\r\n\t this.tweenPromote(this.tween);\r\n\t this.tween = new TimelineMax({\r\n\t onComplete: this.setViewAnimationEnd.bind(this)\r\n\t });\r\n\t\r\n\t var contentChildren = this.content.children();\r\n\t contentChildren.css('width', contentChildren.first().outerWidth());\r\n\t\r\n\t switch (this.settings.viewmodeInt) {\r\n\t case this.viewModes.general:\r\n\t this.contentColumn.css('height', 'auto');\r\n\t this.mapColumn.css('height', 'auto');\r\n\t this.tween.to(this.contentColumn, 0.0, { opacity: 1, width: '100%', left: 0, marginRight: '-100%' });\r\n\t this.tween.to(this.mapColumn, 0.0, { zIndex: 9, opacity: 1, width: '100%', left: '100%' });\r\n\t break;\r\n\t case this.viewModes.grid:\r\n\t this.contentColumn.css('height', 'auto');\r\n\t this.tween.to(this.contentColumn, 0.0, { opacity: 1, width: '200%', left: 0, marginRight: '-200%' });\r\n\t this.tween.to(this.mapColumn, 0.0, { zIndex: 9, opacity: 0, left: '100%' });\r\n\t this.mapColumn.css('height', 0);\r\n\t break;\r\n\t case this.viewModes.map:\r\n\t this.mapColumn.css('height', 'auto');\r\n\t this.tween.to(this.contentColumn, 0.0, { opacity: 0, left: 0 });\r\n\t this.tween.to(this.mapColumn, 0.0, { zIndex: 11, opacity: 1, width: '200%', left: '0' });\r\n\t this.contentColumn.css('height', 0);\r\n\t break;\r\n\t default:\r\n\t break;\r\n\t }\r\n\t\r\n\t this.tween.play();\r\n\t },\r\n\t\r\n\t setViewAnimationEnd: function () {\r\n\t //set grid class\r\n\t switch (this.settings.viewmodeInt) {\r\n\t case this.viewModes.general:\r\n\t this.content.addClass('grid_4');\r\n\t this.content.removeClass('grid_8');\r\n\t break;\r\n\t case this.viewModes.grid:\r\n\t this.content.addClass('grid_8');\r\n\t this.content.removeClass('grid_4');\r\n\t break;\r\n\t default:\r\n\t break;\r\n\t }\r\n\t this.content.children().css('width', '');\r\n\t\r\n\t this.heightSet();\r\n\t\r\n\t if(this.settings.changemode){\r\n\t this.boundsChangeProcess();\r\n\t }else{\r\n\t this.stores = { stores: this.oldStores.stores.slice()}; //get previous results for grid view mode\r\n\t }\r\n\t },\r\n\t\r\n\t tweenPromote: function (tween) {\r\n\t if (typeof tween == 'undefined' || tween == null)\r\n\t return;\r\n\t if (typeof tween.progress == 'function' && tween.progress() < 1) {\r\n\t tween.pause();\r\n\t tween.progress(1);\r\n\t this.setViewAnimationEnd();\r\n\t }\r\n\t if (typeof tween.destroy == 'function') {\r\n\t tween.destroy();\r\n\t }\r\n\t },\r\n\t\r\n\t removeMapLoader: function () {\r\n\t this.mapContainer.removeClass('loading');\r\n\t\r\n\t if (this.mapLoader.is(\":visible\")) {\r\n\t var tween = new TimelineMax();\r\n\t tween.to(this.mapLoader, 0.5, { opacity: 0 });\r\n\t tween.to(this.mapLoader, 0.0, { display: 'none' });\r\n\t tween.play();\r\n\t }\r\n\t },\r\n\t\r\n\t /****resize***/\r\n\t resize: function (e, forced) { // if forced, make resize process for any viewmode\r\n\t\r\n\t if(typeof forced == 'undefined' && this.settings.viewmodeInt == this.viewModes.grid){\r\n\t this.heightSet();\r\n\t return;\r\n\t }\r\n\t\r\n\t if (this.settings.viewmodeInt == this.viewModes.general && (window.App.globals.isTabletSmall || window.App.globals.isMobileSmall)) {\r\n\t var selectors = this.mapContainer.find(this.controls.viewmode.classSelector);\r\n\t selectors.removeClass('active');\r\n\t selectors.filter('[data-view=\"grid\"]').addClass('active');\r\n\t this.settings.viewmodeInt = this.viewModes.grid;\r\n\t this.setView();\r\n\t } else {\r\n\t this.heightSet();\r\n\t }\r\n\t if(this.settings.totalItems && this.settings.autozoom) {\r\n\t this.fitBoundsToMarker();\r\n\t }\r\n\t },\r\n\t\r\n\t /**control handlers**/\r\n\t\r\n\t initControls: function () {\r\n\t for (var control in this.controls) {\r\n\t if (this.controls[control].minveiwMode < this.settings.viewInt)\r\n\t continue;\r\n\t var controlEl = this.mapContainer.find(this.controls[control].classSelector);\r\n\t if (!controlEl.length)\r\n\t continue;\r\n\t if (control == 'changemode')\r\n\t controlEl.val(this.settings.changemode);\r\n\t if (control == 'changestoremode')\r\n\t controlEl.val(this.settings.changestoremode);\r\n\t controlEl.on(this.controls[control].event, this[this.controls[control].eventListener].bind(this));\r\n\t }\r\n\t if (this.settings.viewInt >= this.viewTypes.extended) {\r\n\t this.mapContainer.find(this.controls.viewmode.classSelector + '[data-view=\"' + this.settings.viewmode + '\"]').addClass('active');\r\n\t }\r\n\t },\r\n\t\r\n\t zoomin: function (e) {\r\n\t if (typeof e != 'undefined' && typeof e.preventDefault == \"function\") {\r\n\t e.preventDefault();\r\n\t }\r\n\t if (this.isLocked)\r\n\t return;\r\n\t var currentZoomLevel = this.jsmap.getZoom();\r\n\t if (currentZoomLevel != this.settings.maxzoom) {\r\n\t this.jsmap.setZoom(currentZoomLevel + 1);\r\n\t }\r\n\t },\r\n\t\r\n\t zoomout: function (e) {\r\n\t if (typeof e != 'undefined' && typeof e.preventDefault == \"function\") {\r\n\t e.preventDefault();\r\n\t }\r\n\t if (this.isLocked)\r\n\t return;\r\n\t var currentZoomLevel = this.jsmap.getZoom();\r\n\t if (currentZoomLevel != this.settings.minzoom) {\r\n\t this.jsmap.setZoom(currentZoomLevel - 1);\r\n\t }\r\n\t },\r\n\t\r\n\t changemode: function (e) {\r\n\t this.settings.changemode = $(e.target).is(':checked');\r\n\t if (this.settings.changemode)\r\n\t this.callToLoadNewItems(this.settings.viewmodeInt == this.viewModes.map);\r\n\t },\r\n\t\r\n\t changestoremode: function (e) {\r\n\t this.settings.changestoremode = $(e.target).is(':checked');\r\n\t if (this.settings.changestoremode){\r\n\t this.showAllMarkers();\r\n\t }else{\r\n\t this.hideOutOfViewMarkers();\r\n\t }\r\n\t\r\n\t },\r\n\t\r\n\t changeview: function(e) {\r\n\t if (typeof e != 'undefined' && typeof e.preventDefault == \"function\") {\r\n\t e.preventDefault();\r\n\t }\r\n\t\r\n\t\r\n\t var link = $(e.target);\r\n\t if (!link.is('a'))\r\n\t link = link.parents('a');\r\n\t\r\n\t this.mapContainer.find(this.controls.viewmode.classSelector).removeClass('active');\r\n\t link.addClass('active');\r\n\t\r\n\t var viewmode = link.attr('data-view'),\r\n\t viewmodeInt = this.viewModes[viewmode];\r\n\t\r\n\t if (typeof viewmodeInt == 'undefined' || viewmodeInt === this.settings.viewmodeInt)\r\n\t return;\r\n\t this.settings.viewmodeInt = viewmodeInt;\r\n\t if(this.settings.changemode){\r\n\t this.callToLoadNewItems(true);\r\n\t }else{\r\n\t this.stores = { stores: this.oldStores.stores.slice()};\r\n\t }\r\n\t\r\n\t\r\n\t this.setView();\r\n\t this.updateCountersFromStores();\r\n\t this.fillContent(true);\r\n\t this.totallyLoaded();\r\n\t this.fillHeader();\r\n\t\r\n\t },\r\n\t\r\n\t loadmore: function (e) {\r\n\t if (typeof e != 'undefined' && typeof e.preventDefault == \"function\") {\r\n\t e.preventDefault();\r\n\t }\r\n\t if (this.settings.changemode == false && (this.zoom != this.jsmap.getZoom() || this.center != this.jsmap.getCenter())) {\r\n\t if (this.loadmorezoom > 0) {\r\n\t this.jsmap.setZoom(this.loadmorezoom);\r\n\t }\r\n\t this.jsmap.setCenter(this.loadmorecenter);\r\n\t }\r\n\t\r\n\t this.settings.currentPage++;\r\n\t\r\n\t if (this.settings.changemode) {\r\n\t this.fillContent();\r\n\t } else {\r\n\t this.fillContent(true, true);\r\n\t }\r\n\t\r\n\t this.totallyLoaded();\r\n\t this.fillHeader();\r\n\t \r\n\t },\r\n\t\r\n\t /**interaction function**/\r\n\t\r\n\t totallyLoaded: function () {\r\n\t this.mapContainer[this.settings.currentPage + 1 >= this.settings.totalPages || !this.settings.totalPages ? \"addClass\" : \"removeClass\"]('totalloaded');\r\n\t this.mapContainer[!this.settings.totalPages ? \"addClass\" : \"removeClass\"]('totallyempty');\r\n\t },\r\n\t\r\n\t sendTrackingData: function() {\r\n\t if (!this.settings.totalPages && !this.emptySearch) {\r\n\t this.emptySearch = true;\r\n\t $(document).trigger('gatrack:senddata', ['event', /*tracking-category*/'Search Results', /*tracking-action*/'Not Found', /*tracking-label*/this.settings.label]);\r\n\t }\r\n\t\r\n\t if (this.settings.totalPages) {\r\n\t this.emptySearch = false;\r\n\t }\r\n\t },\r\n\t\r\n\t initialMarkersSet: function (icon, central) {\r\n\t if(central) {\r\n\t this.setMarker(this.settings.centerId, this.markerPaths[this.settings.centralMarker], this.jsmap.getCenter());\r\n\t }\r\n\t if (this.settings.markers != null && typeof window[this.settings.markers] != 'undefined') {\r\n\t this.setMarkersFromObject(window[this.settings.markers], icon, false);\r\n\t }\r\n\t },\r\n\t\r\n\t updateCountersFromStores: function () {\r\n\t if (this.stores != null) {\r\n\t this.settings.currentPage = 0;\r\n\t this.settings.totalItems = this.stores.stores.length;\r\n\t var pSize = (this.settings.viewmodeInt == 0) ? this.settings.pagesize : this.settings.pagesizegrid;\r\n\t this.settings.totalPages = this.settings.totalItems ? Math.ceil(this.settings.totalItems/pSize) : 0;\r\n\t }\r\n\t },\r\n\t\r\n\t setMarkersFromObject: function (markerArr, icon, toEraseOld) {\r\n\t if (toEraseOld)\r\n\t this.emptyMarkers(markerArr.stores);\r\n\t for (var marker in markerArr.stores) {\r\n\t var point = markerArr.stores[marker],\r\n\t infoContent = this.templates.infobox.template ? this.templates.infobox.template(point) : '';\r\n\t this.setMarker(\r\n\t point.SiteId,\r\n\t icon,\r\n\t {\r\n\t lat: parseFloat(point.Latitude),\r\n\t lng: parseFloat(point.Longitude)\r\n\t },\r\n\t 5,\r\n\t infoContent);\r\n\t }\r\n\t if (markerArr.center) {\r\n\t this.setMarker(\r\n\t \"center\",\r\n\t this.markerPaths.central,\r\n\t {\r\n\t lat: parseFloat(markerArr.center.Latitude),\r\n\t lng: parseFloat(markerArr.center.Longitude)\r\n\t });\r\n\t }\r\n\t },\r\n\t\r\n\t emptyMarkers: function (newMarkers) {\r\n\t for (var marker in this.markers) {\r\n\t if (marker == this.settings.centerId || $.grep(newMarkers, function(e){ return e.SiteId == marker; }).length)\r\n\t continue;\r\n\t\r\n\t this.markers[marker].setVisible(false);\r\n\t this.infowindow[marker].close();\r\n\t }\r\n\t },\r\n\t\r\n\t setMarker: function (id, icon, position, zIndex, infoboxContent) {\r\n\t if (typeof this.markers[id] != 'undefined') {\r\n\t if (this.markers[id].getVisible())\r\n\t return;\r\n\t this.markers[id].setVisible(true);\r\n\t if (typeof this.infowindwsOpened[id] != 'undefined') {\r\n\t this.infowindow[id].open(this.jsmap, this.markers[id]);\r\n\t }\r\n\t return;\r\n\t }\r\n\t\r\n\t var zind = typeof zIndex == 'undefined' ? 1 : zIndex;\r\n\t var self = this;\r\n\t\r\n\t this.markers[id] = new google.maps.Marker({\r\n\t position: position,\r\n\t map: this.jsmap,\r\n\t icon: icon.gicon,\r\n\t clickable: icon.clickable,\r\n\t zIndex: zind\r\n\t });\r\n\t\r\n\t if (typeof icon.mouseover != 'undefined') {\r\n\t this.markers[id].addListener('mouseover', this.markerMouseover.bind(this, id, icon, zind));\r\n\t this.markers[id].addListener('mouseout', this.markerMouseout.bind(this, id, icon, zind));\r\n\t }\r\n\t\r\n\t if (typeof infoboxContent == 'undefined' || !infoboxContent.length)\r\n\t return;\r\n\t\r\n\t this.infowindow[id] = new this.infobox({\r\n\t content: infoboxContent,\r\n\t closeBoxURL: typeof Modernizr != 'undefined' && Modernizr.svg ? this.settings.infoWindowSvg : this.settings.infoWindowPng,\r\n\t closeBoxMargin: '5px 10px 10px',\r\n\t alignBottom: true,\r\n\t enableEventPropagation: true,\r\n\t pixelOffset: new google.maps.Size(-this.settings.infoWindowWidth/2, icon.infooffset)\r\n\t });\r\n\t\r\n\t google.maps.event.addListener(this.infowindow[id], 'domready', function () {\r\n\t $(window).trigger('popup:reinit');\r\n\t $(window).trigger('directlink:reinit');\r\n\t $('.js-store-closed-popup-btn').on('click', self.closedPopupInit.bind(self));\r\n\t });\r\n\t\r\n\t this.markers[id].addListener('click', this.markerClick.bind(this, id));\r\n\t this.infowindow[id].addListener('closeclick', this.infowWindowClose.bind(this, id));\r\n\t },\r\n\t\r\n\t markerMouseover: function (id, icon, zind) {\r\n\t this.markers[id].setIcon(this.markerPaths[icon.mouseover].gicon);\r\n\t this.markers[id].setZIndex(zind*2);\r\n\t },\r\n\t\r\n\t markerMouseout: function (id, icon, zind) {\r\n\t this.markers[id].setIcon(icon.gicon);\r\n\t this.markers[id].setZIndex(zind);\r\n\t },\r\n\t\r\n\t markerClick: function (id) {\r\n\t for (var markerid in this.infowindow) {\r\n\t if (markerid == id) {\r\n\t this.infowindwsOpened[markerid] = true;\r\n\t this.infowindow[markerid].open(this.jsmap, this.markers[markerid]);\r\n\t } else if (this.infowindow[markerid].getMap()) {\r\n\t this.infowindow[markerid].close();\r\n\t delete this.infowindwsOpened[markerid];\r\n\t }\r\n\t }\r\n\t },\r\n\t\r\n\t infowWindowClose: function (id) {\r\n\t delete this.infowindwsOpened[id];\r\n\t },\r\n\t\r\n\t areMarkersInBounds: function () {\r\n\t var bounds = this.jsmap.getBounds();\r\n\t if (!bounds)\r\n\t return false;\r\n\t\r\n\t for (var id in this.markers) {\r\n\t //should not depend on the central point\r\n\t if (id == this.settings.centerId)\r\n\t continue;\r\n\t if (this.markers[id].getVisible() && !this.checkIfInBounds(bounds, this.markers[id])) {\r\n\t return false;\r\n\t }\r\n\t }\r\n\t return true;\r\n\t },\r\n\t\r\n\t fitBoundsToMarker: function () {\r\n\t if (!this.areMarkersInBounds()) {\r\n\t var bounds = new google.maps.LatLngBounds();\r\n\t for (var id in this.markers) {\r\n\t if (this.markers[id].getVisible()) {\r\n\t bounds.extend(this.markers[id].getPosition());\r\n\t }\r\n\t }\r\n\t this.jsmap.fitBounds(bounds);\r\n\t this.center = this.jsmap.getCenter();\r\n\t this.zoom = this.jsmap.getZoom();\r\n\t }\r\n\t },\r\n\t\r\n\t fillContent: function (toEraseOld, showall) {\r\n\t if (typeof toEraseOld != 'boolean')\r\n\t toEraseOld = false;\r\n\t if (this.templates.stores.template) {\r\n\t var newHtml = toEraseOld ? '' : this.content.html(),\r\n\t templateObj = { stores: new Array() },\r\n\t counter = 0;\r\n\t\r\n\t if (typeof showall == 'undefined' || showall == false) {\r\n\t var pSize = (this.settings.viewmodeInt == 0) ? this.settings.pagesize : this.settings.pagesizegrid;\r\n\t while (this.stores && this.stores.stores.length && templateObj.stores.length < pSize) {\r\n\t templateObj.stores[counter] = this.stores.stores[0];\r\n\t templateObj.stores[counter].searchInitiator = this.settings.searchinitiator;\r\n\t templateObj.stores[counter].position = (this.settings.currentPage * pSize) + counter + 1;\r\n\t counter++;\r\n\t this.stores.stores.shift();\r\n\t }\r\n\t } else {\r\n\t templateObj.stores = this.stores.stores;\r\n\t this.settings.currentPage = this.settings.totalPages - 1;\r\n\t this.stores.stores = new Array();\r\n\t }\r\n\t\r\n\t this.initTracking(templateObj);\r\n\t this.content.html(newHtml + this.templates.stores.template(templateObj));\r\n\t if (this.isInitialLoad && !this.settings.citymode) {\r\n\t this.content.children().first().addClass('nearest-store');\r\n\t }\r\n\t\r\n\t if (this.closedStorePopupTemplateObj.stores.length < 2 && templateObj.stores.length > this.closedStorePopupTemplateObj.stores.length) {\r\n\t var newClosestStores = this.getClosestStores(2, templateObj.stores);\r\n\t if (newClosestStores.stores.length > this.closedStorePopupTemplateObj.stores.length){\r\n\t this.closedStorePopupTemplateObj = newClosestStores;\r\n\t }\r\n\t }\r\n\t\r\n\t var popup;\r\n\t\r\n\t !/* require.ensure */(function () {\r\n\t popup = __webpack_require__(17);\r\n\t popup.reinit();\r\n\t }(__webpack_require__));\r\n\t\r\n\t this.isInitialLoad = false;\r\n\t\r\n\t }\r\n\t this.content.waitForImages(this.heightSet.bind(this, true), function (loaded, count, success) { }, true);\r\n\t\r\n\t $('.js-store-closed-popup-btn').on('click', this.closedPopupInit.bind(this));\r\n\t },\r\n\t\r\n\t getClosestStores: function(number, stores){\r\n\t var openedStores = [];\r\n\t\r\n\t stores.forEach(function(item){ // exclude closed stores\r\n\t if(!item.IsClosed){\r\n\t openedStores.push(item);\r\n\t }\r\n\t });\r\n\t\r\n\t var result = {\r\n\t stores: openedStores\r\n\t .sort(function(item1, item2){ // sort stores by distance\r\n\t return item1.DistanceFloat - item2.DistanceFloat;\r\n\t })\r\n\t .slice(0, number) // take *number* closest stores\r\n\t };\r\n\t\r\n\t return result;\r\n\t },\r\n\t\r\n\t closedPopupInit: function(e){\r\n\t e.preventDefault();\r\n\t var data = this.closedStorePopupTemplateObj;\r\n\t data.storeName = $(e.currentTarget).data(\"store-name\");\r\n\t data.storeLocationName = $(e.currentTarget).data(\"store-location-name\");\r\n\t data.storeTrackingName = $(e.currentTarget).data(\"store-tracking-name\");\r\n\t $(window).trigger('open:simplepopup', { data: data, template: 'store-closed', cssClass: 'popup-container__store-closed' });\r\n\t $(window).trigger('popup:reinit');\r\n\t },\r\n\t\r\n\t initTracking: function (templateObj) {\r\n\t var trackingData = { ecommerce: { impressions: [] } };\r\n\t \r\n\t if (this.settings.tracking == true) {\r\n\t for (var i = 0, l = templateObj.stores.length; i < l; i++) {\r\n\t var storeName = templateObj.stores[i].StoreName;\r\n\t var siteId = templateObj.stores[i].SiteId;\r\n\t var storePosition = templateObj.stores[i].position;\r\n\t if (!(this.storesGaSent.indexOf(storeName) +1)) {\r\n\t $(document).trigger('gatrack:senddata', ['event', this.settings.category, storeName, this.settings.label]);\r\n\t this.storesGaSent.push(storeName);\r\n\t }\r\n\t\r\n\t trackingData.ecommerce.impressions.push({\r\n\t name: storeName,\r\n\t id: siteId,\r\n\t list: templateObj.stores[i].searchInitiator,\r\n\t position: storePosition\r\n\t });\r\n\t }\r\n\t if (l) {\r\n\t dataLayer.push(trackingData);\r\n\t }\r\n\t }\r\n\t },\r\n\t\r\n\t\r\n\t fillHeader: function () {\r\n\t if(this.templates.header.template != null) {\r\n\t this.header.html(this.settings.totalItems ? this.templates.header.template({\r\n\t currentItems: this.content.children().length,\r\n\t totalItems: this.settings.totalItems\r\n\t }) : '');\r\n\t }\r\n\t },\r\n\t\r\n\t getMapBounds: function () {\r\n\t var bounds = this.jsmap.getBounds();\r\n\t\r\n\t if (!bounds) {\r\n\t return null;\r\n\t }\r\n\t\r\n\t var northEast = bounds.getNorthEast(),\r\n\t southWest = bounds.getSouthWest();\r\n\t\r\n\t\r\n\t return {\r\n\t northeast: {\r\n\t latitude: northEast.lat(),\r\n\t longitude: northEast.lng()\r\n\t },\r\n\t southwest: {\r\n\t latitude: southWest.lat(),\r\n\t longitude: southWest.lng()\r\n\t }\r\n\t }\r\n\t },\r\n\t\r\n\t hideOutOfViewMarkers: function() {\r\n\t\r\n\t for (var id in this.markers){\r\n\t if (id == this.settings.centerId)\r\n\t continue;\r\n\t if(!this.jsmap.getBounds().contains(this.markers[id].getPosition())){\r\n\t this.markers[id].setMap(null);\r\n\t }\r\n\t }\r\n\t },\r\n\t\r\n\t showAllMarkers: function() {\r\n\t\r\n\t for (var id in this.markers){\r\n\t this.markers[id].setMap(this.jsmap);\r\n\t }\r\n\t },\r\n\t\r\n\t checkIfInBounds: function (bounds, marker) {\r\n\t return bounds.contains(marker.getPosition());\r\n\t },\r\n\t\r\n\t boundsChangeProcess: function (forced) { // if forced, make bounds change process for any viewmode\r\n\t\r\n\t if(typeof forced == 'undefined' && this.settings.viewmodeInt == this.viewModes.grid){ // don't update results on grid mode\r\n\t return;\r\n\t }\r\n\t\r\n\t var newDimensions = {\r\n\t width: this.map.width(),\r\n\t height: this.map.height()\r\n\t },\r\n\t zoom = this.jsmap.getZoom(),\r\n\t center = this.jsmap.getCenter(),\r\n\t isDimensionsChange = (Math.abs(this.dimensions.width - newDimensions.width) > 2 || Math.abs(this.dimensions.height - newDimensions.height) > 2),\r\n\t isDimensionsChangeToPrev = this.prevDimensions == null || Math.abs(this.prevDimensions.width - newDimensions.width) > 2 || Math.abs(this.prevDimensions.height - newDimensions.height) > 2,\r\n\t isCenterChange = this.center != center,\r\n\t isCenterChangeToPrev = this.prevCenter != center,\r\n\t isZoomChange = zoom != this.zoom,\r\n\t isMapSimple = this.settings.viewInt == this.viewTypes.simple,\r\n\t isViewMapAndNeedsLoading = (this.settings.viewmodeInt == this.viewModes.map && this.settings.currentPage < this.settings.totalPages - 1);\r\n\t\r\n\t if ((isDimensionsChangeToPrev || isMapSimple) && isCenterChangeToPrev && !forced) {\r\n\t this.jsmap.setCenter(isMapSimple || this.prevCenter == null ? this.center : this.prevCenter);\r\n\t } else if (!isMapSimple && (isDimensionsChange || isCenterChange || isZoomChange)) {\r\n\t if (this.settings.changemode) {\r\n\t this.callToLoadNewItems(this.settings.viewmodeInt == this.viewModes.map);\r\n\t this.center = center;\r\n\t this.dimensions = newDimensions;\r\n\t this.zoom = zoom;\r\n\t } else if (isViewMapAndNeedsLoading) {\r\n\t this.fillContent(true, true);\r\n\t this.totallyLoaded();\r\n\t this.fillHeader();\r\n\t } else if (this.zoom < 0) {\r\n\t this.zoom = zoom;\r\n\t this.loadmorezoom = this.zoom;\r\n\t }\r\n\t }\r\n\t\r\n\t this.prevDimensions = newDimensions;\r\n\t this.prevCenter = center;\r\n\t },\r\n\t\r\n\t lock: function () {\r\n\t this.isLocked = true;\r\n\t\r\n\t this.jsmap.setOptions({\r\n\t draggable: false,\r\n\t scrollwheel: false\r\n\t });\r\n\t },\r\n\t\r\n\t unlock: function () {\r\n\t this.isLocked = false;\r\n\t\r\n\t this.jsmap.setOptions({\r\n\t draggable: true,\r\n\t scrollwheel: true\r\n\t });\r\n\t },\r\n\t\r\n\t //loadingInteractions\r\n\t callToLoadNewItems: function (showall) {\r\n\t if (this.loadingTimeout)\r\n\t clearTimeout(this.loadingTimeout);\r\n\t this.loadingTimeout = setTimeout(this.loadNewItems.bind(this, showall), this.settings.loadtimeout);\r\n\t },\r\n\t\r\n\t loadNewItems: function (showall) {\r\n\t if (!this.settings.url.length)\r\n\t return;\r\n\t\r\n\t if (!this.isMapInited) {\r\n\t this.callToLoadNewItems(showall);\r\n\t return;\r\n\t }\r\n\t\r\n\t var bounds = this.getMapBounds();\r\n\t\r\n\t if (bounds &&\r\n\t bounds.northeast.latitude === bounds.southwest.latitude\r\n\t ) {\r\n\t this.callToLoadNewItems(showall);\r\n\t return;\r\n\t }\r\n\t\r\n\t var data = $.extend({}, bounds, {\r\n\t latitude: this.settings.latitude,\r\n\t longitude: this.settings.longitude,\r\n\t iscitypage: this.settings.citymode,\r\n\t searchInitiator : this.settings.searchInitiator,\r\n\t culture: this.settings.culture\r\n\t });\r\n\t\r\n\t this.ajaxAbort();\r\n\t\r\n\t this.lock();\r\n\t this.mapContainer.addClass('loading');\r\n\t\r\n\t this.ajaxCall = $.ajax({\r\n\t method: \"POST\",\r\n\t url: this.settings.url,\r\n\t dataType: \"json\",\r\n\t data: data,\r\n\t success: this.ajaxSuccess.bind(this, showall),\r\n\t error: this.ajaxError.bind(this)\r\n\t });\r\n\t },\r\n\t\r\n\t ajaxSuccess: function (showall, data) {\r\n\t if (data.Status != 'ok') {\r\n\t this.ajaxError();\r\n\t return;\r\n\t }\r\n\t this.unlock();\r\n\t\r\n\t this.scrollToTop();\r\n\t\r\n\t this.stores = { stores: data.stores ? data.stores.slice() : new Array() };\r\n\t this.oldStores = { stores: this.stores.stores.slice()};\r\n\t this.updateCountersFromStores();\r\n\t\r\n\t //for the situation when we moved the map in changemode==false mode and clicked 'loadmore'\r\n\t this.loadmorecenter = this.jsmap.getCenter();\r\n\t this.loadmorezoom = this.jsmap.getZoom();\r\n\t\r\n\t\r\n\t this.fillContent(true, showall);\r\n\t this.sendTrackingData(); \r\n\t this.totallyLoaded();\r\n\t this.fillHeader();\r\n\t this.setMarkersFromObject(data, this.markerPaths[this.settings.marker] || this.markerPaths.initial, true);\r\n\t\r\n\t //removeLoader\r\n\t this.removeMapLoader();\r\n\t },\r\n\t\r\n\t ajaxError: function () {\r\n\t this.unlock();\r\n\t //removeLoader\r\n\t this.removeMapLoader();\r\n\t },\r\n\t\r\n\t ajaxAbort: function () {\r\n\t if (this.ajaxCall && typeof this.ajaxCall.abort == \"function\") {\r\n\t try {\r\n\t ajaxCall.abort();\r\n\t } catch (ex) { }\r\n\t\r\n\t }\r\n\t },\r\n\t\r\n\t //content interactions\r\n\t referringItemMouseenter: function (e) {\r\n\t var referringItem = $(e.target);\r\n\t if (!referringItem.is(this.settings.referringSelector))\r\n\t referringItem = referringItem.parents(this.settings.referringSelector);\r\n\t this.referringItemTrigger(referringItem, 'mouseover');\r\n\t },\r\n\t\r\n\t referringItemMouseleave: function (e) {\r\n\t var referringItem = $(e.target);\r\n\t if (!referringItem.is(this.settings.referringSelector))\r\n\t referringItem = referringItem.parents(this.settings.referringSelector);\r\n\t this.referringItemTrigger(referringItem, 'mouseout');\r\n\t },\r\n\t\r\n\t referringItemTrigger: function (referringItem, eventName) {\r\n\t var referringId = referringItem.attr('data-id');\r\n\t\r\n\t if (!referringId)\r\n\t return;\r\n\t\r\n\t var marker = this.markers[referringId];\r\n\t\r\n\t if (!marker)\r\n\t return;\r\n\t\r\n\t new google.maps.event.trigger(marker, eventName);\r\n\t }\r\n\t });\r\n\t\r\n\t return map;\r\n\t\r\n\t}));\r\n\n\n/***/ }\n\n});\n\n\n/** WEBPACK FOOTER **\n ** chunk.map.7072e794d621736b8525.js\n **/","/*! waitForImages jQuery Plugin - v2.0.2 - 2015-06-02\r\n* https://github.com/alexanderdickson/waitForImages\r\n* Copyright (c) 2015 Alex Dickson; Licensed MIT */\r\n;(function (factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(['jquery'], factory);\r\n } else if (typeof exports === 'object') {\r\n // CommonJS / nodejs module\r\n module.exports = factory(require('jquery'));\r\n } else {\r\n // Browser globals\r\n factory(jQuery);\r\n }\r\n}(function ($) {\r\n // Namespace all events.\r\n var eventNamespace = 'waitForImages';\r\n\r\n // CSS properties which contain references to images.\r\n $.waitForImages = {\r\n hasImageProperties: [\r\n 'backgroundImage',\r\n 'listStyleImage',\r\n 'borderImage',\r\n 'borderCornerImage',\r\n 'cursor'\r\n ],\r\n hasImageAttributes: ['srcset']\r\n };\r\n\r\n // Custom selector to find all `img` elements with a valid `src` attribute.\r\n $.expr[':']['has-src'] = function (obj) {\r\n // Ensure we are dealing with an `img` element with a valid\r\n // `src` attribute.\r\n return $(obj).is('img[src][src!=\"\"]');\r\n };\r\n\r\n // Custom selector to find images which are not already cached by the\r\n // browser.\r\n $.expr[':'].uncached = function (obj) {\r\n // Ensure we are dealing with an `img` element with a valid\r\n // `src` attribute.\r\n if (!$(obj).is(':has-src')) {\r\n return false;\r\n }\r\n\r\n return !obj.complete;\r\n };\r\n\r\n $.fn.waitForImages = function () {\r\n\r\n var allImgsLength = 0;\r\n var allImgsLoaded = 0;\r\n var deferred = $.Deferred();\r\n\r\n var finishedCallback;\r\n var eachCallback;\r\n var waitForAll;\r\n\r\n // Handle options object (if passed).\r\n if ($.isPlainObject(arguments[0])) {\r\n\r\n waitForAll = arguments[0].waitForAll;\r\n eachCallback = arguments[0].each;\r\n finishedCallback = arguments[0].finished;\r\n\r\n } else {\r\n\r\n // Handle if using deferred object and only one param was passed in.\r\n if (arguments.length === 1 && $.type(arguments[0]) === 'boolean') {\r\n waitForAll = arguments[0];\r\n } else {\r\n finishedCallback = arguments[0];\r\n eachCallback = arguments[1];\r\n waitForAll = arguments[2];\r\n }\r\n\r\n }\r\n\r\n // Handle missing callbacks.\r\n finishedCallback = finishedCallback || $.noop;\r\n eachCallback = eachCallback || $.noop;\r\n\r\n // Convert waitForAll to Boolean\r\n waitForAll = !! waitForAll;\r\n\r\n // Ensure callbacks are functions.\r\n if (!$.isFunction(finishedCallback) || !$.isFunction(eachCallback)) {\r\n throw new TypeError('An invalid callback was supplied.');\r\n }\r\n\r\n this.each(function () {\r\n // Build a list of all imgs, dependent on what images will\r\n // be considered.\r\n var obj = $(this);\r\n var allImgs = [];\r\n // CSS properties which may contain an image.\r\n var hasImgProperties = $.waitForImages.hasImageProperties || [];\r\n // Element attributes which may contain an image.\r\n var hasImageAttributes = $.waitForImages.hasImageAttributes || [];\r\n // To match `url()` references.\r\n // Spec: http://www.w3.org/TR/CSS2/syndata.html#value-def-uri\r\n var matchUrl = /url\\(\\s*(['\"]?)(.*?)\\1\\s*\\)/g;\r\n\r\n if (waitForAll) {\r\n\r\n // Get all elements (including the original), as any one of\r\n // them could have a background image.\r\n obj.find('*').addBack().each(function () {\r\n var element = $(this);\r\n\r\n // If an `img` element, add it. But keep iterating in\r\n // case it has a background image too.\r\n if (element.is('img:has-src')) {\r\n allImgs.push({\r\n src: element.attr('src'),\r\n element: element[0]\r\n });\r\n }\r\n\r\n $.each(hasImgProperties, function (i, property) {\r\n var propertyValue = element.css(property);\r\n var match;\r\n\r\n // If it doesn't contain this property, skip.\r\n if (!propertyValue) {\r\n return true;\r\n }\r\n\r\n // Get all url() of this element.\r\n while (match = matchUrl.exec(propertyValue)) {\r\n allImgs.push({\r\n src: match[2],\r\n element: element[0]\r\n });\r\n }\r\n });\r\n\r\n $.each(hasImageAttributes, function (i, attribute) {\r\n var attributeValue = element.attr(attribute);\r\n var attributeValues;\r\n\r\n // If it doesn't contain this property, skip.\r\n if (!attributeValue) {\r\n return true;\r\n }\r\n\r\n // Check for multiple comma separated images\r\n attributeValues = attributeValue.split(',');\r\n\r\n $.each(attributeValues, function(i, value) {\r\n // Trim value and get string before first\r\n // whitespace (for use with srcset).\r\n value = $.trim(value).split(' ')[0];\r\n allImgs.push({\r\n src: value,\r\n element: element[0]\r\n });\r\n });\r\n });\r\n });\r\n } else {\r\n // For images only, the task is simpler.\r\n obj.find('img:has-src')\r\n .each(function () {\r\n allImgs.push({\r\n src: this.src,\r\n element: this\r\n });\r\n });\r\n }\r\n\r\n allImgsLength = allImgs.length;\r\n allImgsLoaded = 0;\r\n\r\n // If no images found, don't bother.\r\n if (allImgsLength === 0) {\r\n finishedCallback.call(obj[0]);\r\n deferred.resolveWith(obj[0]);\r\n }\r\n\r\n $.each(allImgs, function (i, img) {\r\n\r\n var image = new Image();\r\n var events =\r\n 'load.' + eventNamespace + ' error.' + eventNamespace;\r\n\r\n // Handle the image loading and error with the same callback.\r\n $(image).one(events, function me (event) {\r\n // If an error occurred with loading the image, set the\r\n // third argument accordingly.\r\n var eachArguments = [\r\n allImgsLoaded,\r\n allImgsLength,\r\n event.type == 'load'\r\n ];\r\n allImgsLoaded++;\r\n\r\n eachCallback.apply(img.element, eachArguments);\r\n deferred.notifyWith(img.element, eachArguments);\r\n\r\n // Unbind the event listeners. I use this in addition to\r\n // `one` as one of those events won't be called (either\r\n // 'load' or 'error' will be called).\r\n $(this).off(events, me);\r\n\r\n if (allImgsLoaded == allImgsLength) {\r\n finishedCallback.call(obj[0]);\r\n deferred.resolveWith(obj[0]);\r\n return false;\r\n }\r\n\r\n });\r\n\r\n image.src = img.src;\r\n });\r\n });\r\n\r\n return deferred.promise();\r\n\r\n };\r\n}));\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./js/plugins/jquery.waitforimages.js\n ** module id = 7\n ** module chunks = 5 6 7\n **/","/*** IMPORTS FROM imports-loader ***/\n(function() {\n\n/**\r\n * @name InfoBox\r\n * @version 1.1.3 [January 15, 2011]\r\n * @author Gary Little (inspired by proof-of-concept code from Pamela Fox of Google)\r\n * @copyright Copyright 2010 Gary Little [gary at luxcentral.com]\r\n * @fileoverview InfoBox extends the Google Maps JavaScript API V3 OverlayView class.\r\n *

\r\n * An InfoBox behaves like a google.maps.InfoWindow, but it supports several\r\n * additional properties for advanced styling. An InfoBox can also be used as a map label.\r\n *

\r\n * An InfoBox also fires the same events as a google.maps.InfoWindow.\r\n *

\r\n * Browsers tested:\r\n *

\r\n * Mac -- Safari (4.0.4), Firefox (3.6), Opera (10.10), Chrome (4.0.249.43), OmniWeb (5.10.1)\r\n *
\r\n * Win -- Safari, Firefox, Opera, Chrome (3.0.195.38), Internet Explorer (8.0.6001.18702)\r\n *
\r\n * iPod Touch/iPhone -- Safari (3.1.2)\r\n */\r\n\r\n/*!\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*jslint browser:true */\r\n/*global google */\r\n\r\n/**\r\n * @name InfoBoxOptions\r\n * @class This class represents the optional parameter passed to the {@link InfoBox} constructor.\r\n * @property {string|Node} content The content of the InfoBox (plain text or an HTML DOM node).\r\n * @property {boolean} disableAutoPan Disable auto-pan on open (default is false).\r\n * @property {number} maxWidth The maximum width (in pixels) of the InfoBox. Set to 0 if no maximum.\r\n * @property {Size} pixelOffset The offset (in pixels) from the top left corner of the InfoBox\r\n * (or the bottom left corner if the alignBottom property is true)\r\n * to the map pixel corresponding to position.\r\n * @property {LatLng} position The geographic location at which to display the InfoBox.\r\n * @property {number} zIndex The CSS z-index style value for the InfoBox.\r\n * Note: This value overrides a zIndex setting specified in the boxStyle property.\r\n * @property {string} boxClass The name of the CSS class defining the styles for the InfoBox container.\r\n * The default name is infoBox.\r\n * @property {Object} [boxStyle] An object literal whose properties define specific CSS\r\n * style values to be applied to the InfoBox. Style values defined here override those that may\r\n * be defined in the boxClass style sheet. If this property is changed after the\r\n * InfoBox has been created, all previously set styles (except those defined in the style sheet)\r\n * are removed from the InfoBox before the new style values are applied.\r\n * @property {string} closeBoxMargin The CSS margin style value for the close box.\r\n * The default is \"2px\" (a 2-pixel margin on all sides).\r\n * @property {string} closeBoxURL The URL of the image representing the close box.\r\n * Note: The default is the URL for Google's standard close box.\r\n * Set this property to \"\" if no close box is required.\r\n * @property {Size} infoBoxClearance Minimum offset (in pixels) from the InfoBox to the\r\n * map edge after an auto-pan.\r\n * @property {boolean} isHidden Hide the InfoBox on open (default is false).\r\n * @property {boolean} alignBottom Align the bottom left corner of the InfoBox to the position\r\n * location (default is false which means that the top left corner of the InfoBox is aligned).\r\n * @property {string} pane The pane where the InfoBox is to appear (default is \"floatPane\").\r\n * Set the pane to \"mapPane\" if the InfoBox is being used as a map label.\r\n * Valid pane names are the property names for the google.maps.MapPanes object.\r\n * @property {boolean} enableEventPropagation Propagate mousedown, click, dblclick,\r\n * and contextmenu events in the InfoBox (default is false to mimic the behavior\r\n * of a google.maps.InfoWindow). Set this property to true if the InfoBox\r\n * is being used as a map label. iPhone note: This property setting has no effect. Events are\r\n * always propagated for an InfoBox in the \"mapPane\" pane and they are not propagated\r\n * for an InfoBox in the \"floatPane\" pane.\r\n */\r\n\r\n/**\r\n * Creates an InfoBox with the options specified in {@link InfoBoxOptions}.\r\n * Call InfoBox.open to add the box to the map.\r\n * @constructor\r\n * @param {InfoBoxOptions} [opt_opts]\r\n */\r\nfunction InfoBox(opt_opts) {\r\n opt_opts = opt_opts || {};\r\n\r\n google.maps.OverlayView.apply(this, arguments);\r\n\r\n // Standard options (in common with google.maps.InfoWindow):\r\n //\r\n this.content_ = opt_opts.content || '';\r\n this.disableAutoPan_ = opt_opts.disableAutoPan || false;\r\n this.maxWidth_ = opt_opts.maxWidth || 0;\r\n this.pixelOffset_ = opt_opts.pixelOffset || new google.maps.Size(0, 0);\r\n this.position_ = opt_opts.position || new google.maps.LatLng(0, 0);\r\n this.zIndex_ = opt_opts.zIndex || null;\r\n\r\n // Additional options (unique to InfoBox):\r\n //\r\n this.boxClass_ = opt_opts.boxClass || 'infoBox';\r\n this.boxStyle_ = opt_opts.boxStyle || {};\r\n this.closeBoxMargin_ = opt_opts.closeBoxMargin || '2px';\r\n this.closeBoxURL_ =\r\n opt_opts.closeBoxURL || 'http://www.google.com/intl/en_us/mapfiles/close.gif';\r\n if (opt_opts.closeBoxURL === '') {\r\n this.closeBoxURL_ = '';\r\n }\r\n this.infoBoxClearance_ = opt_opts.infoBoxClearance || new google.maps.Size(1, 1);\r\n this.isHidden_ = opt_opts.isHidden || false;\r\n this.alignBottom_ = opt_opts.alignBottom || false;\r\n this.pane_ = opt_opts.pane || 'floatPane';\r\n this.enableEventPropagation_ = opt_opts.enableEventPropagation || false;\r\n\r\n this.div_ = null;\r\n this.closeListener_ = null;\r\n this.eventListener1_ = null;\r\n this.eventListener2_ = null;\r\n this.eventListener3_ = null;\r\n this.moveListener_ = null;\r\n this.contextListener_ = null;\r\n this.fixedWidthSet_ = null;\r\n}\r\n\r\n/* InfoBox extends OverlayView in the Google Maps API v3.\r\n */\r\nInfoBox.prototype = new google.maps.OverlayView();\r\n\r\n/**\r\n * Creates the DIV representing the InfoBox.\r\n * @private\r\n */\r\nInfoBox.prototype.createInfoBoxDiv_ = function() {\r\n var bw;\r\n var me = this;\r\n\r\n // This handler prevents an event in the InfoBox from being passed on to the map.\r\n //\r\n var cancelHandler = function(e) {\r\n e.cancelBubble = true;\r\n\r\n if (e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n };\r\n\r\n // This handler ignores the current event in the InfoBox and conditionally prevents\r\n // the event from being passed on to the map. It is used for the contextmenu event.\r\n //\r\n var ignoreHandler = function(e) {\r\n e.returnValue = false;\r\n\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n }\r\n\r\n if (!me.enableEventPropagation_) {\r\n cancelHandler(e);\r\n }\r\n };\r\n\r\n if (!this.div_) {\r\n this.div_ = document.createElement('div');\r\n\r\n this.setBoxStyle_();\r\n\r\n if (typeof this.content_.nodeType === 'undefined') {\r\n this.div_.innerHTML = this.getCloseBoxImg_() + this.content_;\r\n } else {\r\n this.div_.innerHTML = this.getCloseBoxImg_();\r\n this.div_.appendChild(this.content_);\r\n }\r\n\r\n // Add the InfoBox DIV to the DOM\r\n this.getPanes()[this.pane_].appendChild(this.div_);\r\n\r\n this.addClickHandler_();\r\n\r\n if (this.div_.style.width) {\r\n this.fixedWidthSet_ = true;\r\n } else {\r\n if (this.maxWidth_ !== 0 && this.div_.offsetWidth > this.maxWidth_) {\r\n this.div_.style.width = this.maxWidth_;\r\n this.div_.style.overflow = 'auto';\r\n this.fixedWidthSet_ = true;\r\n } else {\r\n // The following code is needed to overcome problems with MSIE\r\n\r\n bw = this.getBoxWidths_();\r\n\r\n this.div_.style.width = this.div_.offsetWidth - bw.left - bw.right + 'px';\r\n this.fixedWidthSet_ = false;\r\n }\r\n }\r\n\r\n this.panBox_(this.disableAutoPan_);\r\n\r\n if (!this.enableEventPropagation_) {\r\n // Cancel event propagation.\r\n //\r\n this.eventListener1_ = google.maps.event.addDomListener(\r\n this.div_,\r\n 'mousedown',\r\n cancelHandler\r\n );\r\n this.eventListener2_ = google.maps.event.addDomListener(\r\n this.div_,\r\n 'click',\r\n cancelHandler\r\n );\r\n this.eventListener3_ = google.maps.event.addDomListener(\r\n this.div_,\r\n 'dblclick',\r\n cancelHandler\r\n );\r\n }\r\n\r\n this.contextListener_ = google.maps.event.addDomListener(\r\n this.div_,\r\n 'contextmenu',\r\n ignoreHandler\r\n );\r\n\r\n /**\r\n * This event is fired when the DIV containing the InfoBox's content is attached to the DOM.\r\n * @name InfoBox#domready\r\n * @event\r\n */\r\n google.maps.event.trigger(this, 'domready');\r\n }\r\n};\r\n\r\n/**\r\n * Returns the HTML tag for the close box.\r\n * @private\r\n */\r\nInfoBox.prototype.getCloseBoxImg_ = function() {\r\n var img = '';\r\n\r\n if (this.closeBoxURL_ !== '') {\r\n img = '\";\r\n }\r\n\r\n return img;\r\n};\r\n\r\n/**\r\n * Adds the click handler to the InfoBox close box.\r\n * @private\r\n */\r\nInfoBox.prototype.addClickHandler_ = function() {\r\n var closeBox;\r\n\r\n if (this.closeBoxURL_ !== '') {\r\n closeBox = this.div_.firstChild;\r\n this.closeListener_ = google.maps.event.addDomListener(\r\n closeBox,\r\n 'click',\r\n this.getCloseClickHandler_()\r\n );\r\n } else {\r\n this.closeListener_ = null;\r\n }\r\n};\r\n\r\n/**\r\n * Returns the function to call when the user clicks the close box of an InfoBox.\r\n * @private\r\n */\r\nInfoBox.prototype.getCloseClickHandler_ = function() {\r\n var me = this;\r\n\r\n return function(e) {\r\n // 1.0.3 fix: Always prevent propagation of a close box click to the map:\r\n e.cancelBubble = true;\r\n\r\n if (e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n\r\n me.close();\r\n\r\n /**\r\n * This event is fired when the InfoBox's close box is clicked.\r\n * @name InfoBox#closeclick\r\n * @event\r\n */\r\n google.maps.event.trigger(me, 'closeclick');\r\n };\r\n};\r\n\r\n/**\r\n * Pans the map so that the InfoBox appears entirely within the map's visible area.\r\n * @private\r\n */\r\nInfoBox.prototype.panBox_ = function(disablePan) {\r\n var map;\r\n var bounds;\r\n var xOffset = 0,\r\n yOffset = 0;\r\n\r\n if (!disablePan) {\r\n map = this.getMap();\r\n\r\n if (!map.getBounds().contains(this.position_)) {\r\n // Marker not in visible area of map, so set center\r\n // of map to the marker position first.\r\n map.setCenter(this.position_);\r\n }\r\n\r\n bounds = map.getBounds();\r\n\r\n var mapDiv = map.getDiv();\r\n var mapWidth = mapDiv.offsetWidth;\r\n var mapHeight = mapDiv.offsetHeight;\r\n var iwOffsetX = this.pixelOffset_.width;\r\n var iwOffsetY = this.pixelOffset_.height;\r\n var iwWidth = this.div_.offsetWidth;\r\n var iwHeight = this.div_.offsetHeight;\r\n var padX = this.infoBoxClearance_.width;\r\n var padY = this.infoBoxClearance_.height;\r\n var pixPosition = this.getProjection().fromLatLngToContainerPixel(this.position_);\r\n\r\n if (pixPosition.x < -iwOffsetX + padX) {\r\n xOffset = pixPosition.x + iwOffsetX - padX;\r\n } else if (pixPosition.x + iwWidth + iwOffsetX + padX > mapWidth) {\r\n xOffset = pixPosition.x + iwWidth + iwOffsetX + padX - mapWidth;\r\n }\r\n if (this.alignBottom_) {\r\n if (pixPosition.y < -iwOffsetY + padY + iwHeight) {\r\n yOffset = pixPosition.y + iwOffsetY - padY - iwHeight;\r\n } else if (pixPosition.y + iwOffsetY + padY > mapHeight) {\r\n yOffset = pixPosition.y + iwOffsetY + padY - mapHeight;\r\n }\r\n } else {\r\n if (pixPosition.y < -iwOffsetY + padY) {\r\n yOffset = pixPosition.y + iwOffsetY - padY;\r\n } else if (pixPosition.y + iwHeight + iwOffsetY + padY > mapHeight) {\r\n yOffset = pixPosition.y + iwHeight + iwOffsetY + padY - mapHeight;\r\n }\r\n }\r\n\r\n if (!(xOffset === 0 && yOffset === 0)) {\r\n // Move the map to the shifted center.\r\n //\r\n var c = map.getCenter();\r\n map.panBy(xOffset, yOffset);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Sets the style of the InfoBox by setting the style sheet and applying\r\n * other specific styles requested.\r\n * @private\r\n */\r\nInfoBox.prototype.setBoxStyle_ = function() {\r\n var i, boxStyle;\r\n\r\n if (this.div_) {\r\n // Apply style values from the style sheet defined in the boxClass parameter:\r\n this.div_.className = this.boxClass_;\r\n\r\n // Clear existing inline style values:\r\n this.div_.style.cssText = '';\r\n\r\n // Apply style values defined in the boxStyle parameter:\r\n boxStyle = this.boxStyle_;\r\n for (i in boxStyle) {\r\n if (boxStyle.hasOwnProperty(i)) {\r\n this.div_.style[i] = boxStyle[i];\r\n }\r\n }\r\n\r\n // Fix up opacity style for benefit of MSIE:\r\n //\r\n if (typeof this.div_.style.opacity !== 'undefined' && this.div_.style.opacity !== '') {\r\n this.div_.style.filter = 'alpha(opacity=' + this.div_.style.opacity * 100 + ')';\r\n }\r\n\r\n // Apply required styles:\r\n //\r\n this.div_.style.position = 'absolute';\r\n this.div_.style.visibility = 'hidden';\r\n if (this.zIndex_ !== null) {\r\n this.div_.style.zIndex = this.zIndex_;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Get the widths of the borders of the InfoBox.\r\n * @private\r\n * @return {Object} widths object (top, bottom left, right)\r\n */\r\nInfoBox.prototype.getBoxWidths_ = function() {\r\n var computedStyle;\r\n var bw = { top: 0, bottom: 0, left: 0, right: 0 };\r\n var box = this.div_;\r\n\r\n if (document.defaultView && document.defaultView.getComputedStyle) {\r\n computedStyle = box.ownerDocument.defaultView.getComputedStyle(box, '');\r\n\r\n if (computedStyle) {\r\n // The computed styles are always in pixel units (good!)\r\n bw.top = parseInt(computedStyle.borderTopWidth, 10) || 0;\r\n bw.bottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;\r\n bw.left = parseInt(computedStyle.borderLeftWidth, 10) || 0;\r\n bw.right = parseInt(computedStyle.borderRightWidth, 10) || 0;\r\n }\r\n } else if (document.documentElement.currentStyle) {\r\n // MSIE\r\n\r\n if (box.currentStyle) {\r\n // The current styles may not be in pixel units, but assume they are (bad!)\r\n bw.top = parseInt(box.currentStyle.borderTopWidth, 10) || 0;\r\n bw.bottom = parseInt(box.currentStyle.borderBottomWidth, 10) || 0;\r\n bw.left = parseInt(box.currentStyle.borderLeftWidth, 10) || 0;\r\n bw.right = parseInt(box.currentStyle.borderRightWidth, 10) || 0;\r\n }\r\n }\r\n\r\n return bw;\r\n};\r\n\r\n/**\r\n * Invoked when close is called. Do not call it directly.\r\n */\r\nInfoBox.prototype.onRemove = function() {\r\n if (this.div_) {\r\n this.div_.parentNode.removeChild(this.div_);\r\n this.div_ = null;\r\n }\r\n};\r\n\r\n/**\r\n * Draws the InfoBox based on the current map projection and zoom level.\r\n */\r\nInfoBox.prototype.draw = function() {\r\n this.createInfoBoxDiv_();\r\n\r\n var pixPosition = this.getProjection().fromLatLngToDivPixel(this.position_);\r\n\r\n this.div_.style.left = pixPosition.x + this.pixelOffset_.width + 'px';\r\n\r\n if (this.alignBottom_) {\r\n this.div_.style.bottom = -(pixPosition.y + this.pixelOffset_.height) + 'px';\r\n } else {\r\n this.div_.style.top = pixPosition.y + this.pixelOffset_.height + 'px';\r\n }\r\n\r\n if (this.isHidden_) {\r\n this.div_.style.visibility = 'hidden';\r\n } else {\r\n this.div_.style.visibility = 'visible';\r\n }\r\n};\r\n\r\n/**\r\n * Sets the options for the InfoBox. Note that changes to the maxWidth,\r\n * closeBoxMargin, closeBoxURL, and enableEventPropagation\r\n * properties have no affect until the current InfoBox is closed and a new one\r\n * is opened.\r\n * @param {InfoBoxOptions} opt_opts\r\n */\r\nInfoBox.prototype.setOptions = function(opt_opts) {\r\n if (typeof opt_opts.boxClass !== 'undefined') {\r\n // Must be first\r\n\r\n this.boxClass_ = opt_opts.boxClass;\r\n this.setBoxStyle_();\r\n }\r\n if (typeof opt_opts.boxStyle !== 'undefined') {\r\n // Must be second\r\n\r\n this.boxStyle_ = opt_opts.boxStyle;\r\n this.setBoxStyle_();\r\n }\r\n if (typeof opt_opts.content !== 'undefined') {\r\n this.setContent(opt_opts.content);\r\n }\r\n if (typeof opt_opts.disableAutoPan !== 'undefined') {\r\n this.disableAutoPan_ = opt_opts.disableAutoPan;\r\n }\r\n if (typeof opt_opts.maxWidth !== 'undefined') {\r\n this.maxWidth_ = opt_opts.maxWidth;\r\n }\r\n if (typeof opt_opts.pixelOffset !== 'undefined') {\r\n this.pixelOffset_ = opt_opts.pixelOffset;\r\n }\r\n if (typeof opt_opts.position !== 'undefined') {\r\n this.setPosition(opt_opts.position);\r\n }\r\n if (typeof opt_opts.zIndex !== 'undefined') {\r\n this.setZIndex(opt_opts.zIndex);\r\n }\r\n if (typeof opt_opts.closeBoxMargin !== 'undefined') {\r\n this.closeBoxMargin_ = opt_opts.closeBoxMargin;\r\n }\r\n if (typeof opt_opts.closeBoxURL !== 'undefined') {\r\n this.closeBoxURL_ = opt_opts.closeBoxURL;\r\n }\r\n if (typeof opt_opts.infoBoxClearance !== 'undefined') {\r\n this.infoBoxClearance_ = opt_opts.infoBoxClearance;\r\n }\r\n if (typeof opt_opts.isHidden !== 'undefined') {\r\n this.isHidden_ = opt_opts.isHidden;\r\n }\r\n if (typeof opt_opts.enableEventPropagation !== 'undefined') {\r\n this.enableEventPropagation_ = opt_opts.enableEventPropagation;\r\n }\r\n\r\n if (this.div_) {\r\n this.draw();\r\n }\r\n};\r\n\r\n/**\r\n * Sets the content of the InfoBox.\r\n * The content can be plain text or an HTML DOM node.\r\n * @param {string|Node} content\r\n */\r\nInfoBox.prototype.setContent = function(content) {\r\n this.content_ = content;\r\n\r\n if (this.div_) {\r\n if (this.closeListener_) {\r\n google.maps.event.removeListener(this.closeListener_);\r\n this.closeListener_ = null;\r\n }\r\n\r\n // Odd code required to make things work with MSIE.\r\n //\r\n if (!this.fixedWidthSet_) {\r\n this.div_.style.width = '';\r\n }\r\n\r\n if (typeof content.nodeType === 'undefined') {\r\n this.div_.innerHTML = this.getCloseBoxImg_() + content;\r\n } else {\r\n this.div_.innerHTML = this.getCloseBoxImg_();\r\n this.div_.appendChild(content);\r\n }\r\n\r\n // Perverse code required to make things work with MSIE.\r\n // (Ensures the close box does, in fact, float to the right.)\r\n //\r\n if (!this.fixedWidthSet_) {\r\n this.div_.style.width = this.div_.offsetWidth + 'px';\r\n this.div_.innerHTML = this.getCloseBoxImg_() + content;\r\n }\r\n\r\n this.addClickHandler_();\r\n }\r\n\r\n /**\r\n * This event is fired when the content of the InfoBox changes.\r\n * @name InfoBox#content_changed\r\n * @event\r\n */\r\n google.maps.event.trigger(this, 'content_changed');\r\n};\r\n\r\n/**\r\n * Sets the geographic location of the InfoBox.\r\n * @param {LatLng} latlng\r\n */\r\nInfoBox.prototype.setPosition = function(latlng) {\r\n this.position_ = latlng;\r\n\r\n if (this.div_) {\r\n this.draw();\r\n }\r\n\r\n /**\r\n * This event is fired when the position of the InfoBox changes.\r\n * @name InfoBox#position_changed\r\n * @event\r\n */\r\n google.maps.event.trigger(this, 'position_changed');\r\n};\r\n\r\n/**\r\n * Sets the zIndex style for the InfoBox.\r\n * @param {number} index\r\n */\r\nInfoBox.prototype.setZIndex = function(index) {\r\n this.zIndex_ = index;\r\n\r\n if (this.div_) {\r\n this.div_.style.zIndex = index;\r\n }\r\n\r\n /**\r\n * This event is fired when the zIndex of the InfoBox changes.\r\n * @name InfoBox#zindex_changed\r\n * @event\r\n */\r\n google.maps.event.trigger(this, 'zindex_changed');\r\n};\r\n\r\n/**\r\n * Returns the content of the InfoBox.\r\n * @returns {string}\r\n */\r\nInfoBox.prototype.getContent = function() {\r\n return this.content_;\r\n};\r\n\r\n/**\r\n * Returns the geographic location of the InfoBox.\r\n * @returns {LatLng}\r\n */\r\nInfoBox.prototype.getPosition = function() {\r\n return this.position_;\r\n};\r\n\r\n/**\r\n * Returns the zIndex for the InfoBox.\r\n * @returns {number}\r\n */\r\nInfoBox.prototype.getZIndex = function() {\r\n return this.zIndex_;\r\n};\r\n\r\n/**\r\n * Shows the InfoBox.\r\n */\r\nInfoBox.prototype.show = function() {\r\n this.isHidden_ = false;\r\n this.div_.style.visibility = 'visible';\r\n};\r\n\r\n/**\r\n * Hides the InfoBox.\r\n */\r\nInfoBox.prototype.hide = function() {\r\n this.isHidden_ = true;\r\n this.div_.style.visibility = 'hidden';\r\n};\r\n\r\n/**\r\n * Adds the InfoBox to the specified map. If anchor\r\n * (usually a google.maps.Marker) is specified, the position\r\n * of the InfoBox is set to the position of the anchor. If the\r\n * anchor is dragged to a new location, the InfoBox moves as well.\r\n * @param {Map} map\r\n * @param {MVCObject} [anchor]\r\n */\r\nInfoBox.prototype.open = function(map, anchor) {\r\n var me = this;\r\n\r\n if (anchor) {\r\n this.position_ = anchor.getPosition();\r\n this.moveListener_ = google.maps.event.addListener(anchor, 'position_changed', function() {\r\n me.setPosition(this.getPosition());\r\n });\r\n }\r\n\r\n this.setMap(map);\r\n\r\n if (this.div_) {\r\n this.panBox_();\r\n }\r\n};\r\n\r\n/**\r\n * Removes the InfoBox from the map.\r\n */\r\nInfoBox.prototype.close = function() {\r\n if (this.closeListener_) {\r\n google.maps.event.removeListener(this.closeListener_);\r\n this.closeListener_ = null;\r\n }\r\n\r\n if (this.eventListener1_) {\r\n google.maps.event.removeListener(this.eventListener1_);\r\n google.maps.event.removeListener(this.eventListener2_);\r\n google.maps.event.removeListener(this.eventListener3_);\r\n this.eventListener1_ = null;\r\n this.eventListener2_ = null;\r\n this.eventListener3_ = null;\r\n }\r\n\r\n if (this.moveListener_) {\r\n google.maps.event.removeListener(this.moveListener_);\r\n this.moveListener_ = null;\r\n }\r\n\r\n if (this.contextListener_) {\r\n google.maps.event.removeListener(this.contextListener_);\r\n this.contextListener_ = null;\r\n }\r\n\r\n this.setMap(null);\r\n};\r\n\r\nmodule.exports = InfoBox;\r\n\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = InfoBox}.call(global));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/imports-loader?this=>global!./~/exports-loader?InfoBox!./js/plugins/infobox.js\n ** module id = 13\n ** module chunks = 7\n **/","/************************************\r\nMODULE: MAP CLASS\r\nWHAT IT DOES: Simple/Extended map logic\r\n*************************************/\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['jquery'], factory);\r\n }\r\n else if (typeof exports === 'object') {\r\n module.exports = factory(require('jquery'));\r\n }\r\n else { root.returnExports = factory(root.jQuery); }\r\n}(this, function ($) {\r\n\r\n function map(mapContainer, settings, templates) {\r\n for (var element in this._elements)\r\n {\r\n this[element] = this._elements[element];\r\n }\r\n this.mapContainer = mapContainer;\r\n this.map = this.mapContainer.find('.js-map-element');\r\n this.updateMapVisibility();\r\n\r\n this.isMapInited = false;\r\n\r\n this.settings = typeof settings == \"undefined\" ? this._defaults : $.extend({}, this._defaults, settings);\r\n this.templates = typeof templates == \"undefined\" ? this._templates : $.extend({}, this._templates, templates);\r\n\r\n this.init();\r\n\r\n $(window).on('map:updateVisibility', this.updateMapVisibility.bind(this));\r\n }\r\n\r\n $.extend(map.prototype, {\r\n GLOBE_WIDTH: 256,\r\n _defaults: {\r\n view: 'simple', //see viewTypes\r\n latitude: 0,\r\n longitude: 0,\r\n storename: '',\r\n address: '',\r\n phone: '',\r\n siteid: 0,\r\n isquoteurlexternal: false,\r\n externalquoteurl: '',\r\n maxzoom: 20,\r\n minzoom: 3,\r\n radius: -1,\r\n markers: null,\r\n changemode: true, //the default mode,\r\n changestoremode: true, //default\r\n viewmode: 'general', //see viewModes\r\n referringSelector: '.js-map-referring-item',\r\n url: '',\r\n centerId: 'center',\r\n defaultzoom: 10,\r\n autozoom: true,\r\n loadtimeout: 100,\r\n infoWindowWidth: 260,\r\n infoWindowSvg: '/App_Themes/Safestore/img/infobox-close.svg',\r\n infoWindowPng: '/App_Themes/Safestore/img/infobox-close.png',\r\n //tracking attributes\r\n tracking: false,\r\n category: '',\r\n label: '',\r\n citymode: false,\r\n pagesize: 11,\r\n pagesizegrid: 22,\r\n searchinitiator: 'Search Results',\r\n centralMarker: 'central'\r\n },\r\n\r\n viewTypes: {\r\n simple: 0,\r\n extended: 1,\r\n medium: 2,\r\n combined: 3\r\n },\r\n \r\n\r\n viewModes: {\r\n general: 0,\r\n map: 1,\r\n grid: 2\r\n },\r\n\r\n statuses: {\r\n topped: 0,\r\n fixed: 1,\r\n absolute: 2\r\n },\r\n\r\n //elements that [this] should be extended with\r\n _elements: {\r\n //jquery objects\r\n mapContainer: null,\r\n map: null,\r\n content: null,\r\n mapColumn: null,\r\n contentColumn: null,\r\n mapLoader: null,\r\n contentLoader: null,\r\n mapGrid: null,\r\n header: null,\r\n sticky: null,\r\n mapWrapper: null,\r\n //for loaded stores\r\n stores: null,\r\n //for sent stores by google analytics\r\n oldStores: null,\r\n // for previously loaded stores\r\n storesGaSent: [],\r\n //map object\r\n jsmap: null,\r\n hadCustomScroll: false, // SR-686\r\n //map current dimensions\r\n dimensions: null,\r\n prevDimensions: null,\r\n center: null,\r\n prevCenter: null,\r\n zoom: -1,\r\n //status for scroll\r\n status: 0,\r\n //lastdimensions happened during ajaxCall\r\n loadmorecenter: null,\r\n loadmorezoom: -1,\r\n //map markers options\r\n markers: {}, //map markers\r\n infowindow: {}, //infowindows markers\r\n infowindwsOpened: {}, //map for curently opened infowindows\r\n //animation object\r\n tween: null,\r\n //ajaxCall object\r\n ajaxCall: null,\r\n //timer for ajax Call (loadtimeout time)\r\n loadingTimeout: null,\r\n //whether or not the map is locked from interaction\r\n isLocked: false,\r\n //indicate whether items are loaded for the first time\r\n isInitialLoad: true,\r\n isSearchResultsLoad: false,\r\n closedStorePopupTemplateObj: {\r\n stores: []\r\n }\r\n },\r\n\r\n _templates: {\r\n infobox: {\r\n id: '#infobox-template',\r\n template: null\r\n },\r\n infoboxSimple: {\r\n id: '#infobox-simple-template',\r\n template: null\r\n },\r\n stores: {\r\n id: '#stores-template',\r\n template: null\r\n },\r\n header: {\r\n id: '#mapheader-template',\r\n template: null\r\n }\r\n },\r\n\r\n markerPaths: {\r\n initial: {\r\n url: '/App_Themes/Safestore/img/marker.png',\r\n width: 86,\r\n height: 120,\r\n centerX: 43,\r\n centerY: 120,\r\n gicon: null,\r\n infooffset: -85,\r\n mouseover: 'hover',\r\n clickable: true\r\n },\r\n hover: {\r\n url: '/App_Themes/Safestore/img/marker_hover.png',\r\n width: 86,\r\n height: 120,\r\n centerX: 43,\r\n centerY: 120,\r\n gicon: null,\r\n infooffset: -85,\r\n clickable: true\r\n },\r\n initialSmallUpp: {\r\n url: '/App_Themes/Safestore/img/marker_small.png',\r\n width: 54,\r\n height: 78,\r\n centerX: 27,\r\n centerY: 78,\r\n gicon: null,\r\n infooffset: -60,\r\n mouseover: 'hoverSmallUpp',\r\n clickable: true\r\n },\r\n hoverSmallUpp: {\r\n url: '/App_Themes/Safestore/img/marker_hover_small.png',\r\n width: 54,\r\n height: 78,\r\n centerX: 27,\r\n centerY: 78,\r\n gicon: null,\r\n infooffset: -60,\r\n clickable: true\r\n },\r\n nearSmallUpp: {\r\n url: '/App_Themes/Safestore/img/marker_small.png',\r\n width: 54,\r\n height: 78,\r\n centerX: 27,\r\n centerY: 78,\r\n gicon: null,\r\n infooffset: -60,\r\n mouseover: 'hoverSmallUpp',\r\n clickable: true\r\n },\r\n initialBelgium: {\r\n url: '/App_Themes/Safestore/img/marker-belgium.png',\r\n width: 54,\r\n height: 85,\r\n centerX: 27,\r\n centerY: 85,\r\n gicon: null,\r\n infooffset: -60,\r\n mouseover: 'hoverBelgium',\r\n clickable: true\r\n },\r\n hoverBelgium: {\r\n url: '/App_Themes/Safestore/img/marker-belgium-hover.png',\r\n width: 54,\r\n height: 85,\r\n centerX: 27,\r\n centerY: 85,\r\n gicon: null,\r\n infooffset: -60,\r\n clickable: true\r\n },\r\n nearBelgium: {\r\n url: '/App_Themes/Safestore/img/marker-belgium.png',\r\n width: 54,\r\n height: 78,\r\n centerX: 27,\r\n centerY: 78,\r\n gicon: null,\r\n infooffset: -60,\r\n mouseover: 'hoverBelgium',\r\n clickable: true\r\n },\r\n\t\t\tinitialSpain: {\r\n url: '/App_Themes/Safestore/img/marker_es.png',\r\n width: 86,\r\n height: 120,\r\n centerX: 43,\r\n centerY: 120,\r\n gicon: null,\r\n infooffset: -85,\r\n mouseover: 'hoverSpain',\r\n clickable: true\r\n },\r\n\t\t\thoverSpain: {\r\n url: '/App_Themes/Safestore/img/marker_hover_es.png',\r\n\t\t\t\twidth: 86,\r\n height: 120,\r\n centerX: 43,\r\n centerY: 120,\r\n gicon: null,\r\n infooffset: -85,\r\n clickable: true\r\n },\r\n nearSpain: {\r\n url: '/App_Themes/Safestore/img/marker_near_es.png',\r\n width: 86,\r\n height: 120,\r\n centerX: 43,\r\n centerY: 120,\r\n gicon: null,\r\n infooffset: -85,\r\n mouseover: 'hoverSpain',\r\n clickable: true\r\n },\r\n centralWithCircle: {\r\n url: '/App_Themes/Safestore/img/marker_center.png',\r\n width: 278,\r\n height: 278,\r\n centerX: 139,\r\n centerY: 139,\r\n gicon: null,\r\n infooffset: 0,\r\n clickable: false\r\n },\r\n central: {\r\n url: '/App_Themes/Safestore/img/marker_center_no_circle.png',\r\n width: 278,\r\n height: 278,\r\n centerX: 139,\r\n centerY: 139,\r\n gicon: null,\r\n infooffset: 0,\r\n clickable: false\r\n },\r\n near: {\r\n url: '/App_Themes/Safestore/img/marker_near.png',\r\n width: 86,\r\n height: 120,\r\n centerX: 43,\r\n centerY: 120,\r\n gicon: null,\r\n infooffset: -85,\r\n mouseover: 'hover',\r\n clickable: true\r\n }\r\n },\r\n\r\n controls: {\r\n zoomin: {\r\n classSelector: '.js-zoomin',\r\n eventListener: 'zoomin',\r\n event: 'click',\r\n minviewMode: 0\r\n },\r\n zoomout: {\r\n classSelector: '.js-zoomout',\r\n eventListener: 'zoomout',\r\n event: 'click',\r\n minviewMode: 0\r\n },\r\n changemode: {\r\n classSelector: '.js-changemode',\r\n eventListener: 'changemode',\r\n event: 'change',\r\n minviewMode: 1\r\n },\r\n viewmode: {\r\n classSelector: '.js-map-view',\r\n eventListener: 'changeview',\r\n event: 'click',\r\n minviewMode: 1\r\n },\r\n loadmore: {\r\n classSelector: '.js-map-load-more',\r\n eventListener: 'loadmore',\r\n event: 'click',\r\n minviewMode: 1\r\n },\r\n changestoremode: {\r\n classSelector: '.js-changestoremode',\r\n eventListener: 'changestoremode',\r\n event: 'change',\r\n minviewMode: 1\r\n }\r\n },\r\n\r\n emptySearch : false,\r\n\r\n init: function () {\r\n if (typeof google == \"undefined\") {\r\n return;\r\n }\r\n\r\n // Perf: Google Maps v3 - prevent API from loading Roboto font\r\n // http://stackoverflow.com/questions/25523806/google-maps-v3-prevent-api-from-loading-roboto-font\r\n var head = document.getElementsByTagName('head')[0];\r\n\r\n var insertBefore = head.insertBefore;\r\n\r\n head.insertBefore = function (newElement, referenceElement) {\r\n\r\n if (newElement.href && newElement.href.indexOf('https://fonts.googleapis.com/css?family=Roboto') === 0) {\r\n return;\r\n }\r\n\r\n insertBefore.call(head, newElement, referenceElement);\r\n }; \r\n\r\n //settings\r\n this.createIcons();\r\n\r\n this.settings.view = typeof this.viewTypes[this.settings.view] == 'undefined' ? 'simple' : this.settings.view;\r\n this.settings.viewInt = this.viewTypes[this.settings.view];\r\n\r\n switch(this.settings.viewInt) {\r\n case this.viewTypes.extended: this.initExtended(); break;\r\n case this.viewTypes.simple: this.initSimple(); break;\r\n case this.viewTypes.medium: this.initMedium(); break;\r\n case this.viewTypes.combined: this.initCombined(); break;\r\n default: break;\r\n }\r\n },\r\n\r\n getMetersFromMiles: function(miles) {\r\n return miles* 1609.34;\r\n },\r\n\r\n initMap: function (settings) {\r\n settings = settings || {};\r\n\r\n //map creation\r\n this.jsmap = new google.maps.Map(this.map[0], $.extend({\r\n center: {\r\n lat: parseFloat(this.settings.latitude),\r\n lng: parseFloat(this.settings.longitude)\r\n },\r\n minZoom: this.settings.minzoom,\r\n maxZoom: this.settings.maxzoom,\r\n disableDefaultUI: true,\r\n scrollwheel: true,\r\n zoom: this.settings.defaultzoom,\r\n gestureHandling: 'cooperative'\r\n }, settings));\r\n\r\n if (!this.jsmap)\r\n return false;\r\n\r\n if(this.settings.radius > 0) {\r\n var circle = new google.maps.Circle({\r\n radius: this.getMetersFromMiles(this.settings.radius),\r\n center: this.jsmap.getCenter()\r\n });\r\n\r\n //because fit bounds doesn't set correct zoom\r\n /*this.jsmap.fitBounds(circle.getBounds());*/\r\n //taken from http://stackoverflow.com/questions/6048975/google-maps-v3-how-to-calculate-the-zoom-level-for-a-given-bounds\r\n\r\n var bounds = circle.getBounds(),\r\n east = bounds.getNorthEast().lng(),\r\n west = bounds.getSouthWest().lng(),\r\n angle = east - west,\r\n zoom;\r\n\r\n angle += angle < 0 ? 360 : 0;\r\n zoom = Math.floor(Math.log(this.map.outerWidth() * 360 / angle / this.GLOBE_WIDTH) / Math.LN2);\r\n this.jsmap.setZoom(zoom);\r\n }\r\n\r\n if(window.App.globals.isMobileSmall) {\r\n this.jsmap.setZoom((this.jsmap.getZoom()-1) >= this.settings.minzoom ? (this.jsmap.getZoom()-1) : this.settings.minzoom);\r\n }\r\n\r\n //controlsCreating\r\n this.initControls();\r\n\r\n //events\r\n this.dimensions = {\r\n width: this.map.width(),\r\n height: this.map.height()\r\n };\r\n this.center = this.jsmap.getCenter();\r\n this.loadmorecenter = this.center;\r\n this.initialCenter = {\r\n lat: this.center.lat(),\r\n lng: this.center.lng()\r\n };\r\n this.idleListener = google.maps.event.addListener(this.jsmap, 'idle', this.onIdle.bind(this));\r\n\r\n return true;\r\n },\r\n\r\n isEnquiryProcessPage: function () {\r\n return window.location.href.indexOf('enquiryprocess') !== -1;\r\n },\r\n\r\n setMapVisibility: function (shouldShowMap) {\r\n if (shouldShowMap) {\r\n if (this.hadCustomScroll) {\r\n $('html').removeClass('no-custom-scroll');\r\n $('html').addClass('custom-scroll')\r\n this.hadCustomScroll = false;\r\n }\r\n this.mapContainer.css('display', 'block');\r\n $(window).trigger('tabs:resize');\r\n }\r\n else {\r\n this.mapContainer.css('display', 'none');\r\n if ($('html').hasClass('custom-scroll')) {\r\n this.hadCustomScroll = true;\r\n $('html').removeClass('custom-scroll');\r\n $('html').addClass('no-custom-scroll');\r\n }\r\n }\r\n },\r\n\r\n // SR-686 fix\r\n updateMapVisibility: function (e, data) {\r\n if (typeof e != 'undefined' && typeof e.preventDefault == \"function\") {\r\n e.preventDefault();\r\n }\r\n\r\n if (typeof data != 'undefined') {\r\n if (data.shouldShowMap) {\r\n this.setMapVisibility(true);\r\n }\r\n else {\r\n this.setMapVisibility(false);\r\n }\r\n }\r\n else {\r\n if (this.isEnquiryProcessPage()) {\r\n if (this.mapContainer.css('display') === 'block') {\r\n this.setMapVisibility(false);\r\n }\r\n }\r\n else if (this.mapContainer.css('display') !== 'block') {\r\n this.setMapVisibility(true);\r\n }\r\n }\r\n },\r\n\r\n onIdle: function () {\r\n this.isMapInited = true;\r\n this.jsmap.setCenter(this.initialCenter);\r\n google.maps.event.removeListener(this.idleListener);\r\n },\r\n\r\n initSimple: function () {\r\n if (this.initMap({\r\n draggable: !window.App.globals.isMobile,\r\n scrollwheel: false,\r\n disableDoubleClickZoom: true\r\n })) {\r\n this.setMarker(this.settings.centerId, this.markerPaths.initial, this.jsmap.getCenter());\r\n $(window).on('resize:finished', this.boundsChangeProcess.bind(this));\r\n }\r\n },\r\n\r\n initExtended: function () {\r\n\r\n //settings\r\n this.settings.culture = window.appState.culture;\r\n this.settings.viewmode = typeof this.viewModes[this.settings.viewmode] == 'undefined' ? 'general' : this.settings.viewmode;\r\n this.settings.viewmodeInt = this.viewModes[this.settings.viewmode];\r\n this.settings.currentPage = 0;\r\n this.settings.totalPages = 0;\r\n this.settings.totalItems = 0;\r\n\r\n //elements\r\n this.content = this.mapContainer.find('.js-map-content');\r\n this.contentColumn = this.mapContainer.find('.js-map-content-column');\r\n this.mapColumn = this.mapContainer.find('.js-map-map-column');\r\n this.mapGrid = this.mapContainer.find('.js-map-grid');\r\n this.mapLoader = this.mapContainer.find('.js-map-loader');\r\n this.contentLoader = this.mapContainer.find('.js-map-content-loader');\r\n this.header = this.mapContainer.find('.js-map-header');\r\n this.sticky = this.mapContainer.find('.js-map-sticky');\r\n this.mapWrapper = this.mapContainer.find('.js-map-wrapper');\r\n\r\n this.content.find('noscript').remove();\r\n\r\n //requiring libraries\r\n if (typeof this.Handlebars == 'undefined') {\r\n this.Handlebars = require('handlebars');\r\n }\r\n if (typeof this.waitforimages == 'undefined')\r\n this.waitforimages = require('jquery.waitforimages');\r\n if (typeof this.infobox == 'undefined')\r\n this.infobox = require(\"imports?this=>global!exports?InfoBox!infobox\");\r\n\r\n //templates\r\n for (var templateName in this.templates) {\r\n if (this.templates[templateName].template == null) {\r\n var templateSource = $(this.templates[templateName].id);\r\n if (templateSource.length)\r\n this.templates[templateName].template = this.Handlebars.compile(templateSource.html());\r\n }\r\n }\r\n\r\n if (this.settings.changemode)\r\n this.isSearchResultsLoad = true;\r\n\r\n //filling content\r\n if (this.settings.markers != null && typeof window[this.settings.markers] != 'undefined') {\r\n this.stores = { stores: window[this.settings.markers].stores.slice() };\r\n this.updateCountersFromStores();\r\n this.fillContent();\r\n }\r\n\r\n this.totallyLoaded();\r\n this.fillHeader();\r\n\r\n this.mapContainer.waitForImages(this.initExtendedLoaded.bind(this), function (loaded, count, success) { }, true);\r\n },\r\n\r\n\r\n initMedium: function () {\r\n if (this.initMap()) {\r\n\r\n if (typeof this.Handlebars == 'undefined')\r\n this.Handlebars = require('handlebars');\r\n if (typeof this.infobox == 'undefined')\r\n this.infobox = require(\"imports?this=>global!exports?InfoBox!infobox\");\r\n //templates\r\n for (var templateName in this.templates) {\r\n if (this.templates[templateName].template == null) {\r\n var templateSource = $(this.templates[templateName].id);\r\n if (templateSource.length)\r\n this.templates[templateName].template = this.Handlebars.compile(templateSource.html());\r\n }\r\n }\r\n\r\n this.initialMarkersSet( this.markerPaths[this.settings.marker] || this.markerPaths.initial, false);\r\n\r\n setTimeout(this.fitBoundsToMarker(), 1000);\r\n }\r\n\r\n },\r\n\r\n initCombined: function () {\r\n\r\n if (this.initMap()) {\r\n\r\n if (typeof this.Handlebars == 'undefined')\r\n this.Handlebars = require('handlebars');\r\n\r\n if (typeof this.infobox == 'undefined')\r\n this.infobox = require(\"imports?this=>global!exports?InfoBox!infobox\");\r\n //templates\r\n for (var templateName in this.templates) {\r\n if (this.templates[templateName].template == null) {\r\n var templateSource = $(this.templates[templateName].id);\r\n if (templateSource.length)\r\n this.templates[templateName].template = this.Handlebars.compile(templateSource.html());\r\n }\r\n }\r\n\r\n // set \"near\" version of correct marker\r\n var marker = this.settings.marker;\r\n var nearMarker = this.settings.marker.includes('initial') ? marker.replace('initial', 'near') : this.settings.marker;\r\n\r\n this.initialMarkersSet(this.markerPaths[nearMarker] || this.markerPaths.near, false);\r\n\r\n var infoContent = this.templates.infoboxSimple.template ? this.templates.infoboxSimple.template(this.settings) : '';\r\n\r\n // set \"initial\" version of correct marker\r\n this.setMarker(this.settings.centerId, this.markerPaths[this.settings.marker] || this.markerPaths.initial, this.jsmap.getCenter(), 10, infoContent);\r\n $(window).on('resize:finished', this.boundsChangeProcess.bind(this));\r\n }\r\n\r\n if(map1Points) {\r\n if (this.closedStorePopupTemplateObj.stores.length < 2 && map1Points.stores.length > this.closedStorePopupTemplateObj.stores.length) {\r\n var newClosestStores = this.getClosestStores(2, map1Points.stores);\r\n if (newClosestStores.stores.length > this.closedStorePopupTemplateObj.stores.length) {\r\n this.closedStorePopupTemplateObj = newClosestStores;\r\n }\r\n }\r\n $('.js-store-closed-popup-btn').on('click', this.closedPopupInit.bind(this));\r\n }\r\n\r\n },\r\n\r\n initExtendedLoaded: function () {\r\n //dimesions && scroll\r\n this.heightSet();\r\n this.initialScrollSet();\r\n\r\n if (!this.initMap()) {\r\n return;\r\n }\r\n\r\n //initialMarkersSet\r\n this.initialMarkersSet(this.markerPaths[this.settings.marker] || this.markerPaths.initial, true);\r\n\r\n //contentInteractions\r\n this.content.on('mouseenter', this.settings.referringSelector, this.referringItemMouseenter.bind(this));\r\n this.content.on('mouseleave', this.settings.referringSelector, this.referringItemMouseleave.bind(this));\r\n\r\n //resize\r\n $(window).on('resize:finished', this.resize.bind(this));\r\n this.resize(null, true); // forced resize\r\n\r\n google.maps.event.addListener(this.jsmap, 'bounds_changed', this.boundsChangeProcess.bind(this));\r\n\r\n if (this.settings.changemode) {\r\n this.boundsChangeProcess(true); // forced bounds change process\r\n }\r\n\r\n if(this.settings.totalItems && this.settings.autozoom) {\r\n this.fitBoundsToMarker();\r\n }\r\n\r\n this.removeMapLoader();\r\n },\r\n\r\n /****globals & settings*/\r\n\r\n initialScrollSet: function () {\r\n window.App.globals.onScrollElement.on('scroll touchmove', this.onScroll.bind(this));\r\n },\r\n\r\n onScroll: function (toAnimate) {\r\n\r\n var toanimate = (typeof toAnimate != 'undefined' && toAnimate === true),\r\n scrollTop = window.App.globals.getTop(),\r\n top = Math.round(scrollTop) + window.App.globals.cookieRealHeight,\r\n offset = this.mapContainer.offset(),\r\n offsetTop = offset.top + (window.App.globals.isCustomScroll ? scrollTop : 0),\r\n stickyAndMap = this.sticky.add(this.mapColumn);\r\n\r\n stickyAndMap.css({\r\n 'transition': '',\r\n '-webkit-transition': ''\r\n });\r\n\r\n if (top <= offsetTop || this.settings.viewmodeInt != this.viewModes.general || window.App.globals.isTabletSmall) {\r\n if (this.status == this.statuses.topped)\r\n return;\r\n this.status = this.statuses.topped;\r\n this.mapContainer.removeClass('fixed');\r\n \r\n \r\n this.mapWrapper.css('width', '');\r\n \r\n stickyAndMap.css({\r\n 'transform': '',\r\n '-webkit-transform': '',\r\n '-ms-transform': ''\r\n });\r\n return;\r\n }\r\n\r\n var topMin = top - offsetTop,\r\n topMax = Math.round(this.mapContainer.outerHeight() - parseInt(this.mapContainer.css('padding-bottom')) - this.map.height() - this.sticky.height());\r\n\r\n if (topMin < topMax) {\r\n if (this.status != this.status.fixed && toanimate) {\r\n stickyAndMap.css({\r\n 'transition': 'transform .5s ease',\r\n '-webkit-transition': '-webkit-transform .5s ease',\r\n '-ms-transform': 'translate3d(0, ' + topMin + 'px, 0)',\r\n '-webkit-transform': 'translate3d(0, ' + topMin + 'px, 0)',\r\n 'transform': 'translate3d(0, ' + topMin + 'px, 0)'\r\n });\r\n return;\r\n }\r\n \r\n if (this.mapColumn.width() > 0) {\r\n this.mapWrapper.css('width', this.mapColumn.width());\r\n } else {\r\n this.mapWrapper.css('width', '');\r\n console.log('fix2');\r\n }\r\n\r\n stickyAndMap.css({\r\n 'transform': '',\r\n '-webkit-transform': '',\r\n '-ms-transform': ''\r\n });\r\n this.mapContainer.addClass('fixed');\r\n\r\n this.status = this.statuses.fixed;\r\n } else {\r\n this.mapContainer.removeClass('fixed');\r\n topMax = Math.max(0, topMax);\r\n stickyAndMap.css({\r\n 'transform': 'translate3d(0, ' + topMax + 'px, 0)',\r\n '-webkit-transform': 'translate3d(0, ' + topMax + 'px, 0)',\r\n '-ms-transform': 'translate3d(0, ' + topMax + 'px, 0)'\r\n });\r\n this.mapWrapper.css('width', '');\r\n\r\n this.status = this.statuses.absolute;\r\n }\r\n },\r\n\r\n heightSet: function (isFromFillContent) {\r\n var offsetTop = this.mapGrid[0].offsetTop,\r\n contentItems = this.content.children(),\r\n length = contentItems.length,\r\n loadbutton = this.contentColumn.find('.js-map-load-more'),\r\n minheight = 0,\r\n changeHeight = false;\r\n\r\n if (length > 2) {\r\n minheight = this.content.outerHeight(true);\r\n }\r\n else if (length) {\r\n minheight = contentItems.eq(0).outerHeight(true);\r\n }\r\n if (loadbutton.length && loadbutton.css('display') != 'none') {\r\n minheight += loadbutton.outerHeight(true);\r\n }\r\n\r\n if ((this.settings.changemode || !length) && !window.App.globals.isTabletSmall) {\r\n minheight = Math.max(minheight, 630);\r\n }\r\n\r\n if (window.App.globals.isTabletSmall) {\r\n minheight = this.mapGrid.hasClass('map__grid_location') ? 560 : 400;\r\n }\r\n\r\n minheight = Math.min(window.App.globals.height - offsetTop - window.App.globals.cookieRealHeight - parseInt(this.mapContainer.css('padding-bottom')), minheight);\r\n\r\n minheight = Math.min(997, minheight); // height not larger than height of the block by design\r\n\r\n changeHeight = !this.dimensions || this.dimensions.height != minheight;\r\n\r\n if (this.isSearchResultsLoad) {\r\n if (changeHeight) {\r\n this.isInitialLoad = true;\r\n\r\n if (!this.settings.citymode){\r\n this.content.children().first().addClass('nearest-store');\r\n }\r\n }\r\n else if (typeof isFromFillContent != 'undefined' && isFromFillContent) {\r\n this.isSearchResultsLoad = false;\r\n }\r\n }\r\n\r\n this.mapColumn.children().first().css('height', minheight);\r\n this.mapWrapper.css('min-height', Math.min(minheight, parseInt(this.mapWrapper.css('min-height'))));\r\n\r\n this.mapRefresh();\r\n\r\n var maxHeight = 0;\r\n switch (this.settings.viewmodeInt) {\r\n case this.viewModes.map:\r\n maxHeight = minheight;\r\n break;\r\n case this.viewModes.grid:\r\n maxHeight = this.contentColumn.outerHeight();\r\n break;\r\n case this.viewModes.general:\r\n maxHeight = Math.max(minheight, this.contentColumn.outerHeight());\r\n break;\r\n }\r\n\r\n // KGP-443\r\n // IE fix setting of height is postponed to wait until all storages are loaded KGP \r\n var ie = navigator.userAgent.match(/MSIE\\s([\\d.]+)/);\r\n if (ie) {\r\n setTimeout(function(){ \r\n TweenMax.fromTo(this.mapGrid, 0.5, { maxHeight: this.mapGrid.outerHeight() }, { maxHeight: maxHeight, onComplete: this.onScroll.bind(this, true) });\r\n }, 100);\r\n } else {\r\n TweenMax.fromTo(this.mapGrid, 0.5, { maxHeight: this.mapGrid.outerHeight() }, { maxHeight: maxHeight, onComplete: this.onScroll.bind(this, true) });\r\n }\r\n \r\n },\r\n\r\n mapRefresh: function () {\r\n if(this.jsmap)\r\n google.maps.event.trigger(this.jsmap, 'resize');\r\n },\r\n\r\n createIcons: function () {\r\n for (var marker in this.markerPaths) {\r\n var icon = this.markerPaths[marker];\r\n if (icon.gicon != null)\r\n continue;\r\n this.markerPaths[marker].gicon = new google.maps.MarkerImage(\r\n icon.url,\r\n null,\r\n new google.maps.Point(0, 0),\r\n new google.maps.Point(Math.round(icon.centerX / 2), Math.round(icon.centerY / 2)),\r\n new google.maps.Size(Math.round(icon.width / 2), Math.round(icon.height / 2)));\r\n }\r\n },\r\n\r\n scrollToTop: function () {\r\n var currentTop = window.App.globals.getTop(),\r\n offset = this.mapContainer.offset(),\r\n offsetTop = offset.top + (window.App.globals.isCustomScroll ? currentTop : 0);\r\n\r\n if (currentTop > offsetTop && !window.App.globals.isTabletSmall) {\r\n window.App.globals.scrollElement.stop().animate({ scrollTop: Math.max(0, offset.top - window.App.globals.cookieRealHeight) }, 500, this.setView.bind(this));\r\n return false;\r\n } else {\r\n this.onScroll();\r\n return true;\r\n }\r\n },\r\n\r\n setView: function () {\r\n if (!this.contentColumn.length || !this.mapColumn.length || !this.mapGrid.length)\r\n return;\r\n\r\n if (!this.scrollToTop())\r\n return;\r\n\r\n this.tweenPromote(this.tween);\r\n this.tween = new TimelineMax({\r\n onComplete: this.setViewAnimationEnd.bind(this)\r\n });\r\n\r\n var contentChildren = this.content.children();\r\n contentChildren.css('width', contentChildren.first().outerWidth());\r\n\r\n switch (this.settings.viewmodeInt) {\r\n case this.viewModes.general:\r\n this.contentColumn.css('height', 'auto');\r\n this.mapColumn.css('height', 'auto');\r\n this.tween.to(this.contentColumn, 0.0, { opacity: 1, width: '100%', left: 0, marginRight: '-100%' });\r\n this.tween.to(this.mapColumn, 0.0, { zIndex: 9, opacity: 1, width: '100%', left: '100%' });\r\n break;\r\n case this.viewModes.grid:\r\n this.contentColumn.css('height', 'auto');\r\n this.tween.to(this.contentColumn, 0.0, { opacity: 1, width: '200%', left: 0, marginRight: '-200%' });\r\n this.tween.to(this.mapColumn, 0.0, { zIndex: 9, opacity: 0, left: '100%' });\r\n this.mapColumn.css('height', 0);\r\n break;\r\n case this.viewModes.map:\r\n this.mapColumn.css('height', 'auto');\r\n this.tween.to(this.contentColumn, 0.0, { opacity: 0, left: 0 });\r\n this.tween.to(this.mapColumn, 0.0, { zIndex: 11, opacity: 1, width: '200%', left: '0' });\r\n this.contentColumn.css('height', 0);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n this.tween.play();\r\n },\r\n\r\n setViewAnimationEnd: function () {\r\n //set grid class\r\n switch (this.settings.viewmodeInt) {\r\n case this.viewModes.general:\r\n this.content.addClass('grid_4');\r\n this.content.removeClass('grid_8');\r\n break;\r\n case this.viewModes.grid:\r\n this.content.addClass('grid_8');\r\n this.content.removeClass('grid_4');\r\n break;\r\n default:\r\n break;\r\n }\r\n this.content.children().css('width', '');\r\n\r\n this.heightSet();\r\n\r\n if(this.settings.changemode){\r\n this.boundsChangeProcess();\r\n }else{\r\n this.stores = { stores: this.oldStores.stores.slice()}; //get previous results for grid view mode\r\n }\r\n },\r\n\r\n tweenPromote: function (tween) {\r\n if (typeof tween == 'undefined' || tween == null)\r\n return;\r\n if (typeof tween.progress == 'function' && tween.progress() < 1) {\r\n tween.pause();\r\n tween.progress(1);\r\n this.setViewAnimationEnd();\r\n }\r\n if (typeof tween.destroy == 'function') {\r\n tween.destroy();\r\n }\r\n },\r\n\r\n removeMapLoader: function () {\r\n this.mapContainer.removeClass('loading');\r\n\r\n if (this.mapLoader.is(\":visible\")) {\r\n var tween = new TimelineMax();\r\n tween.to(this.mapLoader, 0.5, { opacity: 0 });\r\n tween.to(this.mapLoader, 0.0, { display: 'none' });\r\n tween.play();\r\n }\r\n },\r\n\r\n /****resize***/\r\n resize: function (e, forced) { // if forced, make resize process for any viewmode\r\n\r\n if(typeof forced == 'undefined' && this.settings.viewmodeInt == this.viewModes.grid){\r\n this.heightSet();\r\n return;\r\n }\r\n\r\n if (this.settings.viewmodeInt == this.viewModes.general && (window.App.globals.isTabletSmall || window.App.globals.isMobileSmall)) {\r\n var selectors = this.mapContainer.find(this.controls.viewmode.classSelector);\r\n selectors.removeClass('active');\r\n selectors.filter('[data-view=\"grid\"]').addClass('active');\r\n this.settings.viewmodeInt = this.viewModes.grid;\r\n this.setView();\r\n } else {\r\n this.heightSet();\r\n }\r\n if(this.settings.totalItems && this.settings.autozoom) {\r\n this.fitBoundsToMarker();\r\n }\r\n },\r\n\r\n /**control handlers**/\r\n\r\n initControls: function () {\r\n for (var control in this.controls) {\r\n if (this.controls[control].minveiwMode < this.settings.viewInt)\r\n continue;\r\n var controlEl = this.mapContainer.find(this.controls[control].classSelector);\r\n if (!controlEl.length)\r\n continue;\r\n if (control == 'changemode')\r\n controlEl.val(this.settings.changemode);\r\n if (control == 'changestoremode')\r\n controlEl.val(this.settings.changestoremode);\r\n controlEl.on(this.controls[control].event, this[this.controls[control].eventListener].bind(this));\r\n }\r\n if (this.settings.viewInt >= this.viewTypes.extended) {\r\n this.mapContainer.find(this.controls.viewmode.classSelector + '[data-view=\"' + this.settings.viewmode + '\"]').addClass('active');\r\n }\r\n },\r\n\r\n zoomin: function (e) {\r\n if (typeof e != 'undefined' && typeof e.preventDefault == \"function\") {\r\n e.preventDefault();\r\n }\r\n if (this.isLocked)\r\n return;\r\n var currentZoomLevel = this.jsmap.getZoom();\r\n if (currentZoomLevel != this.settings.maxzoom) {\r\n this.jsmap.setZoom(currentZoomLevel + 1);\r\n }\r\n },\r\n\r\n zoomout: function (e) {\r\n if (typeof e != 'undefined' && typeof e.preventDefault == \"function\") {\r\n e.preventDefault();\r\n }\r\n if (this.isLocked)\r\n return;\r\n var currentZoomLevel = this.jsmap.getZoom();\r\n if (currentZoomLevel != this.settings.minzoom) {\r\n this.jsmap.setZoom(currentZoomLevel - 1);\r\n }\r\n },\r\n\r\n changemode: function (e) {\r\n this.settings.changemode = $(e.target).is(':checked');\r\n if (this.settings.changemode)\r\n this.callToLoadNewItems(this.settings.viewmodeInt == this.viewModes.map);\r\n },\r\n\r\n changestoremode: function (e) {\r\n this.settings.changestoremode = $(e.target).is(':checked');\r\n if (this.settings.changestoremode){\r\n this.showAllMarkers();\r\n }else{\r\n this.hideOutOfViewMarkers();\r\n }\r\n\r\n },\r\n\r\n changeview: function(e) {\r\n if (typeof e != 'undefined' && typeof e.preventDefault == \"function\") {\r\n e.preventDefault();\r\n }\r\n\r\n\r\n var link = $(e.target);\r\n if (!link.is('a'))\r\n link = link.parents('a');\r\n\r\n this.mapContainer.find(this.controls.viewmode.classSelector).removeClass('active');\r\n link.addClass('active');\r\n\r\n var viewmode = link.attr('data-view'),\r\n viewmodeInt = this.viewModes[viewmode];\r\n\r\n if (typeof viewmodeInt == 'undefined' || viewmodeInt === this.settings.viewmodeInt)\r\n return;\r\n this.settings.viewmodeInt = viewmodeInt;\r\n if(this.settings.changemode){\r\n this.callToLoadNewItems(true);\r\n }else{\r\n this.stores = { stores: this.oldStores.stores.slice()};\r\n }\r\n\r\n\r\n this.setView();\r\n this.updateCountersFromStores();\r\n this.fillContent(true);\r\n this.totallyLoaded();\r\n this.fillHeader();\r\n\r\n },\r\n\r\n loadmore: function (e) {\r\n if (typeof e != 'undefined' && typeof e.preventDefault == \"function\") {\r\n e.preventDefault();\r\n }\r\n if (this.settings.changemode == false && (this.zoom != this.jsmap.getZoom() || this.center != this.jsmap.getCenter())) {\r\n if (this.loadmorezoom > 0) {\r\n this.jsmap.setZoom(this.loadmorezoom);\r\n }\r\n this.jsmap.setCenter(this.loadmorecenter);\r\n }\r\n\r\n this.settings.currentPage++;\r\n\r\n if (this.settings.changemode) {\r\n this.fillContent();\r\n } else {\r\n this.fillContent(true, true);\r\n }\r\n\r\n this.totallyLoaded();\r\n this.fillHeader();\r\n \r\n },\r\n\r\n /**interaction function**/\r\n\r\n totallyLoaded: function () {\r\n this.mapContainer[this.settings.currentPage + 1 >= this.settings.totalPages || !this.settings.totalPages ? \"addClass\" : \"removeClass\"]('totalloaded');\r\n this.mapContainer[!this.settings.totalPages ? \"addClass\" : \"removeClass\"]('totallyempty');\r\n },\r\n\r\n sendTrackingData: function() {\r\n if (!this.settings.totalPages && !this.emptySearch) {\r\n this.emptySearch = true;\r\n $(document).trigger('gatrack:senddata', ['event', /*tracking-category*/'Search Results', /*tracking-action*/'Not Found', /*tracking-label*/this.settings.label]);\r\n }\r\n\r\n if (this.settings.totalPages) {\r\n this.emptySearch = false;\r\n }\r\n },\r\n\r\n initialMarkersSet: function (icon, central) {\r\n if(central) {\r\n this.setMarker(this.settings.centerId, this.markerPaths[this.settings.centralMarker], this.jsmap.getCenter());\r\n }\r\n if (this.settings.markers != null && typeof window[this.settings.markers] != 'undefined') {\r\n this.setMarkersFromObject(window[this.settings.markers], icon, false);\r\n }\r\n },\r\n\r\n updateCountersFromStores: function () {\r\n if (this.stores != null) {\r\n this.settings.currentPage = 0;\r\n this.settings.totalItems = this.stores.stores.length;\r\n var pSize = (this.settings.viewmodeInt == 0) ? this.settings.pagesize : this.settings.pagesizegrid;\r\n this.settings.totalPages = this.settings.totalItems ? Math.ceil(this.settings.totalItems/pSize) : 0;\r\n }\r\n },\r\n\r\n setMarkersFromObject: function (markerArr, icon, toEraseOld) {\r\n if (toEraseOld)\r\n this.emptyMarkers(markerArr.stores);\r\n for (var marker in markerArr.stores) {\r\n var point = markerArr.stores[marker],\r\n infoContent = this.templates.infobox.template ? this.templates.infobox.template(point) : '';\r\n this.setMarker(\r\n point.SiteId,\r\n icon,\r\n {\r\n lat: parseFloat(point.Latitude),\r\n lng: parseFloat(point.Longitude)\r\n },\r\n 5,\r\n infoContent);\r\n }\r\n if (markerArr.center) {\r\n this.setMarker(\r\n \"center\",\r\n this.markerPaths.central,\r\n {\r\n lat: parseFloat(markerArr.center.Latitude),\r\n lng: parseFloat(markerArr.center.Longitude)\r\n });\r\n }\r\n },\r\n\r\n emptyMarkers: function (newMarkers) {\r\n for (var marker in this.markers) {\r\n if (marker == this.settings.centerId || $.grep(newMarkers, function(e){ return e.SiteId == marker; }).length)\r\n continue;\r\n\r\n this.markers[marker].setVisible(false);\r\n this.infowindow[marker].close();\r\n }\r\n },\r\n\r\n setMarker: function (id, icon, position, zIndex, infoboxContent) {\r\n if (typeof this.markers[id] != 'undefined') {\r\n if (this.markers[id].getVisible())\r\n return;\r\n this.markers[id].setVisible(true);\r\n if (typeof this.infowindwsOpened[id] != 'undefined') {\r\n this.infowindow[id].open(this.jsmap, this.markers[id]);\r\n }\r\n return;\r\n }\r\n\r\n var zind = typeof zIndex == 'undefined' ? 1 : zIndex;\r\n var self = this;\r\n\r\n this.markers[id] = new google.maps.Marker({\r\n position: position,\r\n map: this.jsmap,\r\n icon: icon.gicon,\r\n clickable: icon.clickable,\r\n zIndex: zind\r\n });\r\n\r\n if (typeof icon.mouseover != 'undefined') {\r\n this.markers[id].addListener('mouseover', this.markerMouseover.bind(this, id, icon, zind));\r\n this.markers[id].addListener('mouseout', this.markerMouseout.bind(this, id, icon, zind));\r\n }\r\n\r\n if (typeof infoboxContent == 'undefined' || !infoboxContent.length)\r\n return;\r\n\r\n this.infowindow[id] = new this.infobox({\r\n content: infoboxContent,\r\n closeBoxURL: typeof Modernizr != 'undefined' && Modernizr.svg ? this.settings.infoWindowSvg : this.settings.infoWindowPng,\r\n closeBoxMargin: '5px 10px 10px',\r\n alignBottom: true,\r\n enableEventPropagation: true,\r\n pixelOffset: new google.maps.Size(-this.settings.infoWindowWidth/2, icon.infooffset)\r\n });\r\n\r\n google.maps.event.addListener(this.infowindow[id], 'domready', function () {\r\n $(window).trigger('popup:reinit');\r\n $(window).trigger('directlink:reinit');\r\n $('.js-store-closed-popup-btn').on('click', self.closedPopupInit.bind(self));\r\n });\r\n\r\n this.markers[id].addListener('click', this.markerClick.bind(this, id));\r\n this.infowindow[id].addListener('closeclick', this.infowWindowClose.bind(this, id));\r\n },\r\n\r\n markerMouseover: function (id, icon, zind) {\r\n this.markers[id].setIcon(this.markerPaths[icon.mouseover].gicon);\r\n this.markers[id].setZIndex(zind*2);\r\n },\r\n\r\n markerMouseout: function (id, icon, zind) {\r\n this.markers[id].setIcon(icon.gicon);\r\n this.markers[id].setZIndex(zind);\r\n },\r\n\r\n markerClick: function (id) {\r\n for (var markerid in this.infowindow) {\r\n if (markerid == id) {\r\n this.infowindwsOpened[markerid] = true;\r\n this.infowindow[markerid].open(this.jsmap, this.markers[markerid]);\r\n } else if (this.infowindow[markerid].getMap()) {\r\n this.infowindow[markerid].close();\r\n delete this.infowindwsOpened[markerid];\r\n }\r\n }\r\n },\r\n\r\n infowWindowClose: function (id) {\r\n delete this.infowindwsOpened[id];\r\n },\r\n\r\n areMarkersInBounds: function () {\r\n var bounds = this.jsmap.getBounds();\r\n if (!bounds)\r\n return false;\r\n\r\n for (var id in this.markers) {\r\n //should not depend on the central point\r\n if (id == this.settings.centerId)\r\n continue;\r\n if (this.markers[id].getVisible() && !this.checkIfInBounds(bounds, this.markers[id])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n\r\n fitBoundsToMarker: function () {\r\n if (!this.areMarkersInBounds()) {\r\n var bounds = new google.maps.LatLngBounds();\r\n for (var id in this.markers) {\r\n if (this.markers[id].getVisible()) {\r\n bounds.extend(this.markers[id].getPosition());\r\n }\r\n }\r\n this.jsmap.fitBounds(bounds);\r\n this.center = this.jsmap.getCenter();\r\n this.zoom = this.jsmap.getZoom();\r\n }\r\n },\r\n\r\n fillContent: function (toEraseOld, showall) {\r\n if (typeof toEraseOld != 'boolean')\r\n toEraseOld = false;\r\n if (this.templates.stores.template) {\r\n var newHtml = toEraseOld ? '' : this.content.html(),\r\n templateObj = { stores: new Array() },\r\n counter = 0;\r\n\r\n if (typeof showall == 'undefined' || showall == false) {\r\n var pSize = (this.settings.viewmodeInt == 0) ? this.settings.pagesize : this.settings.pagesizegrid;\r\n while (this.stores && this.stores.stores.length && templateObj.stores.length < pSize) {\r\n templateObj.stores[counter] = this.stores.stores[0];\r\n templateObj.stores[counter].searchInitiator = this.settings.searchinitiator;\r\n templateObj.stores[counter].position = (this.settings.currentPage * pSize) + counter + 1;\r\n counter++;\r\n this.stores.stores.shift();\r\n }\r\n } else {\r\n templateObj.stores = this.stores.stores;\r\n this.settings.currentPage = this.settings.totalPages - 1;\r\n this.stores.stores = new Array();\r\n }\r\n\r\n this.initTracking(templateObj);\r\n this.content.html(newHtml + this.templates.stores.template(templateObj));\r\n if (this.isInitialLoad && !this.settings.citymode) {\r\n this.content.children().first().addClass('nearest-store');\r\n }\r\n\r\n if (this.closedStorePopupTemplateObj.stores.length < 2 && templateObj.stores.length > this.closedStorePopupTemplateObj.stores.length) {\r\n var newClosestStores = this.getClosestStores(2, templateObj.stores);\r\n if (newClosestStores.stores.length > this.closedStorePopupTemplateObj.stores.length){\r\n this.closedStorePopupTemplateObj = newClosestStores;\r\n }\r\n }\r\n\r\n var popup;\r\n\r\n require.ensure([], function () {\r\n popup = require('app.popup');\r\n popup.reinit();\r\n }, 'app.popup');\r\n\r\n this.isInitialLoad = false;\r\n\r\n }\r\n this.content.waitForImages(this.heightSet.bind(this, true), function (loaded, count, success) { }, true);\r\n\r\n $('.js-store-closed-popup-btn').on('click', this.closedPopupInit.bind(this));\r\n },\r\n\r\n getClosestStores: function(number, stores){\r\n var openedStores = [];\r\n\r\n stores.forEach(function(item){ // exclude closed stores\r\n if(!item.IsClosed){\r\n openedStores.push(item);\r\n }\r\n });\r\n\r\n var result = {\r\n stores: openedStores\r\n .sort(function(item1, item2){ // sort stores by distance\r\n return item1.DistanceFloat - item2.DistanceFloat;\r\n })\r\n .slice(0, number) // take *number* closest stores\r\n };\r\n\r\n return result;\r\n },\r\n\r\n closedPopupInit: function(e){\r\n e.preventDefault();\r\n var data = this.closedStorePopupTemplateObj;\r\n data.storeName = $(e.currentTarget).data(\"store-name\");\r\n data.storeLocationName = $(e.currentTarget).data(\"store-location-name\");\r\n data.storeTrackingName = $(e.currentTarget).data(\"store-tracking-name\");\r\n $(window).trigger('open:simplepopup', { data: data, template: 'store-closed', cssClass: 'popup-container__store-closed' });\r\n $(window).trigger('popup:reinit');\r\n },\r\n\r\n initTracking: function (templateObj) {\r\n var trackingData = { ecommerce: { impressions: [] } };\r\n \r\n if (this.settings.tracking == true) {\r\n for (var i = 0, l = templateObj.stores.length; i < l; i++) {\r\n var storeName = templateObj.stores[i].StoreName;\r\n var siteId = templateObj.stores[i].SiteId;\r\n var storePosition = templateObj.stores[i].position;\r\n if (!(this.storesGaSent.indexOf(storeName) +1)) {\r\n $(document).trigger('gatrack:senddata', ['event', this.settings.category, storeName, this.settings.label]);\r\n this.storesGaSent.push(storeName);\r\n }\r\n\r\n trackingData.ecommerce.impressions.push({\r\n name: storeName,\r\n id: siteId,\r\n list: templateObj.stores[i].searchInitiator,\r\n position: storePosition\r\n });\r\n }\r\n if (l) {\r\n dataLayer.push(trackingData);\r\n }\r\n }\r\n },\r\n\r\n\r\n fillHeader: function () {\r\n if(this.templates.header.template != null) {\r\n this.header.html(this.settings.totalItems ? this.templates.header.template({\r\n currentItems: this.content.children().length,\r\n totalItems: this.settings.totalItems\r\n }) : '');\r\n }\r\n },\r\n\r\n getMapBounds: function () {\r\n var bounds = this.jsmap.getBounds();\r\n\r\n if (!bounds) {\r\n return null;\r\n }\r\n\r\n var northEast = bounds.getNorthEast(),\r\n southWest = bounds.getSouthWest();\r\n\r\n\r\n return {\r\n northeast: {\r\n latitude: northEast.lat(),\r\n longitude: northEast.lng()\r\n },\r\n southwest: {\r\n latitude: southWest.lat(),\r\n longitude: southWest.lng()\r\n }\r\n }\r\n },\r\n\r\n hideOutOfViewMarkers: function() {\r\n\r\n for (var id in this.markers){\r\n if (id == this.settings.centerId)\r\n continue;\r\n if(!this.jsmap.getBounds().contains(this.markers[id].getPosition())){\r\n this.markers[id].setMap(null);\r\n }\r\n }\r\n },\r\n\r\n showAllMarkers: function() {\r\n\r\n for (var id in this.markers){\r\n this.markers[id].setMap(this.jsmap);\r\n }\r\n },\r\n\r\n checkIfInBounds: function (bounds, marker) {\r\n return bounds.contains(marker.getPosition());\r\n },\r\n\r\n boundsChangeProcess: function (forced) { // if forced, make bounds change process for any viewmode\r\n\r\n if(typeof forced == 'undefined' && this.settings.viewmodeInt == this.viewModes.grid){ // don't update results on grid mode\r\n return;\r\n }\r\n\r\n var newDimensions = {\r\n width: this.map.width(),\r\n height: this.map.height()\r\n },\r\n zoom = this.jsmap.getZoom(),\r\n center = this.jsmap.getCenter(),\r\n isDimensionsChange = (Math.abs(this.dimensions.width - newDimensions.width) > 2 || Math.abs(this.dimensions.height - newDimensions.height) > 2),\r\n isDimensionsChangeToPrev = this.prevDimensions == null || Math.abs(this.prevDimensions.width - newDimensions.width) > 2 || Math.abs(this.prevDimensions.height - newDimensions.height) > 2,\r\n isCenterChange = this.center != center,\r\n isCenterChangeToPrev = this.prevCenter != center,\r\n isZoomChange = zoom != this.zoom,\r\n isMapSimple = this.settings.viewInt == this.viewTypes.simple,\r\n isViewMapAndNeedsLoading = (this.settings.viewmodeInt == this.viewModes.map && this.settings.currentPage < this.settings.totalPages - 1);\r\n\r\n if ((isDimensionsChangeToPrev || isMapSimple) && isCenterChangeToPrev && !forced) {\r\n this.jsmap.setCenter(isMapSimple || this.prevCenter == null ? this.center : this.prevCenter);\r\n } else if (!isMapSimple && (isDimensionsChange || isCenterChange || isZoomChange)) {\r\n if (this.settings.changemode) {\r\n this.callToLoadNewItems(this.settings.viewmodeInt == this.viewModes.map);\r\n this.center = center;\r\n this.dimensions = newDimensions;\r\n this.zoom = zoom;\r\n } else if (isViewMapAndNeedsLoading) {\r\n this.fillContent(true, true);\r\n this.totallyLoaded();\r\n this.fillHeader();\r\n } else if (this.zoom < 0) {\r\n this.zoom = zoom;\r\n this.loadmorezoom = this.zoom;\r\n }\r\n }\r\n\r\n this.prevDimensions = newDimensions;\r\n this.prevCenter = center;\r\n },\r\n\r\n lock: function () {\r\n this.isLocked = true;\r\n\r\n this.jsmap.setOptions({\r\n draggable: false,\r\n scrollwheel: false\r\n });\r\n },\r\n\r\n unlock: function () {\r\n this.isLocked = false;\r\n\r\n this.jsmap.setOptions({\r\n draggable: true,\r\n scrollwheel: true\r\n });\r\n },\r\n\r\n //loadingInteractions\r\n callToLoadNewItems: function (showall) {\r\n if (this.loadingTimeout)\r\n clearTimeout(this.loadingTimeout);\r\n this.loadingTimeout = setTimeout(this.loadNewItems.bind(this, showall), this.settings.loadtimeout);\r\n },\r\n\r\n loadNewItems: function (showall) {\r\n if (!this.settings.url.length)\r\n return;\r\n\r\n if (!this.isMapInited) {\r\n this.callToLoadNewItems(showall);\r\n return;\r\n }\r\n\r\n var bounds = this.getMapBounds();\r\n\r\n if (bounds &&\r\n bounds.northeast.latitude === bounds.southwest.latitude\r\n ) {\r\n this.callToLoadNewItems(showall);\r\n return;\r\n }\r\n\r\n var data = $.extend({}, bounds, {\r\n latitude: this.settings.latitude,\r\n longitude: this.settings.longitude,\r\n iscitypage: this.settings.citymode,\r\n searchInitiator : this.settings.searchInitiator,\r\n culture: this.settings.culture\r\n });\r\n\r\n this.ajaxAbort();\r\n\r\n this.lock();\r\n this.mapContainer.addClass('loading');\r\n\r\n this.ajaxCall = $.ajax({\r\n method: \"POST\",\r\n url: this.settings.url,\r\n dataType: \"json\",\r\n data: data,\r\n success: this.ajaxSuccess.bind(this, showall),\r\n error: this.ajaxError.bind(this)\r\n });\r\n },\r\n\r\n ajaxSuccess: function (showall, data) {\r\n if (data.Status != 'ok') {\r\n this.ajaxError();\r\n return;\r\n }\r\n this.unlock();\r\n\r\n this.scrollToTop();\r\n\r\n this.stores = { stores: data.stores ? data.stores.slice() : new Array() };\r\n this.oldStores = { stores: this.stores.stores.slice()};\r\n this.updateCountersFromStores();\r\n\r\n //for the situation when we moved the map in changemode==false mode and clicked 'loadmore'\r\n this.loadmorecenter = this.jsmap.getCenter();\r\n this.loadmorezoom = this.jsmap.getZoom();\r\n\r\n\r\n this.fillContent(true, showall);\r\n this.sendTrackingData(); \r\n this.totallyLoaded();\r\n this.fillHeader();\r\n this.setMarkersFromObject(data, this.markerPaths[this.settings.marker] || this.markerPaths.initial, true);\r\n\r\n //removeLoader\r\n this.removeMapLoader();\r\n },\r\n\r\n ajaxError: function () {\r\n this.unlock();\r\n //removeLoader\r\n this.removeMapLoader();\r\n },\r\n\r\n ajaxAbort: function () {\r\n if (this.ajaxCall && typeof this.ajaxCall.abort == \"function\") {\r\n try {\r\n ajaxCall.abort();\r\n } catch (ex) { }\r\n\r\n }\r\n },\r\n\r\n //content interactions\r\n referringItemMouseenter: function (e) {\r\n var referringItem = $(e.target);\r\n if (!referringItem.is(this.settings.referringSelector))\r\n referringItem = referringItem.parents(this.settings.referringSelector);\r\n this.referringItemTrigger(referringItem, 'mouseover');\r\n },\r\n\r\n referringItemMouseleave: function (e) {\r\n var referringItem = $(e.target);\r\n if (!referringItem.is(this.settings.referringSelector))\r\n referringItem = referringItem.parents(this.settings.referringSelector);\r\n this.referringItemTrigger(referringItem, 'mouseout');\r\n },\r\n\r\n referringItemTrigger: function (referringItem, eventName) {\r\n var referringId = referringItem.attr('data-id');\r\n\r\n if (!referringId)\r\n return;\r\n\r\n var marker = this.markers[referringId];\r\n\r\n if (!marker)\r\n return;\r\n\r\n new google.maps.event.trigger(marker, eventName);\r\n }\r\n });\r\n\r\n return map;\r\n\r\n}));\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./js/app/generic/generic.map.js\n ** module id = 25\n ** module chunks = 7\n **/"],"sourceRoot":""}