<!--
//(c) 2006-2009 Zonum Solutions
//Last modified: February,24 2009


/*
 var selection = document.quiz.colour;

for (i=0; i<selection.length; i++)

  if (selection[i].checked == true)
	alert(fruit[i] + ' are ' + selection[i].value + '.')

}
*/



 function disable_Points(como)
  {
    var fr=document.frForm;
   
   fr.radiox[0].disabled=como;
  fr.radiox[4].disabled=como;

 /*  fr.sb1.disabled=como;
    fr.sb1go.disabled=como;*/
    fr.CEPoints.disabled=como;
}

 function disable_Paths(como)
  {
	  var fr=document.frForm;
    fr.radiox[1].disabled=como;
    fr.radiox[5].disabled=como;
    /*fr.sb2.disabled=como;
    fr.sb2go.disabled=como;*/
    fr.CEPaths.disabled=como; 
	}

 function disable_PolyIn(como)
  {
   var fr=document.frForm;
	fr.radiox[2].disabled=como;
	fr.radiox[6].disabled=como;
	/*
    fr.sb3.disabled=como;
    fr.sb3go.disabled=como;
    fr.sb5.disabled=true;*/
    fr.CEPolyIn.disabled=como;
	}

 function disable_PolyOut(como)
  {
	 var fr=document.frForm;
    fr.radiox[3].disabled=como;
    fr.radiox[7].disabled=como;
   
  /* fr.sb4.disabled=como;
    fr.sb4go.disabled=como;
    fr.sb5.disabled=true;*/
    fr.CEPolyOut.disabled=como; 
	}		

 function disable_checkKML(como)
  {
   //document.frForm.sbx.disabled=como;
  }

 function disable_All(como)
 {
  disable_Points(como);
  disable_Paths(como);
  disable_PolyIn(como);
  disable_PolyOut(como);
 }

 function app_cleanAll()
  {
    PreProcessed=false;
    disable_All(true);
    disable_checkKML(false);
    NPoints=0;
    NPaths=0;
    NPolyIn=0;
    NPolyOut=0;
    clean_datavars();
    clean_dataholders();
    document.frForm.datamemo.value='Copy/paste your data here, or "upload a KML/KMZ file"';
    //document.toolbar.sbM2.disabled=false;
    hide_stats(true);
  }

 function app_new()
  {
    app_cleanAll();
	}

 function app_about()
 {
   var MSG = "<center><b>Kml2Shp Online </b>";
   MSG+="<br><i>Last update: Feb 28, 2010</i><br>";
   MSG+="<br><b>Convert Google Earth data to a Shapefile</b><br>";
   MSG+="<br><b>Tested with:</b><br> Firefox 3.5 (Windows, Linux and MAC OS)<br>";
   MSG+="Safari 4 (Windows, MAC OS),<br> Google Chrome (Windows, MAC OS)<br>";
   MSG+="<br>SHP Files created by this tool work properly with ArcGIS<br><br>";
   MSG+="<br>(c) 2006-2010 Zonum Solutions</center>";
   zwin_msgbox("About",340,240,"","",MSG);
 }


  function app_showNODATA()
 {
   var MSG = "<br><center><b>There is not data to process</b><br>";
   MSG+="<br>1) Copy/paste KML Data, or upload a file<br>2) Then click 'Process KML' button<br>3) Select a valid Shape-type</center>";
   zwin_msgbox("KML2SHP Messaje",300,140,"","",MSG);
 }

 function get_radioexport(radiolist)
 { var option=-1;
 
  for (var i=0;i<radiolist.length;i++) {
 	if (radiolist[i].checked==true && radiolist[i].disabled==false) {option=i;}
  }
  return option;
 }


 function app_process()
  {
   app_export(0)
  }

 function app_button_export()
  {
   var id=get_radioexport(document.frForm.radiox)+1;
   if(id>0) {
     if(id<=4) {app_export(id);}
     else {ExportAs(id-4);}
   } else {app_showNODATA();}
  }


 function decide(obj,inival)
  {
   var option = obj.options.selectedIndex;
   return inival+option
  }

 function ExportAs(id)
  {
   switch (id) {
    case 1: app_export(decide(document.frForm.CEPoints,11)) ; break;
	  case 2: app_export(decide(document.frForm.CEPaths,13)) ; break;
	  case 3: app_export(decide(document.frForm.CEPolyIn,15)) ; break;
	  case 4: app_export(decide(document.frForm.CEPolyOut,17)) ; break;
   } 
  }

 function app_export(id)
  {
   var isOK=true;
   var data=document.frForm.datamemo.value;
   if(data.length>30) {
     data="";
     hide_stats(false);
     if (PreProcessed==false) {app_preprocess();}
     //export
     if(isOK==true) {
        change_mystatus("Wait, processing data...");
        //export here

        switch (id) {
         //case 0: alert("Mapping not implemented"); break;
         case 1: export_kml('POINT'); break;
         case 2: export_kml('LINE'); break;
         case 3: export_kml('POLYIN'); break;
         case 4: export_kml('POLYOUT'); break;
				 case 11: export_kml('POINT-LINE'); break;
				 case 12: export_kml('POINT-POLY'); break;
				 case 13: export_kml('LINE-POINT'); break;
				 case 14: export_kml('LINE-POLY'); break;
				 case 15: export_kml('POLYIN-POINT'); break;
				 case 16: export_kml('POLYIN-LINE'); break;
				 case 17: export_kml('POLYOUT-POINT'); break;
				 case 18: export_kml('POLYOUT-LINE'); break;
        }
        change_mystatus("");
      }
   } else {app_showNODATA();}
  }

  function export_kml(id)
  {
   Send_ResultWindow('kml2shp.php?action=save&etype='+id,'shp');
  }

  

  function app_preprocess()
   {
     change_mystatus("Wait, preprocessing data...");
		 disable_All(true);
     disable_checkKML(true);
     PreProcessed=true;
     //document.toolbar.sbM2.disabled=true;

     /*
		  var cad='<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://earth.google.com/kml/2.1"><Document><open>1</open><Placemark><name>Example</name><LookAt><longitude>-110.9487450258424</longitude><latitude>32.228837149862</latitude>';
      cad+='<altitude>0</altitude><range>328.9441290363284</range><tilt>5.667670035759666e-011</tilt><heading>-6.959020280702754</heading></LookAt>';
      cad+='<visibility>1</visibility><Style><IconStyle><Icon><href>http://www.zonums.com/library/symbols/ge/zges_people.png</href><x>128</x> <y>64</y> <w>32</w><h>32</h></Icon></IconStyle></Style><Point>';
      cad+='<coordinates>-110.9487450258424,32.228837149862,0</coordinates></Point></Placemark></Document></kml>';
      document.frForm.datamemo.value=cad;
      */

     readFile2();
     disable_All(true);
     if(NPoints>0) {disable_Points(false);}
     if(NPaths>0) {disable_Paths(false);}
     if(NPolyIn>0) {disable_PolyIn(false);}
     if(NPolyOut>0) {disable_PolyOut(false);}

     //Display stats
     var cad="Entities found:";
     cad+="\n# Points: "+NPoints;
     cad+="\n# Paths: "+NPaths;
     cad+="\n# Inner Polygons: "+NPolyIn;
     cad+="\n# Outer Polygons: "+NPolyOut+"\n\n";

     var nEntities=NPoints+NPaths+NPolyIn+NPolyOut;
     
		 
		 if(nEntities>0) {cad+='Select your Shapes to export and click the "Export SHP" button.';}
		 else {cad+='Use the "New" button to try different data.';} 
		
	document.frForm.datamemo.value=cad;
	hide_stats(true);
   }



  function change_mystatus(cad)
   {
     var fr=document.getElementById('mystatus');
     if(cad.length>0) {cad='<div class="mypbar">&nbsp;</div>'+cad;}
     fr.innerHTML=cad;
   }

  function change_mystats(cad)
   {
     //var fr=document.getElementById('myinfo');
     //fr.innerHTML=cad;
   }

  function hide_stats(como)
 {
   var fr=document.getElementById('block-stats');
   if(como==true) {fr.style.visibility="hidden";}
    else {fr.style.visibility="visible";}
 }

 function hide_dialogo()
 {
   var fr=document.getElementById('divframe');
   fr.style.visibility="hidden";
 }

 function app_openfile()
 {
  var fr=document.getElementById('divframe');
  fr.style.visibility="visible";
  window.frames['fr2'].location ="/online/lib/LoadKMLFile.php";
 }


 function app_help()
  {
   Send_ResultWindow('kml2shp.php?action=help','help');
  }
  
  function app_donate()
  {
   Send_ResultWindow("http://www.zonums.com/donate.php?id=kml2shp_online","help");
  }
  
  function app_forum()
  {
   //Send_ResultWindow('kml2shp.php?action=help','help');
  }

