var pixelX = 0;
var pixelY = 0;
var xmin = 99999999;
var ymin = 99999999;
var xmax = -99999999;
var ymax = -99999999;
var indicePol  = 0;

// Inicializamos el array de poligonos
var utmPoligonos = new Array();
utmPoligonos[0] = "";

// Definimos el array de poligonos dos
var poligonosDibujados = new Array();
var codigoPoligonos = "";

function abreVentanaCoordenadas(){
        //("Estás en la función");
        var ventana = window.open("","Coordenadas","status=1,left=0,top=0,resizable=1,scrollbars=1");
        ventana.document.open();
        ventana.focus();
        ventana.document.writeln("<HTML><HEAD><TITLE>Transformación de coordenadas</TITLE>");
        ventana.document.writeln("<SCRIPT>");
        ventana.document.writeln("function enviaUTM(){");
        ventana.document.writeln("	opener.escribeCoordenadas(document.all.utmx.value,document.all.utmy.value);");
        ventana.document.writeln("}");
        ventana.document.writeln("function leeGeograficas(){");
        ventana.document.writeln("	var GR_Long = parseInt(document.forms[0].GR_Long.value);");
        ventana.document.writeln("  var MIN_Long = (parseFloat(document.forms[0].MIN_Long.value))/60;");
        ventana.document.writeln("  var SEG_Long = (parseFloat(parseFloat(document.forms[0].SEG_Long.value)))/3600;");
        ventana.document.writeln("	var Longitud = 0 - (GR_Long + MIN_Long + SEG_Long);");
        ventana.document.writeln("	var GR_Lat = parseInt(document.forms[0].GR_Lat.value);");
        ventana.document.writeln("  var MIN_Lat = (parseFloat(document.forms[0].MIN_Lat.value))/60;");
        ventana.document.writeln("  var SEG_Lat = (parseFloat(parseFloat(document.forms[0].SEG_Lat.value)))/3600;");
        ventana.document.writeln("	var Latitud = GR_Lat + MIN_Lat + SEG_Lat;");
        ventana.document.writeln("	var resultado = opener.geo2utm(Latitud,Longitud);");
        ventana.document.writeln("	resultado[1]=(Math.round((resultado[1]*100)))/100");
        ventana.document.writeln("	resultado[2]=(Math.round((resultado[2]*100)))/100");
        ventana.document.writeln(" opener.escribeCoordenadas(resultado[1],resultado[2]);");
        ventana.document.writeln("}");
        ventana.document.writeln("</SCRIPT>");
        ventana.document.writeln("</HEAD>");
        ventana.document.writeln("<BODY BGCOLOR='Silver'><h3>Dibujar polígono</h2>Esta utilidad permite dibujar polígonos ");
        ventana.document.writeln("a partir de coordenadas geográficas o UTM para representar la ubicación de una explotación acuícola.<br><br>");

        ventana.document.writeln("<b>Seleccione el polígono activo o cree uno nuevo</b> (únicamente si es necesario)<br>");
        ventana.document.writeln("<table><tr>");
        ventana.document.writeln("<TD valign='top'>El Polígono activo es el " + (indicePol +1) + "<br><INPUT type='button' value='Crear Nuevo Polígono' onclick='javascript:opener.indicePol++;opener.utmPoligonos[opener.indicePol]=\"\";opener.abreVentanaCoordenadas();'><br> ó <br>Seleccione el polígono activo de la lista<br>");
        ventana.document.writeln("<SELECT name='selector'>");
        for (var j=0;j<utmPoligonos.length;j++){
                ventana.document.write("<OPTION");
                if (j==indicePol) ventana.document.write(" SELECTED");
                ventana.document.writeln(">" + (j+1));
        }
        ventana.document.writeln("</SELECT><input type='button' value='Cambiar' onclick='javascript:opener.indicePol=(document.all.selector.selectedIndex);opener.abreVentanaCoordenadas();';");
        ventana.document.writeln("</td><td>&nbsp;</td><td><b>Puede cargar las coordenadas del polígono desde fichero:</b><INPUT type='button' value='Cargar' onclick='javascript:opener.parent.MapFrame.cargaFichero();'</td></tr></table><br>");
        ventana.document.writeln("<b>Añada vértices al polígono activo desde coordenadas geográficas o UTM (huso 30):</b><br>");
        ventana.document.writeln("<table valign='top' cellpadding='8' border='1'><tr><td><b>Añadir vértice desde<br>coordenadas geográficas:</b>");
        ventana.document.writeln("<BR><BR>Si sus datos están en <b>GRADOS-MINUTOS</B> (GGºMM.MM'), debe transformalos a <b>GRADOS MINUTOS SEGUNDOS</B>, como en el siguiente ejemplo: <br>");
        ventana.document.writeln("36º 49.836' es un dato que está en formato GRADOS-MINUTOS. Para pasarlo a GRADOS MINUTOS SEGUNDOS:<li>Los grados se quedan como están: <b>36º</b></li>");
        ventana.document.writeln("<li>Los minutos son los mismos, pero quedándonos solo con la parte entera. En nuestro caso, <b>49'</b></li><li>Los segundos son la parte decimal de los minutos multiplicada por 60. En nuestro caso, <b> 0.836 * 60 = 50.16\"</li><br>");
        ventana.document.writeln("<FORM name='coord'>");
        ventana.document.writeln("Longitud: <br>GG:<INPUT type='text' name='GR_Long' style='width:40px;'>");
        ventana.document.writeln("MM:<INPUT type='text' name='MIN_Long' style='width:40px;'>");
        ventana.document.writeln("SS:<INPUT type='text' name='SEG_Long' style='width:40px;'><br>");
        ventana.document.writeln("Latitud: <br>GG:<INPUT type='text' name='GR_Lat' style='width:40px;'>");
        ventana.document.writeln("MM:<INPUT type='text' name='MIN_Lat' style='width:40px;'>");
        ventana.document.writeln("SS:<INPUT type='text' name='SEG_Lat' style='width:40px;'><br>");
        ventana.document.writeln("<INPUT type='button' value='Transformar y Añadir' onclick='leeGeograficas();'></form></td>");
        ventana.document.writeln("<td valign='top'><b>Añadir vértice desde<br>coordenadas UTM (huso 30):</b><br>");
        ventana.document.writeln("X: <input type='text' name='utmx' style='width:60px;'> m.<br>");
        ventana.document.writeln("Y: <input type='text' name='utmy' style='width:60px;'> m.<br>");
        ventana.document.writeln("<input type='button' value='Añadir' onclick='javascript:enviaUTM();'>");
        ventana.document.writeln("</td>");
        ventana.document.writeln("</tr></table>");
        if (utmPoligonos[0]!="") {
        ventana.document.writeln("<br><b>Coordenadas de los polígonos:</b>");
                ventana.document.writeln("<TABLE border='1'><tr>");
                for (k=0;k<utmPoligonos.length;k++){
                        if (utmPoligonos[k]!=""){
                        ventana.document.writeln("<TD valign='top'>Polígono " +(k+1) +":<br>Coordenadas añadidas (UTM)");
                        var listaCoordenadas = utmPoligonos[k].split(":");
                        ventana.document.writeln("<TABLE>");
                        var conteo = 1;
                        for (i=0;i<listaCoordenadas.length;i=i+2){
                                ventana.document.writeln("<tr><td>")
                                ventana.document.writeln("X" + conteo+": " + listaCoordenadas[i] + "</td>");
                                ventana.document.writeln("<TD rowspan='2'><input type='button' value='Borrar punto' onclick=\'javascript:opener.borraCoordenadas(" + listaCoordenadas[i] + "," +listaCoordenadas[i+1]+ "," + k + ")\'></TD></tr>");
                                ventana.document.writeln("<tr><td>");
                                ventana.document.writeln("Y"+conteo+ ": " + listaCoordenadas[i+1] + "</td></tr>");
                                conteo = conteo +1;
                        }
                        ventana.document.writeln("<tr><td>");
                        //if (i>=6) {
                        ventana.document.writeln("<input type='button' onclick='javascript:opener.escribePoligonoVML("+k+");' value='Dibujar'><br>");
                        ventana.document.writeln("<input type='button' onclick='javascript:opener.zoomPoligono("+k+");' value='Zoom'><br>");
                        ventana.document.writeln("<input type='button' onclick='javascript:opener.salvarPoligono("+k+");' value='Salvar'><br>");
                        //}
                        ventana.document.writeln("<input type='button' value='Borrar Polígono' onclick='javascript:opener.borraPoligono("+k+");document.location=document.location;'></td></tr>");
                        ventana.document.writeln("</TABLE></td>");
                        }
                }
                ventana.document.writeln("</tr></table>");
        }
        ventana.document.writeln("</HTML>");
}

