<!--
//# (c) 2009 Zonum Solutions
//# Last modified: April 5, 2009
//# MapTool library
//# Do NOT copy without asking first!

ZInclude("@zgeol");
ZInclude("@zvirtual_controls");
ZInclude("@geounits");
ZInclude("@latloninput");
ZInclude("@geolat");
ZInclude("@zwindows");
ZInclude("@mapfly2");
ZInclude("maptool/maptooldlg");



// <script type="text/javascript" src="/online/lib/zgeol.js"></script>
//<script type="text/javascript" src="/online/lib/zvirtual_controls.js"></script>
//<script type="text/javascript" src="/online/lib/geounits.js"></script>
//<script type="text/javascript" src="/online/lib/latloninput.js"></script>
//<script type="text/javascript" src="/online/lib/geolat.js"></script>
//<script type="text/javascript" src="/online/lib/zwindows.js"></script>
//<script type="text/javascript" src="/online/lib/mapfly2.js"></script>
//<script type="text/javascript" src="maptool/maptooldlg.js"></script>
 	
 	
 function myPoint(cx,cy)
 {
  this.x = cx;
  this.y = cy; 
 } 	

function resize_map()
 {
  var info = new zget_winsize();
  var xw = 800-135;
  var xh = 550-65;
  
  if(info.clientWidth>800) {xw = info.clientWidth - 135;}
  if(info.clientHeight>550) {xh = info.clientHeight - 65;}
  
  var obj =zget_byID("content");
  obj.style.height= ""+xh+"px";
  
  zset_resize("map",xw,xh);
  /*
  var obj =zdoc_get("map");
  obj.style.width= ""+xw+"px";
	*/
 }

 function initMap()
  {
     window.resizeTo(screen.availWidth,screen.availHeight);
     window.moveTo(0, 0);
     resize_map();
     map = new GMap2(document.getElementById("map"));
     map.addControl(omc);       
     map.addControl(smc);
     map.addControl(sc);
     GEvent.addListener(map, "click",function(overlay, point) {zmapclick(overlay, point);}); 
     GEvent.addListener(map, "mousemove", function(point) {zmouse_move(point);});
     //map.setCenter(new GLatLng(32.231857, -110.953474), 5);
     map.setCenter(new GLatLng(24, 0), 3);
     map.enableContinuousZoom();
     map.enableScrollWheelZoom();
     document.frTool.optaction.options.selectedIndex=0;
     activeTool(0);
  }   
		  
 
 function Link_Child_data(data)
  {
    var myfr =myWin.document.getElementById("frOut");
    if (myfr) {myfr.datamemo.value=data;
		  myfr.btn1.disabled=false;
		} else {alert("An Error Ocurred \n\nPlease try Again");}
  }
  
 function Link_Parent_data(FormatOut,sp,id)
 {
  if(id=='profile') {profilegraph(false,sp);} else {Line_Poly_Coords(FormatOut,sp);} 
 }
 
 function Line_Poly_Coords(FormatOut,sp)
 {
   var dout="";
   if(FormatOut=="SHP") {
	  dout=prepareSHP("|");
	  Link_Child_data(dout);
	 } else {
	  dout=web_resultado(FormatOut,sp);
    Link_Child_data(dout);
   }   
 } 
  
 function PopResult()
  {
	 if(FormatOut=="GRAPH") {
	    profilegraph(true,",");
	 } else {
	  var cad=FormatOut.split("|");
		if(cad.length==2) {
		  FormatOut=cad[0];
	    cad="&id=profile";
	  } else {cad="";}
	  zopen_window("maptool.php?action="+FormatOut+cad,"result","");	 
	 }
 }
  
 function app_run(xf)
  {
   FormatOut=xf;
   var fr=document.frGeo;
   ElevUnits = zget_selIndex(fr.ElevUnits);
   
   if(!isMapOut(FormatOut)) {uL=zget_selIndex(fr.DistUnits)+1;}
   if(xf=="GRAPH" || xf=="TXT|P" || xf=="CSV|P" || xf=="TAB|P") {
	    AddElevation=true;
		} else {
     UTMZoneOpt = zget_selIndex(fr.UTMZone) +1;
     LatLonOpt = zget_selIndex(fr.Projection) +1;
     HemispOpt = zget_selIndex(fr.Hemisph) +1 ;
     AddElevation=fr.ckElev.checked;
     if(!isMapOut(FormatOut)) {AddDistance=fr.ckDist.checked;}
	 }
   
   if(AddElevation) {
      if(ZQuery_Completed==false) {QueryDlg();} else {PopResult();}
   } else {PopResult();}    
  } 

  function ClearData()
  {
    PtsList = [];
    PtsZ=[];
    ZQuery_Completed=false;
  }

  function ClearDist()
  {
    ClearData();
    map.clearOverlays();
    set_cmd(class_hrf(help_hrf(0)+pt_hrf(0))+" <b>First Point:</b>");
  }


 function StopArea()
  {
    ClearData();
    ZQuery_Completed=false;
  }

  function ClearArea()
  {
    ClearData();
    map.clearOverlays();
    set_cmd(class_hrf(help_hrf(0)+pt_hrf(0))+" <b>First Point:</b>");
  }

  function activeTool(zTool)
	 {
	  set_mess("");
	  ZQuery_Completed=false;
	  if(zTool==0) {EntiType=-1; set_mess('&nbsp;&nbsp;&copy; 2006-2010 ZONUMS');}
   if(zTool==1 || zTool==2) {
     if(zTool==1) {uL=1;} else {uL=3;} 
     
     EntiType=0;
   }

   if(zTool>2 && zTool<=7) {
     uL=zTool-2;
     //set_cmd(class_hrf(help_hrf()+pt_hrf(0))+" <b>First Point:</b>");
     EntiType=1;
   } 

    if(zTool>7 && zTool<=13) {
     uA=zTool-7;
     if(uA<=3) {uL=1;} else {uL=5;}
     //set_cmd(class_hrf(help_hrf()+pt_hrf(0))+" <b>First Point:</b>");
     EntiType=2;
   }
   if(zTool==14) {EntiType=11; DirectionsDlg();}
   if(zTool==15) { EntiType=1;}
   if(zTool==16) { EntiType=2;}
   if(zTool==17) {EntiType=21;}
   ContinueClick(null,true);
	} 


  function change_ComboTool(zTool)
  {
   zset_selIndex(document.frTool.optaction,zTool);
   activeTool(zTool);
  }

  function changeTool()
  {EntiType=-1;
   EditingMode=false;
   zTool = zget_selIndex(document.frTool.optaction);
	 ClearData();  
   map.clearOverlays();
   activeTool(zTool);
  }

 function gethrf(fun,label)
  {
   return '<a href="javascript:'+fun+'">['+label+']</a>';
  }

 function addmap_point(lat,lon)
 {
  var point = new GLatLng(lat,lon);
   map.addOverlay(new GMarker(point));
  //var myMarker = new GMarker(point,icon);  
  //myMarker.title = output;
  //map.addOverlay(myMarker);
 }

 function PtsList_Push(lat,lon)
  {PtsList.push(new GLatLng(lat,lon));}
  
 
