﻿///<reference path="jquery-1.3.2-vsdoc.js"  />

var prm;
var FlotanteHeight, FlotanteWidth;
var cad1;//Variables que utilizamos para el caso de referencia catastral
var cad2;
var jg;
var r;

function onVisorloaded() {
    setInterval(VisorActual, 5 * 60000);
    LtnWebViewer1.refresh();

    var tope = 170;
    //Colocamos todos los paneles con un delay para que salga siempre
    var timeout = setTimeout(function() {
        $find("DragPanelExtender1").set_location(new Sys.UI.Point(10, tope));
        $find("DragPanelExtender2").set_location(new Sys.UI.Point(164, tope));
        $find("DragPanelExtender3").set_location(new Sys.UI.Point(window.screen.width - 204, tope));
        $find("DragPanelExtender4").set_location(new Sys.UI.Point(window.screen.width - 398, tope));
        $find("DragPanelExtender5").set_location(new Sys.UI.Point(window.screen.width - 184, tope + 115));
        $find("DragPanelExtender6").set_location(new Sys.UI.Point(320, tope));
        $find("DragPanelExtender7").set_location(new Sys.UI.Point(320, tope));
        $find("DragPanelExtender8").set_location(new Sys.UI.Point(320, tope));
        $find("DragPanelExtender9").set_location(new Sys.UI.Point(320, tope));
        $find("DragPanelExtender10").set_location(new Sys.UI.Point(320, tope));

        $(".PanelOculto").fadeIn(1000);
    }, 500);
}

function cargado(secundaria) {
    try {
        if (navigator.appName != "Microsoft Internet Explorer")
            document.body.style.overflow = "hidden";
        
        LtnWebViewer1.notifyLoad(onVisorloaded);

        prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_initializeRequest(InitializeRequest);
        prm.add_endRequest(EndRequest);

    } catch (e) { }

    if (!secundaria) {
        FlotanteHeight = parseInt(screen.height * 0.6, 10);
        FlotanteWidth = parseInt(screen.width - 75, 10);
        window.setInterval(callVisitas, 3 * 60000);	    
	    callVisitas();
	}
	
	LtnWebViewer1.AttachChangeScale(changeScale);    
    //LtnWebViewer1.subscribeEvent(WVEventType.CHANGE_BEHAVIOR, refreshView);
	LtnWebViewer1.AttachMouseMove(mouseMove);
    SetCargando(false);

    try {
        window.moveTo(0,0);
        window.resizeTo(window.screen.width, screen.availHeight);        
    } catch (Erro) { }
}

function VisorActual(){
//Mantenemos el visor vivo
    LtnWebViewer1.ping(); 
}

function callVisitas(x,y)
{
    var ret = WebService.GetVisitas(OnCompleteVisitas, OnTimeOut, OnError, null);
    return true;
}

function OnCompleteVisitas(arg)
{
    if(arg!="")
    {
        var o = arg.split('#');
		GE("usuariosTotal").innerHTML = o[0];
		GE("visitasTotal").innerHTML = o[1];
    }
}

function CancelAsyncPostBack() {
    if (prm.get_isInAsyncPostBack()) {
      prm.abortPostBack();
    }
}
var postBackElement;
function InitializeRequest(sender, args) {
    /*if (prm.get_isInAsyncPostBack()) {
        args.set_cancel(true);
    }
    postBackElement = args.get_postBackElement();
    if (postBackElement.id == 'Panel1Trigger') {
        SetCargando(true);
    }*/
    //alert("InitializeRequest "+sender._postBackSettings.sourceElement.id);
    SetCargando(true);
}
function EndRequest(sender, args) {
    /*if (postBackElement.id == 'Panel1Trigger') {
            SetCargando(false);
    }*/
    //alert(sender._postBackSettings.panelID);
    //alert(sender._postBackSettings.sourceElement.id);
    var source = sender._postBackSettings.sourceElement;
    
    if (source == null || source.id.indexOf("UpdatePanel1") >= 0)
    {
        window.scroll(0, screen.height);
    }

    var llamada = source ? source.id : null;
    
    if (llamada != null) {
        if(llamada.indexOf("ddlOrtofotos") >= 0)
            LtnWebViewer1.refreshSystemLayer(WVLayerType.RASTER);
        else if(llamada.indexOf("cblProveedores") >= 0)
            LtnWebViewer1.refreshSystemLayer(WVLayerType.VECTOR);
    }

    //alert(args.get_response().get_xml());
    //alert(args.get_response().get_statusCode());

   if (args.get_error() != undefined)
   {
       var errorMessage = args.get_error().message;
       alert(errorMessage);
       //args.set_errorHandled(true);
   }
    SetCargando(false);
}

