PageSourceSearch

https://narcisvernatun.com/wp-content/plugins/wp-google-maps/js/wpgmaps.js?ver=6.4.11b

js narcisvernatun.com collected 2026-10-03 02:38:20 UTC 45,209 bytes, 1,184 lines download raw bytes

1var WPGM_Path_Polygon = new Array();
2var WPGM_Path = new Array();
3var infoWindow_poly = Array();
4
5for (var entry in wpgmaps_localize) {
6    if ('undefined' === typeof window.jQuery) {
7        setTimeout(function(){ document.getElementById('wpgmza_map').innerHTML = 'Error: In order for WP Google Maps to work, jQuery must be installed. A check was done and jQuery was not present. Please see the <a href="http://www.wpgmaps.com/documentation/troubleshooting/jquery-troubleshooting/" title="WP Google Maps - jQuery Troubleshooting">jQuery troubleshooting section of our site</a> for more information.'; }, 5000);
8    }
9}
10
11function wpgmza_parse_theme_data(raw)
12{
13	
14	var json;
15	
16	try{
17		json = JSON.parse(raw);
18	}catch(e) {
19		try{
20			json = eval(raw);
21		}catch(e) {
22			console.warn("Couldn't parse theme data");
23			return [];
24		}
25	}
26	
27	return json;
28}
29
30function InitMap() {
31	var myLatLng = new google.maps.LatLng(wpgmaps_localize[wpgmaps_mapid].map_start_lat,wpgmaps_localize[wpgmaps_mapid].map_start_lng);
32	
33	if(typeof wpgmza_override_zoom !== "undefined")
34		MYMAP.init('#wpgmza_map', myLatLng, parseInt(wpgmza_override_zoom));
35	else
36		MYMAP.init('#wpgmza_map', myLatLng, parseInt(wpgmaps_localize[wpgmaps_mapid].map_start_zoom));
37	
38	UniqueCode=Math.round(Math.random()*10000);
39	
40	MYMAP.placeMarkers(wpgmaps_markerurl+'?u='+UniqueCode,wpgmaps_localize[wpgmaps_mapid].id,null,null,null);
41	
42	if(wpgmaps_localize[wpgmaps_mapid].other_settings.store_locator_style == 'modern')
43	{
44		MYMAP.modernStoreLocator = new WPGMZA.ModernStoreLocator(wpgmaps_mapid);
45		wpgmza_create_places_autocomplete();
46	}
47}
48
49
50
51jQuery(function() {
52	
53    jQuery(document).ready(function(){
54
55    	// Fastclick adapation
56		jQuery(document).on({'DOMNodeInserted': function() {
57			jQuery('.pac-item, .pac-item span', this).addClass('needsclick');
58			}
59		}, '.pac-container');
60    	
61        if (/1\.([0-7])\.([0-9])/.test(jQuery.fn.jquery)) {
62            setTimeout(function(){ 
63                document.getElementById('wpgmza_map').innerHTML = 'Error: Your version of jQuery is outdated. WP Google Maps requires jQuery version 1.7+ to function correctly. Go to Maps->Settings and check the box that allows you to over-ride your current jQuery to try eliminate this problem.';
64            }, 6000);
65        } else {
66			var temp;
67			var selector = "#wpgmza_map";
68			var mapElement = jQuery(selector);
69			
70			var width = wpgmaps_localize[wpgmaps_mapid]['map_width']+wpgmaps_localize[wpgmaps_mapid]['map_width_type'];
71			var height = wpgmaps_localize[wpgmaps_mapid]['map_height']+wpgmaps_localize[wpgmaps_mapid]['map_height_type'];
72			
73			if((temp = mapElement.attr("data-shortcode-width")) != "inherit")
74				width = temp;
75			if((temp = mapElement.attr("data-shortcode-height")) != "inherit")
76				height = temp;
77			
78            mapElement.css({
79                width: width,
80                height: height
81            });  
82			
83           	InitMap();
84            jQuery('body').on('tabsactivate', function(){setTimeout(function(){InitMap();}, 500); });
85            jQuery('body').on('tabsshow', function(){setTimeout(function(){InitMap();}, 500); });
86            jQuery('body').on('accordionactivate', function(){setTimeout(function(){InitMap();}, 500); });
87            jQuery('body').on('click', '.wpb_tabs_nav li', function(){setTimeout(function(){InitMap();}, 500); });
88            jQuery('body').on('click', '.ui-tabs-nav li', function(event, ui) { InitMap(); });
89            jQuery('body').on('click', '.tp-tabs li a', function(event, ui) { InitMap(); });
90            jQuery('body').on('click', '.nav-tabs li a', function(event, ui) { InitMap(); });
91            jQuery('body').on('click', '.vc_tta-panel-heading', function(){setTimeout(function(){InitMap();}, 500); });
92            jQuery('body').on('click', '.ult_exp_section',function(){setTimeout(function(){InitMap();}, 500); });
93            jQuery('body').on('click', '.x-accordion-heading', function(){setTimeout(function(){InitMap();}, 500); });
94            jQuery('body').on('click', '.x-nav-tabs li', function(){setTimeout(function(){InitMap();}, 500); });
95            jQuery('body').on('click', '.tab-title', function(){setTimeout(function(){InitMap();}, 500); });
96            jQuery('body').on('click', '.tab-link', function(){setTimeout(function(){InitMap();}, 500); });
97            jQuery('body').on('click', '.et_pb_tabs_controls li', function(){setTimeout(function(){InitMap();}, 500); });
98            jQuery('body').on('click', '.fusion-tab-heading', function(){setTimeout(function(){InitMap();}, 500); });
99            jQuery('body').on('click', '.et_pb_tab', function(){setTimeout(function(){InitMap();}, 500); });
100            jQuery('body').on('click', '.tri-tabs-nav span', function(){setTimeout(function(){InitMap();}, 500); });
101            jQuery('body').on('click', '.gdl-tabs li', function(){setTimeout(function(){InitMap();}, 500); });
102            jQuery('body').on('click', '#tabnav  li', function(){setTimeout(function(){InitMap();}, 500); });
103        }
104    });
105});
106
107var MYMAP = {
108    map: null,
109    bounds: null
110}
111
112if (wpgmaps_localize_global_settings['wpgmza_settings_map_draggable'] === "" || 'undefined' === typeof wpgmaps_localize_global_settings['wpgmza_settings_map_draggable']) { wpgmza_settings_map_draggable = true; } else { wpgmza_settings_map_draggable = false;  }
113if (wpgmaps_localize_global_settings['wpgmza_settings_map_clickzoom'] === "" || 'undefined' === typeof wpgmaps_localize_global_settings['wpgmza_settings_map_clickzoom']) { wpgmza_settings_map_clickzoom = false; } else { wpgmza_settings_map_clickzoom = true; }
114if (wpgmaps_localize_global_settings['wpgmza_settings_map_scroll'] === "" || 'undefined' === typeof wpgmaps_localize_global_settings['wpgmza_settings_map_scroll']) { wpgmza_settings_map_scroll = true; } else { wpgmza_settings_map_scroll = false; }
115if (wpgmaps_localize_global_settings['wpgmza_settings_map_zoom'] === "" || 'undefined' === typeof wpgmaps_localize_global_settings['wpgmza_settings_map_zoom']) { wpgmza_settings_map_zoom = true; } else { wpgmza_settings_map_zoom = false; }
116if (wpgmaps_localize_global_settings['wpgmza_settings_map_pan'] === "" || 'undefined' === typeof wpgmaps_localize_global_settings['wpgmza_settings_map_pan']) { wpgmza_settings_map_pan = true; } else { wpgmza_settings_map_pan = false; }
117if (wpgmaps_localize_global_settings['wpgmza_settings_map_type'] === "" || 'undefined' === typeof wpgmaps_localize_global_settings['wpgmza_settings_map_type']) { wpgmza_settings_map_type = true; } else { wpgmza_settings_map_type = false; }
118if (wpgmaps_localize_global_settings['wpgmza_settings_map_streetview'] === "" || 'undefined' === typeof wpgmaps_localize_global_settings['wpgmza_settings_map_streetview']) { wpgmza_settings_map_streetview = true; } else { wpgmza_settings_map_streetview = false; }
119if (wpgmaps_localize_global_settings['wpgmza_settings_map_full_screen_control'] === "" || 'undefined' === typeof wpgmaps_localize_global_settings['wpgmza_settings_map_full_screen_control']) { wpgmza_settings_map_full_screen_control = true; } else { wpgmza_settings_map_full_screen_control = false; }
120
121if ('undefined' === typeof wpgmaps_localize[wpgmaps_mapid]['other_settings']['map_max_zoom'] || wpgmaps_localize[wpgmaps_mapid]['other_settings']['map_max_zoom'] === "") { wpgmza_max_zoom = 0; } else { wpgmza_max_zoom = parseInt(wpgmaps_localize[wpgmaps_mapid]['other_settings']['map_max_zoom']); }
122if ('undefined' === typeof wpgmaps_localize[wpgmaps_mapid]['other_settings']['map_min_zoom'] || wpgmaps_localize[wpgmaps_mapid]['other_settings']['map_min_zoom'] === "") { wpgmza_min_zoom = 21; } else { wpgmza_min_zoom = parseInt(wpgmaps_localize[wpgmaps_mapid]['other_settings']['map_min_zoom']); }
123
124function wpgmza_create_places_autocomplete() {
125	
126	var elementExists = document.getElementById("addressInput");
127	
128	if (typeof google === 'object' && typeof google.maps === 'object' && typeof google.maps.places === 'object' && typeof google.maps.places.Autocomplete === 'function') {
129
130		// user autofill
131		if (elementExists !== null) {
132			if (typeof wpgmaps_localize[wpgmaps_mapid]['other_settings']['wpgmza_store_locator_restrict'] === "undefined" || wpgmaps_localize[wpgmaps_mapid]['other_settings']['wpgmza_store_locator_restrict'] === "" )  {
133				/* initialize the autocomplete form */
134				autocomplete = new google.maps.places.Autocomplete(
135				  /** @type {HTMLInputElement} */(document.getElementById('addressInput')),
136				  { types: ['geocode'] });
137				// When the user selects an address from the dropdown,
138				// populate the address fields in the form.
139				google.maps.event.addListener(autocomplete, 'place_changed', function() {
140					fillInAddress();
141				});
142			} else {
143				/* initialize the autocomplete form */                        
144				autocomplete = new google.maps.places.Autocomplete(
145				  /** @type {HTMLInputElement} */(document.getElementById('addressInput')),
146				  { types: ['geocode'], componentRestrictions: {country: wpgmaps_localize[wpgmaps_mapid]['other_settings']['wpgmza_store_locator_restrict']} });
147				// When the user selects an address from the dropdown,
148				// populate the address fields in the form.
149				google.maps.event.addListener(autocomplete, 'place_changed', function() {
150					fillInAddress();
151				});                                                
152			}
153		} 
154	}
155}
156
157MYMAP.init = function(selector, latLng, zoom) {
158	
159	if (typeof wpgmaps_localize[wpgmaps_mapid].type !== "undefined") {
160		if (wpgmaps_localize[wpgmaps_mapid].type === "1") { maptype = google.maps.MapTypeId.ROADMAP; }
161		else if (wpgmaps_localize[wpgmaps_mapid].type === "2") { maptype = google.maps.MapTypeId.SATELLITE; }
162		else if (wpgmaps_localize[wpgmaps_mapid].type === "3") { maptype = google.maps.MapTypeId.HYBRID; }
163		else if (wpgmaps_localize[wpgmaps_mapid].type === "4") { maptype = google.maps.MapTypeId.TERRAIN; }
164		else { maptype = google.maps.MapTypeId.ROADMAP; }
165	} else {
166		maptype = google.maps.MapTypeId.ROADMAP;
167	}
168
169    var myOptions = {
170        zoom:zoom,
171        minZoom: wpgmza_max_zoom,
172        maxZoom: wpgmza_min_zoom,
173        center: latLng,
174        zoomControl: wpgmza_settings_map_zoom,
175        panControl: wpgmza_settings_map_pan,
176        mapTypeControl: wpgmza_settings_map_type,
177        streetViewControl: wpgmza_settings_map_streetview,
178        draggable: wpgmza_settings_map_draggable,
179        disableDoubleClickZoom: wpgmza_settings_map_clickzoom,
180        scrollwheel: wpgmza_settings_map_scroll,
181        fullscreenControl: wpgmza_settings_map_full_screen_control,
182        mapTypeId: maptype
183    }
184
185    if(typeof wpgmza_force_greedy_gestures !== "undefined"){
186        myOptions.gestureHandling = wpgmza_force_greedy_gestures;
187    }
188	
189	// NB: Perry: Moved this block up here and altered it so it plays nicely with other maps styles settings
190	if ("undefined" !== typeof wpgmaps_localize[wpgmaps_mapid]['other_settings']['wpgmza_theme_data'] && wpgmaps_localize[wpgmaps_mapid]['other_settings']['wpgmza_theme_data'] !== false && wpgmaps_localize[wpgmaps_mapid]['other_settings']['wpgmza_theme_data'] !== "") {
191		if(!myOptions.styles)
192			myOptions.styles = [];
193		
194		wpgmza_theme_data = wpgmza_parse_theme_data(wpgmaps_localize[wpgmaps_mapid]['other_settings']['wpgmza_theme_data']);
195        myOptions.styles = myOptions.styles.concat(wpgmza_theme_data);
196    }
197
198	if(!wpgmaps_localize[wpgmaps_mapid]['other_settings']['wpgmza_show_points_of_interest'])
199	{
200		// Only create a new array if styles aren't set already, so no existing styles are overwritten
201		if(!myOptions.styles)
202			myOptions.styles = [];
203		
204		// Push a style to hide all points of interest
205		myOptions.styles.push(
206			{
207				featureType: "poi",
208				stylers: [{visibility: "off"}]
209			}
210		);
211	}
212
213	var element = jQuery(selector)[0];
214    this.map = new google.maps.Map(element, myOptions);
215    this.bounds = new google.maps.LatLngBounds();
216
217	if(MYMAP.modernStoreLocator)
218	{
219		MYMAP.modernStoreLocator.element.index = 1;
220		this.map.controls[google.maps.ControlPosition.TOP_CENTER].push(MYMAP.modernStoreLocator.element);
221		wpgmza_create_places_autocomplete();
222	}
223	
224	/*var map = this.map;
225	google.maps.event.addDomListener(window, "resize", function() {
226		var center = map.getCenter();
227		google.maps.event.trigger(map, "resize");
228		map.setCenter(center); 
229	});*/
230	
231    jQuery( "#wpgmza_map").trigger( 'wpgooglemaps_loaded' );
232
233    if (wpgmaps_localize_polygon_settings !== null) {
234        if (typeof wpgmaps_localize_polygon_settings !== "undefined") {
235              for(var poly_entry in wpgmaps_localize_polygon_settings) {
236                add_polygon(poly_entry);
237              }
238        }
239    }
240    if (wpgmaps_localize_polyline_settings !== null) {
241        if (typeof wpgmaps_localize_polyline_settings !== "undefined") {
242              for(var poly_entry in wpgmaps_localize_polyline_settings) {
243                add_polyline(poly_entry);
244              }
245        }
246    }
247    if (wpgmaps_localize[wpgmaps_mapid]['bicycle'] === "1") {
248        var bikeLayer = new google.maps.BicyclingLayer();
249        bikeLayer.setMap(MYMAP.map);
250    }        
251    if (wpgmaps_localize[wpgmaps_mapid]['traffic'] === "1") {
252        var trafficLayer = new google.maps.TrafficLayer();
253        trafficLayer.setMap(MYMAP.map);
254    }    
255    
256    if ("undefined" !== typeof wpgmaps_localize[wpgmaps_mapid]['other_settings']['transport_layer'] && wpgmaps_localize[wpgmaps_mapid]['other_settings']['transport_layer'] === 1) {
257        var transitLayer = new google.maps.TransitLayer();
258        transitLayer.setMap(MYMAP.map);
259	}   
260    
261    google.maps.event.addListener(MYMAP.map, 'click', function() {
262        infoWindow.close();
263    });
264    
265    window.addEventListener("keydown", function(e) {
266		var k = (e.which ? e.which : e.keyCode);
267		if(k == 27)
268			infoWindow.close();
269	});
270}
271
272var infoWindow = new google.maps.InfoWindow();
273if (typeof wpgmaps_localize_global_settings['wpgmza_settings_infowindow_width'] !== "undefined" && wpgmaps_localize_global_settings['wpgmza_settings_infowindow_width'] !== "") { infoWindow.setOptions({maxWidth:wpgmaps_localize_global_settings['wpgmza_settings_infowindow_width']}); }
274
275google.maps.event.addDomListener(window, 'resize', function() {
276    var myLatLng = new google.maps.LatLng(wpgmaps_localize[wpgmaps_mapid].map_start_lat,wpgmaps_localize[wpgmaps_mapid].map_start_lng);
277    MYMAP.map.setCenter(myLatLng);
278});
279
280if(!window.WPGMZA)
281	window.WPGMZA = {};
282
283WPGMZA.KM_PER_MILE = 1.60934;
284WPGMZA.MILE_PER_KM = 0.621371;
285
286WPGMZA.UNITS_MILES = 1;
287WPGMZA.UNITS_KM = 2;
288
289function wpgmza_get_zoom_from_radius(radius, units)
290{
291	// With thanks to Jeff Jason http://jeffjason.com/2011/12/google-maps-radius-to-zoom/
292	
293	if(units == WPGMZA.UNITS_MILES)
294		radius *= WPGMZA.KM_PER_MILE;
295	
296	return Math.round(14-Math.log(radius)/Math.LN2);
297}
298
299function wpgmza_show_store_locator_radius(map_id, center, radius, distance_type)
300{
301	switch(wpgmaps_localize[map_id].other_settings.wpgmza_store_locator_radius_style)
302	{
303		case "modern":
304			if(MYMAP.modernStoreLocatorCircle)
305				MYMAP.modernStoreLocatorCircle.destroy();
306				
307			MYMAP.modernStoreLocatorCircle = WPGMZA.ModernStoreLocatorCircle.createInstance(map_id);
308			
309			MYMAP.modernStoreLocatorCircle.setOptions({
310				visible: true,
311				center: center,
312				radius: radius * (distance_type == 1 ? WPGMZA.KM_PER_MILE : 1),
313				radiusString: radius
314			});
315			
316			break;
317		
318		default:
319			var options = {
320				strokeColor: '#FF0000',
321				strokeOpacity: 0.25,
322				strokeWeight: 2,
323				fillColor: '#FF0000',
324				fillOpacity: 0.15,
325				map: MYMAP.map,
326				center: center
327			};
328			
329			if (distance_type === "1")
330				options.radius = parseInt(radius / 0.000621371);
331			else
332				options.radius = parseInt(radius / 0.001);
333
334			var circle = new google.maps.Circle(options);
335			break;
336	}
337}
338
339MYMAP.placeMarkers = function(filename,map_id,radius,searched_center,distance_type) {
340    var check1 = 0,
341        slNotFoundMessage = jQuery('.js-not-found-msg');
342    if (wpgmaps_localize_global_settings.wpgmza_settings_marker_pull === '1') {
343    	jQuery.get(filename, function(xml){
344            jQuery(xml).find("marker").each(function(){
345                var wpmgza_map_id = jQuery(this).find('map_id').text();
346
347                if (wpmgza_map_id == map_id) {
348                    var wpmgza_address = jQuery(this).find('address').text();
349                    var lat = jQuery(this).find('lat').text();
350                    var lng = jQuery(this).find('lng').text();
351                    var wpmgza_anim = jQuery(this).find('anim').text();
352                    var wpmgza_infoopen = jQuery(this).find('infoopen').text();
353                    var current_lat = jQuery(this).find('lat').text();
354                    var current_lng = jQuery(this).find('lng').text();
355                    var show_marker_radius = true;
356
357                    if (radius !== null) {
358                        if (check1 > 0 ) { } else { 
359
360
361                            var point = new google.maps.LatLng(parseFloat(searched_center.lat()),parseFloat(searched_center.lng()));
362                            MYMAP.bounds.extend(point);
363                            if (typeof wpgmaps_localize[wpgmaps_mapid]['other_settings']['store_locator_bounce'] === "undefined" || wpgmaps_localize[wpgmaps_mapid]['other_settings']['store_locator_bounce'] === 1) {
364	                            var marker = new google.maps.Marker({
365	                                    position: point,
366	                                    map: MYMAP.map,
367	                                    animation: google.maps.Animation.BOUNCE
368	                            });
369                            }
370							
371							wpgmza_show_store_locator_radius(map_id, point, radius, distance_type);
372							
373                            check1 = check1 + 1;
374                        }
375                        var R = 0;
376                        if (distance_type === "1") {
377                            R = 3958.7558657440545; 
378                        } else {
379                            R = 6378.16; 
380                        }
381                        var dLat = toRad(searched_center.lat()-current_lat);
382                        var dLon = toRad(searched_center.lng()-current_lng); 
383                        var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(toRad(current_lat)) * Math.cos(toRad(searched_center.lat())) * Math.sin(dLon/2) * Math.sin(dLon/2); 
384                        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
385                        var d = R * c;
386                        
387                        if (d < radius) { show_marker_radius = true; } else { show_marker_radius = false; }
388                    }
389
390
391
392                    var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));
393                    MYMAP.bounds.extend(point);
394                    if (show_marker_radius === true) {
395                        if (wpmgza_anim === "1") {
396                        var marker = new google.maps.Marker({
397                                position: point,
398                                map: MYMAP.map,
399                                animation: google.maps.Animation.BOUNCE
400                            });
401                        }
402                        else if (wpmgza_anim === "2") {
403                            var marker = new google.maps.Marker({
404                                    position: point,
405                                    map: MYMAP.map,
406                                    animation: google.maps.Animation.DROP
407                            });
408                        }
409                        else {
410                            var marker = new google.maps.Marker({
411                                    position: point,
412                                    map: MYMAP.map
413                            });
414                        }
415                        var d_string = "";
416                        if (radius !== null) {                                 
417                            if (distance_type === "1") {
418                                d_string = "<p style='min-width:100px; display:block;'>"+Math.round(d,2)+" "+wpgmaps_lang_m_away+"</p>"; 
419                            } else {
420                                d_string = "<p style='min-width:100px; display:block;'>"+Math.round(d,2)+" "+wpgmaps_lang_km_away+"</p>";
421                            }
422                        } else { d_string = ''; }
423
424
425                        var html='<span style=\'min-width:100px; display:block;\'>'+wpmgza_address+'</span>'+d_string;
426                        if (wpmgza_infoopen === "1" && !wpgmaps_localize_global_settings["wpgmza_settings_disable_infowindows"]) {
427                            infoWindow.setContent(html);
428                            infoWindow.open(MYMAP.map, marker);
429                        }
430                        temp_actiontype = 'click';
431                        if (typeof wpgmaps_localize_global_settings.wpgmza_settings_map_open_marker_by !== "undefined" && wpgmaps_localize_global_settings.wpgmza_settings_map_open_marker_by == '2') {
432                         	temp_actiontype = 'mouseover';
433                        }
434                        google.maps.event.addListener(marker, temp_actiontype, function() {
435                            infoWindow.close();
436							if(!wpgmaps_localize_global_settings["wpgmza_settings_disable_infowindows"])
437							{
438								infoWindow.setContent(html);
439								infoWindow.open(MYMAP.map, marker);
440							}
441                        });
442                    }
443                }
444            });
445
446        });
447    } else { 
448	
449        if (Object.keys(wpgmaps_localize_marker_data).length > 0) {
450          var markerStoreLocatorsNum = 0;
451
452          if (typeof wpgmaps_localize_marker_data !== "undefined") {
453
454            jQuery.each(wpgmaps_localize_marker_data, function(i, val) {
455
456                var wpmgza_map_id = val.map_id;
457
458                    if (wpmgza_map_id == map_id) {
459
460                        var wpmgza_address = val.address;
461                        var wpmgza_anim = val.anim;
462                        var wpmgza_infoopen = val.infoopen;
463                        var lat = val.lat;
464                        var lng = val.lng;
465                        var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));
466
467
468                        var current_lat = val.lat;
469                        var current_lng = val.lng;
470                        var show_marker_radius = true;
471
472                        if (radius !== null) {
473                            if (check1 > 0 ) { } else {
474
475
476                                var point = new google.maps.LatLng(parseFloat(searched_center.lat()),parseFloat(searched_center.lng()));
477                                MYMAP.bounds.extend(point);
478	                            if (typeof wpgmaps_localize[wpgmaps_mapid]['other_settings']['store_locator_bounce'] === "undefined" || wpgmaps_localize[wpgmaps_mapid]['other_settings']['store_locator_bounce'] === 1) {
479		                            var marker = new google.maps.Marker({
480		                                    position: point,
481		                                    map: MYMAP.map,
482		                                    animation: google.maps.Animation.BOUNCE
483		                            });
484	                            } else { /* dont show icon */ }
485                               
486								wpgmza_show_store_locator_radius(map_id, point, radius, distance_type);
487							   
488                                check1 = check1 + 1;
489                            }
490                            var R = 0;
491                            if (distance_type === "1") {
492                                R = 3958.7558657440545;
493                            } else {
494                                R = 6378.16;
495                            }
496                            var dLat = toRad(searched_center.lat()-current_lat);
497                            var dLon = toRad(searched_center.lng()-current_lng);
498                            var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.
498cos(toRad(current_lat)) * Math.cos(toRad(searched_center.lat())) * Math.sin(dLon/2) * Math.sin(dLon/2);
499                            var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
500                            var d = R * c;
501
502                            if (d < radius) {
503                                show_marker_radius = true;
504                                markerStoreLocatorsNum++;
505                            } else {
506                                show_marker_radius = false;
507                            }
508                        }
509
510
511
512                        var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));
513                        MYMAP.bounds.extend(point);
514                        if (show_marker_radius === true) {
515                            if (wpmgza_anim === "1") {
516                            var marker = new google.maps.Marker({
517                                    position: point,
518                                    map: MYMAP.map,
519                                    animation: google.maps.Animation.BOUNCE
520                                });
521                            }
522                            else if (wpmgza_anim === "2") {
523                                var marker = new google.maps.Marker({
524                                        position: point,
525                                        map: MYMAP.map,
526                                        animation: google.maps.Animation.DROP
527                                });
528                            }
529                            else {
530                                var marker = new google.maps.Marker({
531                                        position: point,
532                                        map: MYMAP.map
533                                });
534                            }
535                            var d_string = "";
536	                        if (radius !== null) {
537	                            if (distance_type === "1") {
538	                                d_string = "<p style='min-width:100px; display:block;'>"+Math.round(d,2)+" "+wpgmaps_lang_m_away+"</p>";
539	                            } else {
540	                                d_string = "<p style='min-width:100px; display:block;'>"+Math.round(d,2)+" "+wpgmaps_lang_km_away+"</p>";
541	                            }
542	                        } else { d_string = ''; }
543
544
545                            var html='<span style=\'min-width:100px; display:block;\'>'+wpmgza_address+'</span>'+d_string;
546                            if (wpmgza_infoopen === "1" && !wpgmaps_localize_global_settings["wpgmza_settings_disable_infowindows"]) {
547                                infoWindow.setContent(html);
548                                infoWindow.open(MYMAP.map, marker);
549                            }
550	                        temp_actiontype = 'click';
551	                        if (typeof wpgmaps_localize_global_settings.wpgmza_settings_map_open_marker_by !== "undefined" && wpgmaps_localize_global_settings.wpgmza_settings_map_open_marker_by == '2') {
552	                         	temp_actiontype = 'mouseover';
553	                        }
554	                        google.maps.event.addListener(marker, temp_actiontype, function() {
555	                            infoWindow.close();
556								if(!wpgmaps_localize_global_settings["wpgmza_settings_disable_infowindows"])
557								{
558									infoWindow.setContent(html);
559									infoWindow.open(MYMAP.map, marker);
560								}
561	                        });
562                        }
563                    }
564            });
565
566            if ('' !== jQuery('#addressInput').val() && markerStoreLocatorsNum < 1) {
567                slNotFoundMessage.addClass('is-active');
568                setTimeout(function () {
569                    slNotFoundMessage.removeClass('is-active');
570                }, 5000);
571            }
572        }
573      }
574    }
575}
576
577function add_polygon(polygonid) {
578    var tmp_data = wpgmaps_localize_polygon_settings[polygonid];
579     var current_poly_id = polygonid;
580     var tmp_polydata = tmp_data['polydata'];
581     var WPGM_PathData = new Array();
582     for (tmp_entry2 in tmp_polydata) {
583         if (typeof tmp_polydata[tmp_entry2][0] !== "undefined") {
584            
585            WPGM_PathData.push(new google.maps.LatLng(tmp_polydata[tmp_entry2][0], tmp_polydata[tmp_entry2][1]));
586        }
587     }
588     if (tmp_data['lineopacity'] === null || tmp_data['lineopacity'] === "") {
589         tmp_data['lineopacity'] = 1;
590     }
591     
592     var bounds = new google.maps.LatLngBounds();
593     for (i = 0; i < WPGM_PathData.length; i++) {
594       bounds.extend(WPGM_PathData[i]);
595     }
596
597    WPGM_Path_Polygon[polygonid] = new google.maps.Polygon({
598         path: WPGM_PathData,
599         clickable: true, /* must add option for this */ 
600         strokeColor: "#"+tmp_data['linecolor'],
601         fillOpacity: tmp_data['opacity'],
602         strokeOpacity: tmp_data['lineopacity'],
603         fillColor: "#"+tmp_data['fillcolor'],
604         strokeWeight: 2,
605         map: MYMAP.map
606   });
607   WPGM_Path_Polygon[polygonid].setMap(MYMAP.map);
608
609    polygon_center = bounds.getCenter();
610
611    if (tmp_data['title'] !== "") {
612     infoWindow_poly[polygonid] = new google.maps.InfoWindow();
613     google.maps.event.addListener(WPGM_Path_Polygon[polygonid], 'click', function(event) {
614         infoWindow_poly[polygonid].setPosition(event.latLng);
615         content = "";
616         if (tmp_data['link'] !== "") {
617             var content = "<a href='"+tmp_data['link']+"'>"+tmp_data['title']+"</a>";
618         } else {
619             var content = tmp_data['title'];
620         }
621		 if(!wpgmaps_localize_global_settings["wpgmza_settings_disable_infowindows"])
622		 {
623			infoWindow_poly[polygonid].setContent(content);
624			infoWindow_poly[polygonid].open(MYMAP.map,this.position);
625		 }
626     }); 
627    }
628
629
630    
631}
632function add_polyline(polyline) {
633    
634    
635    var tmp_data = wpgmaps_localize_polyline_settings[polyline];
636
637    var current_poly_id = polyline;
638    var tmp_polydata = tmp_data['polydata'];
639    var WPGM_Polyline_PathData = new Array();
640    for (tmp_entry2 in tmp_polydata) {
641        if (typeof tmp_polydata[tmp_entry2][0] !== "undefined" && typeof tmp_polydata[tmp_entry2][1] !== "undefined") {
642            var lat = tmp_polydata[tmp_entry2][0].replace(')', '');
643            lat = lat.replace('(','');
644            var lng = tmp_polydata[tmp_entry2][1].replace(')', '');
645            lng = lng.replace('(','');
646            WPGM_Polyline_PathData.push(new google.maps.LatLng(lat, lng));
647        }
648         
649         
650    }
651     if (tmp_data['lineopacity'] === null || tmp_data['lineopacity'] === "") {
652         tmp_data['lineopacity'] = 1;
653     }
654
655    WPGM_Path[polyline] = new google.maps.Polyline({
656         path: WPGM_Polyline_PathData,
657         strokeColor: "#"+tmp_data['linecolor'],
658         strokeOpacity: tmp_data['opacity'],
659         strokeWeight: tmp_data['linethickness'],
660         map: MYMAP.map
661   });
662   WPGM_Path[polyline].setMap(MYMAP.map);
663    
664    
665}
666    
667
668jQuery("body").on("keypress","#addressInput", function(event) {
669  if ( event.which == 13 ) {
670     jQuery('.wpgmza_sl_search_button').trigger('click');
671  }
672});
673var autocomplete;
674function fillInAddress() {
675  // Get the place details from the autocomplete object.
676  var place = autocomplete.getPlace();
677}
678
679wpgmza_create_places_autocomplete();
680
681
682function searchLocations(map_id) {
683    var address = document.getElementById("addressInput").value;
684    var geocoder = new google.maps.Geocoder();
685
686    if (typeof wpgmaps_localize[wpgmaps_mapid]['other_settings']['wpgmza_store_locator_restrict'] === "undefined" || wpgmaps_localize[wpgmaps_mapid]['other_settings']['wpgmza_store_locator_restrict'] === "" )  {
687	    geocoder.geocode({address: address}, function(results, status) {
688	      if (status === google.maps.GeocoderStatus.OK) {
689	           searchLocationsNear(map_id,results[0].geometry.location);
690	      } else {
691	           alert(address + ' not found');
692	      }
693	    });
694	} else {
695	    geocoder.geocode({address: address,componentRestrictions: {country: wpgmaps_localize[wpgmaps_mapid]['other_settings']['wpgmza_store_locator_restrict']}}, function(results, status) {
696	      if (status === google.maps.GeocoderStatus.OK) {
697	           searchLocationsNear(map_id,results[0].geometry.location);
698	      } else {
699	           alert(address + ' not found');
700	      }
701	    });
702	}
703}
704function clearLocations() {
705    infoWindow.close();
706}
707function searchLocationsNear(mapid,center_searched) {
708    clearLocations();
709    var distance_type = wpgmaps_localize[mapid].other_settings.store_locator_distance;
710	
711    var radius = document.getElementById('radiusSelect').value;
712	var zoomie = wpgmza_get_zoom_from_radius(radius);
713	
714    MYMAP.init("#wpgmza_map", center_searched, zoomie, 3);
715    MYMAP.placeMarkers(wpgmaps_markerurl+'?u='+UniqueCode,wpgmaps_localize[wpgmaps_mapid].id,radius,center_searched,distance_type);
716}
717
718function toRad(Value) {
719    /** Converts numeric degrees to radians */
720    return Value * Math.PI / 180;
721}
722
723(function($) {
724	
725	if(!window.WPGMZA)
726		window.WPGMZA = {};
727	
728	WPGMZA.hexToRgba = function(hex) {
729		var c;
730		if(/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)){
731			c= hex.substring(1).split('');
732			if(c.length== 3){
733				c= [c[0], c[0], c[1], c[1], c[2], c[2]];
734			}
735			c= '0x'+c.join('');
736			
737			return {
738				r: (c>>16)&255,
739				g: (c>>8)&255,
740				b: c&255,
741				a: 1
742			};
743		}
744		throw new Error('Bad Hex');
745	}
746	
747	WPGMZA.rgbaToString = function(rgba) {
748		return "rgba(" + rgba.r + ", " + rgba.g + ", " + rgba.b + ", " + rgba.a + ")";
749	}
750	
751	WPGMZA.ModernStoreLocator = function(map_id) {
752		var self = this;
753		
754		var original = $(".wpgmza_sl_search_button").closest(".wpgmza_sl_main_div");
755		
756		if(!original.length)
757			return;
758		
759		// Build / re-arrange elements
760		this.element = $("<div class='wpgmza-modern-store-locator'><div class='wpgmza-inner'><!--<i class='fas fa-bars'></i>--></div></div>")[0];
761		
762		var inner = $(this.element).find(".wpgmza-inner");
763		
764		MYMAP.map.controls[google.maps.ControlPosition.TOP_CENTER].push(this.element);
765		
766		inner.append($(original).find( "#addressInput" ));
767		inner.append($(original).find( "select.wpgmza_sl_radius_select" ));
768		
769		// Buttons
770		this.searchButton = $(original).find( ".wpgmza_sl_search_button" );
771		inner.append(this.searchButton);
772		
773		this.resetButton = $(original).find( ".wpgmza_sl_reset_button_div>input" );
774		inner.append(this.resetButton);
775		
776		// Distance type
777		inner.append($("#wpgmza_distance_type_" + map_id));
778		
779		// Remove original element
780		$(original).remove();
781		
782		// Event listeners
783		$(this.element).find("input, select").on("focus", function() {
784			$(inner).addClass("active");
785		});
786		
787		$(this.element).find("input, select").on("blur", function() {
788			$(inner).removeClass("active");
789		});
790	}
791
792	WPGMZA.GoogleAPIErrorHandler = function() {
793		var _error = console.error;
794		
795		console.error = function(message)
796		{
797			var m = message.match(/^Google Maps API error: (\w+) (.+)/);
798			
799			if(m)
800			{
801				var friendlyMessage = m[1].replace(/([A-Z])/g, " $1") + " - See " + m[2] + " for more information";
802				alert(friendlyMessage);
803			}
804			
805			_error.apply(this, arguments);
806		}
807	}
808	
809	WPGMZA.googleAPIErrorHandler = new WPGMZA.GoogleAPIErrorHandler();
810	
811	/**
812	 * This module is the modern store locator circle
813	 * @constructor
814	 */
815	WPGMZA.ModernStoreLocatorCircle = function(map_id, settings) {
816		var self = this;
817		
818		this.map = MYMAP.map;
819		
820		this.canvasLayer = new CanvasLayer({
821			map: this.map,
822			resizeHandler: function(event) {
823				self.onResize(event);
824			},
825			updateHandler: function(event) {
826				self.onUpdate(event);
827			},
828			animate: true,
829			resolutionScale: this.getResolutionScale()
830        });
831		
832		this.settings = {
833			center: new google.maps.LatLng(0, 0),
834			radius: 1,
835			color: "#63AFF2",
836			
837			shadowColor: "white",
838			shadowBlur: 2,
839			
840			centerRingRadius: 10,
841			centerRingLineWidth: 3,
842
843			numInnerRings: 9,
844			innerRingLineWidth: 1,
845			innerRingFade: true,
846			
847			numOuterRings: 7,
848			
849			ringLineWidth: 1,
850			
851			mainRingLineWidth: 2,
852			
853			numSpokes: 6,
854			spokesStartAngle: Math.PI / 2,
855			
856			numRadiusLabels: 6,
857			radiusLabelsStartAngle: Math.PI / 2,
858			radiusLabelFont: "13px sans-serif",
859			
860			visible: false
861		};
862		
863		if(settings)
864			this.setOptions(settings);
865	}
866	
867	WPGMZA.ModernStoreLocatorCircle.createInstance = function(map_id, settings) {
868		return new WPGMZA.ModernStoreLocatorCircle(map_id, settings);
869	}
870	
871	WPGMZA.ModernStoreLocatorCircle.prototype.destroy = function() {
872		if(this.canvasLayer) {
873			this.canvasLayer.setOptions({
874				animate: false,
875				updateHandler: null,
876				resizeHandler: null,
877				map: null
878			});
879		}
880	}
881	
882	WPGMZA.ModernStoreLocatorCircle.prototype.onResize = function(event) { 
883		this.draw();
884	}
885	
886	WPGMZA.ModernStoreLocatorCircle.prototype.onUpdate = function(event) { 
887		this.draw();
888	}
889	
890	WPGMZA.ModernStoreLocatorCircle.prototype.setOptions = function(options) {
891		for(var name in options)
892		{
893			var functionName = "set" + name.substr(0, 1).toUpperCase() + name.substr(1);
894			
895			if(typeof this[functionName] == "function")
896				this[functionName](options[name]);
897			else
898				this.settings[name] = options[name];
899		}
900		this.canvasLayer.scheduleUpdate();
901	}
902	
903	WPGMZA.ModernStoreLocatorCircle.prototype.getResolutionScale = function() {
904		return window.devicePixelRatio || 1;
905	}
906	
907	WPGMZA.ModernStoreLocatorCircle.prototype.getCenter = function() {
908		return this.getPosition();
909	}
910	
911	WPGMZA.ModernStoreLocatorCircle.prototype.setCenter = function(value) {
912		this.setPosition(value);
913	}
914	
915	WPGMZA.ModernStoreLocatorCircle.prototype.getPosition = function() {
916		return this.settings.center;
917	}
918	
919	WPGMZA.ModernStoreLocatorCircle.prototype.setPosition = function(position) {
920		this.settings.center = position;
921		this.canvasLayer.scheduleUpdate();
922	}
923	
924	WPGMZA.ModernStoreLocatorCircle.prototype.getRadius = function() {
925		return this.settings.radius;
926	}
927	
928	WPGMZA.ModernStoreLocatorCircle.prototype.setRadius = function(radius) {
929		this.settings.radius = radius;
930		this.canvasLayer.scheduleUpdate();
931	}
932	
933	WPGMZA.ModernStoreLocatorCircle.prototype.getVisible = function(visible) {
934		return this.settings.visible;
935	}
936	
937	WPGMZA.ModernStoreLocatorCircle.prototype.setVisible = function(visible) {
938		this.settings.visible = visible;
939		this.canvasLayer.scheduleUpdate();
940	}
941	
942	/**
943	 * This function transforms a km radius into canvas space
944	 * @return number
945	 */
946	WPGMZA.ModernStoreLocatorCircle.prototype.getTransformedRadius = function(km) {
947		var multiplierAtEquator = 0.006395;
948		var spherical = google.maps.geometry.spherical;
949		
950		var center = this.settings.center;
951		var equator = new google.maps.LatLng({
952			lat: 0.0,
953			lng: 0.0
954		});
955		var latitude = new google.maps.LatLng({
956			lat: center.lat(),
957			lng: 0.0
958		});
959		
960		var offsetAtEquator = spherical.computeOffset(equator, km * 1000, 90);
961		var offsetAtLatitude = spherical.computeOffset(latitude, km * 1000, 90);
962		
963		var factor = offsetAtLatitude.lng() / offsetAtEquator.lng();
964		
965		return km * multiplierAtEquator * factor;
966	}
967	
968	WPGMZA.ModernStoreLocatorCircle.prototype.draw = function() {
969		// clear previous canvas contents
970		var canvasLayer = this.canvasLayer;
971		var settings = this.settings;
972		
973        var canvasWidth = canvasLayer.canvas.width;
974        var canvasHeight = canvasLayer.canvas.height;
975		
976		var map = MYMAP.map;
977		var resolutionScale = this.getResolutionScale();
978		
979		context = canvasLayer.canvas.getContext('2d');
980		
981        context.clearRect(0, 0, canvasWidth, canvasHeight);
982
983		if(!settings.visible)
984			return;
985		
986		context.shadowColor = settings.shadowColor;
987		context.shadowBlur = settings.shadowBlur;
988		
989		// NB: 2018/02/13 - Left this here in case it needs to be calibrated more accurately
990		/*if(!this.testCircle)
991		{
992			this.testCircle = new google.maps.Circle({
993				strokeColor: "#ff0000",
994				strokeOpacity: 0.5,
995				strokeWeight: 3,
996				map: this.map,
997				center: this.settings.center
998			});
999		}
1000		
1001		this.testCircle.setCenter(settings.center);
1002		this.testCircle.setRadius(settings.radius * 1000);*/
1003		
1004        /* We need to scale and translate the map for current view.
1005         * see https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates
1006         */
1007        var mapProjection = map.getProjection();
1008
1009        /**
1010         * Clear transformation from last update by setting to identity matrix.
1011         * Could use context.resetTransform(), but most browsers don't support
1012         * it yet.
1013         */
1014        context.setTransform(1, 0, 0, 1, 0, 0);
1015        
1016        // scale is just 2^zoom
1017        // If canvasLayer is scaled (with resolutionScale), we need to scale by
1018        // the same amount to account for the larger canvas.
1019        var scale = Math.pow(2, map.zoom) * resolutionScale;
1020        context.scale(scale, scale);
1021
1022        /* If the map was not translated, the topLeft corner would be 0,0 in
1023         * world coordinates. Our translation is just the vector from the
1024         * world coordinate of the topLeft corder to 0,0.
1025         */
1026        var offset = mapProjection.fromLatLngToPoint(canvasLayer.getTopLeft());
1027        context.translate(-offset.x, -offset.y);
1028
1029        // project rectLatLng to world coordinates and draw
1030        var worldPoint = mapProjection.fromLatLngToPoint(this.settings.center);
1031		var rgba = WPGMZA.hexToRgba(settings.color);
1032		var ringSpacing = this.getTransformedRadius(settings.radius) / (settings.numInnerRings + 1);
1033		
1034		// TODO: Implement gradients for color and opacity
1035		
1036		// Inside circle (fixed?)
1037        context.strokeStyle = settings.color;
1038		context.lineWidth = (1 / scale) * settings.centerRingLineWidth;
1039		
1040		context.beginPath();
1041		context.arc(
1042			worldPoint.x, 
1043			worldPoint.y, 
1044			this.getTransformedRadius(settings.centerRingRadius) / scale, 0, 2 * Math.PI
1045		);
1046		context.stroke();
1047		context.closePath();
1048		
1049		// Spokes
1050		var radius = this.getTransformedRadius(settings.radius) + (ringSpacing * settings.numOuterRings) + 1;
1051		var grad = context.createRadialGradient(0, 0, 0, 0, 0, radius);
1052		var rgba = WPGMZA.hexToRgba(settings.color);
1053		var start = WPGMZA.rgbaToString(rgba), end;
1054		var spokeAngle;
1055		
1056		rgba.a = 0;
1057		end = WPGMZA.rgbaToString(rgba);
1058		
1059		grad.addColorStop(0, start);
1060		grad.addColorStop(1, end);
1061		
1062		context.save();
1063		
1064		context.translate(worldPoint.x, worldPoint.y);
1065		context.strokeStyle = grad;
1066		context.lineWidth = 2 / scale;
1067		
1068		for(var i = 0; i < settings.numSpokes; i++)
1069		{
1070			spokeAngle = settings.spokesStartAngle + (Math.PI * 2) * (i / settings.numSpokes);
1071			
1072			x = Math.cos(spokeAngle) * radius;
1073			y = Math.sin(spokeAngle) * radius;
1074			
1075			context.setLineDash([2 / scale, 15 / scale]);
1076			
1077			context.beginPath();
1078			context.moveTo(0, 0);
1079			context.lineTo(x, y);
1080			context.stroke();
1081		}
1082		
1083		context.setLineDash([]);
1084		
1085		context.restore();
1086		
1087		// Inner ringlets
1088		context.lineWidth = (1 / scale) * settings.innerRingLineWidth;
1089		
1090		for(var i = 1; i <= settings.numInnerRings; i++)
1091		{
1092			var radius = i * ringSpacing;
1093			
1094			if(settings.innerRingFade)
1095				rgba.a = 1 - (i - 1) / settings.numInnerRings;
1096			
1097			context.strokeStyle = WPGMZA.rgbaToString(rgba);
1098			
1099			context.beginPath();
1100			context.arc(worldPoint.x, worldPoint.y, radius, 0, 2 * Math.PI);
1101			context.stroke();
1102			context.closePath();
1103		}
1104		
1105		// Main circle
1106		context.strokeStyle = settings.color;
1107		context.lineWidth = (1 / scale) * settings.centerRingLineWidth;
1108		
1109		context.beginPath();
1110		context.arc(worldPoint.x, worldPoint.y, this.getTransformedRadius(settings.radius), 0, 2 * Math.PI);
1111		context.stroke();
1112		context.closePath();
1113		
1114		// Outer ringlets
1115		var radius = radius + ringSpacing;
1116		for(var i = 0; i < settings.numOuterRings; i++)
1117		{
1118			if(settings.innerRingFade)
1119				rgba.a = 1 - i / settings.numOuterRings;
1120			
1121			context.strokeStyle = WPGMZA.rgbaToString(rgba);
1122			
1123			context.beginPath();
1124			context.arc(worldPoint.x, worldPoint.y, radius, 0, 2 * Math.PI);
1125			context.stroke();
1126			context.closePath();
1127		
1128			radius += ringSpacing;
1129		}
1130		
1131		// Text
1132		if(settings.numRadiusLabels > 0)
1133		{
1134			var m;
1135			var radius = this.getTransformedRadius(settings.radius);
1136			var clipRadius = (12 * 1.1) / scale;
1137			var x, y;
1138			
1139			if(m = settings.radiusLabelFont.match(/(\d+)px/))
1140				clipRadius = (parseInt(m[1]) / 2 * 1.1) / scale;
1141			
1142			context.font = settings.radiusLabelFont;
1143			context.textAlign = "center";
1144			context.textBaseline = "middle";
1145			context.fillStyle = settings.color;
1146			
1147			context.save();
1148			
1149			context.translate(worldPoint.x, worldPoint.y)
1150			
1151			for(var i = 0; i < settings.numRadiusLabels; i++)
1152			{
1153				var spokeAngle = settings.radiusLabelsStartAngle + (Math.PI * 2) * (i / settings.numRadiusLabels);
1154				var textAngle = spokeAngle + Math.PI / 2;
1155				var text = settings.radiusString;
1156				var width;
1157				
1158				if(Math.sin(spokeAngle) > 0)
1159					textAngle -= Math.PI;
1160				
1161				x = Math.cos(spokeAngle) * radius;
1162				y = Math.sin(spokeAngle) * radius;
1163				
1164				context.save();
1165				
1166				context.translate(x, y);
1167				
1168				context.rotate(textAngle);
1169				context.scale(1 / scale, 1 / scale);
1170				
1171				width = context.measureText(text).width;
1172				height = width / 2;
1173				context.clearRect(-width, -height, 2 * width, 2 * height);
1174				
1175				context.fillText(settings.radiusString, 0, 0);
1176				
1177				context.restore();
1178			}
1179			
1180			context.restore();
1181		}
1182	}
1183	
1184})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.