/*
Project: HUMBOLDT GEOPISTA
File: geopistaInteractuadorUsuario.js
Author: Angel Monterde <angel.monterde.gpl@gmail.com>
Team Geopista: 
	Jorge Elia <jorgelia82@gmail.com>
	Paula Garcia <paulicagg@gmail.com>
	Pablo Gallardo <pgallardo@geopista.es>
	Juan Martin <jmartin@geopista.es>
	Angel Monterde <angel.monterde.gpl@gmail.com>	

Date: 29/05/2007
 
HUMBOLDT GEOPISTA - Light WebClient/viewer for OGC Web Map Services.
Copyright (C) 2007
 
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */
if(!GEOPISTA.Visualizacion){
    GEOPISTA.Visualizacion = new Object();
    GEOPISTA.Visualizacion.ID_ICONO_ZOOM = 1;
    GEOPISTA.Visualizacion.ID_ICONO_MOVER_ARRIBA = 2;
    GEOPISTA.Visualizacion.ID_ICONO_MOVER_ABAJO = 3;
    GEOPISTA.Visualizacion.ID_ICONO_MOVER_DCHA = 4;
    GEOPISTA.Visualizacion.ID_ICONO_MOVER_IZDA = 5;
    GEOPISTA.Visualizacion.ID_ICONO_ZOOM_MENOS =6;
    GEOPISTA.Visualizacion.ID_ICONO_MANO = 7;
    GEOPISTA.Visualizacion.ID_ICONO_RUBBERBAND = 8;
    GEOPISTA.Visualizacion.ID_ICONO_REGLA = 9;
    GEOPISTA.Visualizacion.ID_ICONO_AYUNTAMIENTO = 10;
    GEOPISTA.Visualizacion.ID_ICONO_REFRESCAR = 11;
    GEOPISTA.Visualizacion.ID_ICONO_GET_FEATURE_INFO = 12;
}

