    var ICONS = [];

    var baseIcon = new GIcon();
    baseIcon.image = "http://labs.google.com/ridefinder/images/mm_20_orange.png";
    baseIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    baseIcon.iconSize = new GSize(12, 20);
    baseIcon.shadowSize = new GSize(22, 20);
    baseIcon.iconAnchor = new GPoint(6, 20);
    baseIcon.infoWindowAnchor = new GPoint(5, 1);
    baseIcon.imageMap = [4,0,0,4,0,7,3,11,4,19,7,19,8,11,11,7,11,4,7,0]; 
    baseIcon.transparent = "mapIcons/mm_20_transparent.png";
    
    ICONS[0] = baseIcon;
    
    var map = null;
    var mgr = null;

    function setupMap() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.setCenter(new GLatLng(54, -116), 3);
        map.enableDoubleClickZoom();
        mgr = new MarkerManager(map);
        displayMarkers();    
      }
    }

    function MapPoint(gPoint, desc) {
    	this.gPoint = gPoint;
    	this.desc = desc;
    } 

    function createMarker(point, html, pointicon) {
    	var marker;

      	marker = new GMarker(point, { icon: pointicon });
      	GEvent.addListener(marker, "mouseover", function() {
        	marker.openInfoWindowHtml(html);
      	}); 	     	
      	return marker;
    }

    function getMarkers(mapPoints, n) {
        var jmimarkers = [];
    	for (var i = 0; i < mapPoints.length; i++) {
			jmimarkers.push(createMarker(mapPoints[i].gPoint, mapPoints[i].desc, ICONS[n]));
    	}
    	return jmimarkers;
    }
    
    function displayMarkers() {
        var mapPoints = [];
		var request = GXmlHttp.create();
		request.open("GET", "map.xml?type=1", true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var xmlDoc = request.responseXML;
				var markerElements = xmlDoc.documentElement.getElementsByTagName("marker");
				for (var i = 0; i < markerElements.length; i++) {
					var gPoint =  new GPoint(parseFloat(markerElements[i].getElementsByTagName("lon")[0].firstChild.data), parseFloat(markerElements[i].getElementsByTagName("lat")[0].firstChild.data));
	
					var nodeDesc = markerElements[i].getElementsByTagName("desc")[0];
					mapPoints.push(new MapPoint(gPoint, nodeDesc.firstChild.data));
				}
				mgr.addMarkers(getMarkers(mapPoints, 0), 0);
				mgr.refresh();
			}
		}
		request.send(null);
    }