if (GBrowserIsCompatible()) {

     	var sidebar_html = "";
      	var gmarkers = [];
      	var htmls = [];
      	var i = 0;
      	var centerlatlong = '';
	var defaulticon = 'weatherstation.png';
	var defaulthovericon = 'markerhighlight.png';
	var ua = navigator.userAgent;
    	var isFirefox = ( ua != null && ua.indexOf( "Firefox/" ) != -1 );
    	var isMSIE = ( ua != null && ua.indexOf( "MSIE" ) != -1 );
    	var request = GXmlHttp.create();
	var autoUpdateMap = true ;  // Should the map be auto-updated?


      	// A function to create the marker and set up the event window
      	function createMarker(point,name,markerhtml,infohtml,iconurl,hovericonurl) {
		// icon
      		var Icon = new GIcon();
      		Icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
      		Icon.iconSize = new GSize(20, 34);
      		Icon.shadowSize = new GSize(37, 34);
      		Icon.iconAnchor = new GPoint(9, 34);
      		Icon.infoWindowAnchor = new GPoint(9, 2);
      		Icon.infoShadowAnchor = new GPoint(18, 25);
      		Icon.image = iconurl ;
        	// FF 1.5 fix
        	markerhtml = '<div class="markerhtml">' + markerhtml + '</div>';

        	//var marker = new GMarker(point,Icon);
        	var marker = new PdMarker(point,Icon);
		marker.setHoverImage(hovericonurl);
		marker.setUserData(iconurl);
		marker.setId(name);

        	GEvent.addListener(marker, "click", function() {
        		marker.openInfoWindowHtml(markerhtml);
        	});

		GEvent.addListener(marker,"mouseover", function() {
			infomouseover(marker.getId(),hovericonurl);
		}) ;
		GEvent.addListener(marker,"mouseout", function() {
			infomouseout(marker.getId(),iconurl);
		}) ;

        	// save the info we need to use later for the sidebar
        	gmarkers[i] = marker;
        	htmls[i] = markerhtml;
        	// add a line to the sidebar html
        	sidebar_html += '<div class="infohtml" id="info' + i + '"><a onmouseover="infomouseover(\'' + i + '\',\'' + hovericonurl +'\')" onmouseout="infomouseout(\'' + i + '\',\'' + iconurl + '\')" href="javascript:myclick(\'' + i + '\')">' + infohtml + '</a></div>';
        	i++;
        	return marker;
      	}


	// load a different data set
	function updateDataset(url) {
		feed = url;
		map.clearOverlays();
		loadXMLfile(feed,latitude,longitude,spanlat,spanlon);
	}


      	// This function picks up the click and opens the corresponding info window
      	function myclick(i) {
      	  gmarkers[i].openInfoWindowHtml(htmls[i]);
      	}

	function infomouseover(i,hovericonurl) {
		// do pretty things when user mouses over an item
	  	gmarkers[i].setImage(hovericonurl);
		gmarkers[i].topMarkerZIndex(); // bring marker to top
		document.getElementById('info' + i ).style.backgroundColor="#ff9";
	}

	function infomouseout(i,iconurl) {
	  	gmarkers[i].setImage(iconurl);
	  	//gmarkers[i].setImage(gmarkers[i].getUserData());
		document.getElementById('info' + i ).style.backgroundColor="#fff";
	}


	// if the map has been moved or zoomed
	function Moved() {
		// only reload if we're using a local dynamic feed that auto-updates to the new location
		// or we could be constantly reloading remote feeds
		if (autoUpdateMap) {
			var center = map.getCenterLatLng();
			var span = map.getSpanLatLng();
			latitude = center.y ;
			longitude = center.x ;
			spanlat = span.height;
			spanlon = span.width;
			loadXMLfile(feed,latitude,longitude,spanlat,spanlon);
		}
	}



	// load the XML file
	function loadXMLfile(feed,latitude,longitude,spanlat,spanlon) {
		document.getElementById("sidebar").innerHTML = '<div class="loading"><img src="images/loading.gif" width="16" height="16" alt="" /> Loading...</div>';
      		var request = GXmlHttp.create();
	      	var feedurl = 'feed.php?feed=' + feed + "&latitude=" + latitude + "&longitude=" + longitude + "&spanlat=" + spanlat + "&spanlon=" + spanlon ;
		autoUpdateMap = true;

      		request.open("GET", feedurl, true);
      		request.onreadystatechange = function() {
        		if (request.readyState == 4) {
          			var xmlDoc = request.responseXML;
				i=0;

	  			// Get feed title and desciption
				var title = GXml.value(xmlDoc.documentElement.getElementsByTagName("title")[0]);
				sidebar_html = '<div class="intro">' + GXml.value(xmlDoc.documentElement.getElementsByTagName("description")[0]) +'</div>';
				document.getElementById("feedtitle").innerHTML = title ;

				// Update Placename (or other contents of dc:subject)
                		if (isMSIE) {
					var placename = GXml.value(xmlDoc.documentElement.getElementsByTagName("dc:subject")[0]);
				} else {
					var placename = GXml.value(xmlDoc.documentElement.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/","subject")[0]);
				}
				document.getElementById("placename").innerHTML = placename ;

          			// obtain the array of markers and loop through it
          			var markers = xmlDoc.documentElement.getElementsByTagName("item");

				// Clear old overlays
				map.clearOverlays();

          			for (var j = 0; j < markers.length; j++) {
            				// obtain the attribues of each marker
					var itemtitle = GXml.value(markers[j].getElementsByTagName("title")[0]);
					var itemlink = GXml.value(markers[j].getElementsByTagName("link")[0]);
					var itemdescription = GXml.value(markers[j].getElementsByTagName("description")[0]);
					var markerhtml = '<a class="markertitle" href="' + itemlink + '" target="_blank">' + itemtitle + '</a><br />';
					markerhtml += itemdescription ;
					// Hack to cope with IE
                			if (isMSIE) {
                    				var lng = parseFloat(GXml.value(markers[j].getElementsByTagName("geo:long")[0]));
                    				var lat = parseFloat(GXml.value(markers[j].getElementsByTagName("geo:lat")[0]));
						var iconurl = GXml.value(markers[j].getElementsByTagName("BaseIcon")[0]);
						var hovericonurl = GXml.value(markers[j].getElementsByTagName("HoverIcon")[0]);
 
 					} else {
	            				var lat = parseFloat(GXml.value(markers[j].getElementsByTagNameNS("http://www.w3.org/2003/01/geo/wgs84_pos#","lat")[0]));
        	    				var lng = parseFloat(GXml.value(markers[j].getElementsByTagNameNS("http://www.w3.org/2003/01/geo/wgs84_pos#","long")[0]));
						var iconurl = GXml.value(markers[j].getElementsByTagNameNS("http://api.maps.yahoo.com/Maps/V1/AnnotatedMaps.xsd","BaseIcon")[0]);
						var hovericonurl = GXml.value(markers[j].getElementsByTagNameNS("http://api.maps.yahoo.com/Maps/V1/AnnotatedMaps.xsd","HoverIcon")[0]);
					}

					if (iconurl =='') {
						iconurl = defaulticon ;
					}
					if (hovericonurl == '') {
						hovericonurl = defaulthovericon ;
					}
            				var point = new GPoint(lng,lat);


					//var icon = defaulticon;
					//var hovericon = defaulthovericon;
            				// create the marker
            				var marker = createMarker(point,j,markerhtml,itemtitle,iconurl,hovericonurl);
            				map.addOverlay(marker);

          			}
          			// put the assembled sidebar_html contents into the sidebar div
				sidebar_html += '<a class="xmlbutton" href="' + feedurl + '" target="_blank" title="View the XML source for this map">XML</a> ';
				sidebar_html += '<a class="xmlbutton" href="http://api.maps.yahoo.com/Maps/V1/annotatedMaps?appid=YahooDemo&xmlsrc=http://www.dynamite.co.uk/local/' + escape(feedurl) + '" target="_blank" title="Display on Yahoo! Maps">Y! Map</a> ';
				sidebar_html += '<a class="xmlbutton" href="http://www.kovacevic.nl/hacks/kml/rss2kml.php?mode=link&rss=www.dynamite.co.uk/local/' + feedurl +'500/" title="View this map in Google Earth">Google Earth</a> ';
          			document.getElementById("sidebar").innerHTML = sidebar_html;

				// Open up the first marker info window
				//if (markers.length > 0) {
				//	myclick('0') ;
				//}
        		}
      		}
      		request.send(null);
	}



	      	// create the map
	      	var map = new GMap(document.getElementById("map"));
	      	map.addControl(new GLargeMapControl());
	      	map.addControl(new GMapTypeControl());
	      	map.centerAndZoom(new GPoint(longitude, latitude), 5);
		//map.recenterOrPanToLatLng(new GPoint(longitude, latitude));

		// get actual span lat & long from map
		var span = map.getSpanLatLng();
		spanlat = span.height;  
	        spanlon = span.width;

		// add move listener
		GEvent.addListener(map, 'moveend', Moved);
		GEvent.addListener(map, 'zoom', Moved);

		// Load the XML file
		loadXMLfile(feed,latitude,longitude,spanlat,spanlon)


  }  else {
      alert("Sorry, the Google Maps API is not compatible with this browser");
}

