function loadmap(mapfile) {
	
	var map = document.getElementById("mapframe");
	
	if (GBrowserIsCompatible()) {
		
		function makeIcon (image) {
			var icon = new GIcon();
			icon.image = image;
			icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
			icon.iconSize = new GSize(12, 20);
			icon.shadowSize = new GSize(22, 20);
			icon.iconAnchor = new GPoint(6, 20);
			icon.infoShadowAnchor = new GPoint(0, 0);
			icon.infoWindowAnchor = new GPoint(5, 1);	
			return icon;
		}
		
		function embedMapAudio(audio) {
		    var randomnum=Math.floor(Math.random()*99999);
	        var swfUrl='/flashplayer/mp3player_blog.swf?nocache='+randomnum+'&file='+audio+'&popbutton=false&callback=analytics';
	        var audio_player = new SWFObject(swfUrl, "audioplayer", "320", "19", "8", "#ffffff");
	        audio_player.addParam("allowScriptAccess", "always");
	        audio_player.write("audioplayer");	
		}
		
		function setforwardEvent(i, gmap, mapjson) {
	        var marker = gmap.getMarkerById(i);
			var elem=$('forward'+i);
				MochiKit.Signal.connect(elem, 'onclick', function(e) {
				    e.stop();
				    i++;
				    loadContent(i, gmap, mapjson);
				  }); 
		}
		
		function setbackwardEvent(i, gmap, mapjson) {
		    var marker = gmap.getMarkerById(i);
		    var elem=$('backward'+i);
			    MochiKit.Signal.connect(elem, 'onclick', function(e) {
				    e.stop();
				    i--;
				    loadContent(i, gmap, mapjson);
				  });
		}
		
		function formatMarkerContent (i, gmap, mapjson) {
			var input = mapjson.markers[i];
			document.getElementById("tournav").innerHTML = "";
			var html    =  "<h2>" + input.title + "</h2>";
			if(input.image != null) {
				html 	+= "<p id=\"imagespot\"></p>";
			}
			if(input.video != null) {
			    html 	+= "<p id=\"videoplayer\"><a href=\"http://www.macromedia.com/go/getflashplayer\">Install the Flash Player</a> to see this video.</p>";
			}
			if(input.streetview != null) {
				html 	+= "<iframe width=\"320\" height=\"181\" frameborder=\"0\" scrolling=\"no\" marginheight=\"0\" marginwidth=\"0\" src=\"" + input.streetview + "\"></iframe>";
			}		
			    html 	+= input.description;
			if(input.audio != null) {
			    html 	+= "<p id=\"audioplayer\"><a href=\"http://www.macromedia.com/go/getflashplayer\">Install the Flash Player</a> to listen to this audio. Or <a href=\""+input.audio+"\">download the .mp3</a>.</p>";
			}
			if(input.tourpoint != null) {
			    if(input.tourpoint != 1) {
				    //html    += "<p><a id=\"backward"+i+"\" href=\"\">&laquo; previous</a>";
				      document.getElementById("tournav").innerHTML += "<a id=\"backward"+i+"\" href=\"\">&laquo; previous</a>";
				} else {
			        //html    += "<p>";
			          document.getElementById("tournav").innerHTML += "";
				}
				if(input.tourpoint != mapjson.walkingtour){
				    //html += " <a id=\"forward"+i+"\" href=\"\">next &raquo;</a></p>";
				      document.getElementById("tournav").innerHTML += " <a id=\"forward"+i+"\" href=\"\">next &raquo;</a></p>";
				} else {
				    //html += "</p>";	
				      document.getElementById("tournav").innerHTML += "";
				}
			}					
			return html;			
		}
		
		function setImageLink(p) {
			document.getElementById("imagespot").innerHTML += "[<a id=\"slide"+p+"\" href=\"\">"+(p+1)+"</a>] ";
		}
		
		function setLinkClass(p){
			var elem=$('slide'+p);
			MochiKit.DOM.addElementClass(elem, "on");
		}
		
		function removeLinkClass(p){
			var elem=$('slide'+p);
			MochiKit.DOM.removeElementClass(elem, "on");
		}
		
		function swapConnect(swapimg, p, imglen){
			var elem=$('slide'+p);
			MochiKit.Signal.connect(elem, 'onclick', function(e) {
			    e.stop();
			    swapContentImage(swapimg, p, imglen);
			
			  });
		}
		
		function swapContentImage(imguri, p, imglen) {
			MochiKit.DOM.setNodeAttribute("imgpart", "src", imguri);
			for (var i = 0; i < (imglen); i++) {
				//alert(i);
			    if(i == p) {
				    //set class
				    setLinkClass(i);
			    } else {
				    //remove class
				    removeLinkClass(i);
			    }
			}
		}
        
        function loadContent(i, gmap, mapjson) {
	        var marker = gmap.getMarkerById(i);
	        var input = mapjson.markers[i];
			var pt = marker.getPoint();
	        gmap.panTo(pt);
	        var content = formatMarkerContent(i, gmap, mapjson);	
	        var mark = gmap.getFirstMarker();
			while (mark != null) {
				mark.hideTooltip(mark);
				mark.setMouseOutEnabled(true);
			    mark = gmap.getNextMarker();
			}
			
            document.getElementById("mapcontent").innerHTML = content;
            if(input.video != null) {
	             embedVideo(input.video, "videoplayer", "320", "260");
	        }
			if(input.audio != null) {
	             embedMapAudio(input.audio);
	        }
	        if(input.image != null) {
		         var imgarray = input.image;
	             document.getElementById("imagespot").innerHTML = "<img id=\"imgpart\" src=" + imgarray[0] + " width=\"320\" height=\"181\" />";
				if (input.image.length > 1) {
				    document.getElementById("imagespot").innerHTML += "<br />More Images: ";	
				for (var p = 0; p < (imgarray.length); p++) {
				    setImageLink(p);
				    if(p == 0) {
					/// set class of link
					setLinkClass(p);
				    }
				}
				for (var p = 0; p < (imgarray.length); p++) {
				    var imgnum = $(p);
				    var swapimg = imgarray[imgnum];
					swapConnect(swapimg, p, imgarray.length);
				}
			}
	        }
			if(input.tourpoint != null) {
		        if(input.tourpoint != 1) {
	                setbackwardEvent(i, gmap, mapjson);
                }
                if(input.tourpoint != mapjson.walkingtour){
	                setforwardEvent(i, gmap, mapjson);
	            }
            }
	        marker.showTooltip(marker);
	        if (marker.getMouseOutEnabled()) {
				marker.setMouseOutEnabled(false);
			} else {
		        marker.setMouseOutEnabled(true); // hide after hover
			}
        }

        function doNavEvents(i, gmap) {
	        var marker = gmap.getMarkerById(i);
			var elem=$('item' + i);
				MochiKit.Signal.connect(elem, 'onclick', function(e) {
				    e.stop();
				    loadContent(i, gmap, mapjson);
				  });
        }

        function addtoNav(i, mapjson, listobj){    
	        if(mapjson.walkingtour !=null) {
		        if(mapjson.markers[i].tourpoint == null) {
			        var elem=$(i)-mapjson.walkingtour;
			    } else {
				    var elem=$(i);
			    }
	        } else {
	        var elem=$(i);
            }
            var style = mapjson.markers[i].style;	
	        var title = mapjson.markers[i].title;
            document.getElementById(listobj).innerHTML +=  '<li><a class="'+style+'" id="item'+i+'" href="">'+title+'</a></li>';
	    }			
					
	    function createMarker(i, gmap) {
		    var input = mapjson.markers[i];
			var marker = new PdMarker(input.point, makeIcon(input.markerImage) );
			marker.setId(i);
			marker.allowLeftTooltips(false);
			marker.setTooltip("<div class='labelframe'><div class='tlabel'><nobr>"+ input.title +"</nobr></div></div>");			
		        GEvent.addListener(marker, "click", function() {
				    loadContent(i, gmap, mapjson);
			    });
			return marker;
		}
		
		function loadMarkers(gmap, mapjson){		
			if(mapjson.walkingtour) {
			    var walkingtour = mapjson.walkingtour;
			    //now add the markers
			    for (var i = 0; i < (mapjson.markers.length); i++) {
				    if (i == 0) {
					    document.getElementById("maptournav").innerHTML += '<p><strong>Walking Tour</strong> <img src="/images/map/redkey.gif" /></p>';
					    document.getElementById("maptournav").innerHTML += '<ul id="tourlist"></ul>';					
						document.getElementById("mapnav").innerHTML += '<p><strong>Other Points</strong> <img src="/images/map/bluekey.gif" /></p>';
					    document.getElementById("mapnav").innerHTML += '<ul id="pointlist"></ul>';
				    }
				        if (mapjson.markers[i].tourpoint) {
					        addtoNav(i, mapjson, "tourlist");
				        } else {
					        addtoNav(i, mapjson, "pointlist");
				    }
			    }
		    } else {
			    document.getElementById("maptournav").innerHTML += '<p><strong>Map Points</strong></p>';
			    document.getElementById("maptournav").innerHTML += '<ul id="alist"></ul>';
			    document.getElementById("mapnav").innerHTML += '<p><strong>&nbsp;</strong></p><ul id="blist"></ul>';
			
			
			    for (var i = 0; i < (mapjson.markers.length); i++) {
				    if (mapjson.markers[i]) {
					    var halfway = mapjson.markers.length/2;
					    if (i < halfway) {
				            addtoNav(i, mapjson, "alist");
				        } else {
					        addtoNav(i, mapjson, "blist");
				        }
			        }
				}
		    }
			
			for (var i = 0; i < mapjson.markers.length; i++) {
				if (mapjson.markers[i]) {
				    var marker = createMarker(i, gmap);
				    gmap.addOverlay(marker);
			        doNavEvents(i, gmap);
		        }

			    if(i == 0){
				    //this will load content for the first point
				    loadContent(i, gmap, mapjson);
			    }
			}
			//check to see if there is a polyline for walking tour
			if(mapjson.polyline != null && mapjson.polylineLevels != null) {
		        var encodedLevels = mapjson.polylineLevels;
		        var encodedPoints = mapjson.polyline;
		        var encodedPolyline = new GPolyline.fromEncoded({
				color: "#FF0000",
				weight: 4,
				points: encodedPoints,
				levels: encodedLevels,
				zoomFactor: 32,
				numLevels: 4
			});
			   gmap.addOverlay(encodedPolyline);
		    }
		}
		
		function loadMaplinks(mapjson){
			var html = '<p><strong>Related</strong></p><ul>';
		    for (var i = 0; i < (mapjson.linklist.length); i++) {
			    if (mapjson.linklist[i]) {
			        html += '<li><a href="'+mapjson.linklist[i].src+'" class="'+mapjson.linklist[i].style+'">'+mapjson.linklist[i].title+'</a></li>';
		        }
		    }
		    html += '</ul>';
		    document.getElementById("maplinks").innerHTML = html;
		}

		function parsemapjson (doc) {		
			var mapjsonData = eval("(" + doc + ")");
			return mapjsonData;		
		}  	
		
	    GDownloadUrl(mapfile, function(data, responseCode) { 
			mapjson = parsemapjson(data);
			//make map
			var gmap = new GMap2(map);
			gmap.addControl( new GSmallMapControl() );
			gmap.addControl( new GMapTypeControl()) ;
			gmap.addControl( new GOverviewMapControl(new GSize(100,100)) );
			
			if(mapjson.focus != null) {
			    var focus = mapjson.focus;
			} else {
				var focus = 13;
			}
			
			gmap.setCenter( mapjson.centerpoint, focus );
			
			logDebug(focus);
			
			//load markers
			loadMarkers(gmap, mapjson);
			loadMaplinks(mapjson);
			document.getElementById("mapheader").innerHTML += mapjson.description;
			document.getElementById("mapcredit").innerHTML += mapjson.credit;
		});
		
	} else {
		alert("Sorry, your browser cannot display Google Maps.");
	}
}