GEOPISTA.Visualizacion.InteractuadorConUsuario = function(gestorOperaciones, 
gestorLeyendas, gestorComboFeatureInfo){
    var _gestorOperaciones = gestorOperaciones;
    //var LIMITE_X_MIN = 0;
    //var LIMITE_Y_MIN = 0;
    
    var _grupoElementosIconos = null;
    
    var _gestorLeyendas = gestorLeyendas;
    var _gestorComboFeatureInfo = gestorComboFeatureInfo;
    var _buscador = null;
    /*
    *   Inicializa la primera peticion. Sirve para inicializar el bbox asi como
    *   la primera operacion. Para que el icono de la primera operacion se marque
    *   hay que poner el icono activo en el fichero initVisor.js en el metodo initIconos.
    *   Por defecto es la operacion ZOOM
    */
    this.init = function(bbox, chincheta){
        if(bbox!=null){
            if(chincheta!=null){
                _gestorOperaciones.setOperacion(GEOPISTA.Operacion.IR_A_COORDENADAS);
                _gestorOperaciones.irACoordenadas(chincheta);
            }
            _gestorOperaciones.setOperacion(GEOPISTA.Operacion.ZOOM);
            _gestorOperaciones.init(bbox);
        }else{
            alert("GEOPISTA.Visualizacion.InteractuadorConUsuario.init: Error en la inicializacion de la primera peticion: el bbox es nulo");
        }
    }
    
    this.setGrupoElementosIconos = function(grupoElementosIconos){
        _grupoElementosIconos = grupoElementosIconos;
    }
    /*this.setLimites = function(xmin, ymin){
        LIMITE_X_MIN = xmin;
        LIMITE_Y_MIN = ymin;
    }*/
    this.actualizaIcono = function(idIcono, valorBooleano){
        var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(idIcono);
        _grupoElementosIconos.setElementoIconoActivoTemporal(posicion,valorBooleano);
    }
    
    this.refrescaElementoIcono = function(){
        _grupoElementosIconos.refrescaElementoIcono();
    }
    
    this.realizaOperacion = function(idOperacion){
        //debugger;
        //console.log("GEOPISTA.Visualizacion.InteractuadorConUsuario.realizaOperacion: servicioCargaImagenesYPeticiones.isMapasCargados(true)"+servicioCargaImagenesYPeticiones.isMapasCargados(true));
        //if(_gestorOperaciones.isTodosMapasCargados(true)){
            switch(idOperacion){
                case GEOPISTA.Operacion.MOVER_DCHA:
                    // poner el icono de mover
                    //movimientoGetBBox(idOperacion);
                    var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(GEOPISTA.Visualizacion.ID_ICONO_MOVER_DCHA);
                    _grupoElementosIconos.setElementoIconoActivo(posicion);
                    _gestorOperaciones.setOperacion(GEOPISTA.Operacion.MOVER_DCHA);
                    break;
                case GEOPISTA.Operacion.MOVER_IZDA:
                    // poner el icono de mover
                    //movimientoGetBBox(idOperacion);
                    var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(GEOPISTA.Visualizacion.ID_ICONO_MOVER_IZDA);
                    _grupoElementosIconos.setElementoIconoActivo(posicion);
                    _gestorOperaciones.setOperacion(GEOPISTA.Operacion.MOVER_IZDA);
                    break;
                case GEOPISTA.Operacion.MOVER_ARRIBA:
                    // poner el icono de mover
                    //movimientoGetBBox(idOperacion);
                    var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(GEOPISTA.Visualizacion.ID_ICONO_MOVER_ARRIBA);
                    _grupoElementosIconos.setElementoIconoActivo(posicion);
                    _gestorOperaciones.setOperacion(GEOPISTA.Operacion.MOVER_ARRIBA);
                    break;
                case GEOPISTA.Operacion.MOVER_ABAJO:
                    // poner el icono de mover
                    //movimientoGetBBox(idOperacion);
                    var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(GEOPISTA.Visualizacion.ID_ICONO_MOVER_ABAJO);
                    _grupoElementosIconos.setElementoIconoActivo(posicion);
                    _gestorOperaciones.setOperacion(GEOPISTA.Operacion.MOVER_ABAJO);
                    break;
                case GEOPISTA.Operacion.ZOOM:
                    // poner el icono de zoom
                    var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(GEOPISTA.Visualizacion.ID_ICONO_ZOOM);
                    _grupoElementosIconos.setElementoIconoActivo(posicion);
                    _gestorOperaciones.setOperacion(GEOPISTA.Operacion.ZOOM);
                    break;
                case GEOPISTA.Operacion.ZOOM_MENOS:
                    // poner el icono de zoom
                    var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(GEOPISTA.Visualizacion.ID_ICONO_ZOOM_MENOS);
                    _grupoElementosIconos.setElementoIconoActivo(posicion);
                    _gestorOperaciones.setOperacion(GEOPISTA.Operacion.ZOOM_MENOS);
                    break;
                case GEOPISTA.Operacion.MANO:
                    // poner el icono de mano
                    var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(GEOPISTA.Visualizacion.ID_ICONO_MANO);
                    _grupoElementosIconos.setElementoIconoActivo(posicion);
                    _gestorOperaciones.setOperacion(GEOPISTA.Operacion.MANO);
                    break;
                case GEOPISTA.Operacion.RUBBERBAND:
                    // poner el icono de rubberband
                    var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(GEOPISTA.Visualizacion.ID_ICONO_RUBBERBAND);
                    _grupoElementosIconos.setElementoIconoActivo(posicion);
                    _gestorOperaciones.setOperacion(GEOPISTA.Operacion.RUBBERBAND);
                    break; 
                case GEOPISTA.Operacion.REGLA:
                    //no implementado
                    //console.info("GEOPISTA.Visualizacion.InteractuadorConUsuario.realizaOperacion: NO IMPLEMENTADO GEOPISTA.Operacion.REGLA");
                    break;
                case GEOPISTA.Operacion.AYUNTAMIENTO:
                    // poner el icono de ayuntamiento
                    //goHomeGetBBox();
                    var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(GEOPISTA.Visualizacion.ID_ICONO_AYUNTAMIENTO);
                    _grupoElementosIconos.setElementoIconoActivo(posicion);
                    _gestorOperaciones.setOperacion(GEOPISTA.Operacion.AYUNTAMIENTO);
                    break;
                case GEOPISTA.Operacion.REFRESCAR:
                    // poner el icono de refrescar
                    //refrescarGetBBox();
                    var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(GEOPISTA.Visualizacion.ID_ICONO_REFRESCAR);
                    _grupoElementosIconos.setElementoIconoActivo(posicion);
                    _gestorOperaciones.setOperacion(GEOPISTA.Operacion.REFRESCAR);
                    //refrescarGetBBox();
                    break;
                case GEOPISTA.Operacion.CAMBIATAMANO:
                    //cambiaTamanoGetBBox();
                    break;
                case GEOPISTA.Operacion.IR_A_COORDENADAS:
                    //desactivar el icono anterior
                    var idIconoActivo = _grupoElementosIconos.getIdElementoIconoActivo();
                    _grupoElementosIconos.setElementoIconoActivo(idIconoActivo);
                    irACoordenadasGetBBox();
                    break;
                case GEOPISTA.Operacion.BUSCADOR_VIAS:
                    // si el usuario pincha dos veces sobre buscar vias
                    // lo destruimos para que no se acumulen en el mapa         
                    if((_buscador instanceof GEOPISTA.Busqueda.BuscadorVias)||
                    (_buscador instanceof GEOPISTA.Busqueda.BuscadorPois)){
                        destruyeBuscador();
                    }
                    _buscador = new GEOPISTA.Busqueda.BuscadorVias(document.body, dojo.byId("txtCalle").value, dojo.byId("txtNumero").value, IE, interactuadorConUsuario);
                    _buscador.hazBusqueda();
                    
                    /*
                    _ultimoBuscador = GEOPISTA.Operacion.BUSCADOR_VIAS;
                     
                    _buscadorVias = new GEOPISTA.Busqueda.BuscadorVias(document.body, dojo.byId("txtCalle").value, dojo.byId("txtNumero").value, IE, interactuadorConUsuario);
                    _buscadorVias.hazBusqueda();*/
                    break;
                case GEOPISTA.Operacion.BUSCADOR_POIS:
                    
                    if((_buscador instanceof GEOPISTA.Busqueda.BuscadorVias)||
                    (_buscador instanceof GEOPISTA.Busqueda.BuscadorPois)){
                        destruyeBuscador();
                    }
                    _buscador = new GEOPISTA.Busqueda.BuscadorPois(document.body, dojo.byId("txtPOIS").value, IE, interactuadorConUsuario);
                    _buscador.hazBusqueda(GEOPISTA.Busqueda.BOTON_NUEVA_BUSQUEDA);
                    
                /* 
                 _ultimoBuscador = GEOPISTA.Operacion.BUSCADOR_POIS;
                _buscadorPois  = new GEOPISTA.Busqueda.BuscadorPois(document.body, dojo.byId("txtPOIS").value, interactuadorConUsuario, IE);
                _buscadorPois.hazBusqueda(GEOPISTA.Busqueda.BOTON_NUEVA_BUSQUEDA);*/
                    
                    break;
                case GEOPISTA.Operacion.GET_FEATURE_INFO:
                    var posicion = _grupoElementosIconos.getIndexElementoIconoAPartirDeId(GEOPISTA.Visualizacion.ID_ICONO_GET_FEATURE_INFO);
                    _grupoElementosIconos.setElementoIconoActivo(posicion);
                    _gestorOperaciones.setOperacion(GEOPISTA.Operacion.GET_FEATURE_INFO);
                    break;
                    
                default:
                    //console.log("GEOPISTA.Visualizacion.InteractuadorConUsuario.realizaOperacion: id no valido:"+idOperacion);
                    break;
            }
        //}
    }
    
    irACoordenadasGetBBox = function(){
        //debugger;
        var campoTxtUTMX = document.getElementById("txtUTMX");
        var campoTxtUTMY = document.getElementById("txtUTMY");
        if(!isNaN(parseFloat(campoTxtUTMX.value))){
            if(!isNaN(parseFloat(campoTxtUTMY.value))){
                var centroUTMX = parseFloat(campoTxtUTMX.value);
                var centroUTMY = parseFloat(campoTxtUTMY.value);	
                var chincheta = new GEOPISTA.Operacion.Chincheta(GEOPISTA.Operacion.CHINCHETA_COORDENADAS);
                chincheta.utmX=centroUTMX;
                chincheta.utmY=centroUTMY;
                posicionaChincheta(chincheta);
            }else{
                alert("El valor de las coordenadas Y no es correcto, ha introducido:"+campoTxtUTMY.value);
            }
        }else{
            alert("El valor de las coordenadas X no es correcto, ha introducido:"+campoTxtUTMX.value);
        }
    }
    /*
     * Es público para el buscador
     */
    
    this.posicionarseSobreCoordenadas = function(chincheta){
        destruyeBuscador();
        // refrescamos el icono
        var idIconoActivo = _grupoElementosIconos.getIdElementoIconoActivo();
        _grupoElementosIconos.setElementoIconoActivo(idIconoActivo);
        posicionaChincheta(chincheta);
    }
    
    posicionaChincheta = function(chincheta){
        _gestorOperaciones.setOperacion(GEOPISTA.Operacion.IR_A_COORDENADAS);
        _gestorOperaciones.irACoordenadas(chincheta);
    }
    
    destruyeBuscador = function(){
        /*if(_ultimoBuscador==GEOPISTA.Operacion.BUSCADOR_POIS){
            _buscadorPois.hide();
            _buscadorPois.destroy();
            _buscadorPois = null;
        }else if(_ultimoBuscador==GEOPISTA.Operacion.BUSCADOR_VIAS){
            _buscadorVias.hide();
            _buscadorVias.destroy();
        }*/
        if(_buscador!=null){
            _buscador.hide();
            _buscador.destroy();
            _buscador = null;
        }
    }
}



