    if (GBrowserIsCompatible()) {

		function createMarker(point,html) {
			var marker = new GMarker(point);
			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindowHtml(html);
			});

			// The new marker "mouseover" listener
			GEvent.addListener(marker,"mouseover", function() {
				marker.openInfoWindowHtml(html);
			});

 			return marker;
 		}
		
		// === Returns the bearing in degrees between two points. ===
		// North = 0, East = 90, South = 180, West = 270.
		var degreesPerRadian = 180.0 / Math.PI;
		var arrowIcon = new GIcon();
		arrowIcon.iconSize = new GSize(15,15);
		arrowIcon.shadowSize = new GSize(1,1);
		arrowIcon.iconAnchor = new GPoint(5,8);
		arrowIcon.infoWindowAnchor = new GPoint(0,0);
		
		function bearing( from, to ) {
			// See T. Vincenty, Survey Review, 23, No 176, p 88-93,1975.
			// Convert to radians.
			var lat1 = from.latRadians();
			var lon1 = from.lngRadians();
			var lat2 = to.latRadians();
			var lon2 = to.lngRadians();
		
			// Compute the angle.
			var angle = - Math.atan2( Math.sin( lon1 - lon2 ) * Math.cos( lat2 ), Math.cos( lat1 ) * Math.sin( lat2 ) - Math.sin( lat1 ) * Math.cos( lat2 ) * Math.cos( lon1 - lon2 ) );
			if ( angle < 0.0 )
				angle += Math.PI * 2.0;
		
			// And convert result to degrees.
			angle = angle * degreesPerRadian;
			angle = angle.toFixed(1);
		
			return angle;
		}

		// === A function to create the arrow head at the end of the polyline ===
		function arrowHead(points) {
			// == obtain the bearing between the last two points
			var p1=points[points.length-1];
			var p2=points[points.length-2];
			var dir = bearing(p2,p1);
			// == round it to a multiple of 3 and cast out 120s
			var dir = Math.round(dir/3) * 3;
			while (dir >= 120) {dir -= 120;}
			// == use the corresponding triangle marker
			arrowIcon.image = "http://www.google.com/intl/en_ALL/mapfiles/dir_"+dir+".png";
			map.addOverlay(new GMarker(p1, arrowIcon));
		}

		// === A function to put arrow heads at intermediate points
		function midArrows(points) {
			for (var i=1; i < points.length-1; i++) {
				var p1=points[i-1];
				var p2=points[i+1];
				var dir = bearing(p1,p2);
				// == round it to a multiple of 3 and cast out 120s
				var dir = Math.round(dir/3) * 3;
				while (dir >= 120) {dir -= 120;}
				// == use the corresponding triangle marker
				arrowIcon.image = "http://www.google.com/intl/en_ALL/mapfiles/dir_"+dir+".png";
				map.addOverlay(new GMarker(points[i], arrowIcon));
			}
		}		// === The basis of the arrow icon information ===

		var colour="#FF0000";
		var width="2";
		var pts = [];
		var ipoint = 0;
				
		var map = new GMap2(document.getElementById("map"));
	  	map.setCenter(new GLatLng( 37.23032838760387, -93.33984375),4);

      	var point = new GLatLng(30.20211367909724, -97.67807006835938 );
      	var htmlForMarker = 'Austin, TX';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker); 
		pts[ipoint++] = point;
	
      	point = new GLatLng(32.349830, -108.708815 );
      	var htmlForMarker = 'May 07 - Lordsberg, NM';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(34.106582,-117.611024 );
      	var htmlForMarker = 'A few days at Rancho Cucamonga,CA';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(33.448260, -112.075774 );
      	var htmlForMarker = 'Phoenix, AZ';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(32.306730, -106.777734 );
      	var htmlForMarker = 'Las Cruces, NM';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(31.849150, -102.375189 );
      	var htmlForMarker = 'Odessa, TX';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(32.759000, -97.800779 );
      	var htmlForMarker = 'Weatherford, TX';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(32.509650, -92.119049 );
      	var htmlForMarker = 'Monroe, LA';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(32.365030, -88.703069 );
      	var htmlForMarker = 'Meridian, MS';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(35.046432, -85.309421 );
      	var htmlForMarker = 'Chattanooga, TN';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(36.949890, -81.083459 );
      	var htmlForMarker = 'Wytheville, VA';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(37.271525, -79.940534 );
      	var htmlForMarker = 'Roanoke, VA';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(38.890510, -77.086294 );
      	var htmlForMarker = 'Arlington, VA';
      	var marker = createMarker(point, htmlForMarker);
	  	map.addOverlay(marker);
		pts[ipoint++] = point;
		
      	point = new GLatLng(36.949890, -81.083459 );
		pts[ipoint++] = point;
		
		map.addOverlay(new GPolyline(pts,colour,width));
		midArrows(pts);
		arrowHead(pts);
 	}
     else {
      alert("Sorry, the Google Maps API is not compatible with this browser");
    }
 