function zpt(lat,lon)
 {
   var point = new GLatLng(lat,lon);
   map.addOverlay(new GMarker(point));
  //var myMarker = new GMarker(point,icon);  
  //myMarker.title = output;
  //map.addOverlay(myMarker);
 }


 function getcoords(point)
 { 
   var clatlon="Lat: "+strcad(point.lat(),7)+"<br>Lon: "+strcad(point.lng(),7);
   var clatlon2="<br><br>Lat: "+getDMS(point.lat())+"<br>Lon: "+getDMS(point.lng());
   var UTMZone = zGeoL_calcUTMZone(point.lng());
   var isNorth=(point.lat()>0);
   var pt=zGeoL_LatLon2UTM(point.lat(),point.lng(),UTMZone,isNorth);
   var cutm = "UTM Zone: " +UTMZone+"<br>X: "+strcad(pt[0],1)+"<br>Y: "+strcad(pt[1],1); 
   
  return clatlon+clatlon2+"<br><br>"+cutm;
 } 

 function zmouse_move(point)
 {
   var line = getcoords(point);
   document.getElementById("latlon").innerHTML = line; 
 }

 function mytext(text,color)
  {
   return '<font color="'+color+'">'+text+'</font>';
  }

 function set_mess(line)
  {
   document.getElementById("message").innerHTML = line; 
  }

 function set_cmd(line)
  {
   document.getElementById("message").innerHTML = line +' <img border="0" src="/online/icons/prompt.gif"/>';
  }