/**buscador
 * 
 * @param {Object} idImg: El id del tag <img>
 * @param {Object} rutaImgOff: La ruta absoluta o relativa de la imagen cuando está desactivada
 * @param {Object} rutaImgOn: La ruta absoluta o relativa de la imagen cuando está activada
 * @param {boolean} activado: Campo booleano que indica si está activo o no el icono al inicio.
 * @param {Object} idIco: El identificador numérico asociado a ese icono. Es para identificar
 * el icono pasado. Por ejemplo ID_ICONO_ZOOM
 * @param {boolean} actiTemp: Si es true, el icono permanecerá activo mientras el mapa esté oculto.
 * Si es false, el icono permanecerá activo hasta que se pinche otro icono. Esto vale para los iconos
 * de movimiento, ayuntamiento y refresco.
 */


GEOPISTA.Visualizacion.ElementoIcono = function(idImg, rutaImgOff, rutaImgOn, idIco, activado, actiTemp){
    
    var _idImagenAsociada = idImg;
    var _rutaImagenOff = rutaImgOff;
    var _rutaImagenOn = rutaImgOn;
    var _activo = activado;
    var _idIcono = idIco;
    var _activacionTemporal = actiTemp;
    
    this.setActivo = function(activo){
        _activo = activo;
        //console.log("ElementoIcono.setActivo: valor de ")
    }
    
    this.isActivo = function(){
        return _activo;
    }
    /*
    this.getRutaImagenOn = function(){
        return _rutaImagenOn;
    }
    
    this.getRutaImagenOff = function(){
        return _rutaImagenOff;
    }*/
    
    this.refrescaImagen = function(){
        var miImagen = document.getElementById(_idImagenAsociada);
        if(_activo==true){
            miImagen.src=_rutaImagenOn;
        }else{
            miImagen.src=_rutaImagenOff;
        }
        //console.log(miImagen.src);
        //alert("refrescaImagen: activo:"+_activo);
    }
    
    this.getIdIcono = function(){
        return _idIcono;
    }
    
    this.isActivacionTemporal = function(){
        return _activacionTemporal;
    }
}



