//<![CDATA[	
	var map;			//google map object 
	var dPts = new Array(0);	//distances between waypoints
	var pts = new Array(0);		//waypoints
	var record = false;		//recording state
	var fudge = 0.99;		//fudge factor for distance
	var base = fudge*1.0;		//base distance unit in miles
	var pointClk = true;		//was a marker clicked on
	var geocoder = null;
	if(!queryStringObj)
		var queryStringObj = new String(location.href);

// the full path to elevation service
//var elevationurl="http://www.earthtools.org/height/";
var elevationurl="http://gisdata.usgs.net/xmlwebservices2/elevation_service.asmx/getElevation?";

var elevation = new Array();
var elevationAlert = false;


function showAddress(address) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        alert(address + " not found");
      } else {
        map.setCenter(point, 13);
      }
    }
  );
}

function submitSaveMapForm()
{
	document.saveMapForm.submit();
}
function submitTopoMapForm()
{
	topowindow = window.open('','elev','width=720,height=230,titlebar=0,status=0');
	topowindow.focus();
	document.topoMapForm.submit();
	topowindow.document.title='getting image...';
}
function submitGoogleEarthForm()
{
	document.googleEarthForm.submit();
}

function loadXMLDoc(url)
{
var resultary;
var altitude;
if(elevation[0] == -9999)
  return;
var request = GXmlHttp.create();
request.open('GET', url, true);
// set up timeout for slow usgs
var requestTimer = setTimeout(function() {
  request.abort();
  altitude = -9999;
  elevation.push(altitude);
  if(!elevationAlert)
  {
    alert("USGS altitude data unavailable");
    elevationAlert = true;
  }

}, 120000);

request.onreadystatechange = function() {
  if (request.readyState == 4) {
	clearTimeout(requestTimer);
	var response = request.responseXML;
	altitude = response.getElementsByTagName('string')[0].firstChild.data;
	//altitude = response.getElementsByTagName('feet')[0].firstChild.data;
        if(altitude < -1000.0){
                altitude = -9999;
        }
        elevation.push(altitude);
	if(Math.round(100*(elevation.length/pts.length)) < 100)
	{
		document.getElementById("ta").style.visibility = "visible";
        	document.getElementById("ta").innerHTML = "acquiring topo data " + Math.round(100*(elevation.length/pts.length)) + "%<br>";
        	//document.getElementById("ta").innerHTML = "acquiring topo " + altitude +"<br>";
	}
	else
	{
		document.getElementById("ta").style.visibility = "hidden";
                document.getElementById("ta").innerHTML = "";
	}
  }
}
request.send(null);
}