function abrirHerramientaClick(visor, cursor, clickHandler) {
    visor.ReleaseService();
    visor.AttachLeftClick(clickHandler);
    //visor.UIVisible(false);
    visor.SetCursor(cursor);
    visor.PanEnabled = false;
    visor.lockControllers();
    visor.ZoomWinEnabled = false;
    GE("HerramientasContenedor").style.visibility = "hidden";    
    CrearCanvas();    
}

function cerrarHerramientaClick(visor, clickHandler) {
    visor.DetachLeftClick(clickHandler);
    //visor.UIVisible(true);
    visor.ReleaseService();
    visor.PanEnabled = true;
    visor.unlockControllers();
    visor.ZoomWinEnabled = true;
    GE("HerramientasContenedor").style.visibility = "visible";
}

function imprimir() {
    $(".OpcionesImpresionContenedor").fadeIn(500);
    var aux = LtnWebViewer1.GetScale();
    aux = aux / 10;
    aux = Math.round(aux);
    GE("TextBoxEscalaImprimir").value = aux;    
}

function imprimir2() {    
    var titulo = $("#tituloImagen").val();
    var papel = $("#tipoPapel").val();
    var escala = $("#TextBoxEscalaImprimir").val();
    var posicion = $("#posicionpapel").val();

    if (isNaN(escala)) {
        alert("La escala tiene que ser un número");
        return;
    }
    else if (escala < 10) {
        escala = 10;
    }

    var h = LtnWebViewer1.getHeight();
    var w = LtnWebViewer1.getWidth();
    var scale = escala * 10;
    var auxW = Math.round((scale * w) / 2);
    var auxH = Math.round((scale * h) / 2);
    var auxX = LtnWebViewer1.getCenterUtmX();
    var auxY = LtnWebViewer1.getCenterUtmY();

    var minx = auxX - auxW;
    var miny = auxY - auxH;
    var maxx = auxX + auxW;
    var maxy = auxY + auxH;

    var url = "imprimir.aspx?h=" + h + "&w=" + w + "&minx=" + minx + "&miny=" + miny + "&maxx=" + maxx + "&maxy=" + maxy + "&scale=" + scale + "&titulo=" + titulo + "&papel=" + papel + "&escala=" + escala + "&posicion=" + posicion + "&w2=" + document.body.offsetWidth + "&h2=" + document.body.offsetHeight;
    $(".OpcionesImpresionContenedor").fadeOut(500);
    abrirVentanaFlotante(url, true);
}

function clickInfo(visor, x, y) 
{ 
    //clickTack(visor, x, y);
    //imprimir()
    callIDFicha(x,y)
    cerrarHerramientaClick(visor, clickInfo);
}

function callIDFicha(x,y)
{
    SetCargando(true);
    var ret = WebService.GetIDFicha(x, y, OnCompleteIDFicha, OnTimeOut, OnError, null);
    return true;
}

function OnCompleteIDFicha(arg)
{
    if(arg!="")
    {
        LtnWebViewer1.RefreshView();
        abrirFicha(arg);
    }
    else
        alert("No se ha encontrado ningún elemento cercano.");
    SetCargando(false);
    //q(arg);
}
function OnTimeOut(arg)
{
    alert("Tiempo agotado");// arg="+arg);
    SetCargando(false);
    //q(arg);
}
function OnError(arg)
{
    alert("Error: "+arg.get_message());
    SetCargando(false);
    //alert(arg.get_stackTrace());
    //alert(arg.get_exceptionType());
}

function LeftClickPoint(visor, x, y) 
{
    //alert("Coordenadas al hacer Data: " + x + " , " + y+" "+visor.GetScale());
    cerrarHerramientaClick(visor, LeftClickPoint);
    //q(visor);

    ponerMarca(visor, x, y, "X="+x+" Y="+y);

    var objx = GE('HiddenX');
    var objy = GE('HiddenY');
    objx.value = x;
    objy.value = y;
    
    __doPostBack('UpdatePanel1','');
    //var postback = GE('ctl00_ContentPlaceHolder1_GridView1').getAttribute("MIpostback")
    //eval(postback);
}

function ponerMarcaHidden()
{
    var x = GE("HiddenFieldX").value;
    var y = GE("HiddenFieldY").value;
    var msg = "X="+x+" Y="+y;
    ponerMarca(LtnWebViewer1, x, y, msg);
}

function ponerMarca(visor, x, y, msg)
{
    MiPutTack(x, y, msg);
}


 var  layer2 = 0;