/*
 * Es una lista de ElementosIconos en la que sólo un elementoIcono puede estar _activo
 * Se usará para las imagenes de las operaciones
 */


GEOPISTA.Visualizacion.GrupoElementosIconos = function(){
    var _ElementosIcono = [];
    var _idElementoIconoActivo = -1;
    
    this.addElementoIcono = function(nuevoElemento, activado){
        if(nuevoElemento instanceof GEOPISTA.Visualizacion.ElementoIcono){
            if(activado==true){
                // si es el que está activado entonces desactiva el anterior
                // para dejar solo activo el ultimo elemento
                if(_idElementoIconoActivo>-1){
                    _ElementosIcono[_idElementoIconoActivo].setActivo(false);
                    _ElementosIcono[_idElementoIconoActivo].refrescaImagen();
                }
                // si no había ningún elemento activado entonces
                // por si acaso ponemos el nuevo como activo y cogemos su id
                nuevoElemento.setActivo(true);
                nuevoElemento.refrescaImagen();
                _ElementosIcono.push(nuevoElemento);
                _idElementoIconoActivo = _ElementosIcono.length-1;		
            }else{
                _ElementosIcono.push(nuevoElemento);
            }
        }
    }
    this.getIdElementoIconoActivo = function(){
        return _idElementoIconoActivo;
    }
    
    this.getIndexElementoIconoAPartirDeId = function(id){
        for(var i=0; i<_ElementosIcono.length; i++){
            if(_ElementosIcono[i].getIdIcono()==id){
                return i;
            }
        }
    }
    
    this.setElementoIconoActivo = function(posicion){
        //console.log("GEOPISTA.Visualizacion.GrupoElementosIconos.setElementoIconoActivo: idActual:"
        //+idElementoIconoActivo+" el posicion pasado es:"+posicion);
        if((posicion<_ElementosIcono.length)&&(posicion>-1)){
            // 1º comprobamos si hay algun elemento activado, si lo hay lo que hacemos es
            // desactivarlo
            if(_idElementoIconoActivo<0){
                _ElementosIcono[posicion].setActivo(true);
                _ElementosIcono[posicion].refrescaImagen();
                _idElementoIconoActivo = posicion;
            }else{
                if(_idElementoIconoActivo==posicion){
                    _ElementosIcono[posicion].setActivo(false);
                    _ElementosIcono[posicion].refrescaImagen();
                    _idElementoIconoActivo = -1;
                }else{
                    _ElementosIcono[_idElementoIconoActivo].setActivo(false);
                    _ElementosIcono[_idElementoIconoActivo].refrescaImagen();
                    _ElementosIcono[posicion].setActivo(true);
                    _ElementosIcono[posicion].refrescaImagen();
                    _idElementoIconoActivo = posicion;
                }
            }
        }
    }
    
    this.setElementoIconoActivoTemporal = function(posicion, activado){
        //console.log("GEOPISTA.Visualizacion.GrupoElementosIconos.setElementoIconoActivoTemporal: posicion:"+posicion+" activado:"+activado)
        
        if((posicion<_ElementosIcono.length)&&(posicion>-1)){
            // solo se activa si no tenemos ningun elemento activado
            // entonces tendremos el efecto de los mouseovers sobre las imagenes
            if(_idElementoIconoActivo==-1){
                _ElementosIcono[posicion].setActivo(activado);
                _ElementosIcono[posicion].refrescaImagen();
            }
        }	
    }
    
    this.refrescaElementoIcono = function (){
        //si tenemos un icono activo y además es de duración temporal
        if((_idElementoIconoActivo>-1)
        &&(_ElementosIcono[_idElementoIconoActivo].isActivacionTemporal()==true)){
            this.setElementoIconoActivo(_idElementoIconoActivo);
        }
    }
}