function getElevation(x,y)
{
        // var url = elevationurl + y + "/" + x;
        var url = elevationurl + "X_Value=" + x + "&Y_Value=" + y + "&Elevation_Units=FEET&Source_Layer=-1&Elevation_Only=TRUE";
        loadXMLDoc("proxy.php?" + url);
}


	function initClicks() {		//set up cross browser mouse click
		if (navigator.appName == 'Microsoft Internet Explorer'){
			document.onmouseup = clickHandler;
		}
		else {
			window.onmouseup = clickHandler;
		}
	}

	function clickHandler(e) {	//cross browser click handler
   		//return true;
  		if (navigator.appName == 'Netscape' && e.which == 3) {
      			zoomOut();
      			return false;
      		}
   		else {
      			if (navigator.appName == 'Microsoft Internet Explorer' && event.button==2) {
         			zoomOut();
         			return false;
			}
         	}
   		return true;
 	}

	function newZoom(zoom){
		return 17-zoom;
	}

	function initializeMap(){	//initialize map params

		//intialize Google map
		map = new GMap2(document.getElementById('map'), {draggableCursor: 'crosshair', draggingCursor: 'move'});
		map.setCenter(new GLatLng(37.0625, -95.677068), newZoom(13));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());
		geocoder = new GClientGeocoder();
		var dragmenu = document.getElementById("copy");
                Drag.init(dragmenu,null, null, null, null, null, true, false);

		// initialize right click handler
		initClicks();		

		// setup initial route distance of 0.0
		dPts.push(0);
	
		// if there are permalink params use them
		rehydrateMapFromUrl();
		GEvent.addListener(map, 'click', function(overlay, point){
			if(point)
				pointClk=true;
			else
				pointClk=false;
			if(overlay && !record)
			{
				var html = '<br>Lat,Long:&nbsp;' +overlay.getPoint().lat() +',' + overlay.getPoint().lng() +'<br>Elevation:&nbsp;' +overlay.elevation + '<br><form action=\'http://maps.google.com/maps\' method=\'get\' target=\'_blank\'><p><label for=\'saddr\'>Driving&nbsp;Instructions&nbsp;from&nbsp;address,&nbsp;zip<br>or&nbsp;city,&nbsp;state:</label><input type=\'text\' name=\'saddr\' id=\'saddr\' value=\'\' /><input type=\'submit\' value=\'GO\' /><input type=\'hidden\' name=\'daddr\' value=\'' + overlay.getPoint().lat() + ',' + overlay.getPoint().lng() + '\' /><input type=\'hidden\' name=\'hl\' value=\'en\' /></p></form>';
				overlay.openInfoWindowHtml(html);
			}
			if(point && record)
			{
                                        addWayPt(trunkNum(point.x), trunkNum(point.y));
					//map.centerAndZoom( point, map.getZoomLevel() );
                                        drawPolyLine(pts);
			}
			if(point && !record)
			{
				if ( map.getZoom() < 19 )
					map.setCenter( point, map.getZoom() + 1 );
				else if ( map.getZoom() == 19 )
					map.setCenter( point, 19 );
			}
		});

	}

	function zoomOut() {		//zoom out on map
		if(!record && pointClk)
		{
			if ( map.getZoom() > 0 )
				map.setCenter( map.getCenter(), map.getZoom() - 1 );
			else if ( map.getZoom() == 0 )
				map.setCenter( map.getCenter(), 0 );
		}
		pointClk = true;
	}	

	function addWayPt(xCoord, yCoord) { //add waypoint
			
		if (record) { 
		
			pts.push(new GPoint(xCoord, yCoord));
			dPts.push(dPts[dPts.length-1]+lastDist());
			if(pts.length > elevation.length)
			{
				getElevation(xCoord,yCoord);
			}
		}
	
	}

	function mileage(point1y, point1x, point2y, point2x) { //compute miles between points
	
		return (3963.0 * Math.acos(Math.sin(point1y/57.2958) * Math.sin(point2y/57.2958) + Math.cos(point1y/57.2958) * Math.cos(point2y/57.2958) *  Math.cos((point2x/57.2958) - (point1x/57.2958))));
    
	}
	
	function initializeParameter(nameOfParameter, defaultValue){ //get command line parameter
	
		var returnVal = '';
		var qstringVal = getQuerystringParameter(nameOfParameter);
	
		if (qstringVal.length > 0) {
		
			returnVal = qstringVal;
			
		} else {
		
			returnVal = defaultValue;
	
		}
		
		return returnVal;
		
	}

	function rehydrateMapFromUrl() { //recreate map from url params
	
		//get units,map type, and calorie counter options
		var featureList = getQuerystringParameter('fl');
		
		if (featureList.length > 0) {
		
			var featureListArr = featureList.split('-');
			
			var mapType = featureListArr[0];
			var englishOrMetric = featureListArr[1];
		
			if (mapType=='s') {
			
				map.setMapType(G_SATELLITE_MAP);
			
			} else if (mapType=='m') {
			
				map.setMapType(G_NORMAL_MAP); 
			
			} else if (mapType=='h') {		
			
				map.setMapType(G_HYBRID_MAP);
			
			}

			(englishOrMetric=='m') ? setMetricUnits() : setEnglishUnits();
			
		}

		//recenter and zoom...
		var curCenterX = parseFloat(initializeParameter('centerX', -95.677068));
		var curCenterY = parseFloat(initializeParameter('centerY', 37.0625));
		
		var zoomLevel = parseInt(initializeParameter('zl',13));

		map.setCenter(new GLatLng(curCenterY, curCenterX), newZoom(zoomLevel));				
    
		// get elevation data from polyline
		var elevpolyline = getQuerystringParameter('elev');
    
		if (elevpolyline.length > 0) {
		
			arrPoints = decodeElevPolyline(elevpolyline);
		
			var j = 0;
			while(j < arrPoints.length) {
                                elevation[j] = arrPoints[j++]/100;
			}
		}
		//redraw polyline
		var polyline = getQuerystringParameter('polyline');
    
		if (polyline.length > 0) {
		
			arrPoints = decodePolyline(polyline);
		
			//currently the only way it is possible for the URL to have a polyline is if the user was 
			//recording at the time they permalinked. Thus, we set recording mode back on now.
			record = true;
			document.controlPanel.startRecording.value='Stop recording';
		
			var j = 0;
			while(j < arrPoints.length) {
                                var yCoord = arrPoints[j++]/100000;
                                var xCoord = arrPoints[j++]/100000;
				addWayPt(xCoord, yCoord);
				
			}
			
			//pts should have been fully repopulated during 
			//recursive calls to addWayPt
			record = false; // turn off recording
			drawPolyLine(pts);
			document.controlPanel.startRecording.value='Start recording';
			
		}
	}

	function prepArray(myArray){	//convert elevations to string
	
		var sReturn = '';
		var sIndCoords;
		for (i=0;i<myArray.length;i++){
                       sReturn += new String(Math.round(100 * myArray[i]));
			if (i<myArray.length-1)
				sReturn += ',';
		}
		return sReturn;
	
	}

	function prepPointArray(pointArray){	//convert waypoints to string
	
		var sReturn = '';
		var sIndCoords;
		for (i=0;i<pointArray.length;i++){
                       sReturn += (new String(Math.round(100000 * pointArray[i].y))) + ',' + (new String(Math.round(100000 * pointArray[i].x)));
			if (i<pointArray.length-1)
				sReturn += ',';
		}
		return sReturn;
	
	}
	function lastDist(){	//return distance between last waypoints
	
		var distanceToReturn = 0;
		lastPointIdx = pts.length - 1;
		secondToLastPointIdx = lastPointIdx - 1;;
	
		if (lastPointIdx > 0) {
				
			var fLastLeg;
			distanceToReturn = mileage(pts[lastPointIdx].y, pts[lastPointIdx].x, pts[secondToLastPointIdx].y, pts[secondToLastPointIdx].x);
											
		}
		
		return distanceToReturn;
	
	}
	
	function delWayPt() {	//delete last waypoint
	
		if(record == true){
			if (pts.length > 0) {
			
				pts.pop();
				dPts.pop();
				elevation.pop();
				drawPolyLine(pts);
		
			} else {
				alert('No points to remove');
			}
		}
		
	}

	function encodeElevPolyline(a) {	//polyline compressed elevations
	
		var p = a.split(',');
		var d = '';
		var xo=0;
		var yo=0;
	
		for(c=0;c<p.length;c++) {
	
			x = p[c];
			xd = x - xo;
			xo = x;
			f = (Math.abs(xd) << 1) - (xd<0);
	
			do {
				e = f & 31;
				f>>=5;
				if(f){e|=32};
				d+=String.fromCharCode(e+63);
			} while(f!=0);
		}
	
		return d;
	
	} 
	
	function encodePolyline(a) {	//creat polyline compressed waypoints
	
		var p = a.split(',');
		var d = '';
		var xo=0;
		var yo=0;
	
		for(c=0;c<p.length;c+=2) {
	
			x = p[c];
			xd = x - xo;
			xo = x;
			f = (Math.abs(xd) << 1) - (xd<0);
	
			do {
				e = f & 31;
				f>>=5;
				if(f){e|=32};
				d+=String.fromCharCode(e+63);
			} while(f!=0);
			
			y = p[c+1];
			yd = y - yo;
			yo = y;
			f = (Math.abs(yd)<<1)-(yd<0);
			
			do {
				e = f & 31;
				f>>=5;
				if(f){e|=32};
				d+=String.fromCharCode(e+63);
			} while (f != 0);
		}
	
		return d;
	
	} 
	function getQuerystringParameter(paramName){	//get url parameter
	
		var sReturnStr = '';
		
		var paramNameObj = new String(paramName+'=');
		paramNameObj = paramNameObj.toLowerCase();
			
		//parameters were sent
		if (queryStringObj.indexOf('?') > -1) {
			
			var qStringArray = queryStringObj.split('?');
	
			if (qStringArray[1].length > 0) {
		
				var allParams = qStringArray[1];
				var paramArray = allParams.split('&');
		
				for (i=0; i<= paramArray.length-1; i++){
					
					var origCaseFullParam = paramArray[i];
					var lcaseFullParam = paramArray[i].toLowerCase();
	
					if (lcaseFullParam.indexOf(paramNameObj) > -1)
					
						sReturnStr =  unescape(origCaseFullParam.substr(paramNameObj.length));
					
				}
								
			
			}
		
		
		}
		
		return sReturnStr;
	
	}
	function returnPermalinkParams(){	//form permalink parameters

		var curCenterX = map.getCenter().x;
		var curCenterY = map.getCenter().y;
	
		var sPoints = '';
		var ePoints = '';
		if (pts.length > 0) {
			sPoints = encodePolyline(prepPointArray(pts));
		}
		if (elevation.length > 0) {
			if(elevation[0] > -9999)
				ePoints = encodeElevPolyline(prepArray(elevation));
		}
		
		return ('?centerX=' + escape(curCenterX) + '&centerY=' + escape(curCenterY) + '&zl=' + new String(17-map.getZoom()) + '&fl=' + createFeatureListString() + '&polyline=' + escape(sPoints) + '&elev=' + escape(ePoints));

	}
	function returnPermalinkString(){	//form permalink
		var locationString = new String(location.href);
		var locationArr = locationString.split('?');
		
		locationString = locationArr[0];
		
		return (locationString + returnPermalinkParams());

	}
	function createFeatureListString() {	//feature params for permalink
	
		var sResult;
		
		if (map.getCurrentMapType()==G_SATELLITE_MAP) {

			sResult = 's';

		} else if (map.getCurrentMapType()==G_NORMAL_MAP) {

			sResult = 'm';

		} else if (map.getCurrentMapType()==G_HYBRID_MAP) {

			sResult = 'h';

		}
		sResult += '-';
		
		sResult += (metricUnits() ? 'm' : 'e'); 
		
		return sResult;
				
	}

	function printMap(){
		document.getElementById("copy").style.display = 'none';
		//window.print();
	}

	function topoMapold (name) {	// create topo
		var dragtopo = document.getElementById("topo");
		Drag.init(dragtopo,null, null, null, null, null, false, true);
		if(elevation.length > 0 && elevation[0] > -9999)
		{

        		document.getElementById("topomap").innerHTML = "<a href='javascript:void(0)' style='position:absolute;right:0px;top:0px;' onclick='this.parentNode.parentNode.style.visibility=\"hidden\"';>Hide Topo</a><br><img src=topomap.png" + returnPermalinkParams() + "&name=" + escape(name) + ">";
			document.getElementById("topo").style.visibility = "visible";

        		//window.open('topomap.php'+returnPermalinkParams()+ '&name=' +name, 'topo','width=800,height=230,menubar=no,status=no,titlebar=no');
        		//location.href='topomap.php'+returnPermalinkParams()+ '&name=' +name';
		}
		else
		{
			alert('Topo data unavailable');
		}
	}

	function topoMap (name) {	//attempt to run googleearth
		if(pts.length > 0)
		{
		document.topoMapForm.centerX.value = map.getCenter().x;
		document.topoMapForm.centerY.value = map.getCenter().y;
		document.topoMapForm.fl.value = createFeatureListString();
		document.topoMapForm.polyline.value = encodePolyline(prepPointArray(pts));
		document.topoMapForm.elev.value = encodeElevPolyline(prepArray(elevation));
		document.topoMapForm.name.value = name;
		document.topoMapForm.write.value = 0;

		if(metricUnits())
		{
			document.topoMapForm.metric.value = 1;
			submitTopoMapForm();
		}
		else
		{
			document.topoMapForm.metric.value = 0;
			submitTopoMapForm();
		}
		}
		else
		{
			alert('No route to plot');
		}
	}

	function googleEarth (name) {	//attempt to run googleearth
		if(pts.length > 0)
		{
		document.googleEarthForm.centerX.value = map.getCenter().x;
		document.googleEarthForm.centerY.value = map.getCenter().y;
		document.googleEarthForm.fl.value = createFeatureListString();
		document.googleEarthForm.polyline.value = encodePolyline(prepPointArray(pts));
		document.googleEarthForm.elev.value = encodeElevPolyline(prepArray(elevation));
		document.googleEarthForm.name.value = name;
		document.googleEarthForm.write.value = 0;

		if(metricUnits())
		{
			document.googleEarthForm.metric.value = 1;
			submitGoogleEarthForm();
		}
		else
		{
			document.googleEarthForm.metric.value = 0;
			submitGoogleEarthForm();
		}
		}
		else
		{
			alert('No route to show');
		}
	}

	function saveMap () {		//attempt to save in database
		if(pts.length > 0)
		{
			document.saveMapForm.url.value = returnPermalinkString();
			submitSaveMapForm();
		}
		else
		{
			alert('No route to save');
		}
	}


	function createPermalink(){	//create a permalink with write
		var mypermalink;
		var limit;

		if (navigator.userAgent.indexOf("Firefox") != -1)
			limit = 8096;
		else
			limit = 2048;
		if(typeof(parenturl) == "undefined")	
		{
			mypermalink=returnPermalinkString() +'&write=1';
			if(mypermalink.length > limit)
			{
				alert("Size of link exceeds limit. Remove some points.");
			}
			else
				location.href=returnPermalinkString() +'&write=1';
		}
		else
		{
			mypermalink=parenturl + returnPermalinkParams() +'&write=1';
			if(mypermalink.length > limit)
			{
				alert("Size of link exceeds limit. Remove some points.");
			}
			else
				top.location.href=parenturl + returnPermalinkParams() +'&write=1';
		}
	}
	function decodeElevPolyline(a) {	//decode polyline elevations
	
		var b=a.length;
		var c=0;
		var d=new Array();
		var e=0;
		while(c < b){
			var g;
			var h=0;
			var i=0;
			do{
				g=a.charCodeAt(c++)-63;
				i = i | (g&31)<<h;
				h = h + 5;
			}while(g>=32);
			var l;
			if (i & 1){ 			
				l = ~(i >> 1); 	
			} else {				
				l = i >> 1; 	
			}
	
			e = e + l;
			d.push(e);
		}
		return d;
	}
	function decodePolyline(a) {	//decode polyline to waypoints
	
		var b=a.length;
		var c=0;
		var d=new Array();
		var e=0;
		var f=0;
		while(c < b){
			var g;
			var h=0;
			var i=0;
			do{
				g=a.charCodeAt(c++)-63;
				i = i | (g&31)<<h;
				h = h + 5;
			}while(g>=32);
			var l;
			if (i & 1){ 			
				l = ~(i >> 1); 	
			} else {				
				l = i >> 1; 	
			}
	
			e = e + l;
			d.push(e);
			
			h=0;
			i=0;
			do{
				g=a.charCodeAt(c++)-63;
				i = i | (g&31)<<h;
				h = h + 5;
			}while(g>=32);
	
			var m;
			if (i & 1)
				m = ~(i >> 1);
			else
				m = i >> 1;
				
			f = f + m;
			d.push(f);
		}
		return d;
	}
	function clearLinkHandler(){	//attempt to clear all waypoints
	
		if (record && dPts.length > 1) {
			
			if (confirm('Are you sure you want to clear the route you have created?\nClicking OK to will clear all points and stop recording.\nClicking Cancel will continue recording and leave points as they are.')) {
			
				//distances array slightly different from all the other arrays;
				//it's initialized with a first element of 0.
				dPts.splice(1,dPts.length-1);
	
				pts.splice(0,pts.length);
				elevation.splice(0,elevation.length);
				
				map.clearOverlays();
				record=false;
				document.controlPanel.startRecording.value='Start recording';
	
			}
		} else {
			if(dPts.length == 1)	
				alert('No points to clear');
			else
				alert('You must have recording turned\non to clear points');
		
		}
	}

	function recompDistances()
	{
		var i = 1;
		while(i < pts.length)
		{
			dPts[i+1] = dPts[i] + mileage(pts[i].y, pts[i].x, pts[i-1].y, pts[i-1].x);
			i++;
		}
	}

	function createMarker(point,doticon,index)
	{
		var marker = new GMarker(point,{draggable:true,icon:doticon});
		marker.index = index;
		GEvent.addListener(marker, "dragstart", function() {
  		});
		GEvent.addListener(marker, "dragend", function() {
			var gll = marker.getPoint();
			pts[marker.index].x = gll.lng();
			pts[marker.index].y = gll.lat();
			recompDistances();
			drawPolyLine(pts); // redraw
  		});
		return marker;
	}

	function drawPolyLine(xpts){	//draw polyline on map
		
		var ratio = 1.0;
		var xMP = -122.0;
		var yMP = 45.0;
  		map.clearOverlays();
    
		//this function may be called from delWayPt, in which case 
		//we still want to clear points (above) but don't want to draw a new one.
		if (pts.length > 0) {
			
			var doticon = new GIcon();
			doticon.image = 'yellow8x8.gif';
			doticon.printImage = 'yellow8x8.gif';
			doticon.shadow = '';
			doticon.iconSize = new GSize(4, 4);
			doticon.iconAnchor = new GPoint(2, 2);
			doticon.infoWindowAnchor = new GPoint(2, 2);

			var icon = new GIcon();
			icon.image = 'marker_3.png';
			icon.printImage = 'marker_3.png';
			icon.shadow = 'shadow.png';
			icon.iconSize = new GSize(36, 34);
			icon.shadowSize = new GSize(64, 34);
			icon.iconAnchor = new GPoint(18, 34);
			icon.infoWindowAnchor = new GPoint(18, 34);

			//start
			icon.image = 'marker.gif?text=S';
			icon.printImage = 'marker.gif?text=S';
			icon.mozPrintImage = 'marker.gif?text=S';
			icon.shadow = 'shadow.png';
  			var startMarker = new GMarker(pts[0],icon);
			if(elevation[0])
			{
				startMarker.elevation = elevation[0];
				if(metricUnits())
					startMarker.elevation = Math.round(startMarker.elevation*1609/5280) + ' Meters';
				else
					startMarker.elevation = Math.round(startMarker.elevation) + ' Feet';

			}
  			map.addOverlay(startMarker);
        	
			if(record == false) {
			var deltaMP = 0.25;
			var totLength = base*(dPts[dPts.length - 1]);
			if(totLength > 5)
				deltaMP = 0.5;
			if(totLength > 10)
				deltaMP = 1.0;
			if(totLength > 30)
				deltaMP = 2.0;
			if(totLength > 50)
				deltaMP = 5.0;
			if(totLength > 100)
				deltaMP = 10.0;
			if(totLength > 300)
				deltaMP = 20.0;
			if(totLength > 500)
				deltaMP = 50.0;
			if(totLength > 1000)
				deltaMP = 100.0;
			if(totLength > 5000)
				deltaMP = 500.0;
			var currentMP = deltaMP;

			var i = 2;
			while(i < dPts.length)
			{
				while(base*(dPts[i]) > currentMP)
				{
					// calculate% distance
					ratio = (currentMP - base*(dPts[i-1]))/(base*(dPts[i]) - base*(dPts[i-1]));
					xMP = -ratio*(pts[i-1].x - pts[i-2].x)/1 - (pts[i-2].x);
					xMP = -trunkNum(xMP);
					yMP = -ratio*(pts[i-1].y - pts[i-2].y) - pts[i-2].y;
					yMP = -trunkNum(yMP);
					var MPoint = new GPoint(xMP, yMP);
					var iconURL = 'marker.gif?text=' + currentMP;
					icon.image = iconURL;
					icon.printImage = iconURL;
					icon.mozPrintImage = iconURL;
					icon.shadow = 'shadow.png';
					var MPMarker = new GMarker(MPoint,icon);
					if(elevation[i-2])
					{
						MPMarker.elevation = elevation[i-2] + ratio*(elevation[i-1] - elevation[i-2]);
						if(metricUnits())
							MPMarker.elevation = Math.round(MPMarker.elevation*1609/5280) + ' Meters';
						else
							MPMarker.elevation = Math.round(MPMarker.elevation) + ' Feet';
					}
					map.addOverlay(MPMarker);
					currentMP += deltaMP;
				}
				i++;
			}
			}
			else
			{
			var i = 1;
			while(i < dPts.length)
			{
				var XPoint = new GLatLng(pts[i-1].y,pts[i-1].x);
				map.addOverlay(createMarker(XPoint,doticon,i-1));
			i++;
			}
			}
  			//end
			icon.image = 'marker.gif?text=' + (base*(dPts[dPts.length -1])).toFixed(3);
			icon.printImage = 'marker.gif?text=' + (base*(dPts[dPts.length -1])).toFixed(3);
			icon.mozPrintImage = 'marker.gif?text=' + (base*(dPts[dPts.length -1])).toFixed(3);
			icon.shadow = 'shadow.png';
  			var EndMarker = new GMarker(pts[pts.length-1],icon);
			if(elevation[elevation.length-1])
			{
				EndMarker.elevation = elevation[elevation.length-1];
				if(metricUnits())
					EndMarker.elevation = Math.round(EndMarker.elevation*1609/5280) + ' Meters';
				else
					EndMarker.elevation = Math.round(EndMarker.elevation) + ' Feet';
			}
  			map.addOverlay(EndMarker);

			GEvent.addListener(EndMarker, 'click', function() {
				if(record)delWayPt();});
  			
			map.addOverlay(new GPolyline(pts,'#0000ff',5));
			
		}
    
	}

        function setMetricUnits(){	//set units to kilometers

                var unitInput = document.controlPanel.units;
                unitInput[0].checked = false;
                unitInput[1].checked = true;
                base = 1.609345*fudge;
        }
        function setEnglishUnits(){	//set units to miles
                var unitInput = document.controlPanel.units;
                unitInput[0].checked = true;
                unitInput[1].checked = false;
                base = 1.0*fudge;
        }

	function metricUnits(){		//check for metric units
	
		var curValue;
		var unitInput = document.controlPanel.units;

		if (unitInput[0].checked) {
			return false;	
		} 
		else
		{
			return true;	
		}
	}

	function kmUnits()		//reset map to kilometers
	{
		setMetricUnits();
		drawPolyLine(pts); // redraw route with new markers
		
	}

	function miUnits()		//reset map to miles
	{
		setEnglishUnits();
		drawPolyLine(pts); // redraw route with new markers
		
	}

	function toggleRecording(){ // toggle recording
		if(record==true){
                        record=false;
                        document.controlPanel.startRecording.value='Start recording';
			//createPermalink(); // for permalink fans
			drawPolyLine(pts);
		}
		else{
                        record=true;
                        document.controlPanel.startRecording.value='Stop recording';
			drawPolyLine(pts);
		}
	}

	function trunkNum(num)		//reduce number to 5 decimal places
	{
       		var tmpNum = num;

       		// Return 5 decimal places
       		tmpNum *= Math.pow(10,5);
       		tmpNum = Math.floor(tmpNum);
       		tmpNum /= Math.pow(10,5);
       		return tmpNum;
   	}
//]]>