function changemaptype(newtype)
 {
  map.setMapType(newtype);
 }

 function PointMapClick(point)
 {
   var myMarker = new GMarker(point,icon); 
    map.addOverlay(myMarker);
    doGetElevation(point.y,point.x);
 }

 function undoPt()
 {
  var N=PtsList.length;
  if(N>0) {
    PtsList.splice(N-1, 1);
		ContinueClick(null,true);
  }
 }


 function help_hrf(id)
 {
  if(id==0) {return gethrf("appHelp('cmd_pt1')",'Help');}
   else {return gethrf("appHelp('cmd_pt')",'Help');}
 }
 function undo_hrf()
 {
  return gethrf('undoPt()','Undo');
 }
 
 function pt_hrf(id)
 {
  if(id==0){return gethrf('Type_PtDlg()','Input');}
   else {return gethrf('Type_RPtDlg()','Input');}
 }
 
 function options_hrf()
 {
  if(EntiType==1) {return gethrf('ClearDist()','Clear')+gethrf('LineOptionsDlg()','Options');}
   else {return gethrf('ClearArea()','Clear')+gethrf('AreaOptionsDlg()','Options]'); }
 }

 function class_hrf(text)
 {
  return '<span class="menuc">'+text+'</span>';
 }
 

 function point_drag(id,point)
  {
   PtsList[id]=point;
   ContinueClick(null,false);
   Redraw_myMap(id);
  }


 function map_highlight(PtsList,Pts)
 {
  map.clearOverlays();
  
  Polyline = new GPolyline(PtsList, "#FF0000", 4,1);
  map.addOverlay(Polyline);
  var n=Pts.length;
  for(var i=0; i<n; i++) {
   point = Pts[i];
   myMarker = new GMarker(point);
   map.addOverlay(myMarker);
  }
 }

 function Redraw_myMap(id)
  {
   if(EditingMode==false) {
    map.clearOverlays();
    var N=PtsList.length;
		if (N>0) {
     if(EntiType==1 && N>1) {
       Polyline = new GPolyline(PtsList, "#FF0000", 4,1);
       map.addOverlay(Polyline);
     }
     if(EntiType==2 && N==2) {
       var polyline = new GPolyline(PtsList, "#FF0000", 4,1);
       map.addOverlay(polyline);
     }
     if(EntiType==2 && N>2) {
       Polygon=new GPolygon(PtsList,'#FF0000', 3, 1,'#0000FF',0.2);
       map.addOverlay(Polygon);
     }
     
     if(N>id) {
       point = PtsList[id];
       //var myMarker = new GMarker(point,icon,{draggable: true}); 
       myMarker = new GMarker(point,{draggable: true});
       IdDragged=id;
       GEvent.addListener(myMarker, "dragend", function() {
          point_drag(id,myMarker.getLatLng());
        });
       map.addOverlay(myMarker);
     }
    }
    }
  }

 function ContinueClick(point,isRedraw)
  {
   switch (EntiType) {
    case 0: PointClick(point,isRedraw); break;
    case 1: DistClick(point,isRedraw); break;
    case 2: AreaClick(point,isRedraw); break;
    //case 1: DirectionsDlg(); break;
    case 21: calculators(); break;
   }
  }

 function PointClick(point,isRedraw)
  {
   set_cmd("<b>Click a Point over the Map to get the Elevation:</b>");
   if(point) {PointMapClick(point);}
  }

  function calculators()
  {
   var cad='Select a Lat/Lon Calculator: '+gethrf('calculatorDlg(1)','Distance');
	 cad+=' '+gethrf('calculatorDlg(2)','MidPoint');
	 cad+=' '+gethrf('calculatorDlg(3)','Azimuth');
	 cad+=' '+gethrf('minicalc()','Coordinates Conversion');
	 cad+=' '+gethrf('ipaddress()','IP-Address');
   set_mess(class_hrf(cad));
  }


 function DistClick(point,isRedraw)
 {
  ZQuery_Completed=false;
  if(point) {PtsList.push(new GLatLng(point.y,point.x));}
	     
  var N=PtsList.length;
  if(N==0) {set_cmd(class_hrf(help_hrf(0)+pt_hrf(0))+" <b>First Point:</b>");}
  if(N==1) {set_cmd(class_hrf(help_hrf(1)+undo_hrf()+pt_hrf(1))+" <b>Next Point:</b>");}
  if(N>1) {          
     var distText = "";
     var TotDist = conv_length(calDist(PtsList),uL);
     if(N>2) {
      var tmpdist = conv_length(getSegDist(PtsList,PtsList.length-2,PtsList.length-1),uL);
      distText = mytext("Segment = "+ tmpdist.toFixed(4),"green") + " Total =";
    }
    distText += " " + TotDist.toFixed(3)+" "+getUnitL_Text(uL);
    var cad = ''+distText+' '+class_hrf(help_hrf(1)+undo_hrf()+options_hrf()+pt_hrf(1));
		set_cmd(cad+" <b>Next Point:</b> ");
  }
  if(isRedraw) {Redraw_myMap(N-1);}
 }

