/*
    AUTOR: Manuel Martos Ruiz
    FECHA: 19/02/2008
    TITULO DOCUMENTO: inicio.js
    TIPO DOCUMENTO: Archivo JScript
    DESCRIPCIÓN DOCUMENTO: Funciones de inicialización
    de la interfaz.
    MODIFICACIONES(Autor/fecha/descripcion): Ninguna
*/

dojo.require("dojo.parser");
dojo.require("dijit.layout.ContentPane");
dojo.require("dojox.layout.ContentPane");
dojo.require("dijit.layout.AccordionContainer");
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.CheckBox");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.ProgressBar");
dojo.require("dijit.Toolbar");
dojo.require("dijit.Dialog");
dojo.require("dijit.Menu");
dojo.require("dojo.cookie");
dojo.require("interfaz.objetos.Feedback");
dojo.require("interfaz.objetos.Peticion");
dojo.require("interfaz.objetos.Mapa");
dojo.require("interfaz.objetos.Capas");

function INIT_Sesion()
{
    /* ---- CONFIGURACIÓN DEL ENTORNO ---- */
    
        /* Establecemos el número de versión de la aplicación */
        dojo.byId("html_Version").innerHTML = "Versión " + G_VERSION;
        
        /* Inicializamos el objeto Feedback */
        G_OBJ_FEEDBACK = new interfaz.objetos.Feedback();
        G_OBJ_PETICION = new interfaz.objetos.Peticion();
        
        /* Comprobamos si previamente está guardado el valor del tamaño de monitor en una cookie */    
        var valCookie = dojo.cookie('visorwebgeogranada');
        if(valCookie != null) G_MONITOR_SIZE = valCookie;
        if(G_MONITOR_SIZE > 0) G_BTN_ZOOMESCALA = true;
        
        /* Si tenemos IE, no soporta el degradado de la barra de herramientas */
        if(dojo.isIE) dojo.byId("html_BarraHerramientas").parentNode.style.background = "#ebebeb";
        
        /* Auto-Resize del Mapa */
        dojo.connect(dijit.byId("html_Cuerpo"), "resize", function(e)
        {
            if(G_OBJ_MAPA != null)
            {
                var wth = dijit.byId("html_MapaContainer").domNode.clientWidth;
                var hth = dijit.byId("html_MapaContainer").domNode.clientHeight;
                setTimeout(function()
                {
                    if(wth == dijit.byId("html_MapaContainer").domNode.clientWidth && hth == dijit.byId("html_MapaContainer").domNode.clientHeight)
                        G_OBJ_MAPA.resize(dijit.byId("html_MapaContainer").domNode.clientWidth,dijit.byId("html_MapaContainer").domNode.clientHeight);
                },500);            
            }
        });
        
        G_ANCHO_MAPA = dijit.byId("html_MapaContainer").domNode.clientWidth;
        G_ALTO_MAPA = dijit.byId("html_MapaContainer").domNode.clientHeight;
        
    /* ---- CONFIGURACIÓN ADICIONAL ---- */
    
    G_OBJ_PETICION.abrirSesion(function(evt){

        /* Inicializamos el objeto Mapa */
        G_OBJ_MAPA = new interfaz.objetos.Mapa(dojo.byId("html_Mapa"),G_ANCHO_MAPA,G_ALTO_MAPA);
        
        /* Inicializamos la Barra de Herramientas */
        INIT_ToolBar();
        
        /* Inicializamos los Paneles */
        INIT_Paneles();
        
        /* Inicializamos el diálogo de Temas */
        INIT_Dialogo_Temas();
        
        /* Inicializamos el diálogo de Configuración del tamaño del Monitor */
        INIT_Dialogo_Monitor();
        
        /* Inicializamos el diálogo del Buscador genérico */
        INIT_Dialogo_Buscador();
        
        /* Inicializamos el diálogo de Zoom por Escala */
        INIT_Dialogo_ZoomEscala();
        
        /* Obtenemos la primera imagen del Mapa */
        if(GetParametro('capa') != "" && GetParametro('valor') != "") G_OBJ_MAPA.getMapa("ZoomBusqueda",new Array(GetParametro('capa'),GetParametro('valor').replace("%F1","ñ").replace("%D1","Ñ")));
        else if(GetParametro('x1') != "" && GetParametro('y1') != "" && GetParametro('x2') != "" && GetParametro('y2') != "") G_OBJ_MAPA.getMapa("ZoomUTM",new Array(GetParametro('x1'),GetParametro('y1'),GetParametro('x2'),GetParametro('y2')));
        else G_OBJ_MAPA.getMapa("ZoomExtent");
        
        /* Incrementamos el porcentaje de la barra de Carga */
        G_OBJ_FEEDBACK.popCargando();                
    });
}