function MiPutTack(x,y,msg)
{    
    if(layer2==0)
        layer2 = LtnWebViewer1.createCustomLayer("test");
    
    layer2.clear();
    var img = document.createElement('IMG');
    img.style.width="30";
    img.style.height="30";
    img.src="images/indicat.gif";
    layer2.addItem(img, x, y);
                
}

function crearImgLink(src, desc)
{
    var img = document.createElement('IMG');
    img.style.width="20";
    img.style.height="20";
 
    img.src = src;
    img.title = desc;
    img.setAttribute("alt",desc);
    img.style.cursor = "pointer";

    return img;
}


function getInfo()
{
    abrirHerramientaClick(LtnWebViewer1, "help", LeftClickPoint);
}


function carga(){
    alert(ventanaF.window.document.body.innerHTML);
}

var ventanaF;
function clickVerMapa(obj)
{
    var x = GE('HiddenX').value;
    var y = GE('HiddenY').value;
    var ruta = obj.getAttribute("ruta");
    var url = "http://diping01/geoindice/viewer.aspx?fichero="+ruta+"&width="+(screen.width/2)+"&height="+(screen.height-100)+"&x="+x+"&y="+y;
    //var url = "viewer.aspx?fichero="+ruta+"&width="+(screen.width/2)+"&height="+(screen.height-100)+"&x="+x+"&y="+y;
    //abrirVentanaFlotante(url);

    ventanaF = window.open(url, null, 'width='+(screen.width/2)+',height='+(screen.height-100)+',top=0,left=0')
 
    ventanaF.focus();
    //showModelessDialog(url, '', 'dialogWidth:'+(screen.width/2)+'px;dialogHeight:'+(screen.height-100)+'px;top:0px;left:0px;status:no;');
}

function refreshView()
{
    GE("MiTack").style.visibility = "hidden";
}

function mouseMove(visor, x, y)
{  
    var o = GE("CoordenadasCuerpo");
    if(o.style.display=="none")
        return;
    
	var geo=utm2geo(30,Math.round(x/1000),Math.round(y/1000))
	var utm=geo2utm(geo[0],geo[1])
	var huso=utm[0]
	UTMx=Math.round(utm[1])
	UTMy=Math.round(utm[2])

	var aux='<table width=100% style="font-size:12px"><tr align=right><td align=left>LAT</td>'+desgloseGeo(geo[0])
	aux += (geo[0]>0)?'N':'S';
	aux += '</td></tr><tr align=right><td align=left>LON</td>'+desgloseGeo(geo[1])
	aux += (geo[1]>0)?'E':'W';
	aux += '</td></tr>'
    aux += '<tr align=right><td align=left>UTM</td><td>X</td><td colspan=2>'+UTMx+'</td><td>m</td></tr>';
    aux += '<tr align=right><td align=left>H-'+huso+'</td><td>Y</td><td colspan=2>'+UTMy+'</td><td>m</td></tr></table>'
    //o.innerHTML =  x+","+y;//+" "+escala;
	o.innerHTML = aux;
}

var escala = 0;
function changeScale(visor)
{
    
    var escala = ((visor && visor.GetScale) ? visor.GetScale() : 0);//mm por cada pixel
    
    /*var o1 = GE("ctl00_ContentPlaceHolder1_textoESCALA");
    var o2 = GE("textoESCALA");
    var o3 = GE("ctl00_ContentPlaceHolder1_tablaESCALA");
    var o4 = GE("tablaESCALA");*/
    var divInfo = GE("textoESCALA");//o1?o1:o2;
    var tablaInfo = GE("tablaESCALA");//o3?o3:o4;
    divInfo.innerHTML = "<font size='2'> "+(escala * tablaInfo.offsetWidth / 1000) + " metros</font>";
    repintar();   
}