//añade un nuevo vértice (X e Y) al polígono activo
function escribeCoordenadas(x,y){
        if (utmPoligonos[indicePol] == "") utmPoligonos[indicePol] = x + ":" + y;
        else utmPoligonos[indicePol] += ":" + x + ":" + y;
        //abreVentanaCoordenadas();
}

function borraCoordenadas (x,y,indice) {
        var listaCoordenadas = utmPoligonos[indice].split(':');
        utmPoligonos [indice]="";
        for (var j=0;j<listaCoordenadas.length;j=j+2){
                if((listaCoordenadas[j]!= x) || (listaCoordenadas[j+1] != y)) {
                        if (utmPoligonos[indice] =="") utmPoligonos[indice] = listaCoordenadas[j] + ":" + listaCoordenadas[j+1];
                        else utmPoligonos[indice] += ":" + listaCoordenadas[j] + ":" + listaCoordenadas[j+1];
                }
        }
        dibujaPoligonoVML(indice);
        //abreVentanaCoordenadas();
}

function deMapaaPixel (mapaX,mapaY){
        /*var factorX = (eRight - eLeft)/iWidth;
        var factorY = (eTop - eBottom)/iHeight;
        pixelX = Math.round((mapaX - eLeft)/factorX);
        pixelY = iHeight - (Math.round((mapaY - eBottom)/factorY));*/
        pixelX = worldXtoPixel(mapaX);
        pixelY = worldYtoPixel(mapaY);
}