/* Generamos los Botones de Herramientas dinámicamente */
function INIT_ToolBar()
{
    /* Inicializamos la Barra de Herramientas */
    new dijit.Toolbar({id: "html_BarraHerramientas"},dojo.byId("html_BarraHerramientas"));
    
    /* Zoom Extent */
    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.Button({id: "html_BtnZoomExtent",title: "Zoom Término",iconClass: "botones zoomextent",onClick: eval(function(){G_OBJ_MAPA.getMapa("ZoomExtent","");})},document.createElement("span")));
    
    /* Zoom In */
    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.ToggleButton({id: "html_BtnZoomIn",title: "Zoom Acercar",iconClass: "botones zoomin",onClick: eval(function(){G_OBJ_MAPA.activarHerramienta('ZoomIn');})},document.createElement("span")));
    
    /* Zoom Out */
    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.ToggleButton({id: "html_BtnZoomOut",title: "Zoom Alejar",iconClass: "botones zoomout",onClick: eval(function(){G_OBJ_MAPA.activarHerramienta('ZoomOut');})},document.createElement("span")));
    
    /* Pan */
    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.ToggleButton({id: "html_BtnPan",title: "Desplazar",iconClass: "botones pan",onClick: eval(function(){G_OBJ_MAPA.activarHerramienta('Pan');})},document.createElement("span")));

    /* Pan Dirección */
    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.Button({id: "html_BtnPanes",title: "Desplazar en una dirección",iconClass: "botones panDireccion",onClick: eval(function(){
            if(dijit.byId("html_BtnPanesMenu").isShowingNow == true) dijit.popup.close(dijit.byId("html_BtnPanesMenu"));
            else if(dijit.byId("html_BtnPanes") != null) dijit.popup.open({parent: dijit.byId("html_BtnPanes"),popup: dijit.byId("html_BtnPanesMenu"),around: dijit.byId("html_BtnPanes").domNode, onExecute: function(){dijit.popup.close();}});
        })},document.createElement("span")));
        
        var menu = new dijit.Menu({id: "html_BtnPanesMenu", style: "display:none; margin-left: 39px; margin-top: -30px;"},document.createElement("span"));
        menu.addChild(new dijit.MenuItem({id: "html_BtnPanTop",label: "Norte", iconClass: "panes pantop",onClick: eval(function(){G_OBJ_MAPA.getMapa("PanNorte",""); dijit.popup.close(dijit.byId("html_BtnPanesMenu"));})},document.createElement("span")));
        menu.addChild(new dijit.MenuItem({id: "html_BtnPanBottom",label: "Sur", iconClass: "panes panbottom",onClick: eval(function(){G_OBJ_MAPA.getMapa("PanSur",""); dijit.popup.close(dijit.byId("html_BtnPanesMenu"));})},document.createElement("span")));
        menu.addChild(new dijit.MenuItem({id: "html_BtnPanRight",label: "Este", iconClass: "panes panright",onClick: eval(function(){G_OBJ_MAPA.getMapa("PanEste",""); dijit.popup.close(dijit.byId("html_BtnPanesMenu"));})},document.createElement("span")));
        menu.addChild(new dijit.MenuItem({id: "html_BtnPanLeft",label: "Oeste", iconClass: "panes panleft",onClick: eval(function(){G_OBJ_MAPA.getMapa("PanOeste",""); dijit.popup.close(dijit.byId("html_BtnPanesMenu"));})},document.createElement("span")));    

    /* Zoom Escala */
    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.Button({id: "html_BtnZoomEscala",title: "Zoom Escala",iconClass: "botones zoomescala",onClick: eval(function(e){if(dijit.byId('html_DialogoZoomEscala')!=null) dijit.byId('html_DialogoZoomEscala').show();})},document.createElement("span")));
    
    /* Zoom Anterior */
    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.Button({id: "html_BtnZoomAnterior",title: "Zoom Anterior",iconClass: "botones zoomanterior",onClick: eval(function(){G_OBJ_MAPA.getMapa("ZoomAnterior","");})},document.createElement("span")));
    
    /* Zoom Siguiente */
    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.Button({id: "html_BtnZoomSiguiente",title: "Zoom Siguiente",iconClass: "botones zoomsiguiente",onClick: eval(function(){G_OBJ_MAPA.getMapa("ZoomSiguiente","");})},document.createElement("span")));
    
    /* Separador */    
    dijit.byId("html_BarraHerramientas").addChild(new dijit.ToolbarSeparator({},document.createElement("span")));
    
    /* Identify */
    if(G_BTN_IDENTIFY)
    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.ToggleButton({id: "html_BtnIdentify",title: "Ver Propiedades",iconClass: "botones identify",onClick: eval(function(){G_OBJ_MAPA.activarHerramienta('Identify');})},document.createElement("span")));

    /* Medidas */
    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.ToggleButton({id: "html_BtnMedidas",title: "Medidas",iconClass: "botones medidas",onClick: eval(function(){G_OBJ_MAPA.activarHerramienta('Medidas');})},document.createElement("span")));

    /* Buscador */
    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.Button({id: "html_BtnBuscador",title: "Buscador",iconClass: "botones buscador",onClick: eval(function(e){if(dijit.byId('html_DialogoBuscador')!=null) dijit.byId('html_DialogoBuscador').show();})},document.createElement("span")));
    
    /* Editor */