function Escalar() {
    var tablaInfo = GE("tablaESCALA"); //o3?o3:o4;
    var metros = GE("TextBoxMetros").value;

    if (!isNaN(metros)) {
        //Dejamos el codigo anterior comentado por si hubiera algun problema con SetScale
    
//        var escala = ((LtnWebViewer1 && LtnWebViewer1.GetScale) ? LtnWebViewer1.GetScale() : 0); //mm por cada pixel
//                
//        ///////////////////

//        var h = LtnWebViewer1.getHeight();
//        var w = LtnWebViewer1.getWidth();

//        var scale = LtnWebViewer1.getScale();
//        var auxW = Math.round((scale * w) / 2);
//        var auxH = Math.round((scale * h) / 2);

//        var auxX = LtnWebViewer1.getCenterUtmX();
//        var auxY = LtnWebViewer1.getCenterUtmY();
//        var minx = auxX - auxW;
//        var miny = auxY - auxH;
//        var maxx = auxX + auxW;        
//        var maxy = auxY + auxH;
//                
//        ///////////////////////

//        var ancho_mapa = maxx - minx;
//        var MaxVisor = maxx;
//        var MinVisor = minx;
//        var anchoVisor = w;

//        var MaxVisor2 = LtnWebViewer1.worldToLocalCoordY(maxy);
//        var MinVisor2 = LtnWebViewer1.worldToLocalCoordY(miny);

//        var altoVisor = MinVisor2 - MaxVisor2;
//        var aux = metros * 1000 * anchoVisor / tablaInfo.offsetWidth;
//        var aux2 = metros * 1000 * altoVisor / tablaInfo.offsetHeight;
        
        //gotoXY(LtnWebViewer1.CenterUtmX() - aux, LtnWebViewer1.CenterUtmY() - aux / 6, aux, aux * (altoVisor / anchoVisor));
        if (metros < 10)
            metros = 10;
        
        LtnWebViewer1.setScale(metros * 10);
        $(".PanelZoomMetros2").css("display", "none");
    }
    else
        alert("Debe de meter únicamente números");

    metros = 0;
}

function selectTNode(x,y,id)
{
    if(id==undefined)
        gotoXY(x,y);
    else
        callID(id);
}

function callID(id)
{
    SetCargando(true);
    var ret = WebService.GetXYofID(id, OnCompleteID, OnTimeOut, OnError, null);
    return true;
}

function OnCompleteID(arg)
{
    if(arg!="")
    {
        var coord = arg.split(",");
        //var ulr = LtnWebViewer1.GetMapScale(coord[0],coord[1],coord[2],coord[3],200);
        //alert(url);
        gotoXY(coord[0],coord[1],coord[2],coord[3]);
    }
    else
        alert("No se ha podido localizar ese elemento.");
    SetCargando(false);
}

function gotoXY(x,y,ancho,alto) {
    if(ancho==undefined) {
        var escala = 200000;
        var mescala = escala >> 1;        
        zoomWinTransicion(x - mescala, y - mescala, escala, escala);        
    }
    else
        zoomWinTransicion(parseFloat(x, 10), parseFloat(y, 10), ancho, alto); //parseInt(ancho,10), parseInt(alto,10));
}

var dX, dY, numVeces = 15, esc, esc2, cx, cy, intervalo, anchoAuxiliar;
function zoomWinTransicion(x, y, ancho, alto) {
    SetCargando(true);
    var v = LtnWebViewer1;
    var porcionAncho = ancho / v.getWidth();
    var porcionAlto = alto / v.getHeight();
    esc = Math.max(porcionAncho, porcionAlto);
    esc2 = v.getScale();
    anchoAuxiliar = ancho;
    cx = parseFloat(parseFloat(x, 10) + ancho / 2);
    cy = parseFloat(parseFloat(y, 10) + alto / 2);

    cx = v.worldToLocalCoordX(cx);
    cx = parseInt(cx - v.worldToLocalCoordX(v.getCenterUtmX()));

    cy = v.worldToLocalCoordY(cy);
    cy = parseInt(cy - v.worldToLocalCoordY(v.getCenterUtmY()));

    var dif = Math.abs(v.worldToLocalCoordX(v.getCenterUtmX()) - Math.abs(cx));
    var dif2 = Math.abs(v.worldToLocalCoordY(v.getCenterUtmY()) - Math.abs(cy));
    if (dif > v.getWidth() || dif2 > v.getHeight())
        numVeces = 1;
    else numVeces = 7;

    var vCenter = v.getCenterUtm();
    //posición central en píxels
    var pxCenter = v.transformWorldToLocal(vCenter.x, vCenter.y);
    dX = cx / numVeces;
    dY = cy / numVeces;

    v.Move(-(cx % numVeces), -(cy % numVeces));

    contador = 0;
    intervalo = setInterval(aumentar, 100);
}

var auxX = 0, auxY = 0, contador = 0;
var anchoAuxiliar;
function aumentar() {
    contador++;

    if (contador > numVeces) {
        clearInterval(intervalo);
        if (numVeces == 1) {
            LtnWebViewer1.setScale(parseInt(esc + esc / 3));

        } else {
            if (LtnWebViewer1.getWidth() != anchoAuxiliar)
                LtnWebViewer1.setScale(parseInt(esc + esc / 3));
        }
        SetCargando(false);
        return;
    }
    LtnWebViewer1.Move(-dX, -dY);
}

