{"version":3,"sources":["dealersearch.js"],"names":["e4","dealersearch","debug","dependencies","googleMaps","timeout","dfd","load","jQuery","Deferred","when","then","callback","util","state","domScriptGM","document","createElement","domScriptFirst","getElementsByTagName","src","googleMapsApiKey","parentNode","insertBefore","setTimeout","reject","settings","require","promise","clearTimeout","geocoder","google","maps","Geocoder","jQueryUImap","js","jMap","find","extend","map","build","objMapSettings","fnCallback","gmap","get","refresh","showInfoWindow","objMarker","content","markers","getInfoWindowContent","clusterer","set","objMarkerClusterer","markerClusterer","handlebars","registerTemplates","typeahead","form","init","jDealersearch","length","event","registerEvents","data","unitSystem","loadDependenciesAndDealers","apply","loadDealers","ajax","objAjaxSettings","_objAjaxSettings","url","serialize","dataType","cache","done","jsonData","call","reloadDealers","removeFromClusterer","list","syncWithMap","setCountryAndReloadDealers","gmMap","xhrDealers","resetAddress","getCountryCode","addListener","clearListeners","setBoundsFromCountry","val","setCountryCode","strCountryCode","trigger","getAddress","address","setAddress","objAddress","setAddressInput","formatted_address","sort","clearAddressInput","searchByAddress","fitBounds","getBoundsByAddress","fitResults","searchbyaddress","geoLocation","navigator","geolocation","getCurrentPosition","objPosition","geocode","location","lat","coords","latitude","lng","longitude","arrAddresses","strStatus","GeocoderStatus","OK","each","address_components","intIndex","address_component","types","address_type","short_name","logError","error","geolocationerror","bindEvents","on","preventDefault","jSuggestionFirst","target","first","triggerHandler","jSuggestions","jSuggestionActive","keyCode","filter","css","is","hidePlaceholder","value","showPlaceholder","hint","highlight","minLength","classNames","wrapper","input","menu","suggestion","open","cursor","name","display","limit","async","source","strQuery","fnSyncResults","fnAsyncResults","getSuggestions","templates","pending","tmpl","typeaheadPending","footer","typeaheadFooter","undefined","strAddress","componentRestrictions","country","removeClass","addClass","center","getCenterByCountry","zoom","getZoomByCountry","mapTypeControl","scrollwheel","styles","getStyles","fitMapToBoundsOnInit","fitMapToMarkers","window","debounce","debounceDelay","resize","console","log","setCenter","setZoom","objBoundsAddress","LatLng","objAddressBounds","geometry","viewport","bounds","LatLngBounds","getMarkersInBounds","objMapBounds","getBounds","arrMarkersInBounds","contains","getPosition","push","extendBoundsToMarker","m","intMapZoom","getZoom","results","max","min","distanceToAddress","Math","pow","sensitivity","arrResult","isArray","strError","maperror","MarkerClusterer","averageCenter","maxZoom","minimumClusterSize","imagePath","addToClusterer","users","objUser","parseFloat","isNaN","abs","id","countryCode","Marker","position","icon","getIcon","sortByDistanceToAddress","sortByName","strId","String","markerclicked","addMarkers","clearMarkers","googlemapInfowindow","showOnMap","panTo","math","getGreatCircleDistance","distanceToAddressFormatted","formatDistance","a","b","strUserType","markerIconFileName","strReturnValue","type","join","marker","typeSeparator","iconFileName","iconFileNameDefault","iconUrl","intNumber","formatJavascriptNumberToLocaleString","round","toRadians","PI","lat1","lng1","lat2","lng2","dLat","dLng","sin","cos","atan2","sqrt","currentTarget","scrollToAnchor","animate","getTarget","jsonMarkersInBounds","html","markerList"],"mappings":"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","file":"dealersearch.js","sourcesContent":["e4.dealersearch = {\r\n debug: false,\r\n dependencies: {\r\n googleMaps: {\r\n timeout: null,\r\n dfd: null,\r\n load: function () {\r\n if ( e4.dealersearch.dependencies.googleMaps.dfd === null ) {\r\n e4.dealersearch.dependencies.googleMaps.dfd = jQuery.Deferred();\r\n jQuery.when( e4.dealersearch.dependencies.googleMaps.dfd ).then( e4.dealersearch.dependencies.googleMaps.callback, function () {\r\n e4.util.debug( [\r\n 'googleMaps.load',\r\n 'fail callback',\r\n e4.dealersearch.dependencies.googleMaps.dfd.state()\r\n ], e4.dealersearch.debug );\r\n } );\r\n }\r\n var domScriptGM = document.createElement( 'script' ),\r\n domScriptFirst = document.getElementsByTagName( 'script' )[ 0 ];\r\n domScriptGM.src = '//maps.googleapis.com/maps/api/js?key=' + e4.dealersearch.googleMapsApiKey + '&callback=' + 'e4.dealersearch.dependencies.googleMaps.dfd.resolve';\r\n domScriptFirst.parentNode.insertBefore( domScriptGM, domScriptFirst );\r\n e4.dealersearch.dependencies.googleMaps.timeout = setTimeout( e4.dealersearch.dependencies.googleMaps.dfd.reject, e4.settings.require.timeout );\r\n return e4.dealersearch.dependencies.googleMaps.dfd.promise();\r\n },\r\n callback: function () {\r\n e4.util.debug( [\r\n 'googleMaps.load',\r\n 'done callback',\r\n e4.dealersearch.dependencies.googleMaps.dfd.state()\r\n ], e4.dealersearch.debug );\r\n clearTimeout( e4.dealersearch.dependencies.googleMaps.timeout );\r\n e4.dealersearch.dependencies.googleMaps.timeout = null;\r\n e4.dealersearch.geocoder = new google.maps.Geocoder();\r\n }\r\n },\r\n jQueryUImap: {\r\n load: function () {\r\n return e4.require.js( e4.settings.require.jQueryUImap, function () {\r\n e4.util.debug( [\r\n 'jQueryUImap.callback',\r\n 'dfd state',\r\n e4.settings.require.jQueryUImap.promise.state()\r\n ], e4.dealersearch.debug );\r\n var jMap = jQuery( '.js-e-dealersearch' ).find( '.js-e-dealersearch-googlemap' );\r\n jQuery.extend( e4.dealersearch.map, {\r\n build: function ( objMapSettings, fnCallback ) {\r\n return jMap.gmap( objMapSettings, fnCallback );\r\n },\r\n get: function () {\r\n return jMap.gmap( 'get', 'map' );\r\n },\r\n refresh: function () {\r\n jMap.gmap( 'refresh' );\r\n },\r\n showInfoWindow: function ( objMarker ) {\r\n jMap.gmap( 'openInfoWindow', {\r\n 'content': e4.dealersearch.markers.getInfoWindowContent( objMarker )\r\n }, objMarker );\r\n }\r\n } );\r\n jQuery.extend( e4.dealersearch.clusterer, {\r\n get: function () {\r\n return jMap.gmap( 'get', 'MarkerClusterer' );\r\n },\r\n set: function ( objMarkerClusterer ) {\r\n return jMap.gmap( 'set', 'MarkerClusterer', objMarkerClusterer );\r\n }\r\n } );\r\n } );\r\n }\r\n },\r\n markerClusterer: {\r\n load: function () {\r\n return e4.require.js( e4.settings.require.markerClusterer, function () {\r\n e4.util.debug( [\r\n 'markerClusterer.callback',\r\n 'dfd state',\r\n e4.settings.require.markerClusterer.promise.state()\r\n ], e4.dealersearch.debug );\r\n } );\r\n }\r\n },\r\n handlebars: {\r\n load: function () {\r\n return e4.require.js( e4.settings.require.handlebars, function () {\r\n e4.util.debug( [\r\n 'handlebars.callback',\r\n 'dfd state',\r\n e4.settings.require.handlebars.promise.state()\r\n ], e4.dealersearch.debug );\r\n e4.handlebars.registerTemplates( '#js-e-handlebars-tmpl-typeahead-footer #js-e-handlebars-tmpl-typeahead-pending #js-e-handlebars-tmpl-googlemap-infowindow #js-e-handlebars-tmpl-marker-list' );\r\n } );\r\n }\r\n },\r\n typeahead: {\r\n load: function () {\r\n return e4.require.js( e4.settings.require.typeahead, function () {\r\n e4.util.debug( [\r\n 'typeahead.callback',\r\n 'dfd state',\r\n e4.settings.require.typeahead.promise.state()\r\n ], e4.dealersearch.debug );\r\n e4.dealersearch.form.init();\r\n } );\r\n }\r\n }\r\n },\r\n init: function () {\r\n var jDealersearch = jQuery( '.js-e-dealersearch' );\r\n if ( jDealersearch.length === 1 ) {\r\n e4.dealersearch.event = e4.util.registerEvents( 'searchbyaddress markerclicked geolocationerror maperror', 'dealersearch' );\r\n e4.dealersearch.googleMapsApiKey = jDealersearch.data( 'googleMapsApiKey' );\r\n e4.dealersearch.unitSystem = jDealersearch.data( 'unitSystem' );\r\n e4.dealersearch.dfd = e4.dealersearch.loadDependenciesAndDealers();\r\n }\r\n },\r\n loadDependenciesAndDealers: function () {\r\n return jQuery.when.apply( jQuery, [\r\n e4.dealersearch.dependencies.googleMaps.load(),\r\n e4.dealersearch.dependencies.markerClusterer.load(),\r\n e4.dealersearch.dependencies.jQueryUImap.load(),\r\n e4.dealersearch.dependencies.typeahead.load(),\r\n e4.dealersearch.dependencies.handlebars.load(),\r\n e4.dealersearch.loadDealers()\r\n ] ).then( function () {\r\n e4.dealersearch.map.init();\r\n e4.util.debug( [\r\n 'loadDependenciesAndDealers',\r\n 'done callback'\r\n ], e4.dealersearch.debug );\r\n }, function () {\r\n e4.util.debug( [\r\n 'loadDependenciesAndDealers',\r\n 'fail callback'\r\n ], e4.dealersearch.debug );\r\n } );\r\n },\r\n ajax: function ( objAjaxSettings, fnCallback ) {\r\n var _objAjaxSettings = {\r\n url: e4.settings.dealersearch.url,\r\n data: jQuery( '.js-e-dealersearch-form' ).serialize(),\r\n dataType: 'json',\r\n cache: false\r\n };\r\n if ( objAjaxSettings !== null ) {\r\n _objAjaxSettings = jQuery.extend( _objAjaxSettings, objAjaxSettings );\r\n }\r\n return jQuery.ajax( _objAjaxSettings ).done( function ( jsonData ) {\r\n e4.dealersearch.data = jsonData;\r\n e4.util.debug( [\r\n 'e4.dealersearch.ajax',\r\n 'done callback'\r\n ], e4.dealersearch.debug );\r\n if ( typeof fnCallback === 'function' ) {\r\n fnCallback.call();\r\n }\r\n } );\r\n },\r\n loadDealers: function () {\r\n return e4.dealersearch.ajax( null );\r\n },\r\n reloadDealers: function ( fnCallback ) {\r\n return e4.dealersearch.ajax( null, function () {\r\n if ( typeof fnCallback === 'function' ) {\r\n fnCallback.call();\r\n }\r\n e4.dealersearch.markers.removeFromClusterer();\r\n e4.dealersearch.markers.init();\r\n e4.dealersearch.list.syncWithMap();\r\n } );\r\n },\r\n setCountryAndReloadDealers: function () {\r\n var gmMap = e4.dealersearch.map.get(),\r\n xhrDealers = e4.dealersearch.ajax( null );\r\n e4.dealersearch.resetAddress();\r\n e4.dealersearch.markers.removeFromClusterer();\r\n e4.util.debug( [\r\n 'setCountryAndReloadDealers(' + e4.dealersearch.getCountryCode() + ')',\r\n 'gmMap binding bounds_changed'\r\n ], e4.dealersearch.debug );\r\n gmMap.addListener( 'bounds_changed', function () {\r\n e4.util.debug( [\r\n 'setCountryAndReloadDealers(' + e4.dealersearch.getCountryCode() + ')',\r\n 'gmMap clearListeners bounds_changed'\r\n ], e4.dealersearch.debug );\r\n google.maps.event.clearListeners( gmMap, 'bounds_changed' );\r\n xhrDealers.done( function () {\r\n e4.util.debug( [\r\n 'setCountryAndReloadDealers(' + e4.dealersearch.getCountryCode() + ')',\r\n 'xhrDealers done',\r\n 'markers.init'\r\n ], e4.dealersearch.debug );\r\n e4.dealersearch.markers.init();\r\n e4.dealersearch.list.syncWithMap();\r\n } );\r\n } );\r\n e4.dealersearch.map.setBoundsFromCountry();\r\n return xhrDealers;\r\n },\r\n getCountryCode: function () {\r\n return jQuery( '.js-e-dealersearch-country' ).val();\r\n },\r\n setCountryCode: function ( strCountryCode ) {\r\n e4.util.debug( [\r\n 'setAddress',\r\n strCountryCode\r\n ], e4.dealersearch.debug );\r\n return jQuery( '.js-e-dealersearch-country' ).val( strCountryCode ).trigger( 'change' );\r\n },\r\n getAddress: function () {\r\n return e4.dealersearch.address;\r\n },\r\n setAddress: function ( objAddress ) {\r\n e4.util.debug( [\r\n 'setAddress',\r\n objAddress\r\n ], e4.dealersearch.debug );\r\n if ( objAddress !== null ) {\r\n e4.dealersearch.form.setAddressInput( objAddress.formatted_address );\r\n }\r\n e4.dealersearch.address = objAddress;\r\n e4.dealersearch.markers.sort();\r\n },\r\n resetAddress: function () {\r\n e4.dealersearch.form.clearAddressInput();\r\n e4.dealersearch.setAddress( null );\r\n },\r\n searchByAddress: function ( objAddress ) {\r\n e4.dealersearch.setAddress( objAddress );\r\n e4.dealersearch.map.get().fitBounds( e4.dealersearch.map.getBoundsByAddress( objAddress ) );\r\n e4.dealersearch.map.fitResults();\r\n jQuery( '.js-e-dealersearch' ).trigger( e4.dealersearch.event.searchbyaddress, objAddress );\r\n },\r\n geoLocation: {\r\n get: function () {\r\n navigator.geolocation.getCurrentPosition( function ( objPosition ) {\r\n e4.dealersearch.geocoder.geocode( {\r\n location: {\r\n lat: objPosition.coords.latitude,\r\n lng: objPosition.coords.longitude\r\n }\r\n }, function ( arrAddresses, strStatus ) {\r\n if ( strStatus === google.maps.GeocoderStatus.OK ) {\r\n jQuery.each( arrAddresses[ 0 ].address_components, function ( intIndex, address_component ) {\r\n jQuery.each( address_component.types, function ( intIndex, address_type ) {\r\n if ( address_type === 'country' ) {\r\n if ( address_component.short_name === e4.dealersearch.getCountryCode() ) {\r\n e4.util.debug( [\r\n 'geoLocation.get',\r\n 'geo country is current country.',\r\n 'searching for address',\r\n arrAddresses[ 0 ]\r\n ], e4.dealersearch.debug );\r\n e4.dealersearch.searchByAddress( arrAddresses[ 0 ] );\r\n jQuery( '.js-e-dealersearch-address-input' ).typeahead( 'close' );\r\n }\r\n else {\r\n e4.util.debug( [\r\n 'geoLocation.get',\r\n 'geo country different from current country.',\r\n 'changing country to',\r\n address_component.short_name,\r\n arrAddresses[ 0 ]\r\n ], e4.dealersearch.debug );\r\n e4.dealersearch.setCountryCode( address_component.short_name );\r\n }\r\n }\r\n } );\r\n } );\r\n }\r\n else {\r\n e4.util.debug( [\r\n 'geoLocation.get',\r\n 'google.maps.GeocoderStatus not OK',\r\n 'status is',\r\n google.maps.GeocoderStatus\r\n ], e4.dealersearch.debug );\r\n e4.dealersearch.resetAddress();\r\n e4.dealersearch.map.logError( strStatus );\r\n }\r\n } );\r\n }, function ( error ) {\r\n jQuery( '.js-e-dealersearch' ).trigger( e4.dealersearch.event.geolocationerror, error );\r\n } );\r\n }\r\n },\r\n form: {\r\n init: function () {\r\n e4.dealersearch.address = null;\r\n e4.dealersearch.form.bindEvents();\r\n },\r\n bindEvents: function () {\r\n jQuery( '.js-e-dealersearch-form' ).on( 'submit', function ( event ) {\r\n event.preventDefault();\r\n var jSuggestionFirst = jQuery( event.target ).find( '.js-e-dealersearch-suggestions' ).find( '.tt-selectable' ).first();\r\n if ( jSuggestionFirst.length === 1 ) {\r\n jSuggestionFirst.trigger( 'click' );\r\n }\r\n else if ( jSuggestionFirst.length === 0 ) {\r\n e4.dealersearch.geoLocation.get();\r\n }\r\n } ).on( 'click', '.js-e-dealersearch-submit', function ( event ) {\r\n jQuery( event.target.form ).triggerHandler( 'submit' );\r\n } ).on( 'click', '.js-e-dealersearch-geolocate', function ( event ) {\r\n event.preventDefault();\r\n e4.dealersearch.geoLocation.get();\r\n } );\r\n jQuery( '.js-e-dealersearch-type' ).on( 'change', function () {\r\n e4.dealersearch.reloadDealers();\r\n } );\r\n jQuery( '.js-e-dealersearch-country' ).on( 'change', function () {\r\n e4.dealersearch.setCountryAndReloadDealers();\r\n } );\r\n jQuery( '.js-e-dealersearch-address-input' ).on( 'keydown', function ( event ) {\r\n if ( event.keyCode === 13 ) {\r\n var jSuggestions = jQuery( event.target.form ).find( '.js-e-dealersearch-suggestions' ),\r\n jSuggestionActive = jSuggestions.find( '.tt-selectable' ).filter( '.active' );\r\n if ( jSuggestionActive.length === 0 && jSuggestions.css( 'display' ) === 'block' ) {\r\n jQuery( event.target.form ).triggerHandler( 'submit' );\r\n }\r\n else if ( jSuggestionActive.is( '.js-e-dealersearch-geolocate' ) === true ) {\r\n jSuggestionActive.trigger( 'click' );\r\n }\r\n }\r\n } ).on( 'focus input', function () {\r\n e4.dealersearch.form.hidePlaceholder();\r\n } ).on( 'blur', function ( event ) {\r\n if ( event.target.value === '' ) {\r\n e4.dealersearch.form.showPlaceholder();\r\n e4.dealersearch.resetAddress();\r\n }\r\n } );\r\n jQuery( '.js-e-dealersearch-address-input' ).typeahead( {\r\n hint: true,\r\n highlight: true,\r\n minLength: 0,\r\n classNames: {\r\n wrapper: 'e-dealersearch-typeahead-wrapper js-e-dealersearch-typeahead-wrapper w-100',\r\n input: 'js-e-dealersearch-address-input', // https://github.com/twitter/typeahead.js/issues/677#issuecomment-48807067\r\n menu: 'js-e-dealersearch-suggestions e-dealersearch-suggestions dropdown-menu',\r\n suggestion: 'js-e-dealersearch-suggestions-item dropdown-item',\r\n open: 'open',\r\n cursor: 'active',\r\n highlight: 'active'\r\n }\r\n }, {\r\n name: 'espresso',\r\n display: 'formatted_address',\r\n limit: 8,\r\n async: true,\r\n source: function ( strQuery, fnSyncResults, fnAsyncResults ) {\r\n e4.dealersearch.form.getSuggestions( strQuery, function ( arrAddresses ) {\r\n fnAsyncResults( arrAddresses );\r\n } );\r\n },\r\n templates: {\r\n pending: function ( jsonData ) {\r\n return e4.handlebars.tmpl.typeaheadPending( jsonData );\r\n },\r\n footer: function ( jsonData ) {\r\n return e4.handlebars.tmpl.typeaheadFooter( jsonData );\r\n }\r\n }\r\n } ).on( 'typeahead:autocomplete typeahead:select', function ( event, objAddress ) {\r\n if ( objAddress !== undefined ) {\r\n e4.dealersearch.searchByAddress( objAddress );\r\n jQuery( event.target ).typeahead( 'close' );\r\n }\r\n } );\r\n },\r\n getSuggestions: function ( strAddress, fnAsyncResults ) {\r\n e4.dealersearch.geocoder.geocode( {\r\n address: strAddress,\r\n componentRestrictions: {\r\n country: e4.dealersearch.getCountryCode() //https://en.wikipedia.org/wiki/ISO_3166-1#Current_codes\r\n }\r\n }, function ( arrAddresses, strStatus ) {\r\n if ( strStatus === google.maps.GeocoderStatus.OK ) {\r\n arrAddresses = arrAddresses.filter( function ( objAddress ) {\r\n return objAddress.address_components[ 0 ].types[ 0 ] !== 'country';\r\n } );\r\n fnAsyncResults( arrAddresses );\r\n }\r\n else {\r\n e4.dealersearch.map.logError( strStatus );\r\n }\r\n } );\r\n },\r\n setAddressInput: function ( strAddress ) {\r\n jQuery( '.js-e-dealersearch-address-input' ).typeahead( 'val', strAddress );\r\n e4.dealersearch.form.hidePlaceholder();\r\n },\r\n clearAddressInput: function () {\r\n jQuery( '.js-e-dealersearch-address-input' ).typeahead( 'val', '' );\r\n e4.dealersearch.form.showPlaceholder();\r\n },\r\n showPlaceholder: function () {\r\n jQuery( '.js-e-dealersearch-address-input-placeholder' ).removeClass( 'is-hidden' );\r\n },\r\n hidePlaceholder: function () {\r\n jQuery( '.js-e-dealersearch-address-input-placeholder' ).addClass( 'is-hidden' );\r\n }\r\n },\r\n map: {\r\n init: function () {\r\n e4.dealersearch.map.build( {\r\n center: e4.dealersearch.map.getCenterByCountry(),\r\n zoom: e4.dealersearch.map.getZoomByCountry(),\r\n mapTypeControl: false,\r\n scrollwheel: false,\r\n styles: e4.dealersearch.map.getStyles()\r\n } ).on( 'init', function () {\r\n e4.dealersearch.clusterer.init();\r\n e4.dealersearch.markers.init();\r\n e4.dealersearch.list.init();\r\n e4.dealersearch.map.bindEvents();\r\n if( e4.settings.dealersearch.fitMapToBoundsOnInit == true ) {\r\n e4.dealersearch.map.fitMapToMarkers();\r\n }\r\n } );\r\n },\r\n bindEvents: function () {\r\n e4.dealersearch.map.get().addListener( 'idle', function () {\r\n e4.util.debug( 'map idle', e4.dealersearch.debug );\r\n e4.dealersearch.list.syncWithMap();\r\n } );\r\n jQuery( window ).on( 'resize', e4.util.debounce( e4.dealersearch.map.refresh, e4.settings.debounceDelay.resize ) );\r\n },\r\n get: function () {\r\n // This function gets defined in require.js jQueryMapUI callback;\r\n },\r\n refresh: function () {\r\n // This function gets defined in require.js jQueryMapUI callback;\r\n },\r\n build: function ( objMapSettings, fnCallback ) {\r\n // This function gets defined in require.js jQueryMapUI callback;\r\n // Dummy use of argument to make JSLint happy;\r\n console.log( objMapSettings, fnCallback );\r\n },\r\n showInfoWindow: function ( objMarker ) {\r\n // This function gets defined in require.js jQueryMapUI callback;\r\n // Dummy use of argument to make JSLint happy;\r\n console.log( objMarker );\r\n },\r\n setBoundsFromCountry: function () {\r\n var strCountryCode = e4.dealersearch.getCountryCode();\r\n // If custom settings for center and zoom are present.\r\n if ( e4.settings.dealersearch.country[ strCountryCode ] !== undefined || strCountryCode === '' ) {\r\n e4.util.debug( ['Setting center and zoom for country(' + strCountryCode + ') from global settings.'], e4.dealersearch.debug );\r\n var gmMap = e4.dealersearch.map.get();\r\n gmMap.setCenter( e4.dealersearch.map.getCenterByCountry() );\r\n gmMap.setZoom( e4.dealersearch.map.getZoomByCountry() );\r\n e4.dealersearch.map.fitMapToMarkers();\r\n }\r\n // If no center and zoom settings are present, use geocode to get values from current country.\r\n else {\r\n e4.dealersearch.geocoder.geocode( {\r\n address: '',\r\n componentRestrictions: {\r\n country: strCountryCode //https://en.wikipedia.org/wiki/ISO_3166-1#Current_codes\r\n }\r\n }, function ( arrAddresses, strStatus ) {\r\n if ( strStatus === google.maps.GeocoderStatus.OK ) {\r\n var objBoundsAddress = e4.dealersearch.map.getBoundsByAddress( arrAddresses[ 0 ] );\r\n e4.util.debug( [\r\n 'Setting center and bounds for country(' + strCountryCode + ') from Maps API',\r\n objBoundsAddress\r\n ], e4.dealersearch.debug );\r\n var gmMap = e4.dealersearch.map.get();\r\n gmMap.fitBounds( objBoundsAddress );\r\n // gmMap.setZoom( gmMap.getZoom() + 1 );\r\n }\r\n else {\r\n e4.dealersearch.map.logError( strStatus );\r\n }\r\n } );\r\n }\r\n },\r\n getCenterByCountry: function () {\r\n var strCountryCode = e4.dealersearch.getCountryCode();\r\n console.log( strCountryCode )\r\n if ( e4.settings.dealersearch.country[ strCountryCode ] !== undefined ) {\r\n return new google.maps.LatLng( e4.settings.dealersearch.country[ strCountryCode ].center );\r\n }\r\n else {\r\n return new google.maps.LatLng( {\r\n //Centered on partly on Europe\r\n lat: 55.4388227,\r\n lng: 8.9959889\r\n } );\r\n }\r\n },\r\n getZoomByCountry: function () {\r\n var strCountryCode = e4.dealersearch.getCountryCode();\r\n if ( e4.settings.dealersearch.country[ strCountryCode ] !== undefined ) {\r\n return e4.settings.dealersearch.country[ strCountryCode ].zoom;\r\n }\r\n else {\r\n return 6;\r\n // https://developers.google.com/maps/documentation/static-maps/intro#Zoomlevels\r\n // 1: World\r\n // 5: Landmass/continent\r\n // 10: City\r\n // 15: Streets\r\n // 20: Buildings\r\n }\r\n },\r\n getBoundsByAddress: function ( objAddress ) {\r\n var objAddressBounds;\r\n if ( objAddress.geometry.viewport !== undefined ) {\r\n objAddressBounds = objAddress.geometry.viewport;\r\n }\r\n else if ( objAddress.geometry.bounds !== undefined ) {\r\n objAddressBounds = objAddress.geometry.bounds;\r\n }\r\n else {\r\n objAddressBounds = new google.maps.LatLngBounds();\r\n objAddressBounds.extend( objAddress.geometry.location );\r\n }\r\n return objAddressBounds;\r\n },\r\n getMarkersInBounds: function () {\r\n var objMapBounds = e4.dealersearch.map.get().getBounds(),\r\n arrMarkersInBounds = [];\r\n jQuery.each( e4.dealersearch.data.markers, function ( intIndex, objMarker ) {\r\n if ( objMapBounds.contains( objMarker.getPosition() ) === true ) {\r\n arrMarkersInBounds.push( objMarker );\r\n }\r\n } );\r\n return arrMarkersInBounds;\r\n },\r\n extendBoundsToMarker: function ( objMarker ) {\r\n var objMapBounds = e4.dealersearch.map.get().getBounds();\r\n objMapBounds.extend( objMarker.getPosition() );\r\n e4.dealersearch.map.get().fitBounds( objMapBounds );\r\n },\r\n fitMapToMarkers: function () {\r\n var arrMarkersInBounds = [];\r\n\r\n for ( var m = 0; m < e4.dealersearch.map.getMarkersInBounds().length; m++ ) {\r\n arrMarkersInBounds = e4.dealersearch.data.markers[ m ];\r\n }\r\n\r\n e4.dealersearch.map.extendBoundsToMarker( arrMarkersInBounds );\r\n },\r\n fitResults: function () {\r\n e4.util.debug( [\r\n 'Extending bounds to fit search min markers.'\r\n ], e4.dealersearch.debug );\r\n var intMapZoom = e4.dealersearch.map.get().getZoom();\r\n // Make sure that map zoom is within min/max settings.\r\n if ( intMapZoom > e4.settings.dealersearch.results.zoom.max ) {\r\n // console.log( 'max', intMapZoom, e4.settings.dealersearch.results.zoom.max )\r\n e4.dealersearch.map.get().setZoom( e4.settings.dealersearch.results.zoom.max );\r\n }\r\n else if ( intMapZoom < e4.settings.dealersearch.results.zoom.min ) {\r\n // console.log( 'min', intMapZoom, e4.settings.dealersearch.results.zoom.min )\r\n e4.dealersearch.map.get().setZoom( intMapZoom + 1 );\r\n }\r\n // If no markers are in bounds, then extend bounds to closest marker.\r\n if ( e4.dealersearch.map.getMarkersInBounds().length === 0 ) {\r\n e4.dealersearch.map.extendBoundsToMarker( e4.dealersearch.data.markers[ 0 ] );\r\n }\r\n // While markers in bounds is below min result setting, extend bounds to closest marker.\r\n for ( var m = e4.dealersearch.map.getMarkersInBounds().length; m <= e4.settings.dealersearch.results.min; m++ ) {\r\n // Break if there is no more markers to show.\r\n if ( e4.dealersearch.data.markers.length > m ) {\r\n // If marker is within calculated sensitivity distance to previous marker, extend bounds to marker.\r\n if ( m > 0 && e4.dealersearch.data.markers[ m ].distanceToAddress < e4.dealersearch.data.markers[ m - 1 ].distanceToAddress * ( 1 + Math.pow( e4.settings.dealersearch.results.sensitivity, m ) ) ) {\r\n e4.dealersearch.map.extendBoundsToMarker( e4.dealersearch.data.markers[ m ] );\r\n // console.log('added',e4.dealersearch.data.markers[e4.dealersearch.getCountryCode][ m\r\n // ].data.name);\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n },\r\n getStyles: function () {\r\n var arrResult = [];\r\n if ( jQuery.isArray( e4.settings.dealersearch.map.styles ) === true ) {\r\n arrResult = e4.settings.dealersearch.map.styles;\r\n }\r\n else {\r\n e4.util.debug( 'Can not find styles for map, using default styles.', e4.dealersearch.debug );\r\n }\r\n return arrResult;\r\n },\r\n logError: function ( strError ) {\r\n e4.util.debug( [\r\n 'Google Maps Error',\r\n strError\r\n ], e4.dealersearch.debug );\r\n jQuery( '.js-e-dealersearch' ).trigger( e4.dealersearch.event.maperror, { error: strError } );\r\n\r\n }\r\n },\r\n clusterer: {\r\n init: function () {\r\n e4.dealersearch.clusterer.set( new MarkerClusterer( e4.dealersearch.map.get(), [], {\r\n averageCenter: true,\r\n maxZoom: e4.settings.dealersearch.clusterer.maxZoom,\r\n minimumClusterSize: e4.settings.dealersearch.clusterer.minimumClusterSize,\r\n imagePath: e4.settings.dealersearch.clusterer.imagePath\r\n } ) );\r\n },\r\n get: function () {\r\n // This function gets defined in require.js jQueryMapUI callback;\r\n },\r\n set: function ( objMarkerClusterer ) {\r\n // This function gets defined in require.js jQueryMapUI callback;\r\n // Dummy use of argument to make JSLint happy;\r\n console.log( objMarkerClusterer );\r\n }\r\n },\r\n markers: {\r\n init: function () {\r\n e4.util.debug( 'markers.init', e4.dealersearch.debug );\r\n e4.dealersearch.markers.build();\r\n e4.dealersearch.markers.sort();\r\n e4.dealersearch.markers.addToClusterer();\r\n e4.dealersearch.markers.bindEvents();\r\n if ( e4.dealersearch.getAddress() !== null && e4.dealersearch.map.getMarkersInBounds().length === 0 ) {\r\n e4.dealersearch.map.fitResults();\r\n }\r\n },\r\n build: function () {\r\n e4.dealersearch.data.markers = [];\r\n jQuery.each( e4.dealersearch.data.users, function ( intIndex, objUser ) {\r\n var lat = parseFloat( objUser.lat ),\r\n lng = parseFloat( objUser.lng );\r\n if ( isNaN( lat ) === true || isNaN( lng ) === true || Math.abs( lat ) > 90 || Math.abs( lng ) > 180 ) {\r\n e4.util.debug( 'lat/lng not valid for this objUser: ' + objUser.name + '(' + objUser.id + ')', e4.dealersearch.debug );\r\n }\r\n else if ( objUser.countryCode === '' ) {\r\n e4.util.debug( 'countryCode is empty for this objUser: ' + objUser.name + '(' + objUser.id + ')', e4.dealersearch.debug );\r\n }\r\n else {\r\n objUser.distanceToAddress = 0;\r\n e4.dealersearch.data.markers.push( new google.maps.Marker( {\r\n id: objUser.id,\r\n position: new google.maps.LatLng( lat, lng ),\r\n icon: e4.dealersearch.markers.getIcon( objUser ),\r\n data: objUser\r\n } ) );\r\n }\r\n } );\r\n },\r\n sort: function () {\r\n if ( e4.dealersearch.getAddress() !== null ) {\r\n e4.dealersearch.markers.sortByDistanceToAddress();\r\n }\r\n else {\r\n e4.dealersearch.markers.sortByName();\r\n }\r\n },\r\n get: function ( strId ) {\r\n for ( var m = 0; m < e4.dealersearch.data.markers.length; m++ ) {\r\n if ( String( e4.dealersearch.data.markers[ m ].id ) === String( strId ) ) {\r\n return e4.dealersearch.data.markers[ m ];\r\n }\r\n }\r\n return null;\r\n },\r\n bindEvents: function () {\r\n jQuery.each( e4.dealersearch.data.markers, function ( intIndex, objMarker ) {\r\n google.maps.event.addListener( objMarker, 'click', function () {\r\n e4.dealersearch.map.showInfoWindow( objMarker );\r\n jQuery( '.js-e-dealersearch' ).trigger( e4.dealersearch.event.markerclicked, objMarker );\r\n\r\n } );\r\n } );\r\n },\r\n addToClusterer: function () {\r\n if ( e4.dealersearch.data.markers !== undefined && e4.dealersearch.data.markers.length > 0 ) {\r\n e4.dealersearch.clusterer.get().addMarkers( e4.dealersearch.data.markers );\r\n e4.util.debug( [\r\n 'marker.addToClusterer',\r\n 'Adding markers for country',\r\n e4.dealersearch.getCountryCode()\r\n ], e4.dealersearch.debug );\r\n }\r\n else {\r\n e4.util.debug( [\r\n 'marker.addToClusterer',\r\n 'No markers for country(' + e4.dealersearch.getCountryCode() + ') and/or type.'\r\n ], e4.dealersearch.debug );\r\n }\r\n },\r\n removeFromClusterer: function () {\r\n e4.util.debug( [\r\n 'marker.removeFromClusterer'\r\n ], e4.dealersearch.debug );\r\n e4.dealersearch.clusterer.get().clearMarkers();\r\n },\r\n getInfoWindowContent: function ( objMarker ) {\r\n e4.util.debug( objMarker, e4.dealersearch.debug );\r\n return e4.handlebars.tmpl.googlemapInfowindow( objMarker.data );\r\n },\r\n showOnMap: function ( objMarker ) {\r\n var gmMap = e4.dealersearch.map.get();\r\n gmMap.panTo( objMarker.getPosition() );\r\n gmMap.setZoom( e4.settings.dealersearch.results.zoom.max - 1 );\r\n google.maps.event.trigger( objMarker, 'click' );\r\n },\r\n sortByDistanceToAddress: function () {\r\n e4.util.debug( 'markers.sortByDistanceToAddress', e4.dealersearch.debug );\r\n var objAddress = e4.dealersearch.getAddress(),\r\n lat = objAddress.geometry.location.lat(),\r\n lng = objAddress.geometry.location.lng();\r\n jQuery.each( e4.dealersearch.data.markers, function ( intIndex, objMarker ) {\r\n objMarker.data.distanceToAddress = e4.dealersearch.markers.math.getGreatCircleDistance( lat, lng, objMarker.getPosition().lat(), objMarker.getPosition().lng() );\r\n objMarker.data.distanceToAddressFormatted = e4.dealersearch.markers.math.formatDistance( objMarker.data.distanceToAddress );\r\n } );\r\n if ( e4.dealersearch.data.markers.length > 1 ) {\r\n e4.dealersearch.data.markers.sort( function ( a, b ) {\r\n return a.data.distanceToAddress - b.data.distanceToAddress;\r\n } );\r\n }\r\n },\r\n sortByName: function () {\r\n e4.util.debug( [\r\n 'markers.sortByName'\r\n ], e4.dealersearch.debug );\r\n jQuery.each( e4.dealersearch.data.markers, function ( intIndex, objMarker ) {\r\n objMarker.data.distanceToAddress = 0;\r\n } );\r\n if ( e4.dealersearch.data.markers.length > 1 ) {\r\n e4.dealersearch.data.markers.sort( function ( a, b ) {\r\n if ( a.data.name < b.data.name ) {\r\n return -1;\r\n }\r\n if ( a.data.name > b.data.name ) {\r\n return 1;\r\n }\r\n return 0;\r\n } );\r\n }\r\n\r\n },\r\n getIcon: function ( objUser ) {\r\n var strReturnValue = '',\r\n strUserType,\r\n markerIconFileName;\r\n if ( jQuery.isArray( objUser.type ) === true ) {\r\n strUserType = objUser.type.join( e4.settings.dealersearch.marker.typeSeparator );\r\n markerIconFileName = '';\r\n if ( e4.settings.dealersearch.marker.iconFileName[ strUserType ] !== undefined ) {\r\n markerIconFileName = e4.settings.dealersearch.marker.iconFileName[ strUserType ];\r\n }\r\n else {\r\n e4.util.debug( 'Can not find icon for user type ' + strUserType + '(' + objUser.id + ') using default icon', e4.dealersearch.debug );\r\n markerIconFileName = e4.settings.dealersearch.marker.iconFileNameDefault;\r\n }\r\n strReturnValue = e4.settings.dealersearch.marker.iconUrl + markerIconFileName;\r\n }\r\n else {\r\n e4.util.debug( [\r\n 'Can not find type for user ' + objUser.name + '(' + objUser.id + '). Returning default icon.'\r\n ], e4.dealersearch.debug );\r\n markerIconFileName = e4.settings.dealersearch.marker.iconFileNameDefault;\r\n }\r\n return strReturnValue;\r\n },\r\n math: {\r\n formatDistance: function ( intNumber ) {\r\n if ( e4.dealersearch.unitSystem === 'imperial' ) {\r\n intNumber = intNumber / 1.609344;\r\n }\r\n return e4.util.formatJavascriptNumberToLocaleString( Math.round( intNumber * 100 ) / 100 );\r\n },\r\n toRadians: function ( intNumber ) {\r\n return intNumber * ( Math.PI / 180 );\r\n },\r\n /* jshint ignore:start */\r\n getGreatCircleDistance: function ( lat1, lng1, lat2, lng2 ) {\r\n // https://en.wikipedia.org/wiki/Haversine_formula\r\n var intEarthRadius = 6371,\r\n dLat = e4.dealersearch.markers.math.toRadians( lat2 - lat1 ),\r\n dLng = e4.dealersearch.markers.math.toRadians( lng2 - lng1 ),\r\n a = Math.sin( dLat / 2 ) * Math.sin( dLat / 2 ) + Math.sin( dLng / 2 ) * Math.sin( dLng / 2 ) * Math.cos( e4.dealersearch.markers.math.toRadians( lat1 ) ) * Math.cos( e4.dealersearch.markers.math.toRadians( lat2 ) );\r\n return intEarthRadius * ( 2 * Math.atan2( Math.sqrt( a ), Math.sqrt( 1 - a ) ) );\r\n }\r\n /* jshint ignore:end */\r\n }\r\n },\r\n list: {\r\n init: function () {\r\n e4.util.debug( 'list init', e4.dealersearch.debug );\r\n e4.dealersearch.list.bindEvents();\r\n //e4.dealersearch.list.syncWithMap();\r\n },\r\n bindEvents: function () {\r\n jQuery( '.js-e-dealersearch-list' ).on( 'click', '.js-e-dealersearch-list-item', function ( event ) {\r\n e4.dealersearch.markers.showOnMap( e4.dealersearch.markers.get( jQuery( event.currentTarget ).data( 'id' ) ) );\r\n } ).on( 'click', '.js-e-dealersearch-show-map', function ( event ) {\r\n event.preventDefault();\r\n jQuery( '.js-e-dealersearch-googlemap-container' ).addClass( 'is-active' );\r\n e4.scrollToAnchor.animate( e4.scrollToAnchor.getTarget( '.js-e-dealersearch-googlemap-container' ) );\r\n } );\r\n },\r\n syncWithMap: function () {\r\n var jsonMarkersInBounds = {\r\n markers: e4.dealersearch.map.getMarkersInBounds()\r\n };\r\n e4.util.debug( 'list syncWithMap', e4.dealersearch.debug );\r\n if ( jsonMarkersInBounds.markers.length === 0 ) {\r\n jQuery( '.js-e-dealersearch-list' ).addClass( 'is-empty' ).html( '' );\r\n }\r\n else {\r\n jQuery( '.js-e-dealersearch-list' ).removeClass( 'is-empty' ).html( e4.handlebars.tmpl.markerList( jsonMarkersInBounds ) );\r\n }\r\n }\r\n }\r\n};\r\n\r\n"]}