//    dijit.byId("html_BarraHerramientas").addChild(new dijit.form.ToggleButton({id: "html_BtnEditor",title: "Editor",iconClass: "botones editor"},document.createElement("span")));
    
    /* Qué ocurre cuando el menú de panes está levantado y nos movemos sobre cualquier otra herramienta */
    dojo.connect(dijit.byId("html_BtnZoomExtent").domNode, "onmouseover", function(e){if(dijit.byId("html_BtnPanesMenu").isShowingNow == true) dijit.popup.close(dijit.byId("html_BtnPanesMenu"));});
    dojo.connect(dijit.byId("html_BtnZoomIn").domNode, "onmouseover", function(e){if(dijit.byId("html_BtnPanesMenu").isShowingNow == true) dijit.popup.close(dijit.byId("html_BtnPanesMenu"));});
    dojo.connect(dijit.byId("html_BtnZoomOut").domNode, "onmouseover", function(e){if(dijit.byId("html_BtnPanesMenu").isShowingNow == true) dijit.popup.close(dijit.byId("html_BtnPanesMenu"));});
    dojo.connect(dijit.byId("html_BtnPan").domNode, "onmouseover", function(e){if(dijit.byId("html_BtnPanesMenu").isShowingNow == true) dijit.popup.close(dijit.byId("html_BtnPanesMenu"));});
    dojo.connect(dijit.byId("html_BtnZoomEscala").domNode, "onmouseover", function(e){if(dijit.byId("html_BtnPanesMenu").isShowingNow == true) dijit.popup.close(dijit.byId("html_BtnPanesMenu"));});
    dojo.connect(dijit.byId("html_BtnZoomAnterior").domNode, "onmouseover", function(e){if(dijit.byId("html_BtnPanesMenu").isShowingNow == true) dijit.popup.close(dijit.byId("html_BtnPanesMenu"));});
    dojo.connect(dijit.byId("html_BtnZoomSiguiente").domNode, "onmouseover", function(e){if(dijit.byId("html_BtnPanesMenu").isShowingNow == true) dijit.popup.close(dijit.byId("html_BtnPanesMenu"));});
    if(dijit.byId("html_BtnIdentify") != null) dojo.connect(dijit.byId("html_BtnIdentify").domNode, "onmouseover", function(e){if(dijit.byId("html_BtnPanesMenu").isShowingNow == true) dijit.popup.close(dijit.byId("html_BtnPanesMenu"));});
    if(dijit.byId("html_BtnMedidas") != null) dojo.connect(dijit.byId("html_BtnMedidas").domNode, "onmouseover", function(e){if(dijit.byId("html_BtnPanesMenu").isShowingNow == true) dijit.popup.close(dijit.byId("html_BtnPanesMenu"));});
    if(dijit.byId("html_BtnBuscador") != null) dojo.connect(dijit.byId("html_BtnBuscador").domNode, "onmouseover", function(e){if(dijit.byId("html_BtnPanesMenu").isShowingNow == true) dijit.popup.close(dijit.byId("html_BtnPanesMenu"));});
    
    /* Refrescamos la Barra de Herramientas */
    dijit.byId("html_BarraHerramientas").startup();    
}