function AreaClick(point,isRedraw)
 {ZQuery_Completed=false;
  if(point) {PtsList.push(new GLatLng(point.y,point.x));}
  var N=PtsList.length;
  if(N==0) {set_cmd(class_hrf(help_hrf(0)+pt_hrf(0))+" <b>First Point:</b>");}
  if(N==1 || N==2) {set_cmd(class_hrf(help_hrf(1)+undo_hrf()+pt_hrf(1))+" <b>Next Point:</b>");}
  if(N>2) {           
     var TotArea = "";
     var TotDist = "";

       TotArea = calArea(PtsList);
       TotArea = TotArea.toFixed(3);
       TotArea = "Area = "+TotArea +" " +getUnitA_Text(uA);
       TotDist = conv_length(calPerimeter(PtsList),uL);
       TotDist = "Perimeter = "+TotDist.toFixed(3)+" "+getUnitL_Text(uL);
     
      var cad= TotArea+' '+TotDist+class_hrf(help_hrf(1)+undo_hrf()+options_hrf()+pt_hrf(1));
      set_cmd(cad+" <b>Next Point:</b>"); 
  }
  if(isRedraw) {Redraw_myMap(N-1);}
 }

 function zmapclick(overlay, point)
   { 
     if (point) {
      if(EditingMode==false) {
       map.clearOverlays();
       if(EntiType==0) {PointMapClick(point);};  
       if(EntiType==1) {DistClick(point,true);}
       if(EntiType==2) {AreaClick(point,true);}     
     } }                       
   }

function zRequest(url)
{
  xmlhttp=null
// code for Mozilla, etc.
 if (window.XMLHttpRequest)
  {xmlhttp=new XMLHttpRequest()}
// code for IE
 else if (window.ActiveXObject)
  {xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}

 if (xmlhttp!=null)
  {
  xmlhttp.onreadystatechange=state_Change
  xmlhttp.open("GET",url,true);
  xmlhttp.send(null)
  } else {alert("Your browser does not support XMLHTTP.");}
}

function state_Change()
{
if (xmlhttp.readyState==4)
  {
  if (xmlhttp.status==200) {
	  if(MultiZQuery==false) {parseElevation(xmlhttp.responseText);}
	   else {Add_QueryPoint(xmlhttp.responseText); };
	 } else {set_mess(mytext("Problem retrieving data:" + xmlhttp.statusText,"red"));}
  }
}

 function getDEMElev(TextData)
  {
   /* var x = TextData.indexOf('<double>');
    var SubCad = TextData.substring(x+7,TextData.length);
    x = SubCad.indexOf('</');
    SubCad = SubCad.substring(1,x);
    
    return SubCad
  */

   return TextData
  }


 function parseElevation(TextData)
  {
   Elev = parseFloat(TextData);
   if(Elev>-9999) {
      Elev =getElev_units(TextData);
   } else {
    Elev = "-9999 [unknown]"
   }
   set_mess("Point: "+latlon_z+" <b>Elev=" +Elev+"</b>");
  }