function app_error()
 {
 if(!es_MSI()) {
   var MSG = "<br><center><b>Kml2x </b> (beta)";
   MSG+="<br><br>A bug was found, for the moment<br>only Microsoft Internet Explorer is working correctly</center>";
   zwin_msgbox("Attention",400,110,"","",MSG);
  }
 }

function Link_Parent_Close(DataList)
 {
   document.frForm.datamemo.value = DataList;
   //window.frames['fr2'].location ="LoadFile.php";
   hide_dialogo();
   //fr.style.position="absolute";
   //fr.style.left="50px";
   //zclose_zwin(); 
 }

 function enabledUTM()
 {
  var index = document.frForm.Projection.options.selectedIndex;
  var isUTM = false;
  if(index==1) {isUTM = true;}
  document.frForm.UTMZone.disabled = isUTM;
  document.frForm.btUTMGrid.disabled = isUTM;
  document.frForm.Hemisph.disabled = isUTM;
 }

 function prepare_app()
 {
  /* hide_dialogo();*/
   zFillCombo(document.frForm.UTMZone,1,1,60,"Zone ",11);
   document.frForm.Projection.options.selectedIndex=1;
enabledUTM();
  app_cleanAll();
  app_about();
 }


	function Link_Parent_SHP(id,fIn,fOut)
  {
    if(document.frForm.Projection.options.selectedIndex==0) {
    UTMZone = document.frForm.UTMZone.options.selectedIndex+1;
    } else {UTMZone=0;}
    HemispOpt = document.frForm.Hemisph.options.selectedIndex+1; //1=North
    
    switch (id) {
    case "POINT":point2point(); break;
    case "LINE":line2Pline(false); break;
    case "POLYIN":poly2Pline(true,document.frdata.datapolyIn.value); break;
    case "POLYOUT":poly2Pline(true,document.frdata.datapolyOut.value); break;
    case "POINT-LINE":point2Pline(true); break;
    case "POINT-POLY":point2Pline(false); break;
    case "LINE-POINT":Pline2point(true,document.frdata.datapaths.value); break;
    case "LINE-POLY":line2Pline(true); break;
    case "POLYIN-POINT":Pline2point(false,document.frdata.datapolyIn.value); break;
    case "POLYIN-LINE":poly2Pline(false,document.frdata.datapolyIn.value); break;
    case "POLYOUT-POINT":Pline2point(false,document.frdata.datapolyOut.value); break;
    case "POLYOUT-LINE":poly2Pline(false,document.frdata.datapolyOut.value); break;
    }
  }

	function Link_Child_data(data,NRecords)
  {
    var myfr =myWin.document.getElementById("frOut");
    if (myfr) {
      //add maxmin info
      //add Nrecords
      //add Projection data
      if(NRecords>0) {
   		  myfr.datamemo.value=data;
		    myfr.minmax.value=""+xmin+","+ymin+","+xmax+","+ymax;
		    myfr.datum.value=""+NRecords+","+UTMZone+","+HemispOpt;
		    myfr.btn1.disabled=false;
		    myfr.btn2.disabled=false;
		   } else {
			  alert("No shapes to Export..");
			  //close the subwindow
				} 
			
			var myfr =myWin.document.getElementById("frStats");
			if (myfr) {	
				if(NRecords>0) {
				  var cad="SHP Information\n";
				  cad+="\nNo Records: "+NRecords;
				  cad+="\nArea Extent:";
				  cad+="\n XMin= "+xmin+"\n YMin= "+ymin+"\n XMax= "+xmax+"\n YMax= "+ymax;
   		    myfr.datamemo.value=cad;
   		    
   		  } else {myfr.datamemo.value="No Shapes to export..";}
		  }		
		} else {alert("An Error Ocurred \n\nPlease try Again");}
  }

 function Send_ResultWindow(url,name)
 {
  if(url=="") {url="_blank";}
  myWin = window.open(url,name,"width=490,height=440,scrollbars");
  if(myWin) {
   if (myWin.focus) {myWin.focus();} 
  }
 }