function escribePoligonoVML(indice){
        var nombre = "poligono" +indice;
        codigoPoligonos +='<v:shape id=' + nombre + ' style="LEFT: 0pt;WIDTH: 400px; POSITION: absolute; TOP: 0pt; HEIGHT: 400px" coordsize = "400,400" filled = "false" strokecolor = "green" strokeweight = "1px"';
        var listaCoordenadas = utmPoligonos[indice].split(":");
        deMapaaPixel(listaCoordenadas[0],listaCoordenadas[1]);
        codigoPoligonos += 'path="m ' + pixelX + ', ' + pixelY + ' l ';

        for (i=2;i<listaCoordenadas.length;i=i+2){
                if (i !=2) codigoPoligonos += ', ';
                deMapaaPixel(listaCoordenadas[i],listaCoordenadas[i+1]);
                codigoPoligonos += pixelX + ", " +pixelY;
        }
        codigoPoligonos+=' x e"></v:shape>';
        for (i=0;i<listaCoordenadas.length;i=i+2){
                deMapaaPixel(listaCoordenadas[i],listaCoordenadas[i+1]);
                codigoPoligonos+='<v:oval style="position:absolute;left:'+(parseInt(pixelX)-3)+'px;top:' + (parseInt(pixelY)-3) +'px;width:6px;height:6px" fillcolor="red"></v:oval>';

        }
        escribeEnLayer("contenedor", codigoPoligonos);
}

function borraPoligono(indice){
        
        //Rehacemos los poligonos dibujados
        var copiaPoligonosDibujados = new Array();
        for (j=0; j < indice ; j++)
	{
          copiaPoligonosDibujados[j] = poligonosDibujados[j];
        }
	//Copiamos los ultimos
	for(j=indice;j<poligonosDibujados.length-1;j++)
	{
	  copiaPoligonosDibujados[j] = poligonosDibujados[j+1];
	}
	//Reacemos el array
	poligonosDibujados = new Array();
	for (j=0; j < copiaPoligonosDibujados.length ; j++)
	{
	  poligonosDibujados[j] = copiaPoligonosDibujados[j];
	}
	
	//rehacemos los poligonos
	var copia = new Array(utmPoligonos.length - 1);
	//Copiamos los primeros
	for (j=0; j < indice ; j++)
	{
	   copia[j] = utmPoligonos[j];
        }
        //Copiamos los ultimos
	for(j=indice;j<utmPoligonos.length-1;j++)
	{
	   copia[j] = utmPoligonos[j+1];
	}
	//Reacemos el array
	utmPoligonos = new Array(copia.length);
	for (j=0; j < copia.length ; j++)
	{
	  utmPoligonos[j] = copia[j];
	}
        indicePol = indicePol-1;

        codigoPoligonos="";
        escribeEnLayer("contenedor", codigoPoligonos);
        for (var i=0;i<poligonosDibujados.length;i++){
                if (poligonosDibujados[i]==1)
                {
                  escribePoligonoVML(i);
                }
        }
}


