    //<![CDATA[
    if (GBrowserIsCompatible()) {
 
      var map = new GMap2(document.getElementById("map"));
      map.addControl(new GMapTypeControl());
	  map.addControl(new GSmallMapControl());
      var dirn = new GDirections();
      var step = 5; // metres
      var tick = 100; // milliseconds
      var poly;
      var eol;
      var bike = new GIcon();
          bike.image="cycling.png";
		  bike.shadow="cycling.shadow.png"
          bike.iconSize=new GSize(32,32);
          bike.iconAnchor=new GPoint(22,32);
	
	  var endpoint = new GIcon();
		  endpoint.image = "red-pushpin.png";
		  endpoint.shadow = "msmarker.shadow.png";	
		  endpoint.iconSize=new GSize(32,32);
		  endpoint.iconAnchor = new GPoint(9,32);
	  var startpoint = new GIcon();
		  startpoint.image = "grn-pushpin.png";
		  startpoint.shadow = "msmarker.shadow.png";	
		  startpoint.iconSize=new GSize(32,32);
		  startpoint.iconAnchor = new GPoint(9,32);
	  var waypoint = new GIcon();
		  waypoint.image = "ylw-pushpin.png";
		  waypoint.shadow = "msmarker.shadow.png";	
		  waypoint.iconSize=new GSize(32,32);
		  waypoint.iconAnchor = new GPoint(9,32);


      var marker;
      var k=0;
      var stepnum=0;
	  var distanceInMeters=0;
	  var distanceInMiles=0
	  var distanceInMilesThisLeg=0;
	  var totalDistanceInMiles = 0;
	  var totalDistanceInMilesThisLeg = 0;
	  var METERS_IN_A_MILE = 1609.344;	
	  var wayPoints = ["Roswell, GA", "Mount Carmel, IL", "Berne, IN", "Sault Ste. Marie, Ontario", "St. Louis, MO", "Albuquerque, NM", "Sedona, AZ", "Las Vegas, NV"];
	  var descriptions = ["The city I live in today,<br>Roswell, GA", "The little town where I grew up,<br>Mt. Carmel, IL<br>Left for: 8/29/07<br>Arrived: 10/5/07","The little town where my wife<br> grew up, Berne, IN<br>Left for: 10/6/07<br>Arrived: 11/2/07", "Sault Ste. Marie.  Canada, eh?<br>Left for: 11/2/07<br>Arrived: 2/25/08", "Place of my birth,<br>St. Louis, MO<br>Left for: 2/25/08<br>Arrived 9/22/08", "Where Bugs Bunny always made a wrong turn,<br>Albuquerque, NM<br>Left for: 9/24/08<br>Arrived: 1/19/09", "Sedona, AZ<br>Left for: 1/20/09<br>Arrived: 5/9/09", "Las Vegas, NV<br>Left for: 6/3/09"];
	  var currentLeg = 6;
	  var lengthOfPreviousRoutes = 0;
	  var zoomLevel = 8;

      GEvent.addListener(dirn,"load", function() {
        poly=dirn.getPolyline();
        eol=poly.Distance();
        map.setCenter(poly.getVertex(0),zoomLevel);
		var marker;
        marker = new GMarker(poly.getVertex(0),{icon:startpoint});
		GEvent.addListener(marker, "click", function() {
			map.openInfoWindow(poly.getVertex(0), descriptions[0]);
		});
        map.addOverlay(marker);
	    marker = new GMarker(poly.getVertex(poly.getVertexCount()-1),{icon:endpoint});
		GEvent.addListener(marker, "click", function() {
			map.openInfoWindow(poly.getVertex(poly.getVertexCount()-1), descriptions[wayPoints.length - 1]);
		});
        map.addOverlay(marker);
        marker = new GMarker(poly.getVertex(0),{icon:bike});
        map.addOverlay(marker);

		var geocoder = new GClientGeocoder();

		for(var wayPointNum = 1; wayPointNum < wayPoints.length - 1; wayPointNum++) {
			var geocoderFunction = new Function("point", "if(point) { var wayPointMarker = new GMarker(point, {icon:waypoint});  map.addOverlay(wayPointMarker);  GEvent.addListener(wayPointMarker, 'click', function() { map.openInfoWindow(point, descriptions[" + wayPointNum + "]); }); }");
			geocoder.getLatLng(wayPoints[wayPointNum], geocoderFunction); 
		}

		distanceInMiles=(3297.5 +
			14.3 + 14.1 + 14.0 // 6/6
		
		
		); 
		distanceInMeters= distanceInMiles * METERS_IN_A_MILE;
        var p = poly.GetPointAtDistance(distanceInMeters);
        map.setCenter(p,zoomLevel);
        marker.setPoint(p);
		map.addOverlay(dirn.getPolyline());

		for(var i = 0; i < currentLeg; i++) {
			lengthOfPreviousRoutes += dirn.getRoute(i).getDistance().meters / METERS_IN_A_MILE;
		}

		var route = dirn.getRoute(currentLeg);
		totalDistanceInMilesThisLeg = route.getDistance().meters / METERS_IN_A_MILE;
		distanceInMilesThisLeg = distanceInMiles - lengthOfPreviousRoutes;
		if(distanceInMilesThisLeg > totalDistanceInMilesThisLeg) {
			distanceInMilesThisLeg = totalDistanceInMilesThisLeg;
		}
		totalDistanceInMiles = dirn.getDistance().meters / METERS_IN_A_MILE;

		//alert("distance traveled = " + distanceInMeters + ", / tot = " + route.getDistance().meters);
		//var milesToGo = totalDistanceInMiles - distanceInMiles;
		var milesToGo = totalDistanceInMilesThisLeg - distanceInMilesThisLeg;
        document.getElementById("distance").innerHTML =  "Next stop: " + wayPoints[currentLeg + 1] + "<br>" + 
			(distanceInMilesThisLeg * 100 / totalDistanceInMilesThisLeg).toFixed(2) + 
			"% completed ("+distanceInMilesThisLeg.toFixed(1) + " of " + totalDistanceInMilesThisLeg.toFixed(1) + " miles) -- " + milesToGo.toFixed(1) + " miles to go!<br>A total of " + distanceInMiles.toFixed(1) + " miles have been logged since this adventure began.";
      });

      GEvent.addListener(dirn,"error", function() {
        alert("Location(s) not recognised. Code: "+dirn.getStatus().code);
      });

      function start() {
        dirn.loadFromWaypoints(wayPoints,{getPolyline:true,getSteps:true});
      }

    }
    //]]>