function cambiarServicios(obj)
{
    callFiltro(obj.checked, obj.value);
}

function callFiltro(active,layer)
{
    SetCargando(true);
    var ret = WebService.SetFiltro(active, layer, OnCompleteFiltro, OnTimeOut, OnError, null);
    return true;
}

function OnCompleteFiltro(arg)
{
    if(arg!="")
        LtnWebViewer1.RefreshView();
    else
        alert("No se ha podido realizar el filtro.");
    SetCargando(false);
}

function SetActivo(obj, value)
{
    obj.style.border = value?"solid 2px red":"solid 1px black";
}

function SetCargando(activo)
{
    if(GE("PanelCargando")!=null)
        $get("PanelCargando").style.display = activo?"block":"none";
}

/*function showEntrada()
{
    GE("EntradaContenedor").style.display = "block";
    GE("EntradaContenedor").style.visibility = "visible";
}*/

function showZoomMetros() {
    $(".PanelZoomMetros2").fadeIn(500);
}

function cancelar(id)
{
    GE(id).style.display = "none";
}

function setEntrada()
{
    var x = parseInt(GE("UTMX").value,10) * 1000;
    var y = parseInt(GE("UTMY").value,10) * 1000;
    if (!isNaN(x) && !isNaN(y)) {
        //gotoXY(x, y);
        LtnWebViewer1.Locate(x, y);
        var porcionAncho = 400000 / LtnWebViewer1.getWidth();
        var porcionAlto = 400000 / LtnWebViewer1.getHeight();
        esc = Math.max(porcionAncho, porcionAlto);
        LtnWebViewer1.setScale((esc + esc) / 3);
        MiPutTack(x, y, "");
    }
    else
        alert("Las coordenadas deben ser números positivos y estar expresadas en metros.");
}

function CalcularCoordenadasX(){//Funcion que se le pasan las referencias catastrales y devuelve X e Y
    
    SetCargando(true);

    WebService.pasarRCtoUTM(cad1,cad2,onCompleteCalCoordenadas,OnTimeOut, OnError, null);
   
    return true;
}
function onCompleteCalCoordenadas(val){
        
        if(val!=""){
            var o = val.split('#');
        
            gotoXY(o[0], o[1]);
      
            ponerMarca(LtnWebViewer1, o[0], o[1], o[0]+" "+ o[1]);
        }
        else 
            alert("No se ha encontrado ninguna coordenada para esa referencia");
        
         SetCargando(false);
}

function gotoReferenciaCatastral() {
    if(GE("IReferenciaC1").value!="" && GE("IReferenciaC2").value!=""){//Estamos en el caso que nos pasen las referencias catastrales

        var obj1 = GE("IReferenciaC1");
        var obj2 = GE("IReferenciaC2");
        cad1 = obj1.value;//cad1 y cad2 son variables globales
        cad2 = obj2.value;
        
        
        if(cad1.length<7 || cad2.length<7)
            alert("Las referencias no pueden ser menores de 7 digitos");
        else
            CalcularCoordenadasX();

        
    }else{
        alert("Se tienen que rellenar los dos campos");
    }

}

function padleft(d, a, c) { var e = new RegExp(".{" + c + "}$"), b = ""; a || (a = " "); do b += a; while (b.length < c); return e.exec(b + d)[0] };

function gotoPoligonoParcela(val) {
    var mun = GE(val).value;
    var obj1 = GE("IPoligono");
    var obj2 = GE("IParcela");

    if (obj1.value != "" && obj2.value != "" && mun != null && mun != "") {//Estamos en el caso que nos pasen las referencias de poligono-parcela
        if (obj1.value.search(/\D/) >= 0 || obj2.value.search(/\D/) >= 0)
            alert("Sólo se permiten números en los códigos de polígono y parcela");
        else {
            var poligono = padleft(obj1.value, '0', 3);
            var parcela = padleft(obj2.value, '0', 5);

            obj1.value = poligono;
            obj2.value = parcela;
            cad1 = '03' + GE(val).value.split('#')[0] + 'A' + poligono.charAt(0); //cad1 y cad2 son variables globales
            cad2 = poligono.charAt(1) + poligono.charAt(2) + parcela;
            CalcularCoordenadasX();
        }
    } else {
        alert("Se tienen que rellenar los tres campos");
    }
}

function gotoMinMaxNucleo(val) {
    var obj = GE(val);
    var cad = obj.value;

    if (cad != null && cad != "") {
        var o = cad.split('#');
        if (o.length > 2) {
            var escala = 400000;
            var mescala = escala >> 1;
            LtnWebViewer1.ZoomWin(o[1] - mescala, o[2] - mescala, escala, escala);
        }
        else
            alert('En estos momentos no tenemos información geográfica acerca de este núcleo');
       
    }

}