function getElevUnits(etipo)
 {
   if(etipo==0) {return "Meters";}
   else {return "Feet";}
 }

function getElevConv(Elev,etipo)
 {
  Elev = parseFloat(Elev);
  if(etipo==1) {Elev = Elev * 3.2808398950;}
  Elev = "" + Elev.toFixed(3);
  return Elev
 }

 function getElev_units(Elevation)
  {
    Elev = parseFloat(Elevation);
    if(Elev>-9999) {
     Elev = conv_length(Elev,uL);
     Elev = "" + Elev.toFixed(3) + " " + getUnitL_Text(uL);
    } else {
     Elev=-9999;
   }
    return Elev 
  }

 function getUrl_DEM(lat,lon)
  {
    var Url = '/online/zelevserver.php?lon='+lon+'&lat='+lat;
    latlon_z="Lat="+lat.toFixed(4)+", Lon="+lon.toFixed(4);
    //Url ='/gmaps/elevserver2.php?yws_path=' + encodeURIComponent(path);
   return Url
  }

 function doGetElevation(lat,lon)
 { 
  set_mess('<b>'+mytext("Wait...","green")+'</b>');
  MultiZQuery=false;
	zRequest(getUrl_DEM(lat,lon));
 }

 function Add_QueryPoint(TextData)
  {
   PtsZ.push(getDEMElev(TextData));
   Next_QueryPoint();
  }

 function Next_QueryPoint()
  {
   if(ZQuery_id<ZQuery_max) {
     var PtX=PtsList[ZQuery_id];
     ZQuery_id+=1;
     var cad='<b>'+mytext("Wait... "+ZQuery_id+" of "+ZQuery_max,"green")+'</b>';
     document.getElementById("QueryStatus").innerHTML=cad;
     
     zRequest(getUrl_DEM(PtX.y,PtX.x));
    } else {
     //Completed
     MyWinClose('');
     ZQuery_Completed=true;
     MultiZQuery=false;
     EndQueryDlg();
   }
  }

 function Start_QueryPoints()
  {
   MultiZQuery=true;
   ZQuery_Completed=false;
   ZQuery_id= 0;
   ZQuery_max=PtsList.length;
   PtsZ=[];
   Next_QueryPoint();
	}