/* Generamos los Paneles dinámicamente */
function INIT_Paneles()
{
    if(G_OBJ_PANELES.listaPaneles.length >= 1 && G_OBJ_PANELES.listaPaneles[0].nombre != "none")
    {
        var paneles = new dijit.layout.AccordionContainer({id: "html_Paneles"}, dojo.byId("html_Paneles"));
        
        for(var i=0; i<G_OBJ_PANELES.listaPaneles.length; i++)
        {
            var nodo = document.createElement("span");
	        document.body.appendChild(nodo);
        	
    	    if(G_OBJ_PANELES.listaPaneles[i].id == G_OBJ_PANELES.panelDesplegado)
	        var panel = new dijit.layout.AccordionPane({id: "html_"+G_OBJ_PANELES.listaPaneles[i].id, title: G_OBJ_PANELES.listaPaneles[i].nombre, loadingMessage: "Cargando...", selected: true, refreshOnShow: false}, nodo);
	        else var panel = new dijit.layout.AccordionPane({id: "html_"+G_OBJ_PANELES.listaPaneles[i].id, title: G_OBJ_PANELES.listaPaneles[i].nombre, loadingMessage: "Cargando...", selected: false, refreshOnShow: false}, nodo);
    	    
	        paneles.addChild(panel);
        }

	    paneles.startup();
    	
	    /* Inicializamos el panel de capas */
	    if(dijit.byId("html_CAPAS") != null) G_OBJ_CAPAS = new interfaz.objetos.Capas(dijit.byId("html_CAPAS"));
    	
	    /* Inicializamos el contenido del panel de Propiedades */
        if(dijit.byId("html_PROPIEDADES") != null)
        {           
            var funcAsync = null;                                
            setTimeout(funcAsync = function()
            {
                if(G_OBJ_CAPAS_PREGUNTA == null)
                {
                    setTimeout(funcAsync,150);
                }
                else
                {
                    dijit.byId("html_PROPIEDADES").setHref("html/panel_propiedades.html");
                    dijit.byId("html_PROPIEDADES").href = "";   /* Evitar BUG reload panel */
                }               
            }, 150);          
        }
        
        /* Inicializamos el panel de Medidas */
        if(dijit.byId("html_MEDIDAS") != null)
        {
            dijit.byId("html_MEDIDAS").setHref("html/panel_medidas.html");
            dijit.byId("html_MEDIDAS").href = ""; /* Evitar BUG reload panel */
        }
//                    
//        /* Inicializamos los Contenidos */
//        if(dijit.byId("html_CONTENIDOS") != null) dijit.byId("html_CONTENIDOS").setHref("html/panelContenidos.html");
                    
                                        
        /* Inicializamos el panel del Callejero */
        if(dijit.byId("html_CALLEJERO") != null)
        {
            dijit.byId("html_CALLEJERO").setHref("html/panel_callejero.html");
            dijit.byId("html_CALLEJERO").href = ""; /* Evitar BUG reload panel */
            CAPA_CONTENIDOS = "CALLES";
        }
        
        /* Inicializamos el panel de Ruidos */
        if(dijit.byId("html_RUIDOS") != null)
        {
            dijit.byId("html_RUIDOS").setHref("html/panel_ruidos.html");
            dijit.byId("html_RUIDOS").href = ""; /* Evitar BUG reload panel */
            CAPA_CONTENIDOS = "RUIDOS";
        }       
        
    }
    else if(G_OBJ_PANELES.listaPaneles.length == 1)
    {
        var paneles = new dijit.layout.ContentPane({id: "html_"+G_OBJ_PANELES.listaPaneles[0].id, loadingMessage: "Cargando..."}, dojo.byId("html_Paneles"));        
        paneles.startup();
        
//        if(G_OBJ_PANELES.listaPaneles[0].id == "CALLEJERO")
//        {
//            paneles.setHref("html/panelCallejero.html");
//            CAPA_INTERACTIVOS = "CALLES";
//        }       
    }
}

