				// Create a marker whose info window displays a link to the place.
				function createMarker(point, html, icon) {
					var marker = new GMarker(point,icon);
					// Show the link in the info window when it is clicked.
					GEvent.addListener(marker, 'click',
					    function() {marker.openInfoWindowHtml(html);}
						);
				return marker;
				}

				//<![CDATA[
				// Array.unique( strict ) - Remove duplicate values
				Array.prototype.unique = function( b ) {
				 var a = [], i, l = this.length;
				 for( i=0; i<l; i++ ) {
				  if( a.indexOf( this[i], 0, b ) < 0 ) { a.push( this[i] ); }
				 }
				 return a;
				};
				Number.prototype.toRad = function() {  // convert degrees to radians
				  return this * Math.PI / 180;
				}
				
				String.prototype.parseDeg = function() {
				  if (!isNaN(this)) return Number(this);                 // signed decimal degrees without NSEW
				
				  var degLL = this.replace(/^-/,'').replace(/[NSEW]/i,'');  // strip off any sign or compass dir'n
				  var dms = degLL.split(/[^0-9.]+/);                     // split out separate d/m/s
				  for (var i in dms) if (dms[i]=='') dms.splice(i,1);    // remove empty elements (see note below)
				  switch (dms.length) {                                  // convert to decimal degrees...
				    case 3:                                              // interpret 3-part result as d/m/s
				      var deg = dms[0]/1 + dms[1]/60 + dms[2]/3600; break;
				    case 2:                                              // interpret 2-part result as d/m
				      var deg = dms[0]/1 + dms[1]/60; break;
				    case 1:                                              // decimal or non-separated dddmmss
				      if (/[NS]/i.test(this)) degLL = '0' + degLL;       // - normalise N/S to 3-digit degrees
				      var deg = dms[0].slice(0,3)/1 + dms[0].slice(3,5)/60 + dms[0].slice(5)/3600; break;
				    default: return NaN;
				  }
				  if (/^-/.test(this) || /[WS]/i.test(this)) deg = -deg; // take '-', west and south as -ve
				  return deg;
				}
				
				function distCosineLaw(lat1, lon1, lat2, lon2) {
				  return Math.acos(Math.sin(lat1.toRad())*Math.sin(lat2.toRad()) + Math.cos(lat1.toRad())*Math.cos(lat2.toRad())*Math.cos((lon2-lon1).toRad())) * 6371;
				}
				
				function waitToRun() {
					var map = new GMap(document.getElementById("map"));
					var baseIcon = new GIcon(G_DEFAULT_ICON);
					baseIcon.shadow = "";
					baseIcon.shadowSize = new GSize(0,0);
					baseIcon.iconSize = new GSize(41,24);
					map.addControl(new GMapTypeControl());
					map.centerAndZoom(new GPoint(userLon , userLat), 7);
			
					  var center = map.getCenter();
					  var lat = center.lat();
					  var lon = center.lng();
					  var url = "/weather/mapxml/1,5365,,00.xml?lat=" + lat + "&lon=" + lon + "&state=" + state;
						  GDownloadUrl(url, function(data, responseCode) {
						  var xml = GXml.parse(data);
						  var markers = xml.documentElement.getElementsByTagName("marker");
						  var ovr = map.clearOverlays();			
							
							var badItems = [];
							var badItemExists = 0;							
							
							for (var i = 1; i < markers.length; i++) {
								badItemExists = 0;							
								for (var j = 0; j < markers.length; j++) {
									dist = Math.round(distCosineLaw(markers[i].getAttribute("lng").parseDeg(), markers[i].getAttribute("lat").parseDeg(), markers[j].getAttribute("lng").parseDeg(), markers[j].getAttribute("lat").parseDeg()));
									if( dist < 3 && dist != 0) {
										if(badItemExists == 0){
											badItems.push(markers[i].getAttribute("id").toString());
										}
										badItemExists = 1;							
									}
								}
							}
							for (var i = 0; i < markers.length; i++) {
								badItem = 0;
								for (var j = 0; j < badItems.length; j++) {
									if(markers[i].getAttribute("id") == badItems[j]){
										badItem = 1;
									}
								}
								if(badItem == 0){	
									var imgLoc = "/img/weather/" + markers[i].getAttribute("temp") + ".png";
									var lat = parseFloat(markers[i].getAttribute("lat"));
						            var lng = parseFloat(markers[i].getAttribute("lng"));
						            var point = new GLatLng(lat,lng);
						            var html = markers[i].getAttribute("html");
						            map.addOverlay(createMarker(new GPoint(lat, lng), html, new GIcon(baseIcon, imgLoc)));
								}
							}
						});
			
					  GEvent.addListener(map, "moveend", function() {
					  linkTrack('weather/map/xmlTemps');
					  var center = map.getCenter();
					  var lat = center.lat();
					  var lon = center.lng();
					  var url = "/weather/mapxml/1,5365,,00.xml?lat=" + lat + "&lon=" + lon + "&state=" + state;
						  GDownloadUrl(url, function(data, responseCode) {
						  var xml = GXml.parse(data);
						  var markers = xml.documentElement.getElementsByTagName("marker");
						  var ovr = map.clearOverlays();
							
							var badItems = [];
							var badItemExists = 0;							
							
							for (var i = 1; i < markers.length; i++) {
								badItemExists = 0;							
								for (var j = 0; j < markers.length; j++) {
									dist = Math.round(distCosineLaw(markers[i].getAttribute("lng").parseDeg(), markers[i].getAttribute("lat").parseDeg(), markers[j].getAttribute("lng").parseDeg(), markers[j].getAttribute("lat").parseDeg()));
									if( dist < 3 && dist != 0) {
										if(badItemExists == 0){
											badItems.push(markers[i].getAttribute("id").toString());
										}
										badItemExists = 1;							
									}
								}
							}
							for (var i = 0; i < markers.length; i++) {
								badItem = 0;
								for (var j = 0; j < badItems.length; j++) {
									if(markers[i].getAttribute("id") == badItems[j]){
										badItem = 1;
									}
								}
								if(badItem == 0){	
									var imgLoc = "/img/weather/" + markers[i].getAttribute("temp") + ".png";
									var lat = parseFloat(markers[i].getAttribute("lat"));
						            var lng = parseFloat(markers[i].getAttribute("lng"));
						            var point = new GLatLng(lat,lng);
						            var html = markers[i].getAttribute("html");
						            map.addOverlay(createMarker(new GPoint(lat, lng), html, new GIcon(baseIcon, imgLoc)));
								}
							}
						});
					});
			
			
			x = 0;	};