function getcoords(xlon,ylat,takeMinMax)
 { 
   var sp=" ";
   ylat = parseFloat(ylat);
   xlon = parseFloat(xlon);

  if(UTMZone>0) {    
    outcoo = zGeo_LatLon2UTM(UTMZone,ylat,xlon,sp);
    xlon = parseFloat(outcoo.split(sp)[0]);
    ylat = parseFloat(outcoo.split(sp)[1]);
  }

  if(takeMinMax==true) {
    xmin=xlon;
    ymin=ylat;
    xmax=xlon;
    ymax=ylat;
  } else {
    if(xlon<xmin) {xmin=xlon;} else {
      if(xlon>xmax) {xmax=xlon;}
    }
    if(ylat<ymin) {ymin=ylat;} else {
      if(ylat>ymax) {ymax=ylat;}
    }
  }

  return xlon+","+ylat
 } 

 function TEXT_parser(Text)
 {
    // code for IE
    if (window.ActiveXObject)
     {
       var doc=new ActiveXObject("Microsoft.XMLDOM");
       doc.async="false";
       doc.loadXML(Text);
     }
    // code for Mozilla, Firefox, Opera, etc.
   else
    {
      var parser=new DOMParser();
      var doc=parser.parseFromString(Text,"text/xml");
    }
   return doc.documentElement
 }