GEOPISTA.Visualizacion.GestorLeyendas = function(peticionesServidores, gestorOperaciones){
    // cacheamos el gestorOperaciones para que vaya m� r�ido el acceso, en vez de tener
    // que preguntarle al InteractuadorConUsuario
    var _gestorOperaciones = gestorOperaciones;
    var _leyendasConCapas = [];
    //debugger;
    
    // recorrer las peticiones y sacar las capas con la leyenda a la que van relacionada, de forma
    // que una leyenda puede tener una o varias capas, por ello se almacenar�en un vector.
    
    // cuando un checkbox de una leyenda est�seleccionado, todas sus capas asociadas lo estar�.
    for(var i=0; i<peticionesServidores.peticiones.length; i++){
        for (var j = 0; j<peticionesServidores.peticiones[i].capasYEstilos.length; j++){
            var _leyendaConCapa = new Object(); 
            _leyendaConCapa.capas = [];
            _leyendaConCapa.estilos = [];
            _leyendaConCapa.idLeyenda =  peticionesServidores.peticiones[i].capasYEstilos[j].idLeyenda;
            
            // si no tenemos ningun idLeyenda, entonces lo introducimos
            if(_leyendasConCapas.length==0){
                _leyendasConCapas.push(_leyendaConCapa);
                // comprobamos que el nuevoIdLeyenda no exista con los que tenemos
            }else{
                for(var k=0; k<_leyendasConCapas.length; k++){
                    if(_leyendasConCapas[k].idLeyenda == _leyendaConCapa.idLeyenda){
                        break;
                    }
                    // si hemos recorrido todas las leyendas que ten�mos almacenadas y no 
                    // coincide con ninguna, entonces la almacenamos
                    if(k==_leyendasConCapas.length-1){
                        _leyendasConCapas.push(_leyendaConCapa);
                    }
                }
            }
            //_leyendaConCapa.capa.push(peticionesServidores.peticiones[i].capasYEstilos[j].capa);
            //_leyendaConCapa.estilo.push(peticionesServidores.peticiones[i].capasYEstilos[j].estilo);
            //_leyendasConCapas.push(_leyendaConCapa);
        }
    }
    
    // tras saber las leyendas que tenemos, vamos a recorrer otra vez las peticionesServidores
    // para emparejar cada leyenda con su conjunto de capas y estilos
    //debugger;
    for(var i=0; i<_leyendasConCapas.length; i++){
        for(var j=0; j<peticionesServidores.peticiones.length; j++){
            for(var k = 0; k<peticionesServidores.peticiones[j].capasYEstilos.length; k++){
/*console.log("iteracion leyendasConCapas:"+i+" peticionesServidores:"+j+" capasYEstilos:"+k); 
console.log("capa:"+peticionesServidores.peticiones[j].capasYEstilos[k].capa);
console.log("estilo:"+peticionesServidores.peticiones[j].capasYEstilos[k].estilo);
console.log("idPeticion:"+peticionesServidores.peticiones[j].capasYEstilos[k].idPeticion);
console.log("idLeyenda:"+peticionesServidores.peticiones[j].capasYEstilos[k].idLeyenda);*/
                if(_leyendasConCapas[i].idLeyenda == peticionesServidores.peticiones[j].capasYEstilos[k].idLeyenda){
                    _leyendasConCapas[i].capas.push(peticionesServidores.peticiones[j].capasYEstilos[k].capa);
                    _leyendasConCapas[i].estilos.push(peticionesServidores.peticiones[j].capasYEstilos[k].estilo);
                    _leyendasConCapas[i].idPeticion = peticionesServidores.peticiones[j].idPeticion;
                }
            }
        }
    }
    
    /*
     * Se llama despu� de modelo.borrarCapasEstilos
     */
    
    this.setCapasYEstilosSeleccionadosAlControlador = function(evt){
        //        debugger;
        var capasYEstilosSeleccionados = [];
        // recorremos todos los checkbox de la capa Leyendas
        for(var i=0; i<_leyendasConCapas.length; i++){
            var cadenaChck = "chk"+_leyendasConCapas[i].idLeyenda;
            //console.log(cadenaChck);
            var chk = dojo.widget.byId(cadenaChck);
            if(chk.checked==true){
                for(var j=0; j<_leyendasConCapas[i].capas.length; j++){
                    var capaYEstiloSeleccionado = new Object();
                    capaYEstiloSeleccionado.capa = _leyendasConCapas[i].capas[j];
                    capaYEstiloSeleccionado.estilo = _leyendasConCapas[i].estilos[j];
                    capaYEstiloSeleccionado.idPeticion = _leyendasConCapas[i].idPeticion;
/*console.log("capas:"+_leyendasConCapas[i].capas[j]);
console.log("estilos:"+_leyendasConCapas[i].estilos[j]);
console.log("idPeticion:"+_leyendasConCapas[i].idPeticion);
console.log("el obj completo:"+capaYEstiloSeleccionado);
 */
                    capasYEstilosSeleccionados.push(capaYEstiloSeleccionado);
                }
            }
        }
        //return capasYEstilosSeleccionados;
        _gestorOperaciones.setCapasYEstilosSeleccionados(capasYEstilosSeleccionados);
    }
}