/* Inicializamos el diálogo de Temas */
function INIT_Dialogo_Temas()
{   
    /* Construimos la ventana */
    var vtn = document.createElement("span");
        dojo.attr(vtn, "id", "html_DialogoTemas");
	    document.body.appendChild(vtn);    

    new dijit.Dialog({id: "html_DialogoTemas",title: "Cambiar Tema",href: "html/dialogo_temas.html", 
        loadingMessage: "Cargando...",parseOnLoad: true}, dojo.byId("html_DialogoTemas"));
        
    /* Establecemos el nombre del Tema Actual en la interfaz */
    dojo.byId("html_TemaActual").innerHTML = G_OBJ_TEMAS.temaActual;
}

/* Inicializamos el diálogo de Configuración del tamaño del Monitor */
function INIT_Dialogo_Monitor()
{   
    /* Construimos la ventana */
    var vtn = document.createElement("span");
        dojo.attr(vtn, "id", "html_DialogoMonitor");
	    document.body.appendChild(vtn);    

    new dijit.Dialog({id: "html_DialogoMonitor",title: "Configurar Monitor",href: "html/dialogo_monitor.html", 
        loadingMessage: "Cargando...",parseOnLoad: true}, dojo.byId("html_DialogoMonitor"));        
}

/* Inicializamos el diálogo del Buscador genérico */
function INIT_Dialogo_Buscador()
{   
    /* Construimos la ventana */
    var vtn = document.createElement("span");
        dojo.attr(vtn, "id", "html_DialogoBuscador");
	    document.body.appendChild(vtn);    

    new dijit.Dialog({id: "html_DialogoBuscador",title: "Buscador",href: "html/dialogo_buscador.html", 
        loadingMessage: "Cargando...",parseOnLoad: true}, dojo.byId("html_DialogoBuscador"));        
}

/* Inicializamos el diálogo de Zoom por Escala */
function INIT_Dialogo_ZoomEscala()
{   
    /* Construimos la ventana */
    var vtn = document.createElement("span");
        dojo.attr(vtn, "id", "html_DialogoZoomEscala");
	    document.body.appendChild(vtn);    

    new dijit.Dialog({id: "html_DialogoZoomEscala",title: "Zoom por Escala",href: "html/dialogo_zoomescala.html", 
        loadingMessage: "Cargando...",parseOnLoad: true}, dojo.byId("html_DialogoZoomEscala"));        
}

/* Pone activos/inactivos los botones según su estado */
function INIT_ActualizarEstadoBotones()
{
    dijit.byId("html_BtnZoomExtent").setAttribute("disabled",!G_BTN_ZOOMEXTENT);
    dijit.byId("html_BtnZoomIn").setAttribute("disabled",!G_BTN_ZOOMIN);
    dijit.byId("html_BtnZoomOut").setAttribute("disabled",!G_BTN_ZOOMOUT);
    dijit.byId("html_BtnPan").setAttribute("disabled",!G_BTN_PANMANO);
    dijit.byId("html_BtnZoomAnterior").setAttribute("disabled",!G_BTN_ZOOMPREV);
    dijit.byId("html_BtnZoomSiguiente").setAttribute("disabled",!G_BTN_ZOOMNEXT);
    dijit.byId("html_BtnZoomEscala").setAttribute("disabled",!G_BTN_ZOOMESCALA);
    if(dijit.byId("html_PROPIEDADES") != null || dijit.byId("html_CALLEJERO") != null) dijit.byId("html_BtnIdentify").setAttribute("disabled",!G_BTN_IDENTIFY);
    dijit.byId("html_BtnPanTop").setDisabled(!G_BTN_PANTOP);
    dijit.byId("html_BtnPanBottom").setDisabled(!G_BTN_PANBOTTOM);
    dijit.byId("html_BtnPanRight").setDisabled(!G_BTN_PANRIGHT);
    dijit.byId("html_BtnPanLeft").setDisabled(!G_BTN_PANLEFT);
}

/* Devuelve el parámetro pasado por POST especificado (de la URL) */
function GetParametro(nombre)
{
    nombre = nombre.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+nombre+"=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if( results == null ) return "";
    else return replaceAll(results[1], "%20", " ");
}

/* Remplaza todas las coincidencias de un string */
function replaceAll(string, text, by)
{
    var strLength = string.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return string;

    var i = string.indexOf(text);
    if ((!i) && (text != string.substring(0,txtLength))) return string;
    if (i == -1) return string;

    var newstr = string.substring(0,i) + by;

    if (i+txtLength < strLength) newstr += replaceAll(string.substring(i+txtLength,strLength),text,by);

    return newstr;
}