function getname_tag(obj)
 {
  var xNode = obj.getElementsByTagName("name");
  var xname =""; 
  if(xNode.length>0) {xname = xNode[0].firstChild.nodeValue;}
  return xname 
 }

 function getname_tags(obj,keywords)
 {
   var xNode = "";
   var xkeyword = keywords.split("|");
   for (i=0; i<xkeyword.length;i++) {
    if(xNode.length==0) {xNode = obj.getElementsByTagName(xkeyword[i]);}
   }
   return xNode
 }

function addpoint(Pt_Name,Line)
 {
  NPoints+=1;
  if(NPoints>1) {Pt_Name="\n"+Pt_Name;}
  pointdata+=Pt_Name+","+Line;
 }

function Element_NotEmpty(element, index, array) {
   return (element!="")
}

 function ArrayNotEmptyZ(InArray)
 {
   var OArray = [];
   for(i=0; i<InArray.length;i++) {
    if(InArray[i]!="") {OArray.push(InArray[i]);}
   }
  return OArray
 }

function output_path(Pt_Name,line)
 {
   line=line.replace(/ /g,'\n');
   //line=line.replace(/'\n\r'/g,']');
   //line=line.replace(/\s+/g,"]");
   
    NPaths+=1;
    if(NPaths>1) {Pt_Name="\n"+Pt_Name;}
    pathdata+=Pt_Name+line;
 }

function output_polyIn(Pt_Name,line)
 {
   line=line.replace(/ /g,'\n');
   NPolyIn+=1;
   if(NPolyIn>1) {Pt_Name="\n"+Pt_Name;}    
   polyindata+=Pt_Name+line;   
}


function output_polyOut(Pt_Name,line)
 {
   line=line.replace(/ /g,'\n');
   NPolyOut+=1;
   if(NPolyOut>1) {Pt_Name="\n"+Pt_Name;}    
   polyoutdata+=Pt_Name+line;   
}

function kml_getpoint(PlaceMark)
 {
   var zPoint = "";
   var zPoints = PlaceMark.getElementsByTagName("Point");
   if (zPoints.length>0) {
    zCoords = zPoints[0].getElementsByTagName("coordinates");
    if (zCoords.length>0) {zPoint = zCoords[0].firstChild.nodeValue;}
   }

  return zPoint 
 }

function kml_getpath(PlaceMark,Name)
 {
   var zPaths = PlaceMark.getElementsByTagName("LineString");
   for(i=0; i<zPaths.length; i++) {
    zCoords = zPaths[i].getElementsByTagName("coordinates");
    if (zCoords.length>0) {
      output_path('x,'+Name,zCoords[0].firstChild.nodeValue);
    // xdata += "\n"+zCoords[0].firstChild.nodeValue;
    }
   }

   return (zPaths.length>0)
 }