/*
 *
 *GET FEATURE INFO
 */

/**
 * A partir del combo html creará uno específico para Dojo. Leerá los datos y
 * le pasará al combo la capa (que es el "value" del combobox) y el textoAMostrar
 * que es el "text".
 *
 * Además se guardará internamente los datos pasados ya que estos tienen la relación
 * entre la capa y los campos que tiene dicha capa en el getFeatureInfo. para
 * pasárselos a InteractuadorConUsuario y este a gestorOperaciones, el cual
 * se lo dara a _operacion.
 */



GEOPISTA.Visualizacion.GestorComboFeatureInfo = function(combo, gestorOperaciones){
    var _widgetCombo = null;
    var _datosConCampos;
    var _gestorOperaciones = gestorOperaciones;
    //var _that = this;
    
    // inicializar el combo
    var _widgetCombo  = dojo.widget.createWidget("dojo:ComboBox", {name:"capasFeatureInfo",autocomplete:false}, combo);
    
    // Para el evento: 
    // cuando el usuario pinche en el mapa, el primero que se tiene que llamar es 
    // en el interactuadorConUsuario para que este llame al gestorComboFeatureInfo
    // al metodo getElementoConCampos. De esta forma tenemos la capa seleccionada
    // con los campos para el interactuadorConUsuario. Ahora el interactadorConUsuario
    // tiene que llamar al gestorOperaciones para que obtenga la URL y haga la
    // petición AJAX al servidor, obtenga la respuesta de éste y muestre
    // la tabla correspondiente
    
    //dojo.event.kwConnect({srcObj: _capaOperacion, srcFunc: "onClick", 
    //  adviceObj: interactuadorConUsuario ,adviceFunc:"getCapaFeatureInfo", once:true});
    // la funcion getCapaFeatureInfo de interactuadorConUsuario llamará al
    // GestorComboFeatureInfo.getElementoConCampos
    
    this.setDatos = function(datos){
        var datosDelComboBox = [];
        var elementoSeleccionado = null;
        for(var i=0; i<datos.capas.length; i++){
            var dato = [];
            dato.push(datos.capas[i].textoAMostrar);
            dato.push(datos.capas[i].capa);
            if(datos.capas[i].seleccionado==true){
                elementoSeleccionado = dato;
            }
            datosDelComboBox.push(dato);
        }
        _widgetCombo.dataProvider.setData(datosDelComboBox);
        if(elementoSeleccionado!=null){
            _widgetCombo.setAllValues(elementoSeleccionado[0], elementoSeleccionado[1]);
        }
        // para mantener todas las relaciones de los campos con el elemento seleccionado
        _datosConCampos = datos;
    }
    
    
    this.setCapaYCamposFeatureInfoAlControlador = function(){
        // Esta enlazado antes de que se llame a _gestorOperaciones.getFeatureInfo()
        var elementoConCampos = new Object();
        for(var i=0; i<_datosConCampos.capas.length; i++){
            //debugger;
            if(_datosConCampos.capas[i].capa == 
            _widgetCombo.comboBoxSelectionValue.value){
                elementoConCampos = new Object();
                elementoConCampos.capa = _widgetCombo.comboBoxSelectionValue.value;
                elementoConCampos.campos = [];
                // pasamos los campos al elemento
                for(var j=0; j<_datosConCampos.capas[i].campos.length; j++){
                    elementoConCampos.campos.push(_datosConCampos.capas[i].campos[j]);
                }
                // como hemos encontrado la capa salimos del bucle
                break;
            }
        }
        _gestorOperaciones.setCapaYCamposFeatureInfo(elementoConCampos.capa, 
        elementoConCampos.campos);
    }
}
