    var legs = [];
    var points = [];
    var dmarker;
    var dist = 0;
    var elev = 0;
    var climb = 0;
    var descent = 0;

    var lineColor = "#ff0000"; // black line
    var opacity = .8;
    var lineWeight = 3;

var xicon = new GIcon();
xicon.image = "http://www.cs.utk.edu/~dunigan/gifs/xtrk.gif";
xicon.iconSize = new GSize(6, 6);
xicon.iconAnchor = new GPoint(3, 3);


   // mapClick - Handles the event of a user clicking anywhere on the map
   // Adds a new point to the map and draws a new line from the last point

    function mapClick(marker, clickedPoint) {
	if (marker){
		if (marker.html)marker.openInfoWindowHtml(marker.html);
		return;
	}
      // Push onto points list
      var p = {point: clickedPoint, pelev: 0 };
      points.push(p);
      if (dmarker) map.removeOverlay(dmarker);
      dmarker = new GMarker(clickedPoint,xicon);
      map.addOverlay(dmarker);
      drawTrack();
     }


      // Clear current Map
      function clearMap(){
//       legs._foreach(function(p) { map.removeOverlay(p.line); });
	for (var i=0; i < legs.length; i++){ map.removeOverlay(legs[i].line);}
        if (dmarker) map.removeOverlay(dmarker);
        points = [];
	legs = [];
	dist = 0;
	climb = 0;
	descent = 0;
	elev = 0;
	centermsg();
      }


    // Delete last Point
    // This function removes the last point and update track and data

    function deleteLastPoint(){
      // pop last element of polypoint array
      if (points.length == 0) return;
      if (points.length == 1) {
	map.removeOverlay(dmarker);
	points = [];
	return;
      }
      points.pop();
      var p = points[points.length-1];
      elev = p.pelev;
      
      if (dmarker) map.removeOverlay(dmarker);
      dmarker = new GMarker(p.point,xicon);
      map.addOverlay(dmarker);

      var p = legs.pop();
      if (p) {
	map.removeOverlay(p.line);
	dist = dist - p.lth;
      }
	if (points.length == 1) dist = 0;
      centermsg();
     }


    // drawTrack
    function drawTrack(){

      if (points.length <= 1) return;
      // add new segment from last two points
      var p = {line: new GPolyline([points[points.length-1].point,
	points[points.length-2].point],lineColor,lineWeight,opacity), lth: 0};
      p.lth = p.line.getLength() *  0.00062137;
      dist = dist + p.lth;
      legs.push(p);
      map.addOverlay(p.line);
      centermsg();
    }


function saveTrack() {
      if (points.length == 0) return;
        twindow = window.open("", "twindow", 'width=300,height=300,scrollbars=yes,menubar=yes');
	twindow.document.write('<pre>');
	twindow.document.write('&lt;?xml version="1.0" encoding="UTF-8"?>\r\n');
	twindow.document.write('&lt;gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="thd ');
	twindow.document.write(Date());
	twindow.document.write(' ">\r\n &lt;trk>&lt;name>TNtrack&lt;/name>&lt;trkseg>\r\n');
	for (var i=0; i < points.length; i++){ 
	
		var mylat = points[i].point.y.toFixed(5);
		var mylon = points[i].point.x.toFixed(5);
        	twindow.document.write('&lt;trkpt lat="' + mylat + '" lon="' + mylon + '">&lt;/trkpt>\r\n' );
        }
	twindow.document.write('&lt;/trkseg>\r\n &lt;/trk>\r\n &lt;/gpx>\r\n');
	twindow.document.write('</pre>');
	twindow.document.close();
}

function profileTrack() {
  var url = "http://www.heywhatsthat.com/bin/profile1.cgi?src=profiler&axes=1&curvature=0&metric=0";
  var color = ",,,ff0000";
  var mylat;
  var mylon;
        if (points.length < 1) return;
        if (points.length == 1){
                mylat = points[0].point.y.toFixed(5);
                mylon = points[0].point.x.toFixed(5);
                url = "http://www.cs.utk.edu/~dunigan/landforms/elev.php?lat=" +  mylat + "&lon=" + mylon ;
	} else {
         for (var i=0; i < points.length; i++){
                mylat = points[i].point.y.toFixed(5);
                mylon = points[i].point.x.toFixed(5);
                url = url + "&pt" + i + "=" + mylat + "," + mylon + color;
	 }
        }
        window.open(url,"elevationprofile","width=840,height=200");
}

