﻿//var prm;
var FlotanteHeight, FlotanteWidth;
var jg;


function cargado()
{
    
alert("cargado");
    //objCoordenadas = $get("CoordenadasCuerpo");
    objCoordenadas = GE("divCoordenadas");

    LtnWebViewer1.AttachMouseMove(mouseMove);
    LtnWebViewer1.AttachChangeScale(changeScale);

    prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_initializeRequest(InitializeRequest);
    prm.add_endRequest(EndRequest);

    //alert("cargado");    
    //initAutoComplete(GE("busqAuto"));
    
    FlotanteHeight = parseInt(document.documentElement.clientHeight * 0.8, 10);
    FlotanteWidth = parseInt(screen.width - 75, 10);

      

	jg = new jsGraphics("divPizarra");
	jg.setColor("red");
	jg.setStroke(2);
		
	window.setInterval(callVisitas, 2*60000);
	callVisitas();
	
	
}

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 llamada = sender._postBackSettings.sourceElement.id;
    //alert("EndRequest "+llamada);
    if(llamada.indexOf("cblProveedores")>=0 || llamada.indexOf("btnRefrescar")>=0)
    {
        LtnWebViewer1.RefreshView();        
    }
    //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;
    var k=GE("HerramientasContenedor");
    k.style.visibility="hidden";
    
    
    visor.unsubscribeEvent(WVEventType.DOUBLE_CLICK, beh);

}

function cerrarHerramientaClick(visor, clickHandler)
{
    visor.DetachLeftClick(clickHandler);
    //visor.UIVisible(true);
    visor.ReleaseService();
    //visor.PanEnabled = true;
    visor.unlockControllers();
    visor.ZoomWinEnabled = true;
    var k=GE("HerramientasContenedor");
    k.style.visibility="visible";
    beh.init(LtnWebViewer1);
    LtnWebViewer1.addCustomBehavior(beh);
}

function imprimir()
{
    //var titulo = prompt('Escribe un título','Mapa');
    var titulo = "IMPRESIÓN DEL MAPA";

    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 url = "imprimir.aspx?h="+h+"&w="+w+"&minx="+minx+"&miny="+miny+"&maxx="+maxx+"&maxy="+maxy+"&scale="+scale+"&titulo="+titulo;
    //alert(url);
    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, OnError, null);
    return true;
}

function OnCompleteIDFicha(arg)
{
    if(arg!="")
    {
        //LtnWebViewer1.RefreshView();
        LtnWebViewer1.refreshSystemLayer(WVLayerType.VECTOR);
        //abrirFicha(arg);
    }
    //else
    //    alert("No se ha encontrado ningún elemento cercano.");
    SetCargando(false);
    //q(arg);
}
function OnTimeOut(arg)
{
    alert("Tiempo agotado");//arg.get_message());
    SetCargando(false);
    //q(arg);
}
function OnError(arg)
{
    alert("Error: "+arg.get_message());
    SetCargando(false);
    //alert(arg.get_stackTrace());
    //alert(arg.get_exceptionType());
}

function getInfo()
{
    abrirHerramientaClick(LtnWebViewer1, "help", clickInfo);
}

var escala = 0;
var objCoordenadas;
var cont=0;
function mouseMove(visor, x, y)
{   
//    if(objCoordenadas.style.display=="none")
//        return;

    cont++;
    if( (cont%5) == 0 )
    {
	    var geo=utm2geo(30,Math.round(x/1000),Math.round(y/1000))
	    var utm=geo2utm(geo[0],geo[1])
	    var huso=utm[0]
	    var UTMx=Math.round(utm[1])
	    var UTMy=Math.round(utm[2])

	    var aux='<table cellspacing=0 cellpadding=1 align=center style="font-size:13px"><tr align=right><td align=left>LAT</td>'+desgloseGeo(geo[0])+((geo[0]>0)?'N':'S')+'</td></tr>';
	    aux += '<tr align=right><td align=left>LON</td>'+desgloseGeo(geo[1])+((geo[1]>0)?'E':'W')+'</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>'
        //objCoordenadas.innerHTML =  x+","+y;//+" "+escala;
	    objCoordenadas.innerHTML = aux;
	    
	    cambiarEnlace();
	}
}