function kml_getpolyIN(PlaceMark,Name,Boundary)
 {
   var zBoundary = PlaceMark.getElementsByTagName(Boundary);
   for(j=0; j<zBoundary.length; j++) {
     var zPaths = zBoundary[j].getElementsByTagName("LinearRing");
     for(i=0; i<zPaths.length; i++) {
        zCoords = zPaths[i].getElementsByTagName("coordinates");
        if (zCoords.length>0) {
         output_polyIn('x,'+Name,zCoords[0].firstChild.nodeValue);
         // xdata += "\n"+zCoords[0].firstChild.nodeValue;
        }
     }
   }
   return (zBoundary.length>0)
 }


 function kml_getpolyOUT(PlaceMark,Name,Boundary)
 {
   var zBoundary = PlaceMark.getElementsByTagName(Boundary);
   for(j=0; j<zBoundary.length; j++) {
     var zPaths = zBoundary[j].getElementsByTagName("LinearRing");
     for(i=0; i<zPaths.length; i++) {
        zCoords = zPaths[i].getElementsByTagName("coordinates");
        if (zCoords.length>0) {
         output_polyOut('x,'+Name,zCoords[0].firstChild.nodeValue);
        }
     }
   }
   return (zBoundary.length>0)
 }


function readFile2()
 { 
  xmlDoc=TEXT_parser(document.frForm.datamemo.value);
  var zPlaceMarks = getname_tags(xmlDoc,"Placemark|PlaceMark|placemark");
   xdata = "";
  var FolderName="";
  var PlaceMarkName = "";
  var zPoint = "";
  var zCoords = "";

	NPoints=0; 
  NPaths=0; 
  NPolyIn=0; 
  NPolyOut=0; 
  clean_datavars();
  clean_dataholders();

 //alert("Placemarks = "+zPlaceMarks.length);

  for (var i=0;i<zPlaceMarks.length; i++) {
   xdata += "\n[" + zPlaceMarks[i].nodeName+"]";
   PlaceMarkName = getname_tag(zPlaceMarks[i]);
   xdata = xdata + " = " +PlaceMarkName;
   zPointstr = kml_getpoint(zPlaceMarks[i]);      
   if(zPointstr.length>0) {
	   //SI output_point(PlaceMarkName,datasp,SendUTM,zPointstr,i);
	    addpoint(PlaceMarkName,zPointstr);
		  xdata +="->point";
		} else {
      if(kml_getpath(zPlaceMarks[i],PlaceMarkName)==false) {
        if(kml_getpolyOUT(zPlaceMarks[i],PlaceMarkName,'outerBoundaryIs')==false) {
          if(kml_getpolyIN(zPlaceMarks[i],PlaceMarkName,'innerBoundaryIs')==false) 
           {  
            //Nothing
           }
        }
     }
    }
  }

  document.frdata.datapoints.value=pointdata;
  document.frdata.datapaths.value=pathdata;
  document.frdata.datapolyIn.value=polyindata;
  document.frdata.datapolyOut.value=polyoutdata;
  document.frForm.datamemo.value=xdata;
  xdata ="";
  clean_datavars();
 
 }

 function show_zdatanow()
 {
  alert("data="+document.frdata.datapaths.value);
 }


 function clean_dataholders()
  {
   document.frdata.datapoints.value="";
   document.frdata.datapaths.value="";
   document.frdata.datapolyIn.value="";
   document.frdata.datapolyOut.value="";
  }

  function clean_datavars()
   {
    pointdata="";
    pathdata="";
    polyindata="";
    polyoutdata="";
   }

 function removeNL(s){ 
 // if(s=='undefined') {s="";}
  return s.replace(/[\n\r]/g,"")
 }


  function point2point()
   {var shpdata="";
    change_mystatus("Wait, processing POINT data...");
    var data=document.frdata.datapoints.value;
    data = data.split("\n");
    var n=data.length;
    var cini="";
   
    for(var i=0; i<n; i++) {
     line = data[i];
     line = line.split(','); 
		 coo=getcoords(line[1],line[2],(i==0))+","+line[3];
		 shpdata+=cini+line[0]+","+coo;
		 cini="\n";
    }
    
    Link_Child_data(shpdata,n);
    change_mystatus("");
   }

  function point2Pline(toLine)
   {var shpdata="";
    if(toLine==true) {change_mystatus("Wait, processing POINT -> LINE data...");}
     else {change_mystatus("Wait, processing POINT -> POLYGON data...");}
    var data=document.frdata.datapoints.value;
    data = data.split("\n");
    var n=data.length;
    
    for(var i=0; i<n; i++) {
     line = data[i];
     line = line.split(','); 
		 coo=getcoords(line[1],line[2],(i==0));
		 shpdata+="\n"+coo;
    }
    
    if(toLine==false) {
     line = data[0];
     line = line.split(','); 
		 coo=getcoords(line[1],line[2],false);
		 shpdata+="\n"+coo;
    }
    
    shpdata="x,noname,"+n+shpdata;
    Link_Child_data(shpdata,1);
    change_mystatus("");
   }

  function line2Pline(toPoly)
   {
     var shpdata="";
     var vert_offset=0;
     if(toPoly==false) {change_mystatus("Wait, processing PATH data...");} else
		  {
		    change_mystatus("Wait, processing PATH -> POLYGON data...");
		    vert_offset=1;
		  }
      
    var data=document.frdata.datapaths.value;
    data = data.split("\n");
    var n=data.length;
    var vertcount=0;
    var vertlist="";
    var xname="";
    var isfirst=true; //to catch first point from dataset
    var firstpoint=""; //to catch first point from every line
    var NRecords=0;
    var cini="";
    
    for(var i=0; i<n; i++) {
     line=data[i];
     if(line.length>0) {
       line=line.split(",");
       if(line.length>1) {
       if(line[0]=="x") {
        //New Line
         if(vertcount>0) {
           NRecords+=1;
           shpdata+=cini+xname+","+(vertcount+vert_offset)+vertlist;
					 if(toPoly==true) {shpdata+=firstpoint}   
					 cini="\n";
				 }        
         vertcount =0;
         vertlist="";
         xname="x,"+removeNL(line[1]);
         firstpoint="";
       } else {
         vertcount+=1;
         vertlist+="\n"+getcoords(line[0],line[1],isfirst);
         if(firstpoint=="") {firstpoint=getcoords(line[0],line[1],false);}
         isfirst=false;
       }
      }
     } //valid data
    } //for..
    
    
    if(vertcount>0) {shpdata+=cini+xname+","+(vertcount+vert_offset)+vertlist;NRecords+=1;} //for the last line
    Link_Child_data(shpdata,NRecords);
    change_mystatus("");
  }


 function poly2Pline(toPoly,data)
   {
     var shpdata="";
     if(toPoly==true) {change_mystatus("Wait, processing POLYGON data...");} else
		  {change_mystatus("Wait, processing POLYGON -> LINE data...");}
      
    data = data.split("\n");
    var n=data.length;
    var vertcount=0;
    var vertlist="";
    var xname="";
    var isfirst=true; //to catch first point from dataset
    var NRecords=0;
    var cini="";
    
    for(var i=0; i<n; i++) {
     line=data[i];
     if(line.length>0) {
       line=line.split(",");
       if(line[0]=="x") {
        //New Line
         if(vertcount>0) {
           NRecords+=1;
           shpdata+=cini+"x,"+xname+","+vertcount+vertlist;
           cini="\n";  
				 }        
         vertcount =0;
         vertlist="";
         xname=removeNL(line[1]);
       } else {
         vertcount+=1;
         vertlist+="\n"+getcoords(line[0],line[1],isfirst);
         isfirst=false;
       }
    
     } //valid data
    } //for..
    
    if(vertcount>0) {shpdata+=cini+"x,"+xname+","+vertcount+vertlist;NRecords+=1;} //for the last entity
    Link_Child_data(shpdata,NRecords);
    change_mystatus("");
  }

 function Pline2point(fromLine,data)
   {
     var shpdata="";
     if(fromLine==true) {change_mystatus("Wait, processing PATH -> POINT data...");} else
		  { change_mystatus("Wait, processing POLYGON -> POINT data..."); }
      
    data = data.split("\n");
    var n=data.length;
    var xname="";
    var NRecords=0;
    var cini="";
    
    for(var i=0; i<n; i++) {
     line=data[i];
     if(line.length>0) {
       line=line.split(",");
       if(line[0]=="x") {
        //New PLine
         xname=line[1];
       } else {
         NRecords+=1;
         shpdata+=cini+xname+","+getcoords(line[0],line[1],(NRecords==1))+","+line[2];
         cini="\n";
       }
    
     } //valid data
    } //for..
    
    Link_Child_data(shpdata,NRecords);
    change_mystatus("");
  }


-->