function zoomPoligono(indice){
        var listaCoordenadas = utmPoligonos[indice].split(":");
        if (listaCoordenadas.length > 2) {
        xmin = 99999999;
        ymin = 99999999;
        xmax = -9999999;
        ymax = -9999999;
        for (var h=0;h<listaCoordenadas.length;h=h+2){
                if (listaCoordenadas[h]<xmin) xmin = listaCoordenadas[h];
                if (listaCoordenadas[h+1]<ymin) ymin = listaCoordenadas[h+1];
                if (listaCoordenadas[h]>xmax) xmax = listaCoordenadas[h];
                if (listaCoordenadas[h+1]>ymax) ymax = listaCoordenadas[h+1];
        }
        } else {
                xmin = parseFloat(listaCoordenadas[0]) - 30;
                xmax = parseFloat(listaCoordenadas[0]) + 30;
                ymin = parseFloat(listaCoordenadas[1]) - 30;
                ymax = parseFloat(listaCoordenadas[1]) + 30;
        }
        eRight = parseInt(xmax) + Math.round(xmax - xmin);
        eLeft = parseInt(xmin) - Math.round(xmax - xmin);
        eTop = parseInt(ymax) + Math.round(ymax - ymin);
        eBottom = parseInt(ymin) - Math.round(ymax - ymin);
        sendMapXML();
}

function salvarPoligono(indice) {
        parent.focus();
        if (utmPoligonos[indice] != "") {
                var listaCoordenadas = utmPoligonos[indice].split(":");
                //if (listaCoordenadas.length>=6) {
                        var filename = prompt("Introduzca el nombre del fichero que se va a escribir.\nEscriba las rutas en minúsculas y con la barra de división - / ","c:/temp/data.txt");
                        var fso = new ActiveXObject("Scripting.FileSystemObject");
                        var file = fso.CreateTextFile(filename, true);
                        file.WriteLine("ID_PUNTO,UTM_30_X,UTM_30_Y");
                        contador = 0
                        for (var i=0; i<listaCoordenadas.length;i=i+2) {
                                contador++;
                                file.WriteLine(contador+","+listaCoordenadas[i]+"," + listaCoordenadas[i+1]);
                        }
                        file.Close();
                //}
        }

}

function cargaFichero() {
        parent.focus();
        ForReading = 1;
        filename = prompt("Escriba la ruta al fichero que quiere abrir:\nNOTA: debe ser la ruta completa; la barra de directorio es '/'","c:/temp/data.txt");
        fso = new ActiveXObject("Scripting.FileSystemObject");
        if (fso.FileExists(filename)) {
        file = fso.OpenTextFile(filename, ForReading, false);
        } else {
                alert("El fichero especificado no existe");
                return false;
        }
        var linea = file.readline();
        if (linea != "ID_PUNTO,UTM_30_X,UTM_30_Y") {
                alert("El fichero indicado no es válido.");
                return false;
        }
        contador = 0;
        if (utmPoligonos[indicePol]!= "") {
          indicePol++;
          utmPoligonos[indicePol]="";
        }
        while (!file.AtEndOfStream) {
                linea = file.readline();
                primeraComa = linea.indexOf(",");
                segundaComa = linea.indexOf(",",(primeraComa+1));
                coordX = linea.substring((primeraComa+1),segundaComa);
                coordY = linea.substr((segundaComa+1));
                escribeCoordenadas(coordX,coordY);
        }
        file.Close();
        abreVentanaCoordenadas();
}