function changeScale(visor)
{
    var escala=250000;
    if(visor && visor.GetScale()<256)
        LtnWebViewer1.setScale(256);
        //LtnWebViewer1.ZoomWin(LtnWebViewer1.CenterUtmX(), LtnWebViewer1.CenterUtmY(), escala, escala);
    
    var escala = ((visor && visor.GetScale) ? visor.GetScale() : 0);//mm por cada pixel
    GE("textoESCALA").innerHTML ="<font size='2'>"+ (escala * GE("tablaESCALA").offsetWidth / 1000) + " m </font>";
    
    cambiarEnlace();
}

function cambiarOrto(obj){

   
    var ret = WebService.cambiarOrto(obj.value, obj.length, OnCompleteCambiarOrto, OnError, null);
    
}

function OnCompleteCambiarOrto(arg){
    LtnWebViewer1.refreshSystemLayer(WVLayerType.RASTER);
    
}


function go(x,y,id)
{
    if(id==undefined || id==null || id=="")
        gotoXY(x,y);
    else
        callID(id);
}

function goXYID(x,y,id)
{
    if(id!=undefined && id!=null && id!="")
        seleccionar(id);
    gotoXY(x,y);
}

function callID(id)
{
    SetCargando(true);
    var ret = WebService.GetXYofID(id, OnCompleteID, OnTimeOut, OnError, null);
    return true;
}


function hola()
{
LtnWebViewer1.refreshSystemLayer(WVLayerType.VECTOR);  
var capa= GE("panelframe2");
capa.style.visibility="hidden";
capa= GE("capaT");
capa.style.visibility="hidden";
var o = GE("iframeFicha");
o.src = "loading.htm";
}

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);
}



var xAux, yAux;
function gotoXY(x,y,ancho,alto)
{
    entra=true;
    if(ancho==undefined )
    {
        var escala = 1000000;
        var mescala = escala>>1;
        zoomWin(x-mescala, y-mescala, escala, escala);
        
        
    }
    else
    {
        zoomWinTransicion(x,y,parseInt( ancho), parseInt(alto)); 
        //zoomWinTransicion(x,y,3094180,3030768); 
        //zoomWinTransicion(x,y,3094180,3030769); 
        // zoomWinTransicion(x,y,5000000,5000000);       
       //LtnWebViewer1.zoomWin(x,y,ancho,alto);    
    }

}

function zoomWin(x,y,ancho,alto){
        var v=LtnWebViewer1;
        var esc=Math.max(ancho/v.getWidth(), alto/v.getHeight()) ;
        v.setScale(parseInt(esc+esc/3) );
        
        var cx=parseFloat(parseFloat(x,10)+ancho/2);
        var 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()));
        //v.Move(-cx,-cy);
        zoomWinTransicion(x,y,ancho,alto);

}


var dX,dY,numVeces=15, esc,esc2, cx, cy, intervalo, pxCenter, xAux, yAux,anchoAux, altoAux;

function zoomWinTransicion(x,y,ancho,alto){
        
        anchoAux=ancho;
        altoAux=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=parseInt(parseFloat(x,10)+ancho/2);
        cy=parseInt(parseFloat(y,10)+alto/2);
        xAux=cx;
        yAux=cy;
        
        
        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
        pxCenter = v.transformWorldToLocal(vCenter.x, vCenter.y);
        dX = cx / numVeces;
        dY = cy / numVeces;
        
               
       
        
        v.Move(-(cx % numVeces),-(cy % numVeces));
        
        contador=0;
        
        
        intervalo=setInterval(aumentar,50);
}

