(function(a){a.fn.storeLocator=function(b){var c=a.extend({mapDiv:"map",listDiv:"loc-list",formContainerDiv:"form-container",formID:"user-location",inputID:"address",zoomLevel:12,pinColor:"fe7569",pinTextColor:"000000",lengthUnit:"m",storeLimit:26,distanceAlert:60,dataType:"xml",dataLocation:"locations.xml",listColor1:"ffffff",listColor2:"eeeeee",originMarker:false,originpinColor:"blue",bounceMarker:true,slideMap:true,modalWindow:false,overlayDiv:"overlay",modalWindowDiv:"modal-window",modalContentDiv:"modal-content",modalCloseIconDiv:"close-icon",defaultLoc:false,defaultLat:"",defaultLng:"",autoGeocode:false,maxDistance:false,maxDistanceID:"maxdistance",fullMapStart:false,noForm:false,loading:false,loadingDiv:"loading-map",featuredLocations:false,infowindowTemplatePath:"templates/infowindow-description.html",listTemplatePath:"templates/location-list-description.html",KMLinfowindowTemplatePath:"templates/kml-infowindow-description.html",KMLlistTemplatePath:"templates/kml-location-list-description.html",callbackBeforeSend:null,callbackComplete:null,callbackSuccess:null,callbackModalOpen:null,callbackModalClose:null,jsonpCallback:null,geocodeErrorAlert:"Geocode was not successful for the following reason: ",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",iconUrl:""},b);return this.each(function(){var h=a(this);var e,g;f();function f(){if(c.dataType==="kml"){a.get(c.KMLinfowindowTemplatePath,function(i){var j=i;g=Handlebars.compile(j)});a.get(c.KMLlistTemplatePath,function(i){var j=i;e=Handlebars.compile(j);d()})}else{a.get(c.infowindowTemplatePath,function(i){var j=i;g=Handlebars.compile(j)});a.get(c.listTemplatePath,function(i){var j=i;e=Handlebars.compile(j);d()})}}function d(){var i,y,s,o,B,m;var r=[];var k=[];var w=[];var x=[];var u="storeLocator";function z(){r=[];k=[];w=[];x=[];a(document).off("click."+u,"#"+c.listDiv+" li")}if(c.modalWindow===true){h.wrap('
');a("#"+c.modalWindowDiv).prepend('
');a("#"+c.overlayDiv).hide()}if(c.slideMap===true){h.hide()}var l={};if(c.lengthUnit==="km"){l.EarthRadius=6367}else{l.EarthRadius=3956}l.ToRadian=function(D){return D*(Math.PI/180)};l.DiffRadian=function(E,D){return l.ToRadian(D)-l.ToRadian(E)};l.CalcDistance=function(H,G,F,E,D){return D*2*Math.asin(Math.min(1,Math.sqrt((Math.pow(Math.sin((l.DiffRadian(H,F))/2),2)+Math.cos(l.ToRadian(H))*Math.cos(l.ToRadian(F))*Math.pow(Math.sin((l.DiffRadian(G,E))/2),2)))))};j();function j(){if(c.defaultLoc===true){var D=new C();var E=new google.maps.LatLng(c.defaultLat,c.defaultLng);D.geocode(E,function(G){if(G!==null){var F=G.address;p(c.defaultLat,c.defaultLng,F)}else{alert(c.addressErrorAlert)}})}if(c.fullMapStart===true){p()}if(c.autoGeocode===true){if(navigator.geolocation){navigator.geolocation.getCurrentPosition(q,A)}}}function v(){geocoder=new google.maps.Geocoder();this.geocode=function(D,E){geocoder.geocode({address:D},function(H,G){if(G===google.maps.GeocoderStatus.OK){var F={};F.latitude=H[0].geometry.location.lat();F.longitude=H[0].geometry.location.lng();E(F)}else{alert(c.geocodeErrorAlert+G);E(null)}})}}function C(){geocoder=new google.maps.Geocoder();this.geocode=function(E,D){geocoder.geocode({latLng:E},function(H,G){if(G===google.maps.GeocoderStatus.OK){if(H[0]){var F={};F.address=H[0].formatted_address;D(F)}}else{alert(c.geocodeErrorAlert+G);D(null)}})}}function t(D,E){return Math.round(D*Math.pow(10,E))/Math.pow(10,E)}function q(D){var E=new C();var F=new google.maps.LatLng(D.coords.latitude,D.coords.longitude);E.geocode(F,function(H){if(H!==null){var G=H.address;p(D.coords.latitude,D.coords.longitude,G)}else{alert(c.addressErrorAlert)}})}function A(D){alert(c.autoGeocodeErrorAlert)}function n(G){var F=a("#"+c.inputID).val();if(F===""){j()}else{var E=new v();var D=F;E.geocode(D,function(H){if(H!==null){y=H.latitude;s=H.longitude;p(y,s,F,G)}else{alert(c.addressErrorAlert)}})}}a(function(){function D(F){F.preventDefault();if(c.maxDistance===true){var E=a("#"+c.maxDistanceID).val();n(E)}else{n()}}if(c.noForm===true){a(document).on("click."+u,"#"+c.formContainerDiv+" #submit",function(E){D(E)});a(document).on("keyup."+u,function(E){if(E.keyCode===13&&a("#"+c.inputID).is(":focus")){D(E)}})}else{a(document).on("submit."+u,"#"+c.formID,function(E){D(E)})}});function p(D,F,E,G){a(function(){google.maps.visualRefresh=true;var H;if(c.dataType==="kml"){H="xml"}else{H=c.dataType}a.ajax({type:"GET",url:c.dataLocation+(c.dataType==="jsonp"?(c.dataLocation.match(/\?/)?"&":"?")+"callback=?":""),dataType:H,jsonpCallback:(c.dataType==="jsonp"?c.jsonpCallback:null),beforeSend:function(){if(c.callbackBeforeSend){c.callbackBeforeSend.call(this)}if(c.loading===true){a("#"+c.formContainerDiv).append('
')}},complete:function(K,J,I){if(c.callbackComplete){c.callbackComplete.call(this,K,J,I)}if(c.loading===true){a("#"+c.loadingDiv).remove()}},success:function(L,N,I){if(c.callbackSuccess){c.callbackSuccess.call(this,L,N,I)}var K=0;var M;if(c.fullMapStart===true&&a("#"+c.mapDiv).hasClass("mapOpen")===false){M=true}else{z()}a("#"+c.mapDiv).addClass("mapOpen");if(c.dataType==="json"||c.dataType==="jsonp"){a.each(L,function(){var P,Q,R={};for(P in this){Q=this[P];if(P==="web"){if(Q){Q=Q.replace("https://","")}}R[P]=Q}if(!R.distance){R.distance=l.CalcDistance(D,F,R.lat,R.lng,l.EarthRadius)}if(c.maxDistance===true&&M!==true&&G){if(R.distanceQ.distance)?1:0))})}J(r);if(c.featuredLocations===true){k=a.grep(r,function(Q,P){return Q.featured==="true"});w=a.grep(r,function(Q,P){return Q.featured!=="true"});r=[];r=k.concat(w)}var O=(c.lengthUnit==="km")?c.kilometersLang:c.milesLang;if(c.maxDistance===true&&M!==true&&G){if(r[0]===undefined||r[0]["distance"]>G){alert(c.distanceErrorAlert+G+" "+O);return}}else{if(c.distanceAlert!==-1&&r[0]["distance"]>c.distanceAlert){alert(c.distanceErrorAlert+c.distanceAlert+" "+O)}}a(function(){var ag,ac,V={};function W(ah){for(ag in r[ah]){ac=r[ah][ag];if(ag==="distance"){ac=t(ac,2)}V[ag]=ac}}function R(al){W(al.get("id"));var aj;if(V.distance<=1){if(c.lengthUnit==="km"){aj=c.kilometerLang}else{aj=c.mileLang}}else{if(c.lengthUnit==="km"){aj=c.kilometersLang}else{aj=c.milesLang}}var ak=al.get("id");if(c.storeLimit===-1||c.storeLimit>26){var ai=ak+1}else{var ai=String.fromCharCode("A".charCodeAt(0)+ak)}var ah={location:[a.extend(V,{markerid:ak,marker:ai,length:aj,origin:E})]};return ah}if(c.slideMap===true){h.slideDown()}if(c.modalWindow===true){if(c.callbackModalOpen){c.callbackModalOpen.call(this)}function Q(){if(c.callbackModalOpen){c.callbackModalOpen.call(this)}a("#"+c.overlayDiv).hide()}a("#"+c.overlayDiv).fadeIn();a(document).on("click."+u,"#"+c.modalCloseIconDiv+", #"+c.overlayDiv,function(){Q()});a(document).on("click."+u,"#"+c.modalWindowDiv,function(ah){ah.stopPropagation()});a(document).on("keyup."+u,function(ah){if(ah.keyCode===27){Q()}})}if((c.fullMapStart===true&&M===true)||c.zoomLevel===0){var aa={mapTypeId:google.maps.MapTypeId.ROADMAP};var T=new google.maps.LatLngBounds()}else{var aa={zoom:c.zoomLevel,center:new google.maps.LatLng(D,F),mapTypeId:google.maps.MapTypeId.ROADMAP}}var ae=new google.maps.Map(document.getElementById(c.mapDiv),aa);h.data("map",ae);var Y=new google.maps.InfoWindow();if(c.storeLimit===-1||(r.length-1)260){var ai=new google.maps.Marker({position:ah,map:ae,draggable:false})}else{var ai=new google.maps.Marker({position:ah,map:ae,icon:al,draggable:false})}return ai}function S(ak,aj){var ai=R(ak);var ah=g(ai);if(aj==="left"){Y.setContent(ah);Y.open(ak.get("map"),ak)}else{google.maps.event.addListener(ak,"click",function(){Y.setContent(ah);Y.open(ak.get("map"),ak);a("#"+c.listDiv+" li").removeClass("list-focus");markerId=ak.get("id");a("#"+c.listDiv+" li[data-markerid="+markerId+"]").addClass("list-focus");var al=a("#"+c.listDiv),am=a("#"+c.listDiv+" li[data-markerid="+markerId+"]");a("#"+c.listDiv).animate({scrollTop:am.offset().top-al.offset().top+al.scrollTop()})})}}})}})})}}})}})(jQuery);