function gotoMinMax(val) {
    
    var obj = GE(val);
    var cad = obj.value;
    
    if(cad!=null && cad!="")
    {
        var o = cad.split('#');
        if (o.length > 4) {
            var ancho = parseInt(o[3], 10) - parseInt(o[1], 10);
            var alto = parseInt(o[4], 10) - parseInt(o[2], 10);

            gotoXY(o[1], o[2], ancho, alto);
        }
        else if (o.length > 2) {
            gotoXY(o[1], o[2]);
            var m = GE("TabContainer1_TabPanel2_ddlMunicipioPrincipal");
            var muni = m.options[m.selectedIndex].text;
            var c = GE("TabContainer1_TabPanel2_ddlCalle");
            var calle = c.options[c.selectedIndex].text;

            ponerMarca(LtnWebViewer1, o[1], o[2], muni + ", " + calle + ", " + o[0]);
        }       
    }
}

var lstX, lstY, lstUTMX, lstUTMY;

function getPerfil() {
    $(".PerfilContenedor").fadeIn(500);
    abrirHerramientaClick(LtnWebViewer1, "cross", clickPerfil);
    reiniciarMediciones();
}

function mostrarPerfil() {
    if (lstUTMX == null) {
        alert("Tiene que marcar al menos dos puntos");
        return;        
    }

    var logX = lstUTMX.length;
    var logY = lstUTMY.length;

    if (logX > 1 && logY > 1)
        callPerfil(lstUTMX, lstUTMY);
    else
        alert("Tiene que marcar al menos dos puntos");
}

function cancelarPerfil() {
    $(".PerfilContenedor").fadeOut(500, function() {
        reiniciarMediciones();
        cerrarHerramientaClick(LtnWebViewer1, clickPerfil);
    });
}

function callPerfil(listaX,listaY)
{
    SetCargando(true);
   
    var ret = WebService.GetPerfil(listaX, listaY, FlotanteWidth-35, (screen.height)-45, OnCompletePerfil, OnError, null);
    
    return true;
}

function OnCompletePerfil(arg) {
    if (arg != "") {
        if (arg != "-1") {          
            abrirVentanaFlotante("Perfil.aspx?" + arg, true);
        }
        else
            alert("No es posible sacar el perfil. La ruta se ha salido de los límites de la cartografía.");
    }
    
    SetCargando(false);
    cancelarPerfil();
}

function clickPerfil(visor, x, y) 
{ 
    //alert("hola estoy en clickperfil "+x+" "+y);
	if (lstUTMX==null || lstUTMX.length==0)
	{ 
		lstUTMX = new Array();
		lstUTMY = new Array();
	}

	lstUTMX.push(x);
	lstUTMY.push(y);
    localX = visor.worldToLocalCoordX(x);
    localY = visor.worldToLocalCoordY(y);
    nuevoPunto(localX-3, localY);
    
    
     if(layer!=0 && (pX!=LtnWebViewer1.getCenterUtmX() || pY!=LtnWebViewer1.getCenterUtmY() || pEsc!=LtnWebViewer1.getScale()  )){
        repintar();

    }
     pX=LtnWebViewer1.getCenterUtmX();
    pY=LtnWebViewer1.getCenterUtmY();
    pEsc=LtnWebViewer1.getScale() 
    
    medirDistancias();
    
}

function CrearCanvas(){
       canvasAux=Math.random() ;
      layer = LtnWebViewer1.createCustomLayer("canvas"+canvasAux);
      layer.setAutoClean(false); //gestionamos manualmente
      painter = LtnWebViewer1.createLayerPainter(layer);
      painter.setColor("d30c0c"); //asigna color de brocha
      painter.setStroke(2); //asigna tamaño de brocha
}

function repintar()
{   
    if(painter==0 || lstX==null)return;
    
    painter.clear();
    CrearCanvas();
    
    var visor=LtnWebViewer1;
    
    for( var pos=1; pos<lstX.length; pos++){
 
        painter.drawLine(visor.worldToLocalCoordX(lstUTMX[pos-1]), 
                         visor.worldToLocalCoordY(lstUTMY[pos-1]),
                         visor.worldToLocalCoordX(lstUTMX[pos]),
                         visor.worldToLocalCoordY( lstUTMY[pos])); //pinta linea
        painter.paint(); //muestra el resultado en la capa
    }
    

			

}


