{"version":3,"file":"MapSearch.min.js","sources":["MapSearch.js"],"sourcesContent":["/*\r\n * \r\n * API calls and map setup\r\n * \r\n */\r\n\r\nfunction ms_getSettings() {\r\n var $ = jQuery;\r\n $.ajax({\r\n type: \"POST\",\r\n cache: false,\r\n url: \"/services/marketing/MapSearchService.asmx/GetSettings\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n data: \"{ currentItemId: '\" +\r\n $('#hfCurrentItemId').val() +\r\n \"', settingsId: '\" +\r\n $('#hfSettingsId').val() +\r\n \"', language: '\" +\r\n $('#hfCurrentLanguage').val() +\r\n \"', mapType: '\" +\r\n $('#hfMapType').val() +\r\n \"' }\",\r\n success: function (result) {\r\n ms_init(result.d);\r\n },\r\n error: function (request, status, error) {\r\n }\r\n });\r\n}\r\n\r\nfunction ms_sendDealersEmail() {\r\n var $ = jQuery;\r\n\r\n var formFields = [];\r\n $(\".ms_contactForm_element input, .ms_contactForm_element textarea \").each(function () {\r\n formFields.push({\r\n id: $(this).attr(\"data-id\"),\r\n FieldValue: $(this).val() || $(this).is(':checked')\r\n })\r\n });\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n cache: false,\r\n url: \"/services/marketing/MapSearchService.asmx/SubmitForm\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n data: \"{ currentItemId: '\" + $('#hfCurrentItemId').val() +\r\n \"', language: '\" + $('#hfCurrentLanguage').val() +\r\n \"', form: \" + JSON.stringify(formFields) +\r\n \" }\",\r\n success: function (result) {\r\n ms_showFormSucessMessage(result);\r\n },\r\n error: function (request, status, error) {\r\n }\r\n });\r\n}\r\n\r\nfunction ms_getContacts() {\r\n var $ = jQuery;\r\n $.ajax({\r\n type: \"POST\",\r\n cache: false,\r\n url: \"/services/marketing/MapSearchService.asmx/GetContacts\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n data: \"{ currentItemId: '\" +\r\n $('#hfCurrentItemId').val() +\r\n \"', language: '\" +\r\n $('#hfCurrentLanguage').val() +\r\n\r\n \"' }\",\r\n success: function (result) {\r\n ms_markers = result.d;\r\n ms_pins(ms_markers);\r\n\r\n if (!ms_has_valid_url_prams) {\r\n $('#mapSearchLoad').addClass(\"fadeout\");\r\n } else {\r\n ms_show_filtered_list();\r\n }\r\n\r\n },\r\n error: function (request, status, error) {\r\n }\r\n });\r\n}\r\nfunction ms_getContactsById(pspId, fn) {\r\n var $ = jQuery;\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n cache: false,\r\n async: false,\r\n url: \"/services/marketing/MapSearchService.asmx/GetContactsById\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n data: \"{ currentItemId: '\" +\r\n $('#hfCurrentItemId').val() +\r\n \"', language: '\" +\r\n $('#hfCurrentLanguage').val() +\r\n \"',pspId: '\" + pspId +\r\n \"' }\",\r\n success: function (result) {\r\n fn(result.d);\r\n },\r\n error: function (request, status, error) {\r\n }\r\n });\r\n}\r\n\r\n/*\r\n * Start inserting the map. Create a Global var ms_Map to access it from other functions/scripts, and the settings var too\r\n */\r\nvar ms_Settings;\r\nvar ms_Map;\r\n//I also create a Global info window var\r\nvar ms_infoWindow = false;\r\n//the markers object\r\nvar ms_markers;\r\n//the markers in the map object\r\nvar ms_markers_map;\r\n//and the pin colors object\r\nvar ms_colors = {};\r\n//distances from location\r\nvar ms_distances;\r\n//original template for \"more info\"\r\nvar ms_more_info_template = false;\r\n//closest markers to selected position (near me or search)\r\nvar ms_closest = [];\r\n//filters\r\nvar ms_filters;\r\n//available filters\r\nvar ms_av_filters = [];\r\n//url parameters\r\nvar ms_url_params;\r\n//switch statuss\r\nvar ms_switchStatus = false;\r\n//search location\r\nvar ms_place;\r\n//filtered products\r\nvar ms_filtered;\r\n//mobile view option list/map\r\nvar ms_mobile_view_option = 'list';\r\nvar ms_has_valid_url_prams = true;\r\nvar ms_location_geometry;\r\nvar ms_max_distance_allowed = 10;\r\n\r\nvar last_place_searched = null;\r\n\r\n\r\nfunction updateLastPlace(place_id) {\r\n var new_id = place_id;\r\n if (new_id !== last_place_searched) {\r\n last_place_searched = new_id;\r\n // reset filters\r\n ms_clearAllFilters();\r\n\r\n }\r\n}\r\nfunction ms_init(ms) {\r\n\r\n //define settigns\r\n ms_Settings = ms;\r\n // Need to set default value of list results to 30\r\n ms_Settings.TotalSearchResults = !ms_Settings.TotalSearchResults ? 30 : ms_Settings.TotalSearchResults;\r\n\r\n if (ms_Settings.DefaultDistance) {\r\n ms_max_distance_allowed = ms_Settings.DefaultDistance;\r\n }\r\n\r\n //check if url has parameters\r\n ms_url_params = getJsonFromUrl();\r\n if (\r\n ms_url_params.hasOwnProperty('loc') ||\r\n ms_url_params.hasOwnProperty('maptype') ||\r\n ms_url_params.hasOwnProperty('subtypes') ||\r\n ms_url_params.hasOwnProperty('status') ||\r\n ms_url_params.hasOwnProperty('services') ||\r\n ms_url_params.hasOwnProperty('products') ||\r\n ms_url_params.hasOwnProperty('certificates') ||\r\n ms_url_params.hasOwnProperty('productCount')\r\n ) {\r\n ms_has_valid_url_prams = true;\r\n } else {\r\n ms_has_valid_url_prams = false;\r\n }\r\n //start map\r\n ms_Map = new google.maps.Map(document.getElementById('mapSearch'), {\r\n scrollwheel: false,\r\n mapTypeControl: false,\r\n streetViewControl: false,\r\n rotateControl: false,\r\n fullscreenControl: false,\r\n gestureHandling: 'cooperative'\r\n });\r\n\r\n //define a short access var to map.\r\n var map = ms_Map;\r\n\r\n //center map on country/city in settigns\r\n var geocoder = new google.maps.Geocoder();\r\n var location = ms_Settings.MapCenter;\r\n\r\n if (!jQuery.isEmptyObject(ms_url_params) && ms_url_params.hasOwnProperty('loc')) {\r\n geocoder.geocode({ 'address': ms_url_params.loc }, function (results, status) {\r\n if (status == \"OK\" && typeof results[0].geometry.bounds !== 'undefined' && typeof results[0].geometry.location !== 'undefined') {\r\n ms_centerMap(results[0].geometry);\r\n document.getElementById('mapSearchInput').value = results[0].formatted_address;\r\n } else {\r\n //If url location is not found - use settings location\r\n geocoder.geocode({ 'address': location }, function (results, status) {\r\n if (status == \"OK\") {\r\n map.fitBounds(results[0].geometry.bounds);\r\n map.setCenter(results[0].geometry.location);\r\n } else {\r\n alert(\"Could not find location: \" + location);\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n geocoder.geocode({ 'address': location }, function (results, status) {\r\n if (status == \"OK\") {\r\n ms_centerMap(results[0].geometry);\r\n } else {\r\n alert(\"Could not find location: \" + location);\r\n }\r\n });\r\n }\r\n\r\n //switch statuss\r\n checkSwitchStatus();\r\n\r\n //load pins (clustered)\r\n ms_getContacts();\r\n\r\n //autocomplete Search Bar\r\n var input = document.getElementById('mapSearchInput');\r\n var autocomplete = new google.maps.places.Autocomplete(input, { types: ['geocode'] });\r\n autocomplete.bindTo('bounds', map);\r\n\r\n var marker = new google.maps.Marker({\r\n map: map\r\n });\r\n\r\n setMapView();\r\n\r\n // submit on press enter if no item from the autocomplete list is selected\r\n google.maps.event.addDomListener(input, 'keydown', function (e) {\r\n var suggestionSelected = document.querySelectorAll('.pac-item-selected');\r\n\r\n if (e.key === \"Enter\" && !e.triggered && (!suggestionSelected || suggestionSelected.length == 0)) {\r\n var ex1 = new Event('keydown');\r\n ex1.code = \"ArrowDown\";\r\n ex1.key = \"ArrowDown\";\r\n ex1.keyCode = 40;\r\n google.maps.event.trigger(this, 'keydown', ex1);\r\n\r\n var ex2 = new Event('keydown');\r\n ex2.code = \"Enter\";\r\n ex2.key = \"Enter\";\r\n ex2.keyCode = 13;\r\n ex2.triggered = true;\r\n google.maps.event.trigger(this, 'keydown', ex2);\r\n\r\n }\r\n });\r\n\r\n google.maps.event.addListener(autocomplete, 'place_changed', function () {\r\n\r\n marker.setVisible(false);\r\n ms_place = autocomplete.getPlace();\r\n\r\n if (ms_place.place_id) {\r\n\r\n updateLastPlace(ms_place.place_id);\r\n console.log('id now:', last_place_searched);\r\n }\r\n if (!ms_place.geometry) {\r\n return;\r\n }\r\n\r\n // If the place has a geometry, then present it on a map.\r\n if (ms_place.geometry.viewport) {\r\n map.fitBounds(ms_place.geometry.viewport);\r\n } else {\r\n map.setCenter(ms_place.geometry.location);\r\n map.setZoom(14);\r\n }\r\n\r\n marker.setPosition(ms_place.geometry.location);\r\n marker.setVisible(true);\r\n\r\n setListView();\r\n\r\n //create list of contacts nearby\r\n ms_list(ms_place.geometry.location);\r\n\r\n if (ms_has_valid_url_prams) {\r\n //show tags when using mapsearch with reduced/filered bucket size\r\n ms_set_filters(true);\r\n }\r\n //track search\r\n //check if we are starting\r\n if (ms_start) {\r\n ms_registerDataLayer(\"Start\", \"Search box\");\r\n ms_start = false;\r\n ms_track_label = \"Search box\";\r\n }\r\n\r\n\r\n openDealerContactForm();\r\n\r\n });\r\n\r\n //find my location button\r\n document.getElementById('mapSearchLocation').onclick = function (e) {\r\n ms_findLocation(map);\r\n e.preventDefault();\r\n };\r\n\r\n //fix find my location button position after event\r\n const findMyLocationButton = document.getElementById(\"mapSearchLocation\");\r\n findMyLocationButton.addEventListener(\"click\", function () {\r\n findMyLocationButton.classList.add(\"ms_find_mobile\");\r\n });\r\n\r\n //legends box (and pin colors)\r\n var legs = [];\r\n for (var i = 0, len = ms.MapType.length; i < len; i++) {\r\n //create the legends\r\n var l = ms.MapType[i];\r\n if (l.IsActive) {\r\n var legend = [\r\n '