function get_gpxheader()
 {
  var cadena = '<?xml version="1.0" encoding="utf-8" ?>\n';
   cadena +='<gpx version="1.0" creator="www.zonums.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ';
   cadena +='xmlns="http://www.topografix.com/GPX/1/0" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">\n';
  return cadena
 }


 function get_EntiHeader(isPolyline,sp,Elevation,SendUTM)
  {
   var xCad = "MapTool Export\n";
   var tmpCad="";
   var lineTitle="";
   if(SendUTM) {
        xCad+='Units: UTM(meters), Zone '+UTMZone;
				if(HemispOpt==1) {xCad+=" N";} else {xCad+=" S";}
				xCad+='\nDatum: WGS84\n\n';
        //nwd.write('Powered by Zonum Solutions\nwww.zonums.com\n');
        lineTitle="id"+sp+"X (Easting)"+sp+"Y (Northing)"+Elevation;
       } else {
        xCad+='Units: Lat/Lon (Decimal degrees)\nDatum: WGS84\n\n';
        lineTitle="id"+sp+"Latitude"+sp+"Longitude"+Elevation;
       // nwd.write('Powered by Zonum Solutions\nwww.zonums.com\n');
      }  
      
   if(AddDistance==true) {
    lineTitle+=sp+"Distance ("+getUnitL_Text(uL)+")";
	 }  
      
   if(isPolyline==true) {
     tmpCad = conv_length(calDist(PtsList),uL);
     tmpCad = ""+ tmpCad.toFixed(3)+" "+getUnitL_Text(uL);
     xCad+='Polyline:\nLength = '+tmpCad;
   } else {
    tmpCad = conv_length(calPerimeter(PtsList),uL);
    tmpCad= ""+ tmpCad.toFixed(3)+" "+getUnitL_Text(uL); 
    xCad+='Polygon:\nPerimeter = '+tmpCad;
    tmpCad = conv_length(calArea(PtsList),uA);
    tmpCad = "" + tmpCad.toFixed(3) + " "+getUnitA_Text(uA);
    xCad+='\nArea = '+tmpCad;
   }
   xCad+='\nVertices = '+PtsList.length+'\n\n'+lineTitle+"\n";
   
   //xCad+='\nId'+sp+'Longitude'+sp+'Latitude'+Elevation+'\n';
   
   return xCad
  }


 function get_expocoords(xlon,ylat,sp,SendUTM,i,modo,myUTMZone)
 { var outcoo="";
  if(SendUTM) {    
    var pt=zGeoL_LatLon2UTM(ylat,xlon,myUTMZone,(HemispOpt==1));
    xlon = parseFloat(strcad(pt[0],3));
    ylat = parseFloat(strcad(pt[1],3));
  } 
   if(modo==1) {outcoo = xlon + sp +ylat;}
    else {outcoo = ylat +sp+xlon;}
  
  if(i==0){
    EXMin=xlon;
    EXMax=xlon;
    EYMin=ylat;
    EYMax=ylat;
  }else{
   if(xlon<EXMin) {EXMin=xlon}
   if(xlon>EXMax) {EXMax=xlon}
   if(ylat<EYMin) {EYMin=ylat}
   if(ylat>EYMax) {EYMax=ylat}; 
  }
  
  return outcoo;
 }  


 function prepareSHP(sp)
 {
  var modo = 1;
  sp=",";
 
  UTMZone = UTMZoneOpt;
  SendUTM = (LatLonOpt==1);
  
   var Elevation = "";
   var line = "";
   var memodata = "";
   var firstline="";

  for (i=0; i<PtsList.length; i++){
      Pt2=PtsList[i];
      line=get_expocoords(Pt2.x,Pt2.y,sp,SendUTM,i,modo,UTMZoneOpt);
     
			if(AddElevation==false) {Elevation = "0";} else {Elevation=getElevConv(PtsZ[i],ElevUnits);}
      line = line+sp+Elevation;
      if(i==0) {firstline = line;}
      if(memodata=="") { memodata = line;}
       else {memodata += "\n"+line;}
  }

  if(EntiType==2) {memodata+="\n"+firstline;}

  var metax="0";
  if(SendUTM==true) { metax=UTMZone;}
  metax+=sp+HemispOpt+sp+getElevUnits(ElevUnits)+sp+EntiType+sp+"0\n";
  metax+=EXMin+sp+EYMin+sp+EXMax+sp+EYMax+"\n"; 
    
  return metax+memodata
 }

 function isMapOut(FormatOut)
 {
  return (FormatOut=="DXF" || FormatOut=="BLN" || FormatOut=="SHP" || FormatOut=="GPX");
 }

 function web_resultado(FormatOut,sp)
 {
   var modo = 1;
   var isMap= isMapOut(FormatOut);
   var SendUTM=false;
   if(LatLonOpt==2) {modo=2;}
   
   if(FormatOut=="GPX") {SendUTM=false; modo=2;} else {SendUTM = (LatLonOpt==1);}
   if(FormatOut=="KML") {SendUTM=false; modo=1;}
   if(FormatOut=="DXF") {sp ="\n20\n"; modo=1;}
   if(FormatOut=="BLN") {modo=1;}
   
   var dout="";
   UTMZone = UTMZoneOpt;
   
   var Elevation = "";
   if(AddElevation==true) {Elevation = "" +sp+"Elevation ("+getElevUnits(ElevUnits)+")";}
   if(isMap==false) {dout=get_EntiHeader(EntiType==1,sp,Elevation,SendUTM);}

   if(FormatOut=="DXF") {
	  dout+='0\nSECTION\n2\nENTITIES\n0\nPOLYLINE\n8\nMapTool\n66\n1\n10\n0.0\n20\n0.0\n30\n0.0\n';
		if(AddElevation==true) {dout+="70\n8\n";}
		}
   if(FormatOut=="BLN") {dout+=''+PtsList.length+',1';}
   if(FormatOut=="GPX") {
     sp='" lon="';
      dout+=get_gpxheader();
      dout+='<trk>\n<name>Route 1</name>\n<trkseg>\n';
   }
   
   var Pt_Name="";
   var line = ""; 
   var TotDist=0;
   if(AddDistance==true) {TotDist=Create_DistList(PtsList);}
    for(var i=0; i<PtsList.length; i++) {
      Pt_Name=i;
      Pt2=PtsList[i];
      line=get_expocoords(Pt2.x,Pt2.y,sp,SendUTM,i,modo,UTMZoneOpt);
     
			if(AddElevation==false) {Elevation = "";} else {Elevation=getElevConv(PtsZ[i],ElevUnits);}
      
      if(FormatOut=="DXF" || FormatOut=="GPX" || FormatOut=="KML") {
        if(FormatOut=="DXF") {
          if(AddElevation==false) {Elevation="0.0";}
				  dout+='0\nVERTEX\n8\nMapTool\n10\n'+line+'\n30\n'+Elevation+'\n70\n32\n';
				}
         else {
          if(FormatOut=="GPX") {
            if(AddElevation==true) {Elevation = '<elev>'+Elevation+'</elev>';}
						 dout+='<trkpt lat="'+line+'">'+Elevation+'</trkpt>\n'; 
          } else {
           dout+='<Placemark><name>'+Pt_Name+'</name><Point><coordinates>'+line+',0</coordinates></Point></Placemark>\n';
          }
       }
      } else {
        if(FormatOut=="BLN") {dout+="\n"+line;
          } else {
           if(AddElevation==true) {Elevation = sp+getElevConv(Elevation,ElevUnits);}
           if(AddDistance==true) {Elevation+=sp+strcad(conv_length(DistList[i],uL),4);}
           dout+=Pt_Name+sp+line+Elevation+'\n';
          }
     }
   }

   
   if(FormatOut=="DXF") {dout+='0\nSEQEND\n0\nENDSEC\n0\nEOF';}
   if(FormatOut=="GPX") {dout+='</trkseg></trk>\n</gpx>';}
   //if(FormatOut=="KML") {dout+='</Document></kml>';}
   
  return dout
 }


 function profilegraph(isChart,sp)
 {
   var TotDist=Create_DistList(PtsList);
   var Elevation = "";
   var memodata = "";
   var tmpDist=0;
   if(DistList.length==PtsZ.length) {
    TotDist=conv_length(TotDist,uL);
    Elevation=parseFloat(getElevConv(PtsZ[0],ElevUnits));
    var MinZ=Elevation;
    var MaxZ=Elevation;
    for (var i=0; i<DistList.length; i++){
      tmpDist=strcad(conv_length(DistList[i],uL),3);
      Elevation=parseFloat(getElevConv(PtsZ[i],ElevUnits));
      if(Elevation<MinZ) {MinZ=Elevation;} 
      if(Elevation>MaxZ) {MaxZ=Elevation;}
      memodata+="\n"+tmpDist+sp+Elevation; 
   }

  var metax="";
	if(isChart==true) {
	   metax=MinZ+sp+MaxZ+sp+TotDist+sp+getElevUnits(ElevUnits)+sp+getUnitL_Text(uL);  
     document.frprofile.datamemo.value=metax+memodata;
     profilewin();
     document.frprofile.submit();
   } else {
	  metax="Profile generated by MapTool 2\n Distance units:"+getUnitL_Text(uL)+"\n Elevation units:"+getElevUnits(ElevUnits);
	  metax+="\n Min Elevation:"+sp+MinZ+"\n Max Elevation:"+sp+MaxZ+"\n\nDistance"+sp+"Elevation";
		Link_Child_data(metax+memodata);
	 }  
	} else {
	alert('Error: Please Try Again\n\n Elevations must be regenerated!');} 
	DistList=[];
 }

-->