dynamic/SilverStripe-Locator-Module

View on GitHub
thirdparty/jquery-store-locator-plugin/assets/js/plugins/storeLocator/jquery.storelocator.min.js

Summary

Maintainability
A
0 mins
Test Coverage
/*! jQuery Google Maps Store Locator - v2.7.2 - 2016-12-03
* http://www.bjornblog.com/web/jquery-store-locator-plugin
* Copyright (c) 2016 Bjorn Holine; Licensed MIT */

!function(a,b,c,d){"use strict";function e(b,c){g=a(b),this.element=b,this.settings=a.extend({},H,c),this._defaults=H,this._name=f,this.init()}var f="storeLocator";if("undefined"==typeof a.fn[f]&&"undefined"!=typeof google){var g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z=[],A=[],B=[],C=[],D={},E={},F={},G={},H={mapID:"bh-sl-map",locationList:"bh-sl-loc-list",formContainer:"bh-sl-form-container",formID:"bh-sl-user-location",addressID:"bh-sl-address",regionID:"bh-sl-region",mapSettings:{zoom:12,mapTypeId:google.maps.MapTypeId.ROADMAP},markerImg:null,markerDim:null,catMarkers:null,selectedMarkerImg:null,selectedMarkerImgDim:null,disableAlphaMarkers:!1,lengthUnit:"m",storeLimit:26,distanceAlert:60,dataType:"xml",dataLocation:"data/locations.xml",dataRaw:null,xmlElement:"marker",listColor1:"#ffffff",listColor2:"#eeeeee",originMarker:!1,originMarkerImg:null,originMarkerDim:null,bounceMarker:!0,slideMap:!0,modal:!1,overlay:"bh-sl-overlay",modalWindow:"bh-sl-modal-window",modalContent:"bh-sl-modal-content",closeIcon:"bh-sl-close-icon",defaultLoc:!1,defaultLat:null,defaultLng:null,autoComplete:!1,autoCompleteOptions:{},autoGeocode:!1,geocodeID:null,maxDistance:!1,maxDistanceID:"bh-sl-maxdistance",fullMapStart:!1,fullMapStartBlank:!1,fullMapStartListLimit:!1,noForm:!1,loading:!1,loadingContainer:"bh-sl-loading",featuredLocations:!1,pagination:!1,locationsPerPage:10,inlineDirections:!1,nameSearch:!1,searchID:"bh-sl-search",nameAttribute:"name",visibleMarkersList:!1,dragSearch:!1,infowindowTemplatePath:"assets/js/plugins/storeLocator/templates/infowindow-description.html",listTemplatePath:"assets/js/plugins/storeLocator/templates/location-list-description.html",KMLinfowindowTemplatePath:"assets/js/plugins/storeLocator/templates/kml-infowindow-description.html",KMLlistTemplatePath:"assets/js/plugins/storeLocator/templates/kml-location-list-description.html",listTemplateID:null,infowindowTemplateID:null,taxonomyFilters:null,taxonomyFiltersContainer:"bh-sl-filters-container",exclusiveFiltering:!1,querystringParams:!1,debug:!1,sessionStorage:!1,markerCluster:null,infoBubble:null,callbackNotify:null,callbackRegion:null,callbackBeforeSend:null,callbackSuccess:null,callbackModalOpen:null,callbackModalReady:null,callbackModalClose:null,callbackJsonp:null,callbackCreateMarker:null,callbackPageChange:null,callbackDirectionsRequest:null,callbackCloseDirections:null,callbackNoResults:null,callbackListClick:null,callbackMarkerClick:null,callbackFilters:null,callbackMapSet:null,addressErrorAlert:"Unable to find address",autoGeocodeErrorAlert:"Automatic location detection failed. Please fill in your address or zip code.",distanceErrorAlert:"Unfortunately, our closest location is more than ",mileLang:"mile",milesLang:"miles",kilometerLang:"kilometer",kilometersLang:"kilometers",noResultsTitle:"No results",noResultsDesc:"No locations were found with the given criteria. Please modify your selections or input.",nextPage:"Next &raquo;",prevPage:"&laquo; Prev"};a.extend(e.prototype,{init:function(){var b=this;if(this.writeDebug("init"),"km"===this.settings.lengthUnit?F.EarthRadius=6367:F.EarthRadius=3956,k="kml"===this.settings.dataType?"xml":this.settings.dataType,this.settings.inlineDirections===!0&&a("."+this.settings.locationList).prepend('<div class="bh-sl-directions-panel"></div>'),n=this.settings.mapSettings.zoom,Handlebars.registerHelper("niceURL",function(a){return a?a.replace("https://","").replace("http://",""):void 0}),null!==this.settings.taxonomyFilters&&this.taxonomyFiltering(),this.settings.modal===!0&&(null!==this.settings.taxonomyFilters&&a("."+this.settings.taxonomyFiltersContainer).clone(!0,!0).prependTo(g),g.wrap('<div class="'+this.settings.overlay+'"><div class="'+this.settings.modalWindow+'"><div class="'+this.settings.modalContent+'">'),a("."+this.settings.modalWindow).prepend('<div class="'+this.settings.closeIcon+'"></div>'),a("."+this.settings.overlay).hide()),this.settings.autoComplete===!0){var d=c.getElementById(this.settings.addressID),e=new google.maps.places.Autocomplete(d,this.settings.autoCompleteOptions);this.settings.autoComplete===!0&&e.addListener("place_changed",function(a){b.processForm(a)})}this._loadTemplates()},destroy:function(){this.writeDebug("destroy"),this.reset();var b=a("#"+this.settings.mapID);if(C.length)for(var d=0;d<=C.length;d++)google.maps.event.removeListener(C[d]);a("."+this.settings.locationList+" ul").empty(),b.hasClass("bh-sl-map-open")&&b.empty().removeClass("bh-sl-map-open"),this.settings.modal===!0&&a(". "+this.settings.overlay).remove(),b.attr("style",""),g.hide(),a.removeData(g.get(0)),a(c).off(f),g.unbind()},reset:function(){if(this.writeDebug("reset"),A=[],z=[],B=[],C=[],y=!1,a(c).off("click."+f,"."+this.settings.locationList+" li"),a("."+this.settings.locationList+" .bh-sl-close-directions-container").length&&a(".bh-sl-close-directions-container").remove(),this.settings.inlineDirections===!0){var b=a("."+this.settings.locationList+" .adp");b.length>0&&(b.remove(),a("."+this.settings.locationList+" ul").fadeIn()),a(c).off("click","."+this.settings.locationList+" li .loc-directions a")}this.settings.pagination===!0&&a(c).off("click."+f,".bh-sl-pagination li")},formFiltersReset:function(){if(this.writeDebug("formFiltersReset"),null!==this.settings.taxonomyFilters){var b=a("."+this.settings.taxonomyFiltersContainer+" input"),c=a("."+this.settings.taxonomyFiltersContainer+" select");"object"==typeof b&&(b.each(function(){(a(this).is('input[type="checkbox"]')||a(this).is('input[type="radio"]'))&&a(this).prop("checked",!1)}),c.each(function(){a(this).prop("selectedIndex",0)}))}},mapReload:function(){this.writeDebug("mapReload"),this.reset(),null!==this.settings.taxonomyFilters&&(this.formFiltersReset(),this.taxonomyFiltersInit()),r&&s?(this.settings.mapSettings.zoom=n,this.processForm()):this.mapping(G)},notify:function(a){this.writeDebug("notify",a),this.settings.callbackNotify?this.settings.callbackNotify.call(this,a):alert(a)},geoCodeCalcToRadian:function(a){return this.writeDebug("geoCodeCalcToRadian",a),a*(Math.PI/180)},geoCodeCalcDiffRadian:function(a,b){return this.writeDebug("geoCodeCalcDiffRadian",arguments),this.geoCodeCalcToRadian(b)-this.geoCodeCalcToRadian(a)},geoCodeCalcCalcDistance:function(a,b,c,d,e){return this.writeDebug("geoCodeCalcCalcDistance",arguments),2*e*Math.asin(Math.min(1,Math.sqrt(Math.pow(Math.sin(this.geoCodeCalcDiffRadian(a,c)/2),2)+Math.cos(this.geoCodeCalcToRadian(a))*Math.cos(this.geoCodeCalcToRadian(c))*Math.pow(Math.sin(this.geoCodeCalcDiffRadian(b,d)/2),2))))},getQueryString:function(a){if(this.writeDebug("getQueryString",a),a){a=a.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var b=new RegExp("[\\?&]"+a+"=([^&#]*)"),c=b.exec(location.search);return null===c?"":decodeURIComponent(c[1].replace(/\+/g," "))}},getMap:function(){return this.map},_loadTemplates:function(){this.writeDebug("_loadTemplates");var b,c=this,d='<div class="bh-sl-error">Error: Could not load plugin templates. Check the paths and ensure they have been uploaded. Paths will be wrong if you do not run this from a web server.</div>';"kml"===this.settings.dataType&&null===this.settings.listTemplateID&&null===this.settings.infowindowTemplateID?a.when(a.get(this.settings.KMLinfowindowTemplatePath,function(a){b=a,j=Handlebars.compile(b)}),a.get(this.settings.KMLlistTemplatePath,function(a){b=a,i=Handlebars.compile(b)})).then(function(){c.locator()},function(){throw a("."+c.settings.formContainer).append(d),new Error("Could not load storeLocator plugin templates")}):null!==this.settings.listTemplateID&&null!==this.settings.infowindowTemplateID?(j=Handlebars.compile(a("#"+this.settings.infowindowTemplateID).html()),i=Handlebars.compile(a("#"+this.settings.listTemplateID).html()),c.locator()):a.when(a.get(this.settings.infowindowTemplatePath,function(a){b=a,j=Handlebars.compile(b)}),a.get(this.settings.listTemplatePath,function(a){b=a,i=Handlebars.compile(b)})).then(function(){c.locator()},function(){throw a("."+c.settings.formContainer).append(d),new Error("Could not load storeLocator plugin templates")})},locator:function(){this.writeDebug("locator"),this.settings.slideMap===!0&&g.hide(),this._start(),this._formEventHandler()},_formEventHandler:function(){this.writeDebug("_formEventHandler");var b=this;this.settings.noForm===!0?(a(c).on("click."+f,"."+this.settings.formContainer+" button",function(a){b.processForm(a)}),a(c).on("keydown."+f,function(c){13===c.keyCode&&a("#"+b.settings.addressID).is(":focus")&&b.processForm(c)})):a(c).on("submit."+f,"#"+this.settings.formID,function(a){b.processForm(a)}),a(".bh-sl-reset").length&&a("#"+this.settings.mapID).length&&a(c).on("click."+f,".bh-sl-reset",function(){b.mapReload()})},_getData:function(b,c,d,e){this.writeDebug("_getData",arguments);var f=this,g="",h="",i="";if("undefined"!=typeof e&&"undefined"!=typeof e.geometry.bounds&&(i=e.formatted_address,g=JSON.stringify(e.geometry.bounds.getNorthEast()),h=JSON.stringify(e.geometry.bounds.getSouthWest())),this.settings.callbackBeforeSend&&this.settings.callbackBeforeSend.call(this,b,c,d,i,g,h),null===f.settings.dataRaw){var j=a.Deferred();return this.settings.loading===!0&&a("."+this.settings.formContainer).append('<div class="'+this.settings.loadingContainer+'"></div>'),a.ajax({type:"GET",url:this.settings.dataLocation+("jsonp"===this.settings.dataType?(this.settings.dataLocation.match(/\?/)?"&":"?")+"callback=?":""),data:{origLat:b,origLng:c,origAddress:d,formattedAddress:i,boundsNorthEast:g,boundsSouthWest:h},dataType:k,jsonpCallback:"jsonp"===this.settings.dataType?this.settings.callbackJsonp:null}).done(function(b){j.resolve(b),f.settings.loading===!0&&a("."+f.settings.formContainer+" ."+f.settings.loadingContainer).remove()}).fail(j.reject),j.promise()}return"xml"===k?a.parseXML(f.settings.dataRaw):"json"===k?Array.isArray&&Array.isArray(f.settings.dataRaw)?f.settings.dataRaw:"string"==typeof f.settings.dataRaw?a.parseJSON(f.settings.dataRaw):[]:void 0},_start:function(){this.writeDebug("_start");var d,e=this,g=this.settings.autoGeocode;if(e.settings.fullMapStartBlank!==!1){var h=a("#"+e.settings.mapID);h.addClass("bh-sl-map-open");var i=e.settings.mapSettings;i.zoom=e.settings.fullMapStartBlank,d=new google.maps.LatLng(this.settings.defaultLat,this.settings.defaultLng),i.center=d,e.map=new google.maps.Map(c.getElementById(e.settings.mapID),i),google.maps.event.addDomListener(b,"resize",function(){var a=e.map.getCenter();google.maps.event.trigger(e.map,"resize"),e.map.setCenter(a)}),e.settings.fullMapStartBlank=!1,i.zoom=n}else this.settings.defaultLoc===!0&&this.defaultLocation(),""!==a.trim(a("#"+this.settings.addressID).val())?(e.writeDebug("Using Address Field"),e.processForm(null),g=!1):this.settings.fullMapStart===!0&&(this.settings.querystringParams===!0&&this.getQueryString(this.settings.addressID)||this.settings.querystringParams===!0&&this.getQueryString(this.settings.searchID)||this.settings.querystringParams===!0&&this.getQueryString(this.settings.maxDistanceID)?(e.writeDebug("Using Query String"),this.processForm(null),g=!1):this.mapping(null)),this.settings.autoGeocode===!0&&g===!0&&(e.writeDebug("Auto Geo"),e.htmlGeocode()),null!==this.settings.autoGeocode&&(e.writeDebug("Button Geo"),a(c).on("click."+f,"#"+this.settings.geocodeID,function(){e.htmlGeocode()}))},htmlGeocode:function(){this.writeDebug("htmlGeocode",arguments);var a=this;return this.settings.sessionStorage===!0&&b.sessionStorage&&b.sessionStorage.getItem("myGeo")?(this.writeDebug("Using Session Saved Values for GEO"),this.autoGeocodeQuery(JSON.parse(b.sessionStorage.getItem("myGeo"))),!1):void(navigator.geolocation&&navigator.geolocation.getCurrentPosition(function(c){a.writeDebug("Current Position Result");var d={coords:{latitude:c.coords.latitude,longitude:c.coords.longitude,accuracy:c.coords.accuracy}};a.settings.sessionStorage===!0&&b.sessionStorage&&b.sessionStorage.setItem("myGeo",JSON.stringify(d)),a.autoGeocodeQuery(d)},function(b){a._autoGeocodeError(b)}))},googleGeocode:function(a){a.writeDebug("googleGeocode",arguments);var b=new google.maps.Geocoder;this.geocode=function(a,c){b.geocode(a,function(a,b){if(b!==google.maps.GeocoderStatus.OK)throw c(null),new Error("Geocode was not successful for the following reason: "+b);var d={};d.latitude=a[0].geometry.location.lat(),d.longitude=a[0].geometry.location.lng(),d.geocodeResult=a[0],c(d)})}},reverseGoogleGeocode:function(a){a.writeDebug("reverseGoogleGeocode",arguments);var b=new google.maps.Geocoder;this.geocode=function(a,c){b.geocode(a,function(a,b){if(b!==google.maps.GeocoderStatus.OK)throw c(null),new Error("Reverse geocode was not successful for the following reason: "+b);if(a[0]){var d={};d.address=a[0].formatted_address,c(d)}})}},roundNumber:function(a,b){return this.writeDebug("roundNumber",arguments),Math.round(a*Math.pow(10,b))/Math.pow(10,b)},isEmptyObject:function(a){this.writeDebug("isEmptyObject",arguments);for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},hasEmptyObjectVals:function(a){this.writeDebug("hasEmptyObjectVals",arguments);var b=!0;for(var c in a)a.hasOwnProperty(c)&&""!==a[c]&&0!==a[c].length&&(b=!1);return b},modalClose:function(){this.writeDebug("modalClose"),this.settings.callbackModalClose&&this.settings.callbackModalClose.call(this),D={},a("."+this.settings.overlay+" select").prop("selectedIndex",0),a("."+this.settings.overlay+" input").prop("checked",!1),a("."+this.settings.overlay).hide()},_createLocationVariables:function(a){this.writeDebug("_createLocationVariables",arguments);var b;E={};for(var c in A[a])A[a].hasOwnProperty(c)&&(b=A[a][c],"distance"===c&&(b=this.roundNumber(b,2)),E[c]=b)},sortNumerically:function(a){this.writeDebug("sortNumerically",arguments),a.sort(function(a,b){return a.distance<b.distance?-1:a.distance>b.distance?1:0})},filterData:function(a,b){this.writeDebug("filterData",arguments);var c=!0;for(var d in b)if(b.hasOwnProperty(d))if(this.settings.exclusiveFiltering===!0){for(var e=b[d],f=[],g=0;g<e.length;g++)f[g]=new RegExp(e[g],"i").test(a[d].replace(/[^\x00-\x7F]/g,""));-1===f.indexOf(!0)&&(c=!1)}else"undefined"!=typeof a[d]&&new RegExp(b[d].join(""),"i").test(a[d].replace(/[^\x00-\x7F]/g,""))||(c=!1);return c?!0:void 0},_paginationOutput:function(a,b){this.writeDebug("_paginationOutput",arguments),a=parseFloat(a);var c="",d=a+1,e=a-1;a>0&&(c+='<li class="bh-sl-next-prev" data-page="'+e+'">'+this.settings.prevPage+"</li>");for(var f=0;f<Math.ceil(b);f++){var g=f+1;c+=f===a?'<li class="bh-sl-current" data-page="'+f+'">'+g+"</li>":'<li data-page="'+f+'">'+g+"</li>"}return b>d&&(c+='<li class="bh-sl-next-prev" data-page="'+d+'">'+this.settings.nextPage+"</li>"),c},paginationSetup:function(b){this.writeDebug("paginationSetup",arguments);var c,d="",e=a(".bh-sl-pagination-container .bh-sl-pagination");c=-1===this.settings.storeLimit||A.length<this.settings.storeLimit?A.length/this.settings.locationsPerPage:this.settings.storeLimit/this.settings.locationsPerPage,"undefined"==typeof b&&(b=0),0===e.length?d=this._paginationOutput(b,c):(e.empty(),d=this._paginationOutput(b,c)),e.append(d)},markerImage:function(a,b,c){this.writeDebug("markerImage",arguments);var d;return d="undefined"!=typeof b&&"undefined"!=typeof c?{url:a,size:new google.maps.Size(b,c),scaledSize:new google.maps.Size(b,c)}:{url:a,size:new google.maps.Size(32,32),scaledSize:new google.maps.Size(32,32)}},createMarker:function(a,b,c,d,e,f){this.writeDebug("createMarker",arguments);var g,h,i,j=[];if(null!==this.settings.catMarkers&&"undefined"!=typeof f)if(-1!==f.indexOf(",")){j=f.split(",");for(var k=0;k<j.length;k++)j[k]in this.settings.catMarkers&&(h=this.markerImage(this.settings.catMarkers[j[k]][0],parseInt(this.settings.catMarkers[j[k]][1]),parseInt(this.settings.catMarkers[j[k]][2])))}else f in this.settings.catMarkers&&(h=this.markerImage(this.settings.catMarkers[f][0],parseInt(this.settings.catMarkers[f][1]),parseInt(this.settings.catMarkers[f][2])));return null!==this.settings.markerImg&&(h=null===this.settings.markerDim?this.markerImage(this.settings.markerImg):this.markerImage(this.settings.markerImg,this.settings.markerDim.width,this.settings.markerDim.height)),this.settings.callbackCreateMarker?g=this.settings.callbackCreateMarker.call(this,e,a,d,f):this.settings.disableAlphaMarkers===!0||-1===this.settings.storeLimit||this.settings.storeLimit>26||null!==this.settings.catMarkers||null!==this.settings.markerImg||this.settings.fullMapStart===!0&&y===!0&&(isNaN(this.settings.fullMapStartListLimit)||this.settings.fullMapStartListLimit>26||-1===this.settings.fullMapStartListLimit)?g=new google.maps.Marker({position:a,map:e,draggable:!1,icon:h}):(i={url:"https://mt.googleapis.com/vt/icon/name=icons/spotlight/spotlight-waypoint-b.png&text="+d+"&psize=16&font=fonts/Roboto-Regular.ttf&color=ff333333&ax=44&ay=48"},g=new google.maps.Marker({position:a,map:e,icon:i,draggable:!1})),g},_defineLocationData:function(b,c,d){this.writeDebug("_defineLocationData",arguments);var e="";this._createLocationVariables(b.get("id"));var f;f=E.distance<=1?"km"===this.settings.lengthUnit?this.settings.kilometerLang:this.settings.mileLang:"km"===this.settings.lengthUnit?this.settings.kilometersLang:this.settings.milesLang;var g=b.get("id");return e=this.settings.disableAlphaMarkers===!0||-1===this.settings.storeLimit||this.settings.storeLimit>26||this.settings.fullMapStart===!0&&y===!0&&(isNaN(this.settings.fullMapStartListLimit)||this.settings.fullMapStartListLimit>26||-1===this.settings.fullMapStartListLimit)?g+1:d>0?String.fromCharCode("A".charCodeAt(0)+(c+g)):String.fromCharCode("A".charCodeAt(0)+g),{location:[a.extend(E,{markerid:g,marker:e,length:f,origin:l})]}},listSetup:function(b,c,d){this.writeDebug("listSetup",arguments);var e=this._defineLocationData(b,c,d),f=i(e);a("."+this.settings.locationList+" ul").append(f)},changeSelectedMarker:function(a){var b;"undefined"!=typeof x&&x.setIcon(w),b=null===this.settings.selectedMarkerImgDim?this.markerImage(this.settings.selectedMarkerImg):this.markerImage(this.settings.selectedMarkerImg,this.settings.selectedMarkerImgDim.width,this.settings.selectedMarkerImgDim.height),w=a.icon,a.setIcon(b),x=a},createInfowindow:function(b,c,d,e,f){this.writeDebug("createInfowindow",arguments);var g=this,h=this._defineLocationData(b,e,f),i=j(h);"left"===c?(d.setContent(i),d.open(b.get("map"),b)):google.maps.event.addListener(b,"click",function(){d.setContent(i),d.open(b.get("map"),b);var c=b.get("id"),e=a("."+g.settings.locationList+" li[data-markerid="+c+"]");if(e.length>0){g.settings.callbackMarkerClick&&g.settings.callbackMarkerClick.call(this,b,c,e),a("."+g.settings.locationList+" li").removeClass("list-focus"),e.addClass("list-focus");var f=a("."+g.settings.locationList);f.animate({scrollTop:e.offset().top-f.offset().top+f.scrollTop()})}null!==g.settings.selectedMarkerImg&&g.changeSelectedMarker(b)})},autoGeocodeQuery:function(b){this.writeDebug("autoGeocodeQuery",arguments);var c,d=this,e=null,f=a("#"+this.settings.maxDistanceID);this.settings.querystringParams===!0&&this.getQueryString(this.settings.maxDistanceID)?(e=this.getQueryString(this.settings.maxDistanceID),""!==f.val()&&(e=f.val())):this.settings.maxDistance===!0&&(e=f.val()||"");var g=new this.reverseGoogleGeocode(this),h=new google.maps.LatLng(b.coords.latitude,b.coords.longitude);g.geocode({latLng:h},function(a){null!==a?(c=q=a.address,r=G.lat=b.coords.latitude,s=G.lng=b.coords.longitude,G.origin=c,G.distance=e,d.mapping(G)):d.notify(d.settings.addressErrorAlert)})},_autoGeocodeError:function(){this.writeDebug("_autoGeocodeError"),this.notify(this.settings.autoGeocodeErrorAlert)},defaultLocation:function(){this.writeDebug("defaultLocation");var b,c=this,d=null,e=a("#"+this.settings.maxDistanceID);this.settings.querystringParams===!0&&this.getQueryString(this.settings.maxDistanceID)?(d=this.getQueryString(this.settings.maxDistanceID),""!==e.val()&&(d=e.val())):this.settings.maxDistance===!0&&(d=e.val()||"");var f=new this.reverseGoogleGeocode(this),g=new google.maps.LatLng(this.settings.defaultLat,this.settings.defaultLng);f.geocode({latLng:g},function(a){null!==a?(b=q=a.address,r=G.lat=c.settings.defaultLat,s=G.lng=c.settings.defaultLng,G.distance=d,G.origin=b,c.mapping(G)):c.notify(c.settings.addressErrorAlert)})},paginationChange:function(a){this.writeDebug("paginationChange",arguments),this.settings.callbackPageChange&&this.settings.callbackPageChange.call(this,a),G.page=a,this.mapping(G)},getAddressByMarker:function(a){this.writeDebug("getAddressByMarker",arguments);var b="";return A[a].address&&(b+=A[a].address+" "),A[a].address2&&(b+=A[a].address2+" "),A[a].city&&(b+=A[a].city+", "),A[a].state&&(b+=A[a].state+" "),A[a].postal&&(b+=A[a].postal+" "),A[a].country&&(b+=A[a].country+" "),b},clearMarkers:function(){this.writeDebug("clearMarkers");var a=null;a=A.length<this.settings.storeLimit?A.length:this.settings.storeLimit;for(var b=0;a>b;b++)C[b].setMap(null)},directionsRequest:function(b,d,e){this.writeDebug("directionsRequest",arguments),this.settings.callbackDirectionsRequest&&this.settings.callbackDirectionsRequest.call(this,b,d,e);var f=this.getAddressByMarker(d);if(f){a("."+this.settings.locationList+" ul").hide(),this.clearMarkers(),null!==u&&"undefined"!=typeof u&&(u.setMap(null),u=null),u=new google.maps.DirectionsRenderer,v=new google.maps.DirectionsService,u.setMap(e),u.setPanel(a(".bh-sl-directions-panel").get(0));var g={origin:b,destination:f,travelMode:google.maps.TravelMode.DRIVING};v.route(g,function(a,b){b===google.maps.DirectionsStatus.OK&&u.setDirections(a)}),a("."+this.settings.locationList).prepend('<div class="bh-sl-close-directions-container"><div class="'+this.settings.closeIcon+'"></div></div>')}a(c).off("click","."+this.settings.locationList+" li .loc-directions a")},closeDirections:function(){this.writeDebug("closeDirections"),this.settings.callbackCloseDirections&&this.settings.callbackCloseDirections.call(this),this.reset(),r&&s&&(0===this.countFilters()?this.settings.mapSettings.zoom=n:this.settings.mapSettings.zoom=0,this.processForm(null)),a(c).off("click."+f,"."+this.settings.locationList+" .bh-sl-close-icon")},processForm:function(b){this.writeDebug("processForm",arguments);var c=this,d=null,e=a("#"+this.settings.addressID),f=a("#"+this.settings.searchID),g=a("#"+this.settings.maxDistanceID),h="";if("undefined"!=typeof b&&null!==b&&b.preventDefault(),this.settings.querystringParams===!0&&(this.getQueryString(this.settings.addressID)||this.getQueryString(this.settings.searchID)||this.getQueryString(this.settings.maxDistanceID))?(q=this.getQueryString(this.settings.addressID),p=this.getQueryString(this.settings.searchID),d=this.getQueryString(this.settings.maxDistanceID),""!==e.val()&&(q=e.val()),""!==f.val()&&(p=f.val()),""!==g.val()&&(d=g.val())):(q=e.val()||"",p=f.val()||"",this.settings.maxDistance===!0&&(d=g.val()||"")),h=this.settings.callbackRegion?this.settings.callbackRegion.call(this,q,p,d):a("#"+this.settings.regionID).val(),""===q&&""===p)this._start();else if(""!==q)if("undefined"!=typeof l&&"undefined"!=typeof r&&"undefined"!=typeof s&&q===l)G.lat=r,G.lng=s,G.origin=q,G.name=p,G.distance=d,c.mapping(G);else{var i=new this.googleGeocode(this);i.geocode({address:q,region:h},function(a){null!==a?(r=a.latitude,s=a.longitude,G.lat=r,G.lng=s,G.origin=q,G.name=p,G.distance=d,G.geocodeResult=a.geocodeResult,c.mapping(G)):c.notify(c.settings.addressErrorAlert)})}else""!==p&&(""===q&&delete G.origin,G.name=p,c.mapping(G))},locationsSetup:function(a,b,c,d,e){if(this.writeDebug("locationsSetup",arguments),"undefined"!=typeof d&&(a.distance||(a.distance=this.geoCodeCalcCalcDistance(b,c,a.lat,a.lng,F.EarthRadius))),this.settings.maxDistance===!0&&"undefined"!=typeof e&&null!==e){if(!(a.distance<=e))return;A.push(a)}else if(this.settings.maxDistance===!0&&this.settings.querystringParams===!0&&"undefined"!=typeof e&&null!==e){if(!(a.distance<=e))return;A.push(a)}else A.push(a)},countFilters:function(){this.writeDebug("countFilters");var a=0;if(!this.isEmptyObject(D))for(var b in D)D.hasOwnProperty(b)&&(a+=D[b].length);return a},_existingCheckedFilters:function(b){this.writeDebug("_existingCheckedFilters",arguments),a("#"+this.settings.taxonomyFilters[b]+" input[type=checkbox]").each(function(){if(a(this).prop("checked")){var c=a(this).val();"undefined"!=typeof c&&""!==c&&-1===D[b].indexOf(c)&&D[b].push(c)}})},_existingSelectedFilters:function(b){this.writeDebug("_existingSelectedFilters",arguments),a("#"+this.settings.taxonomyFilters[b]+" select").each(function(){var c=a(this).val();"undefined"!=typeof c&&""!==c&&-1===D[b].indexOf(c)&&(D[b]=[c])})},_existingRadioFilters:function(b){this.writeDebug("_existingRadioFilters",arguments),a("#"+this.settings.taxonomyFilters[b]+" input[type=radio]").each(function(){if(a(this).prop("checked")){var c=a(this).val();"undefined"!=typeof c&&""!==c&&-1===D[b].indexOf(c)&&(D[b]=[c])}})},checkFilters:function(){this.writeDebug("checkFilters");for(var a in this.settings.taxonomyFilters)this.settings.taxonomyFilters.hasOwnProperty(a)&&(this._existingCheckedFilters(a),this._existingSelectedFilters(a),this._existingRadioFilters(a))},checkQueryStringFilters:function(){this.writeDebug("checkQueryStringFilters",arguments);for(var a in D)if(D.hasOwnProperty(a)){var b=this.getQueryString(a);"undefined"!=typeof b&&""!==b&&-1===D[a].indexOf(b)&&(D[a]=[b])}},getFilterKey:function(a){this.writeDebug("getFilterKey",arguments);for(var b in this.settings.taxonomyFilters)if(this.settings.taxonomyFilters.hasOwnProperty(b))for(var c=0;c<this.settings.taxonomyFilters[b].length;c++)if(this.settings.taxonomyFilters[b]===a)return b},taxonomyFiltersInit:function(){this.writeDebug("taxonomyFiltersInit");for(var a in this.settings.taxonomyFilters)this.settings.taxonomyFilters.hasOwnProperty(a)&&(D[a]=[])},taxonomyFiltering:function(){this.writeDebug("taxonomyFiltering");var b=this;b.taxonomyFiltersInit(),b.checkQueryStringFilters(),a("."+this.settings.taxonomyFiltersContainer).on("change."+f,"input, select",function(c){c.stopPropagation();var d,e,f;if(a(this).is('input[type="checkbox"]')){if(b.checkFilters(),d=a(this).val(),e=a(this).closest(".bh-sl-filters").attr("id"),f=b.getFilterKey(e))if(a(this).prop("checked"))-1===D[f].indexOf(d)&&D[f].push(d),a("#"+b.settings.mapID).hasClass("bh-sl-map-open")===!0&&(r&&s?(b.settings.mapSettings.zoom=0,b.processForm()):b.mapping(G));else{var g=D[f].indexOf(d);g>-1&&(D[f].splice(g,1),a("#"+b.settings.mapID).hasClass("bh-sl-map-open")===!0&&(r&&s?(0===b.countFilters()?b.settings.mapSettings.zoom=n:b.settings.mapSettings.zoom=0,b.processForm()):b.mapping(G)))}}else(a(this).is("select")||a(this).is('input[type="radio"]'))&&(b.checkFilters(),d=a(this).val(),e=a(this).closest(".bh-sl-filters").attr("id"),f=b.getFilterKey(e),d?f&&(D[f]=[d],a("#"+b.settings.mapID).hasClass("bh-sl-map-open")===!0&&(r&&s?(b.settings.mapSettings.zoom=0,b.processForm()):b.mapping(G))):(f&&(D[f]=[]),b.reset(),r&&s?(b.settings.mapSettings.zoom=n,b.processForm()):b.mapping(G)))})},checkVisibleMarkers:function(b,c){this.writeDebug("checkVisibleMarkers",arguments);var d,e,f=this;a("."+this.settings.locationList+" ul").empty(),a(b).each(function(b,g){c.getBounds().contains(g.getPosition())&&(f.listSetup(g,0,0),e=i(d),a("."+f.settings.locationList+" ul").append(e))}),a("."+this.settings.locationList+" ul li:even").css("background",this.settings.listColor1),a("."+this.settings.locationList+" ul li:odd").css("background",this.settings.listColor2)},dragSearch:function(a){this.writeDebug("dragSearch",arguments);var b,c=a.getCenter(),d=this;this.settings.mapSettings.zoom=a.getZoom(),r=G.lat=c.lat(),s=G.lng=c.lng();var e=new this.reverseGoogleGeocode(this);b=new google.maps.LatLng(G.lat,G.lng),e.geocode({latLng:b},function(a){null!==a?(G.origin=q=a.address,d.mapping(G)):d.notify(d.settings.addressErrorAlert)})},emptyResult:function(){this.writeDebug("emptyResult",arguments);var b,d,e=a("."+this.settings.locationList+" ul"),f=this.settings.mapSettings;this.map=new google.maps.Map(c.getElementById(this.settings.mapID),f),this.settings.callbackNoResults&&this.settings.callbackNoResults.call(this,this.map,f),e.empty(),d=a('<li><div class="bh-sl-noresults-title">'+this.settings.noResultsTitle+'</div><br><div class="bh-sl-noresults-desc">'+this.settings.noResultsDesc+"</li>").hide().fadeIn(),e.append(d),b=r&&s?new google.maps.LatLng(r,s):new google.maps.LatLng(0,0),this.map.setCenter(b),n&&this.map.setZoom(n)},originMarker:function(a,b,c){if(this.writeDebug("originMarker",arguments),this.settings.originMarker===!0){var d,e="";"undefined"!=typeof b&&(e=null!==this.settings.originMarkerImg?null===this.settings.originMarkerDim?this.markerImage(this.settings.originMarkerImg):this.markerImage(this.settings.originMarkerImg,this.settings.originMarkerDim.width,this.settings.originMarkerDim.height):{url:"https://mt.googleapis.com/vt/icon/name=icons/spotlight/spotlight-waypoint-a.png"},d=new google.maps.Marker({position:c,map:a,icon:e,draggable:!1}))}},modalWindow:function(){if(this.writeDebug("modalWindow"),this.settings.modal===!0){var b=this;b.settings.callbackModalOpen&&b.settings.callbackModalOpen.call(this),a("."+b.settings.overlay).fadeIn(),a(c).on("click."+f,"."+b.settings.closeIcon+", ."+b.settings.overlay,function(){b.modalClose()}),a(c).on("click."+f,"."+b.settings.modalWindow,function(a){a.stopPropagation()}),a(c).on("keyup."+f,function(a){27===a.keyCode&&b.modalClose()})}},listClick:function(b,d,e,g){this.writeDebug("listClick",arguments);var h=this;a(c).on("click."+f,"."+h.settings.locationList+" li",function(){var c=a(this).data("markerid"),f=C[c];h.settings.callbackListClick&&h.settings.callbackListClick.call(this,c,f),b.panTo(f.getPosition());var i="left";h.settings.bounceMarker===!0?(f.setAnimation(google.maps.Animation.BOUNCE),setTimeout(function(){f.setAnimation(null),h.createInfowindow(f,i,d,e,g)},700)):h.createInfowindow(f,i,d,e,g),null!==h.settings.selectedMarkerImg&&h.changeSelectedMarker(f),a("."+h.settings.locationList+" li").removeClass("list-focus"),a("."+h.settings.locationList+" li[data-markerid="+c+"]").addClass("list-focus")}),a(c).on("click."+f,"."+h.settings.locationList+" li a",function(a){a.stopPropagation()})},resultsTotalCount:function(b){this.writeDebug("resultsTotalCount",arguments);var c=a(".bh-sl-total-results");"undefined"==typeof b||0>=b||0===c.length||c.text(b)},inlineDirections:function(b,d){if(this.writeDebug("inlineDirections",arguments),this.settings.inlineDirections===!0&&"undefined"!=typeof d){var e=this;a(c).on("click."+f,"."+e.settings.locationList+" li .loc-directions a",function(g){g.preventDefault();var h=a(this).closest("li").attr("data-markerid");e.directionsRequest(d,h,b),a(c).on("click."+f,"."+e.settings.locationList+" .bh-sl-close-icon",function(){e.closeDirections()})})}},visibleMarkersList:function(a,b){if(this.writeDebug("visibleMarkersList",arguments),this.settings.visibleMarkersList===!0){var c=this;google.maps.event.addListenerOnce(a,"idle",function(){c.checkVisibleMarkers(b,a)}),google.maps.event.addListener(a,"center_changed",function(){c.checkVisibleMarkers(b,a)}),google.maps.event.addListener(a,"zoom_changed",function(){c.checkVisibleMarkers(b,a)})}},mapping:function(a){this.writeDebug("mapping",arguments);var b,c,d,e,f,g,h=this;this.isEmptyObject(a)||(b=a.lat,c=a.lng,d=a.geocodeResult,e=a.origin,g=a.page),h.settings.pagination===!0&&("undefined"==typeof g||l!==q)&&(g=0),"undefined"==typeof e&&this.settings.nameSearch===!0?o=h._getData():(f=new google.maps.LatLng(b,c),"undefined"!=typeof l&&e===l&&"undefined"!=typeof m?(e=l,o=m):o=h._getData(r,s,e,d)),null!==h.settings.taxonomyFilters&&h.hasEmptyObjectVals(D)&&h.checkFilters(),null!==h.settings.dataRaw?h.processData(a,f,o,g):o.done(function(b){h.processData(a,f,b,g)})},processData:function(d,e,i,j){this.writeDebug("processData",arguments);var k,q,r,s,u,v,w,x,E,F,G,H,I,J=this,K=0,L={};this.isEmptyObject(d)||(k=d.lat,q=d.lng,r=d.origin,s=d.name,u=d.distance);var M=a("#"+J.settings.mapID),N="km"===J.settings.lengthUnit?J.settings.kilometersLang:J.settings.milesLang;
if(m=o,"undefined"!=typeof r&&(l=r),J.settings.callbackSuccess&&J.settings.callbackSuccess.call(this),H=M.hasClass("bh-sl-map-open"),J.settings.fullMapStart===!0&&H===!1||J.settings.autoGeocode===!0&&H===!1||J.settings.defaultLoc===!0&&H===!1?y=!0:J.reset(),M.addClass("bh-sl-map-open"),"json"===J.settings.dataType||"jsonp"===J.settings.dataType)for(var O=0;K<i.length;O++){var P=i[O],Q={};for(var R in P)P.hasOwnProperty(R)&&(Q[R]=P[R]);J.locationsSetup(Q,k,q,r,u),K++}else"kml"===J.settings.dataType?a(i).find("Placemark").each(function(){var b={name:a(this).find("name").text(),lat:a(this).find("coordinates").text().split(",")[1],lng:a(this).find("coordinates").text().split(",")[0],description:a(this).find("description").text()};J.locationsSetup(b,k,q,r,u),K++}):a(i).find(J.settings.xmlElement).each(function(){var a={};for(var b in this.attributes)this.attributes.hasOwnProperty(b)&&(a[this.attributes[b].name]=this.attributes[b].value);J.locationsSetup(a,k,q,r,u),K++});if(J.settings.nameSearch===!0&&"undefined"!=typeof p&&(D[J.settings.nameAttribute]=[p]),null!==J.settings.taxonomyFilters||J.settings.nameSearch===!0){for(var S in D)if(D.hasOwnProperty(S)&&D[S].length>0)for(var T=0;T<D[S].length;T++)L[S]||(L[S]=[]),L[S][T]="(?=.*\\b"+D[S][T].replace(/([^\x00-\x7F]|[.*+?^=!:${}()|\[\]\/\\])/g,"")+"\\b)";J.isEmptyObject(L)||(A=a.grep(A,function(a){return J.filterData(a,L)}))}if("undefined"!=typeof r&&J.sortNumerically(A),J.settings.featuredLocations===!0&&(z=a.grep(A,function(a){return"true"===a.featured}),B=a.grep(A,function(a){return"true"!==a.featured}),A=[],A=z.concat(B)),J.isEmptyObject(L))if(J.settings.maxDistance===!0&&u)("undefined"==typeof A[0]||A[0].distance>u)&&J.notify(J.settings.distanceErrorAlert+u+" "+N);else{if("undefined"==typeof A[0])throw new Error("No locations found. Please check the dataLocation setting and path.");-1!==J.settings.distanceAlert&&A[0].distance>J.settings.distanceAlert&&(J.notify(J.settings.distanceErrorAlert+J.settings.distanceAlert+" "+N),G=!0)}if(J.settings.slideMap===!0&&g.slideDown(),J.isEmptyObject(A)||"none"===A[0].result)return void J.emptyResult();if(J.settings.pagination===!0&&J.paginationSetup(j),J.modalWindow(),t=-1===J.settings.storeLimit||A.length<J.settings.storeLimit||this.settings.fullMapStart===!0&&y===!0&&(isNaN(this.settings.fullMapStartListLimit)||this.settings.fullMapStartListLimit>26||-1===this.settings.fullMapStartListLimit)?A.length:J.settings.storeLimit,J.settings.pagination===!0?(E=J.settings.locationsPerPage,x=j*J.settings.locationsPerPage,x+E>A.length&&(E=J.settings.locationsPerPage-(x+E-A.length)),A=A.slice(x,x+E),t=A.length):(E=t,x=0),J.resultsTotalCount(A.length),J.settings.fullMapStart===!0&&y===!0||0===J.settings.mapSettings.zoom||"undefined"==typeof r||G===!0)F=J.settings.mapSettings,w=new google.maps.LatLngBounds;else if(J.settings.pagination===!0){var U=new google.maps.LatLng(A[0].lat,A[0].lng);0===j?(J.settings.mapSettings.center=e,F=J.settings.mapSettings):(J.settings.mapSettings.center=U,F=J.settings.mapSettings)}else J.settings.mapSettings.center=e,F=J.settings.mapSettings;if(J.map=new google.maps.Map(c.getElementById(J.settings.mapID),F),google.maps.event.addDomListener(b,"resize",function(){var a=J.map.getCenter();google.maps.event.trigger(J.map,"resize"),J.map.setCenter(a)}),J.settings.dragSearch===!0&&J.map.addListener("dragend",function(){J.dragSearch(h)}),g.data(J.settings.mapID.replace("#",""),J.map),J.settings.callbackMapSet&&J.settings.callbackMapSet.call(this,J.map,e,n,F),"undefined"!=typeof InfoBubble&&null!==J.settings.infoBubble){var V=J.settings.infoBubble;V.map=J.map,I=new InfoBubble(V)}else I=new google.maps.InfoWindow;J.originMarker(J.map,r,e),a(c).on("click."+f,".bh-sl-pagination li",function(b){b.preventDefault(),J.paginationChange(a(this).attr("data-page"))}),J.inlineDirections(J.map,r);for(var W=0;E-1>=W;W++){var X="";X=j>0?String.fromCharCode("A".charCodeAt(0)+(x+W)):String.fromCharCode("A".charCodeAt(0)+W);var Y=new google.maps.LatLng(A[W].lat,A[W].lng);v=J.createMarker(Y,A[W].name,A[W].address,X,J.map,A[W].category),v.set("id",W),C[W]=v,(J.settings.fullMapStart===!0&&y===!0||0===J.settings.mapSettings.zoom||"undefined"==typeof r||G===!0)&&w.extend(Y),J.createInfowindow(v,null,I,x,j)}(J.settings.fullMapStart===!0&&y===!0||0===J.settings.mapSettings.zoom||"undefined"==typeof r||G===!0)&&J.map.fitBounds(w);var Z=a("."+J.settings.locationList+" ul");if(Z.empty(),y&&J.settings.fullMapStartListLimit!==!1&&!isNaN(J.settings.fullMapStartListLimit)&&-1!==J.settings.fullMapStartListLimit)for(var $=0;$<J.settings.fullMapStartListLimit;$++){var _=C[$];J.listSetup(_,x,j)}else a(C).each(function(a){var b=C[a];J.listSetup(b,x,j)});if("undefined"!=typeof MarkerClusterer&&null!==J.settings.markerCluster){new MarkerClusterer(J.map,C,J.settings.markerCluster)}J.listClick(J.map,I,x,j),a("."+J.settings.locationList+" ul > li:even").css("background",J.settings.listColor1),a("."+J.settings.locationList+" ul > li:odd").css("background",J.settings.listColor2),J.visibleMarkersList(J.map,C),J.settings.modal===!0&&J.settings.callbackModalReady&&J.settings.callbackModalReady.call(this),J.settings.callbackFilters&&J.settings.callbackFilters.call(this,D)},writeDebug:function(){b.console&&this.settings.debug&&(Function.prototype.bind?this.writeDebug=Function.prototype.bind.call(console.log,console,"StoreLocator :"):this.writeDebug=function(){arguments[0]="StoreLocator : "+arguments[0],Function.prototype.apply.call(console.log,console,arguments)},this.writeDebug.apply(this,arguments))}}),a.fn[f]=function(b){var c=arguments;if(b===d||"object"==typeof b)return this.each(function(){a.data(this,"plugin_"+f)||a.data(this,"plugin_"+f,new e(this,b))});if("string"==typeof b&&"_"!==b[0]&&"init"!==b){var g;return this.each(function(){var d=a.data(this,"plugin_"+f);d instanceof e&&"function"==typeof d[b]&&(g=d[b].apply(d,Array.prototype.slice.call(c,1))),"destroy"===b&&a.data(this,"plugin_"+f,null)}),g!==d?g:this}}}}(jQuery,window,document);