var auxX=0,auxY=0, contador=0, entra=false;
var anchoAuxiliar;
function aumentar(){
    contador++;
    
     
    if(contador>numVeces){
        clearInterval(intervalo);
        var k=parseInt(esc+esc/3);
        var h=esc2;
        LtnWebViewer1.locate(xAux,yAux);
        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 cambiarProveedor(obj)
{
    callProveedor(obj.checked, obj.value);
}

var src="";
function cambiarLeyenda(obj)
{   
    /*if(src==obj.value)
    {
        obj.checked = false;
        src = "";
    }
    else*/
        src = obj.value;
    if(src!="")
    {
        GE("imgLeyenda").src = "images/leyendas/" + src;}
        /*SetVisible("LeyendaContenedor", obj.checked);
    }
    else
        SetVisible("LeyendaContenedor", false);
        */
    SetVisible("LeyendaContenedor", obj.checked);
}

function cerrarLeyenda()
{
    for (i=0; rad = document.getElementsByName('rLeyenda')[i]; i++)
    {
    	if (rad.checked)
    	{
            rad.checked = false;
            cambiarLeyenda(rad);
            break;
        }
    }
}

function callProveedor(active,proveedor)
{
    SetCargando(true);
    var ret = WebService.SetProveedor(active, proveedor, OnCompleteProveedor, OnError, null);
    return true;
}

function OnCompleteProveedor(arg)
{
    if(arg!="")
        LtnWebViewer1.RefreshView();
    else
        alert("No se ha podido cargar el proveedor.");
    SetCargando(false);
}

function callFiltro(active,layer)
{
    SetCargando(true);
    var ret = WebService.SetFiltro(active, layer, OnCompleteFiltro, 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 1px red":"solid 1px white";
}

function SetCargando(activo)
{
    
    SetVisible("UpdateProgressPral", activo);
}

function SetVisible(id, visible)
{
    var o = GE(id);
    o.style.display = visible?"block":"none";
    o.style.visibility = visible?"visible":"hidden";
}

function clickTack(visor, x, y) 
{ 
    //alert("Coordenadas al hacer Data: " + x + " , " + y+" "+visor.GetScale());
    visor.PutTack(x, y, "X="+x+" Y="+y);
    //visor.RefreshTacks();
    visor.ClearDrawingArea();
    visor.SetColorDrawing("yellow");
    visor.DrawLine(x, y, x+300000, y+200000);
    visor.DrawLine(x, y, x+100000, y-100000);
    alert('0');
    //visor.DrawLine(750016, 4274123, 747838, 4275364);
    var lx = new Array();
    lx.push(x);
    lx.push(x+300000);
    lx.push(x+100000);
    lx.push(x);
    var ly = new Array();
    ly.push(y);
    ly.push(y+200000);
    ly.push(y+300000);
    ly.push(y);
    //visor.DrawPolygon(lx, ly);

    //visor.ClearDrawingArea();
}
var lstX,lstY,lstUTMX,lstUTMY;

var layer2 = 0; //crea capa personalizada
var painter=0;
function nuevoPunto(tx, ty, cerrar)
{

    if(layer2==0)  {
      layer2 = LtnWebViewer1.createCustomLayer("canvas"+Math.random());
      layer2.setAutoClean(false); //gestionamos manualmente
      painter = LtnWebViewer1.createLayerPainter(layer2);
      painter.setColor("d30c0c"); //asigna color de brocha
      painter.setStroke(2); //asigna tamaño de brocha
    }

	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

}


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);

	distAcumulada += dist;
	distAcumulada = devolverDecimales(distAcumulada, 2);
	
	dist = devolverDecimales(dist, 2);
	GE("PerfilDistancia").innerHTML = "<font size=2>"+distAcumulada+"</font>";//"Distancia parcial: "+dist+" m.<br>Distancia total: "+distAcumulada+" m.";
	GE("PerfilPuntos").innerHTML = "<font size=2>"+lstUTMX.length+"</font>";
}

function reiniciarMediciones()
{
	if(painter!=0){
        painter.clear();
        layer2=0;
    }    
    
	distAcumulada = 0;
	lstX = null;
	lstUTMX = null;
	//alert(GE("PerfilDistancia").innerHTML);
	GE("PerfilDistancia").innerHTML = "<font size='2'>"+distAcumulada+"</font>";
	GE("PerfilPuntos").innerHTML = "<font size='2'>0</font>";
}

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;
}



function getPerfil()
{
    abrirHerramientaClick(LtnWebViewer1, "cross", clickPerfil);
    reiniciarMediciones();
    SetVisible("PerfilContenedor", true);
}

function showVisor()
{
    var id = "VisorGeneralContenedor";
    var o = GE(id);
    if(o.style.display=="none" || o.style.visibility=="hidden")
        SetVisible(id, true);
    else
        SetVisible(id, false);
}

function showEntrada()
{
    var texto=GE("TextoEscala2");
    texto.value=LtnWebViewer1.GetScale()/10;
    SetVisible("EntradaContenedor", true);
}

function cancelar(id)
{
    SetVisible(id, false);
}