var layer = 0; //crea capa personalizada
var painter=0;
var canvasAux=0;
var pX="",pY="",pEsc="";
function nuevoPunto(tx, ty, cerrar)
{
  
          
    if(layer==0 || layer==null)  {
        CrearCanvas();
    }

	if (lstX==null || lstX.length==0)
	{ 
		lstX = new Array();
		lstY = new Array();
	}
	lstX.push(tx);
	lstY.push(ty);
	
	var visor = LtnWebViewer1;

	var pos = lstX.length-1;
	//jg.drawOval(lstX[pos]-3, lstY[pos]-3, 4, 4);
	if(pos>0)
	{
		if(!cerrar)
		{
			painter.drawLine(lstX[pos-1], lstY[pos-1],lstX[pos], lstY[pos]); //pinta linea
            painter.paint(); //muestra el resultado en la capa
		}
		else
		{
		    painter.clear();
	  }
	}
	      
        
    painter.paint(); //muestra el resultado en la capa
    //painter.clear(); //limpia el canvas
    


}


function devolverDecimales(valor, numDecimales)
{
	var n = Math.pow(10, numDecimales);
	var res = valor;
	res*=n;
	res=Math.round(res);
	res/=n;
	return res;
}

function calcularDistancia(fx, fy, tx, ty)
{
	var c1 = Math.pow(Math.abs(fx-tx), 2);
	var c2 = Math.pow(Math.abs(fy-ty), 2);
	var dist = Math.sqrt(c1+c2);
	return dist;
}


var distAcumulada = 0;
function medirDistancias()
{
	var pos = lstUTMX.length-1;
	var dist = 0;
	if(pos>0)
		dist = calcularDistancia(lstUTMX[pos-1]/1000, lstUTMY[pos-1]/1000, lstUTMX[pos]/1000, lstUTMY[pos]/1000);

    //Estas variable las utilizamos para la funcion de medir distancia
    distanciaParcial=dist;
    distanciaTotal+= dist;
	
	distAcumulada += dist;
	distAcumulada = devolverDecimales(distAcumulada, 2);
	
	dist = devolverDecimales(dist, 2);
	GE("PerfilDistancia").innerHTML = ""+distAcumulada;//"Distancia parcial: "+dist+" m.<br>Distancia total: "+distAcumulada+" m.";
	GE("PerfilPuntos").innerHTML = ""+lstUTMX.length;
}

function reiniciarMediciones()
{
	if(painter!=0){
        painter.clear();
        layer=0;
        painter=0;
    }

	distAcumulada = 0;
	lstX = null;
	lstUTMX = null;
	
	GE("PerfilDistancia").innerHTML = "<font size='2'>"+distAcumulada+"</font>";
	GE("PerfilPuntos").innerHTML = "<font size='2'>0</font>";
}

function SetVisible(id, visible)
{
    var o = GE(id);
    o.style.display = visible?"block":"none";
    o.style.visibility = visible?"visible":"hidden";
    
}


function cerrarMedirDistancias() {
    $(".PanelMedirDistancias").fadeOut(500, function() {
        reiniciarMedicionesDistancia();
        cerrarHerramientaClick(LtnWebViewer1, clickDistancia);
    });
}

function getDistancia() {
    abrirHerramientaClick(LtnWebViewer1, "cross", clickDistancia);
    reiniciarMedicionesDistancia();
    $(".PanelMedirDistancias").fadeIn(500);
}

function cerrarMedirArea() {
    $(".PanelMedirAreas").fadeOut(500, function() {
        reiniciarMedicionesDistancia();
        cerrarHerramientaClick(LtnWebViewer1, clickArea);
        if (painterArea != 0) painterArea.clear();
        area = false;
        layerArea = 0;
    });    
}

var area = false;
function getArea() {
    area = true;
    abrirHerramientaClick(LtnWebViewer1, "cross", clickArea);    
    reiniciarMedicionesDistancia();
    $(".PanelMedirAreas").fadeIn(500);    
    GE("DivPerimetro").innerHTML = "0 m.";
	GE("DivArea").innerHTML = "0 m.";
	SetVisible("trespuntos",true);
}


var xArea;
var yArea;
function clickArea(visor, x, y) 
{ 
    

    if (lstUTMX==null || lstUTMX.length==0)
	{ 
		lstUTMX = new Array();
		lstUTMY = new Array();
		
	    xArea = new Array();
		yArea = new Array();
	}

    
	lstUTMX.push(x);
	lstUTMY.push(y);
    localX = visor.worldToLocalCoordX(x);
    localY = visor.worldToLocalCoordY(y);
    
    xArea.push(localX);
    yArea.push(localY);
    
    
    nuevoPunto(localX-3, localY);
    medirDistancias();
    
    if(lstUTMX.length>2){
        SetVisible("trespuntos",false);
        var resultado=calcularArea().split('#');
        GE("DivPerimetro").innerHTML = devolverDecimales(resultado[1],2) +" m.";
	    GE("DivArea").innerHTML = devolverDecimales(resultado[0],2)+" m².";
    	
	     pintarArea();
    }
}

