PageSourceSearch

https://www.findlatitudeandlongitude.com/includes/javascript/map_v3_1.js?v=L1.300

js findlatitudeandlongitude.com collected 2026-10-02 07:50:14 UTC 29,946 bytes, 819 lines download raw bytes

1/* All code copyright David B. Zwiefelhofer. All rights reserved. No parts may be used without explicit written consent. */
2
3	function init_map() {
4		var image = {
5			url: "http://"+host+"/images/blue-circle.png",
6			size: new google.maps.Size(34, 34),
7			origin: new google.maps.Point(0,0),
8			anchor: new google.maps.Point(15,15),
9			scaledSize: new google.maps.Size(34, 34)
10		};
11		var image_shadow = {
12			url: "http://"+host+"/images/blue-circle-shadow.png",
13			size: new google.maps.Size(34, 34),
14			origin: new google.maps.Point(0,0),
15			anchor: new google.maps.Point(15,15),
16			scaledSize: new google.maps.Size(34, 34)
17		};
18		
19		var mapOptions = {
20		  zoom: zoom,
21		  center: init_latlng,
22		  draggableCursor:'crosshair',
23		  anchorPoint:new google.maps.Point(15, 15),
24		  mapTypeId: eval("google.maps.MapTypeId."+map_type),
25		  scaleControl: true,
26		  overviewMapControl: true,
27		  overviewMapControlOptions:{opened:true}
28		}
29		map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
30		
31		marker = new google.maps.Marker({
32			position: init_latlng,
33			icon: image,
34			shadow: image_shadow
35		});
36		
37		geocoder = new google.maps.Geocoder();
38		
39		// To add the marker to the map, call setMap();
40		marker.setMap(map);
41
42		google.maps.event.addListener(map, 'mouseout', function(event) {
43			document.getElementById("dyn_lat_HMS").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">cursor off map</span>";
44			document.getElementById("dyn_lon_HMS").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">cursor off map</span>";
45			document.getElementById("dyn_lat_DMD").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\"></span>";
46			document.getElementById("dyn_lon_DMD").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\"></span>";
47			document.getElementById("dyn_lat").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\"></span>";
48			document.getElementById("dyn_lon").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\"></span>";
49		});
50
51		google.maps.event.addListener(map, 'mousemove', function(event) {
52			document.getElementById("dyn_lat_HMS").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lat(event.latLng.lat())+"</span>";
53			document.getElementById("dyn_lon_HMS").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lon(event.latLng.lng())+"</span>";
54			document.getElementById("dyn_lat_DMD").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value olive\">"+dec_to_DMD_lat(event.latLng.lat())+"</span>";
55			document.getElementById("dyn_lon_DMD").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value olive\">"+dec_to_DMD_lon(event.latLng.lng())+"</span>";
56			
57		//	document.getElementById("dyn_lat").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">" + (Math.round(event.latLng.lat()*1000000)/1000000)+ "&deg;</span>";
58			var dyn_lat = "<span class=\"label\">Latitude:</span><span class=\"value\">";
59			dyn_lat += (Math.round(event.latLng.lat()*1000000)/1000000);
60			dyn_lat += "&deg;</span>";
61			document.getElementById("dyn_lat").innerHTML = dyn_lat;
62			
63		//	document.getElementById("dyn_lon").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">"+(Math.round(event.latLng.lng()*1000000)/1000000)+"&deg;</span>";
64			var dyn_lon = "<span class=\"label\">Longitude:</span><span class=\"value\">";
65			dyn_lon += (Math.round(event.latLng.lng()*1000000)/1000000);
66			dyn_lon += "&deg;</span>";
67			document.getElementById("dyn_lon").innerHTML = dyn_lon;
68		});
69
70		google.maps.event.addListener(map, 'click', function(event){ 
71			get_address(event.latLng);
72		});
73
74		google.maps.event.addListener(map, 'zoom_changed', function(oldZoomLevel, newZoomLevel) {
75			var newZoomLevel = map.getZoom();
76			element = document.getElementById("zoom_display");
77			element.innerHTML = "<span class=\"label\">Zoom:</span><span class=\"value\">"+newZoomLevel+"</span>";
78			SetCookie("map1_zoom", newZoomLevel, exp);
79			update_current_link();;
80		});
81
82		google.maps.event.addListener(map, 'maptypeid_changed', function() {
83			var map_type_name = map.getMapTypeId();
84			document.getElementById("map_type_span").innerHTML = "<span class=\"label\">Type:</span><span class=\"value\">"+map_type_name+"</span>";	
85			save_map_type();
86			update_current_link();
87		});
88
89	}
90
91	function init_reverse_map() {
92		var image = {
93			url: "http://"+host+"/images/blue-circle.png",
94			size: new google.maps.Size(34, 34),
95			origin: new google.maps.Point(0,0),
96			anchor: new google.maps.Point(15,15),
97			scaledSize: new google.maps.Size(34, 34)
98		};
99		var image_shadow = {
100			url: "http://"+host+"/images/blue-circle-shadow.png",
101			size: new google.maps.Size(34, 34),
102			origin: new google.maps.Point(0,0),
103			anchor: new google.maps.Point(15,15),
104			scaledSize: new google.maps.Size(34, 34)
105		};
106		
107		var mapOptions = {
108		  zoom: zoom,
109		  center: init_latlng,
110		  draggableCursor:'crosshair',
111		  anchorPoint:new google.maps.Point(15, 15),
112		  mapTypeId: eval("google.maps.MapTypeId."+map_type),
113		  scaleControl: true,
114		  overviewMapControl: true,
115		  overviewMapControlOptions:{opened:true}
116		}
117		map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
118		
119		marker = new google.maps.Marker({
120			position: init_latlng,
121			icon: image,
122			shadow: image_shadow
123		});
124		
125		geocoder = new google.maps.Geocoder();
126		
127		
128		// To add the marker to the map, call setMap();
129		marker.setMap(map);
130
131
132		google.maps.event.addListener(map, 'click', function(event){ get_address_rev(event.latLng); });
133
134		google.maps.event.addListener(map, 'zoom_changed', function(oldZoomLevel, newZoomLevel) {
135			var newZoomLevel = map.getZoom();
136			SetCookie("map1_zoom", newZoomLevel, exp);
137		});
138
139		google.maps.event.addListener(map, 'maptypeid_changed', function() {
140			save_map_type();
141		});
142
143	}
144
145	function init_search_map() {
146		var image = {
147			url: "http://"+host+"/images/blue-circle.png",
148			size: new google.maps.Size(34, 34),
149			origin: new google.maps.Point(0,0),
150			anchor: new google.maps.Point(15,15),
151			scaledSize: new google.maps.Size(34, 34)
152		};
153		var image_shadow = {
154			url: "http://"+host+"/images/blue-circle-shadow.png",
155			size: new google.maps.Size(34, 34),
156			origin: new google.maps.Point(0,0),
157			anchor: new google.maps.Point(15,15),
158			scaledSize: new google.maps.Size(34, 34)
159		};
160		
161		var mapOptions = {
162		  zoom: zoom,
163		  center: init_latlng,
164		  draggableCursor:'crosshair',
165		  anchorPoint:new google.maps.Point(15, 15),
166		  mapTypeId: eval("google.maps.MapTypeId."+map_type),
167		  scaleControl: true,
168		  overviewMapControl: true,
169		  overviewMapControlOptions:{opened:true}
170		}
171		map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
172		
173		marker = new google.maps.Marker({
174			position: init_latlng,
175			icon: image,
176			shadow: image_shadow
177		});
178		
179		geocoder = new google.maps.Geocoder();
180		
181		
182		// To add the marker to the map, call setMap();
183		marker.setMap(map);
184
185		google.maps.event.addListener(map, 'click', function(event){ 
186			get_address(event.latLng);
187		//	set_address_db(event.latlng)
188		//	set_point(event.latLng);
189		});
190
191		google.maps.event.addListener(map, 'zoom_changed', function(oldZoomLevel, newZoomLevel) {
192			var newZoomLevel = map.getZoom();
193			SetCookie("map1_zoom", newZoomLevel, exp);
194		});
195
196		google.maps.event.addListener(map, 'maptypeid_changed', function() {
197			save_map_type();
198		});
199
200	}
201
202	function fetch_accuracy(str) {
203		var accuracy = 0;
204		switch (str) {
205			case 'ROOFTOP':
206				accuracy = 9;
207				break;
208			
209			case 'RANGE_INTERPOLATED':
210				accuracy = 8;
211				break;
212			
213			case 'GEOMETRIC_CENTER':
214				accuracy = 6;
215				break;
216			
217			case 'APPROXIMATE':
218				accuracy = 5;
219				break;
220			
221			default:
222				accuracy = 0;
223				break;	
224		}
225		return accuracy;
226	}
227
228	function fetch_status(str){
229		switch (str) {
230			case 'OK':
231				status = 200;
232				break;
233			
234			case 'INVALID_REQUEST':
235				status = 601;
236				break;
237			
238			case 'ZERO_RESULTS':
239				status = 602;
240				break;
241			
242			case 'OVER_QUERY_LIMIT':
243				status = 620;
244				break;
245			
246			case 'REQUEST_DENIED':
247				status = 610;
248				break;
249			
250			default:
251				status = 404;
252				break;	
253		}
254		return status;
255	}
256
257	function update_current_link(){
258		if (document.getElementById("current_link_span")) {
259		//	var lat = GetCookie("map1_lat");
260			var lat = Math.round(GetCookie("map1_lat")*1000000)/1000000;
261		//	var lon = GetCookie("map1_lon");
262			var lon = Math.round(GetCookie("map1_lon")*1000000)/1000000;
263			var zoom = GetCookie("map1_zoom");
264			var map_type = GetCookie("map1_map_type");
265			var linkstr = "<a href=\"http://"+host+"/?lat="+lat+"&lon="+lon+"&zoom="+zoom+"&map_type="+map_type+"\">link</a>";
266			document.getElementById("current_link_span").innerHTML = "<span class=\"label\">current link:</span><span class=\"value\">"+linkstr+"</span>";
267		}
268	}
269	
270	function get_geocode_status_text(code){
271		var code_text = "";
272		switch(code){
273			case 200:
274				code_text = "Successful geocode.";
275				break;
276			case 400:
277				code_text = "Bad request.";
278				break;
279			case 500:
280				code_text = "Geocode failed. Reason unknown.";
281				break;
282			case 601:
283				code_text = "Geocode failed. Location empty.";
284				break;
285			case 602:
286				code_text = "Geocode failed. Unknown location.";
287				break;
288			case 603:
289				code_text = "Geocode denied due to legal constraints.";
290				break;
291			case 604:
292				code_text = "Geocode failed. Unknown directions.";
293				break;
294			case 610:
295				code_text = "Geocode failed. Invalid API key.";
296				break;
297			case 620:
298				code_text = "Geocode failed. Request limit exceeded.";
299				break;
300			default:
301				code_text = "";
302				break;
303		}
304		return code_text;
305	}
306	
307	function get_geocode_accuracy_text(code){
308		var code_text = "";
309		switch(code){
310			case 0:
311				code_text = "Unknown location.";
312				break;
313			case 1:
314				code_text = "Country level.";
315				break;
316			case 2:
317				code_text = "Region (state, province, etc.) level.";
318				break;
319			case 3:
320				code_text = "Sub-region (county, municipality, etc.) level.";
321				break;
322			case 4:
323				code_text = "Town (city, village) level.";
324				break;
325			case 5:
326				code_text = "Post code level.";
327				break;
328			case 6:
329				code_text = "Street level.";
330				break;
331			case 7:
332				code_text = "Intersection level.";
333				break;
334			case 8:
335				code_text = "Address level.";
336				break;
337			case 9:
338				code_text = "Premise (building name, property name, etc.) level.";
339				break;
340			default:
341				code_text = "";
342				break;
343		}
344		return code_text;
345	}
346	
347	function good_lat(lat){
348		if (is_num(lat)){
349			return ((lat >
349 90) || (lat < -90)) ? false : true;
350		} else {
351			return false;
352		}
353	}
354	
355	function good_lon(lon){
356		if (is_num(lon)){
357			return ((lon > 180) || (lon < -180)) ? false : true;
358		} else {
359			return false;
360		}
361	}
362	
363	function load_latitude_longitude(lat, lon){
364		var point = new google.maps.LatLng(lat, lon);
365		map.setCenter(point);
366		SetCookie("map1_lat", lat, exp);
367		SetCookie("map1_lon", lon, exp);
368		document.getElementById("lat_HMS").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lat(lat)+"</span>";	
369		document.getElementById("lon_HMS").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lon(lon)+"</span>";	
370		document.getElementById("lat_DMD").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value olive\">"+dec_to_DMD(lat)+"</span>";	
371		document.getElementById("lon_DMD").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value olive\">"+dec_to_DMD(lon)+"</span>";	
372		document.getElementById("lat_dec").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">"+lat+"&deg;</span>";	
373		document.getElementById("lon_dec").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">"+lon+"&deg;</span>";	
374
375	//	move the marker
376		marker.setPosition(point);
377
378		update_current_link();
379	}
380	
381/*	First geocode the address, then if we have a valid result, load the resulting lat lon. */	
382	function load_address(address){
383		if (address.length){
384			var xmlhttp = create_xmlhttp();
385			var d = new Date();
386
387			document.getElementById("load_address_button").src = "http://"+host+"/images/waiting-16.gif";
388			serverPage = "http://"+host+"/processors/geocode-address-tweet-v3.php?loc="+address+"&time="+d.getTime();
389		//	serverPage = "http://"+host+"/processors/geocode-address.php?loc="+address+"&time="+d.getTime();
390			
391			if (debugging) {
392				document.getElementById("debugging").innerHTML = serverPage+"<br />"+document.getElementById("debugging").innerHTML;
393			}
394			
395			xmlhttp.open("GET", serverPage, true); // asynch param set to false for synch requests, true for asynch
396		
397			document.getElementById("load_rep").innerHTML = "";
398			
399		//	the following is executed when fetch-zip-lat-lon.php returns
400			xmlhttp.onreadystatechange = function() {
401				if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
402					var response = xmlhttp.responseText;
403					if (response.length > 0){
404						if (debugging){
405							document.getElementById("debugging").innerHTML = response +"<br />"+document.getElementById("debugging").innerHTML;
406						}
407						eval(response);
408					//	document.getElementById("load_rep").innerHTML = "Location successfully loaded.";
409					} else {
410						document.getElementById("load_rep").innerHTML = "Location geocode failed!";
411					}
412					//document.load_location.load_address_button.src = "http://"+host+"/images/load-button.png";
413					document.getElementById("load_address_button").src = "http://"+host+"/images/load-button.png";
414				} else if (xmlhttp.readyState == 4 && xmlhttp.status != 200){
415					document.getElementById("load_rep").innerHTML = "Error geocoding, status: "+xmlhttp.status;
416				//	document.load_location.load_address_button.src = "http://"+host+"/images/load-button.png";
417					document.getElementById("load_address_button").src = "http://"+host+"/images/load-button.png";
418				}
419			}
420	
421			xmlhttp.send(null);
422		} else {
423			alert("Please provide an address, city or other parameter in the \"Location\" field.");
424		}
425	}
426
427	function load_latlon(lat, lon, store_geocode_in){
428		var lat_result = good_lat(lat);
429		var lon_result = good_lon(lon);
430		if (lat_result && lon_result){
431			store_geocode = store_geocode_in; //  we only want to save geocodes from explicit lat/lon queries, not clicks, etc.
432			get_address(new google.maps.LatLng(lat, lon));
433			SetCookie("map1_lat", lat, exp);
434			SetCookie("map1_lon", lon, exp);
435			if (document.getElementById("load_rep")) {
436				document.getElementById("load_rep").innerHTML = "Latitude and longitude loaded.";
437			}
438		} else {
439			var msg = "";
440			if (!lat_result){
441				msg += "The latitude must not be less than -90 nor greater than 90. ";
442			}
443			if (!lon_result){
444				msg += "The longitude must not be less than -180 nor greater than 180. ";
445			}
446			alert("Please enter decimal values for the latitude and longitude. "+msg);
447		}
448	}
449	
450	function dispatch_main_form() {
451		var fm = document.load_location;
452		if (fm.address.hasFocus) {
453			load_address(fm.address.value);
454		} else if (fm.zipcode.hasFocus) {
455			load_zipcode(fm.zipcode.value);
456		} else {
457			load_latlon_parse(fm.lat.value, fm.lon.value);
458		}
459	}
460	
461	function load_latlon_parse(lat, lon){
462		var arr = lat.split(",");
463		
464		if (arr.length == 2){
465			lat = parse_lat_lon(trim(arr[0]));
466			lon = parse_lat_lon(trim(arr[1]));
467		} else {
468			lat = parse_lat_lon(lat);
469			lon = parse_lat_lon(lon);
470		}
471
472		load_latlon(lat, lon, true);
473	}
474	
475/*  */
476	function load_zipcode(zip){
477		if (zip.length){
478			var xmlhttp = create_xmlhttp();
479			var d = new Date();
480			document.getElementById("load_zipcode_button").src = "http://"+host+"/images/waiting-16.gif";
481			serverPage = "http://"+host+"/processors/fetch-zip-lat-lon.php?zip="+zip+"&time="+d.getTime();
482			xmlhttp.open("GET", serverPage, true); // asynch param set to false for synch requests, true for asynch
483		
484			document.getElementById("load_rep").innerHTML = "";
485			
486		//	the following is executed when fetch-zip-lat-lon.php returns
487			xmlhttp.onreadystatechange = function() {
488				if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
489					var response = xmlhttp.responseText;
490					if (response.length > 0){
491						eval(response);
492						document.getElementById("load_rep").innerHTML = "Postal code loaded.";
493						update_current_link();
494					} else {
495						document.getElementById("load_rep").innerHTML = "Postal code not found!";
496					}
497					document.getElementById("load_zipcode_button").src = "http://"+host+"/images/load-button.png";
498				} else if (xmlhttp.readyState == 4 && xmlhttp.status != 200){
499					document.getElementById("load_rep").innerHTML = "Error loading zip, status: "+xmlhttp.status;
500					document.getElementById("load_zipcode_button").src = "http://"+host+"/images/load-button.png";
501				}
502			}
503	
504			xmlhttp.send(null);
505		} else {
506			alert("Please provide a zip code.");
507		}
508	}
509
510	var exp = new Date();
511	var oneYearFromNow = exp.getTime() + (365 * 24 * 60 * 60 * 1000);
512	exp.setTime(oneYearFromNow);
513
514	function showAddress(results, status) {
515		var address = "";
516		var lat_address = "";
517		var lon_address = "";
518		var lat_lon = "";
519		var accuracy = "";
520		var lat = lon = 0;
521		if ((results) && (typeof results[0] != 'undefined')) {
522			address = results[0].formatted_address;
523			lat_address = (Math.round(results[0].geometry.location.lat()*1000000)/1000000)+"&deg;";
524			lon_address = (Math.round(results[0].geometry.location.lng()*1000000)/1000000)+"&deg;";
525			lat = results[0].geometry.location.lat();
526			lon = results[0].geometry.location.lng();
527			lat_lon = lat_address+", "+lon_address;
528			accuracy = results[0].types;
529		}
530		var address_el = document.getElementById("address");
531		if (address_el) {
532			address_el.innerHTML = "<span class=\"label\">Address:</span><span class=\"value\">"+address+"</span>";	
533		}
534		var lat_address_el = document.getElementById("lat_address");
535		if (lat_address_el) {
536			lat_address_el.innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">"+lat_address+"</span>";	
537		}
538		var lon_address_el = document.getElementById("lon_address");
539		if (lon_address_el) {
540			lon_address_el.innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">"+lon_address+"</span>";	
541		}
542		var lat_lon_el = document.getElementById("lat_lon");
543		if (lat_lon_el) {
544			lat_lon_el.innerHTML = "<span class=\"label\">Lat, Lng:</span><span class=\"value\">"+lat_lon+"</span>";	
545		}
546		var accuracy_el = document.getElementById("accuracy");
547		if (accuracy_el) {
548		//	accuracy_el.innerHTML = "<span class=\"label\">Accuracy:</span><span class=\"value\">"+fetch_accuracy(accuracy)+"</span>";	
549			accuracy_el.innerHTML = "<span class=\"label\">Accuracy:</span><span class=\"value\">"+accuracy+"</span>";	
550		}
551		var status_code_el = document.getElementById("status_code");
552		if (status_code_el) {
553			status_code_el.innerHTML = "<span class=\"label\">Status:</span><span class=\"value\">"+fetch_status(status)+"</span>";	
554		}
555		
556		var when = "";
557		var when_el = document.getElementById("when");
558		if (when_el) {
559			when_el.innerHTML = (when.length) ? "<span class=\"label\">When:</span><span class=\"value\">"+when+"</span>" : "";	
560		}
561
562		var IP = "";
563		var IP_el = document.getElementById("IP");
564		if (IP_el) {
565			IP_el.innerHTML = (IP.length) ? "<span class=\"label\">IP:</span><span class=\"value\">"+IP+"</span>" : "";	
566		}
567
568		var host = "";
569		var host_el = document.getElementById("host");
570		if (host_el) {
571			host_el.innerHTML = (host.length) ? "<span class=\"label\">Host:</span><span class=\"value\">"+host+"</span>" : "";	
572		}
573
574	//	update map coordinates report
575		if (document.getElementById("lat_dec_out")) {
576			document.getElementById("lat_dec_out").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">"+(Math.round(lat*1000000)/1000000)+"&deg;</span>";	
577			document.getElementById("lon_dec_out").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">"+(Math.round(lon*1000000)/1000000)+"&deg;</span>";	
578			document.getElementById("lat_HMS_out").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lat(lat)+"</span>";	
579			document.getElementById("lon_HMS_out").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lon(lon)+"</span>";
580			document.getElementById("lat_DMD_out").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value olive\">"+dec_to_DMD_lat(lat)+"</span>";	
581			document.getElementById("lon_DMD_out").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value olive\">"+dec_to_DMD_lon(lon)+"</span>";
582		}
583	}
584	
585	
586//	checks result of reverse geocode (response) and stores if successful, then calls showAddress to display result.
587	function showAndStoreAddress(results, status){
588		if (status == 'OK' && store_geocode) {
589		//	alert(status);
590			store_geocode = false; // clear the flag so we don't save for just any query
591			if (debugging){
592				document.getElementById("debugging").innerHTML = "In showAndStoreAddress."+"<br />"+document.getElementById("debugging").innerHTML;
593			}
594			var xmlhttp = create_xmlhttp();
595			var d = new Date();
596			if (document.getElementById("working")) {
597				document.getElementById("working").src = "http://"+host+"/images/waiting-16.gif";
598			}
599/*
600results[]: {
601 types[]: string,
602 formatted_address: string,
603 address_components[]: {
604   short_name: string,
605   long_name: string,
606   types[]: string
607 },
608 geometry: {
609   location: LatLng,
610   location_type: GeocoderLocationType
611   viewport: LatLngBounds,
612   bounds: LatLngBounds
613 }
614}
615*/
616		//	alert(results[0]);
617		//	alert(results[0].formatted_address+", "+results[0].geometry.location.lat()+", "+results[0].geometry.location.lng())
618			
619			serverPage = "http://"+host+"/processors/store-reverse-geocode.php?lat_in="+document.load_location.lat.value+"&lon_in="+document.load_location.lon.value+"&lat_out="+results[0].geometry.location.lat()+"&lon_out="+results[0].geometry.location.lng()+"&accuracy="+fetch_accuracy(results[0].geometry.location_type)+"&sescod="+document.load_location.sescod.value+"&status="+fetch_status(status)+"&address="+escape(results[0].formatted_address)+"&time="+d.getTime();
620		//	alert(serverPage);
621			if (debugging){
622				document.getElementById("debugging").innerHTML = "serverPage: "+serverPage+"<br />"+document.getElementById("debugging").innerHTML;
623				serverPage = serverPage+"&debugging=1"
624			}
625			xmlhttp.open("GET", serverPage, true); // asynch param set to false for synch requests, true for asynch
626		
627		//	document.getElementById("load_rep").innerHTML = "";
628			
629		//	the following is executed when fetch-zip-lat-lon.php returns
630			xmlhttp.onreadystatechange = function() {
631				if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
632					if (xmlhttp.responseText.length > 0){
633						if (debugging){
634							document.getElementById("debugging").innerHTML = xmlhttp.responseText+"<br />"+document.getElementById("debugging").innerHTML;
635						}
636						eval(xmlhttp.responseText);
637			//			document.getElementById("load_rep").innerHTML = "Location successfully loaded.";
638					} else {
639			//			document.getElementById("load_rep").innerHTML = "Location geocode failed!";
640					}
641					if (debugging){
642						document.getElementById("debugging").innerHTML = "xmlhttp.responseText: "+xmlhttp.responseText+"<br />"+document.getElementById("debugging").innerHTML;
643					}
644				} else if (xmlhttp.readyState == 4 && xmlhttp.status != 200){
645				//	document.getElementById("load_rep").innerHTML = "Error geocoding, status: "+xmlhttp.status;
646				//	document.load_location.load_address_button.src = "http://"+host+"/images/load-button.png";
647					if (debugging){
648						document.getElementById("debugging").innerHTML = "xmlhttp.status: "+xmlhttp.status+"<br />"+document.getElementById("debugging").innerHTML;
649					}
650				}
651				if (document.getElementById("working")) {
652					document.getElementById("working").src = "http://"+host+"/images/pix.gif";
653					document.getElementById("working").width = 16;
654					document.getElementById("working").height = 16;
655				}
656			}
657	
658			xmlhttp.send(null);
659		}
660
661		showAddress(results, status);
662	}
663	
664//	returns true if specified latlng has already been reverse geocoded and stored in db
665//	also sets the location display info if true, else returns false
666	function set_address_db(latlng){
667		if (debugging){
668			document.getElementById("debugging").innerHTML = "In set_address_db(latlng)."+"<br />"+document.getElementById("debugging").innerHTML;
669		}
670		var xmlhttp = create_xmlhttp();
671		var d = new Date();
672		var result = false;
673		if (document.getElementById("working")) {
674			document.getElementById("working").src = "http://"+host+"/images/waiting-16.gif";
675		}
676		serverPage = "http://"+host+"/processors/get-reverse-geocode.php?lat_in="+latlng.lat()+"&lon_in="+latlng.lng()+"&time="+d.getTime();
677		if (debugging){
678			document.getElementById("debugging").innerHTML = "serverPage: "+serverPage+"<br />"+document.getElementById("debugging").innerHTML;
679		}
680		xmlhttp.open("GET", serverPage, true); // asynch param set to false for synch requests, true for asynch
681	
682		xmlhttp.onreadystatechange = function() {
683			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
684				if (xmlhttp.responseText.length > 0){
685					if (debugging){
686						document.getElementById("debugging").innerHTML = xmlhttp.responseText+"<br />"+document.getElementById("debugging").innerHTML;
687					}
688					eval(xmlhttp.responseText);
689				} else {
690					result = false;
691				}
692			} else if (xmlhttp.readyState == 4 && xmlhttp.status != 200){
693				if (debugging){
694					document.getElementById("debugging").innerHTML = "xmlhttp.status: "+xmlhttp.status+"<br />"+document.getElementById("debugging").innerHTML;
695				}
696				result = false;
697			}
698			if (document.getElementById("working")) {
699				document.getElementById("working").src = "http://"+host+"/images/pix.gif";
700				document.getElementById("working").width = 16;
701				document.getElementById("working").height = 16;
702			}
703		//	if we don't have it stored, geocode it.
704			if (!result){
705				geocoder.geocode({'latLng': latlng}, showAndStoreAddress);
706			}
707			update_current_link();
708		}
709
710		xmlhttp.send(null);
711		return result;
712	}
713	
714	function set_point(latLng) {
715		map.setCenter(latLng);
716		
717	//	move the marker
718		marker.setPosition(latLng);
719	
720		if (debugging) {
721			document.getElementById("debugging").innerHTML = "lat: "+latLng.lat()+"<br />lon:"+latLng.lng()+"<br />"+document.getElementById("debugging").innerHTML;
722		}
723	}
724	
725	function get_address(latLng) {
726	//	center map on click point
727		map.setCenter(latLng);
728	
729	//	save point to cookie
730		SetCookie("map1_lat", latLng.lat(), exp);
731		SetCookie("map1_lon", latLng.lng(), exp);
732	
733	//	update map coordinates report
734		if (document.getElementById("lat_dec")) {
735			document.getElementById("lat_dec").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">"+(Math.round(latLng.lat()*1000000)/1000000)+"&deg;</span>";	
736			document.getElementById("lon_dec").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">"+(Math.round(latLng.lng()*1000000)/1000000)+"&deg;</span>";	
737			document.getElementById("lat_HMS").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lat(latLng.lat())+"</span>";	
738			document.getElementById("lon_HMS").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lon(latLng.lng())+"</span>";
739			document.getElementById("lat_DMD").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value olive\">"+dec_to_DMD_lat(latLng.lat())+"</span>";	
740			document.getElementById("lon_DMD").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value olive\">"+dec_to_DMD_lon(latLng.lng())+"</span>";
741		}
742	
743	//	move the marker
744		marker.setPosition(latLng);
745			
746	//	check if we've already reverse geocoded this, if yes return stored result, if not store new result
747		set_address_db(latLng); // will call getLocations and update_current_link if necessary
748	}
749	
750	
751//	sets latitude and longitude fields on find-address-from-latitude-and-longitude.php then calls get_address
752	function get_address_rev(latLng){
753		if ((document.load_location) && (document.load_location.lat)) {
754			document.load_location.lat.value = latLng.lat();
755			document.load_location.lon.value = latLng.lng();
756		}
757		get_address(latLng);
758	}
759
760
761	function reset_map(){
762		document.getElementById("reset_map_button").src = "http://"+host+"/images/waiting-16.gif";
763		DeleteCookie("map1_lat");
764		DeleteCookie("map1_lon");
765		DeleteCookie("map1_zoom");
766		DeleteCookie("map1_map_type");
767
768		location.href = self_pg;
769	}
770
771	function change_map_height(delta) {
772		var el = document.getElementById("map_canvas");
773		var ht_o = parseInt(el.style.height.substr(0, el.style.height.length-2));
774		var ht_n = ht_o + delta;
775		ht_n = (ht_n >= 200) ? ht_n : ht_o;
776		el.style.height = ht_n+"px";
777		update_dim_display();
778
779		var expdate = new Date();
780		FixCookieDate(expdate);
781		expdate.setTime(expdate.getTime() + (365*24*60*60*1000)); // expire in one year
782
783		SetCookie("y", ht_n, expdate);
784	}
785	
786	function update_dim_display() {
787		var el = document.getElementById("map_dims");
788		var m_el = document.getElementById("map_canvas");
789		if ( (el) && (m_el) )
790			el.innerHTML = (m_el.offsetWidth-2) + " x " + (m_el.offsetHeight-2) + " pixels";
791	}
792	
793	window.onresize = function() {
794		update_dim_display();
795	//	window.onresize = update_dim_display();
796	}
797
798	function save_map_type() {
799		var map_type_name = map.getMapTypeId();
800
801		switch (map_type_name){
802			case 'map':
803				map_type = 'ROADMAP';
804				break;
805			case 'satellite':
806				map_type = 'SATELLITE';
807				break;
808			case 'hybrid':
809				map_type = 'HYBRID';
810				break;
811			case 'terrain':
812				map_type = 'TERRAIN';
813				break;
814			default:
815				map_type = 'ROADMAP';
816				break;
817		}
818		SetCookie("map1_map_type", map_type, exp);
819	}

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.