function setEntrada()
{
    var x = parseInt(GE("UTMX").value,10) * 1000;
    var y = parseInt(GE("UTMY").value,10) * 1000;
    var escala = parseInt(GE("TextoEscala2").value,10) * 10;
    if(!isNaN(x) && !isNaN(y)){
        LtnWebViewer1.Locate(x, y);
        LtnWebViewer1.setScale(escala);
    }
    else
       alert("Las coordenadas y la escala deben ser números positivos y estar expresadas en metros.");
}

function clickPerfil(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()
}
function mostrarPerfil()
{

   callPerfil(lstUTMX,lstUTMY)
}
function cancelarPerfil()
{
    SetVisible("PerfilContenedor", false);
    reiniciarMediciones();
    cerrarHerramientaClick(LtnWebViewer1, clickPerfil);
}


function callPerfil(listaX,listaY)
{
   if(listaX==null) {
        alert("Introduzca al menos un punto.");
        return;
    }
    
    setCargando2(true);
   
    minx= LtnWebViewer1.localToWorldCoordX(0);
    miny= LtnWebViewer1.localToWorldCoordY(0);
    
     maxx= LtnWebViewer1.localToWorldCoordX(LtnWebViewer1.getWidth());
     maxy= LtnWebViewer1.localToWorldCoordY(LtnWebViewer1.getHeight());
      
   
    var ret = WebService.GetPerfil(listaX, listaY, FlotanteWidth-35, FlotanteHeight ,minx,miny,maxx,maxy, OnCompletePerfil, OnError, null);
    return true;
}

function OnCompletePerfil(arg)
{
    //alert("OnComplete arg="+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.");
    }
    setCargando2(false);
}

function setCargando2(b){
    if(!b)
        GE("PanelCargando22").style.visibility="hidden";
    else 
        GE("PanelCargando22").style.visibility="visible";
}

function GuardarImagen(){

  var  minx= LtnWebViewer1.localToWorldCoordX(0);
  var  miny= LtnWebViewer1.localToWorldCoordY(0);
    
  var  maxx= LtnWebViewer1.localToWorldCoordX(LtnWebViewer1.getWidth());
  var  maxy= LtnWebViewer1.localToWorldCoordY(LtnWebViewer1.getHeight());
 
 var dir="descargar.aspx?ancho="+(FlotanteWidth-35)+"&alto="+FlotanteHeight+"&minx="+minx+"&miny="+miny+"&maxx="+maxx+"&maxy="+maxy; 
 window.open(dir , "v" , "width=1,height=3,scrollbars=NO") 
 

}

function goMinMax(minmax, id)
{
    if(id!=undefined && id!=null && id!="")
        seleccionar(id); 

    if(minmax!=null && minmax!="")
    {
        var o = minmax.split('#');
       var ancho = parseFloat(o[2],10) - parseFloat(o[0],10); //mm
        var alto = parseFloat(o[3],10) - parseFloat(o[1],10);
        
       var centroX=parseFloat(o[2],10)-ancho/2;
       var centroY=parseFloat(o[3],10)-alto/2;
       
           gotoXY(o[0], o[1],  ancho, alto);
        //alert(o[0]+","+o[1]+","+o[2]+","+o[3]+","+ancho+","+alto);
    }
}

function gotoMinMax(val)
{
    var obj = GE(val);
    var cad = obj.value;
    if(cad!=null && cad!="")
    {
        var o = cad.split('#');
        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);
    }
}

function itemSelected(evt,elem) {
    //alert(elem._text+" --> "+elem._value);
    var trozo = elem._value.split('|');
    var id = trozo[0];
    var x = trozo[1];
    var y = trozo[2];
    go(x,y,id);
}

function populating(evt,cancel)
{
    evt._element.style.backgroundColor = 'silver';
    GE("imgBuscando").style.display = "block";
}

function showing(evt,cancel)
{
    evt._element.style.backgroundColor = 'white';
    GE("imgBuscando").style.display = "none";
}

function cerrarLocalizar() {
    SetVisible("LocalizarContenedor", false);
}

function abrirLocalizar() {
    SetVisible("LocalizarContenedor", true);
}

function setEntrada() {
    var x = parseInt(GE("UTMX").value, 10) * 1000;
    var y = parseInt(GE("UTMY").value, 10) * 1000;
    if (!isNaN(x) && !isNaN(y)) {
        LtnWebViewer1.Locate(x, y);
        gotoXY(x, y);
    }
    else
        alert("Las coordenadas deben ser números positivos y estar expresadas en metros.");
}