var painterArea=0;
var layerArea=0
function pintarArea(){

    if(layerArea==0){
          layerArea = LtnWebViewer1.createCustomLayer("canvasArea"+Math.random());
          
          layerArea.setAutoClean(false); //gestionamos manualmente
          painterArea = LtnWebViewer1.createLayerPainter(layerArea);
          painterArea.setColor("f0e319"); //asigna color de brocha
          painterArea.setStroke(2); //asigna tamaño de brocha
          
          var layert= layerArea.getContainer();
          layert.style.opacity=0.7;
          layert.style.filter="alpha(opacity=70)";
     }
      
    if(painterArea!=0){
        painterArea.clear();
                
    }
    
    
    //xArea.push(auxX[0]);
    //yArea.push(auxY[0]);
    
    painterArea.fillPolygon(xArea, yArea);
   
    painterArea.paint();
    
    painter.clear();
    
    //quitamos los dos que hemos puesto ultimos para cerrar el poligono
    
    //xArea.pop();
    //yArea.pop();
}



function clickDistancia(visor, x, y) 
{ 

    if (lstUTMX==null || lstUTMX.length==0)
	{ 
		lstUTMX = new Array();
		lstUTMY = new Array();
	}

    
	lstUTMX.push(x);
	lstUTMY.push(y);
    localX = visor.worldToLocalCoordX(x);
    localY = visor.worldToLocalCoordY(y);
    
    nuevoPunto(localX-3, localY);
    medirDistancias();
    
    
    GE("DivDistanciaParcial").innerHTML = devolverDecimales(distanciaParcial,2)+" m.";
	GE("DivDistanciaTotal").innerHTML = devolverDecimales(distanciaTotal,2)+" m.";
    
    
}

var distanciaParcial=0;
var distanciaTotal=0;
function reiniciarMedicionesDistancia(){

     distanciaParcial=0;
     distanciaTotal=0;
    
    lstX = null;
	lstUTMX = null;
    
    if(painter!=0){
        painter.clear();
        layerPunto=0;        
    }

	GE("DivDistanciaParcial").innerHTML = "0 m.";
	GE("DivDistanciaTotal").innerHTML = "0 m.";

}


function calcularArea()
{
	var cad = "";
	if (lstUTMY.length>2){
		var i;
		var min_y;
		var Area1;
		var vert1_x;
		var vert1_y;
		var vert2_x;
		var vert2_y;
		
		lstUTMX.push(lstUTMX[0]); //aadimos el primer punto a la lista
		lstUTMY.push(lstUTMY[0]);
		
		if (lstUTMY.length>0)
			min_y = lstUTMY[0];
			
		for (i=1; i<lstUTMY.length; i++)
		{
			if (lstUTMY[i]<min_y)
				min_y = lstUTMY[i];
		}
		
		Area1 = 0.0;
		perimetro = 0.0;
		for (i=1; i<lstUTMY.length; i++){
			vert1_x = lstUTMX[i - 1]/1000;
			vert1_y = lstUTMY[i - 1]/1000;
			vert2_x = lstUTMX[i]/1000;
			vert2_y = lstUTMY[i]/1000;
			Area1 += ((vert1_x - vert2_x)*((vert1_y-min_y) + (vert2_y-min_y))) / 2.0;
			perimetro += calcularDistancia(vert1_x, vert1_y, vert2_x, vert2_y);
		}

		lstUTMX.pop(); //quitamos el punto de cierre
		lstUTMY.pop();
		
		var res = devolverDecimales(Math.abs(Area1), 2);
		cad = res;
	}
	else 
		cad = "0#0";

	//glb_spanInfo.innerHTML = cad;
    return cad + "#" + perimetro;	
}

function minimizar(panel) {    
    if ($("#" + panel + " div[id*='Cuerpo']").css('display') == 'block') {
        $("#" + panel + " div[id*='Cuerpo']").css('display', 'none');
        $("#" + panel + " > div img:eq(0)").attr('src', 'images/expand_blue.jpg');
    }
    else {
        $("#" + panel + " div[id*='Cuerpo']").css('display', 'block');
        $("#" + panel + " > div img:eq(0)").attr('src', 'images/collapse_blue.jpg');
    }

}
