﻿/* 
  Fichero: general.js                        Fecha: 04-12-2007   

  Proyecto: Predecan

  Copyright (c) 2007 IVER T.I.
  C/ Lerida 20, 46009 Valencia, España
  Todos los derechos reservados
 
  Módulo:  

  Descripcion: Fichero de javascript con utilidades varias.

  Autor: Manuel de Frutos Vila

  Version 1.0  03-11-2007  Manuel de Frutos Vila
          	   Creacion del fichero para los javascript de uso general de la web.
          2.0	26-02-2008	Manuel de Frutos Vila
          		Añadimos extjs loadMask para el div cargando.
          		Añadimos la funcion resetCheckbox para limpiar los checkboxes de resultados en cada cambio de pestaña a resultados
          2.1	14-03-2008	Manuel de Frutos Vila
          		Añadida funcion para mostrar el div de las noticias RSS
          3.0	27-03-2008	Manuel de Frutos Vila
          		Cambios en tabs para adaptar el nuevo diseño
          4.0	20-06-2008	Manuel de Frutos Vila
          		Cambios para la fase 2: cargar minimap, ocultar criterios, tabs visibles 
          4.1	01-07-2008	Luis Ruiz
          		Capturar tecla ENTER en buscar
          4.2	21-08-2008	Manuel de Frutos Vila
          		Botón Ayuda temas  
          
 */
 
//var urlImagenes = 'images/'; //URL del directorio de las imagenes --> FICHERO CONST.JS

//---------------------------------------------------------------------------------
// Objeto para peticiones AJAX 
//---------------------------------------------------------------------------------
function objetus() {
    try {
        objetus = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            objetus= new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            objetus= false;
        }
    }
    if (!objetus && typeof XMLHttpRequest!='undefined') {
        objetus = new XMLHttpRequest();
        objetus.overrideMimeType("text/xml");
    }
    return objetus;
}
http = objetus();

function onLoadPredecan(){
	preloadImages(); //precarga de imagenes
	cargarVisor(); //asignacion URLs de los iframes
	cargarFenomenos(); //carga de las select de fenomenos
	seleccionarPais(); //Selecciona el pais actual en el combo
}

//---------------------------------------------------------------------------------
//changeImages: Cambia el src de una imagen dado su id
//---------------------------------------------------------------------------------
function changeImages(id, src) {
	if (document.images && (preloadFlag == true)) {
		//document.getElementById(id).src = urlImagenes + src;
		Ext.getDom(id).src = urlImagenes + src;
	}
}

//para cambiar las imagenes del boton en resultados de ver metadatos
function cambiarBotonOver(id, src){
	return function() {
		changeImages(id, src);
	}
}

//---------------------------------------------------------------------------------
//preloadImages + newImage: Precarga de imagenes
//---------------------------------------------------------------------------------
function newImage(arg) {
	if (document.images) {
		rslt = new Image();
		rslt.src = arg;
		return rslt;
	}
}
		
var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		tabFondo = newImage(urlImagenes + "tabFondo.png");
		tabBusqueda = newImage(urlImagenes + "tabBusqueda.png");
		tabResultados = newImage(urlImagenes + "tabResultados.png");
		tabVisor = newImage(urlImagenes + "tabVisor.png");
		tabBusquedaFondo = newImage(urlImagenes + "tabBusquedaFondo2.png");
		tabBusquedaPalabras = newImage(urlImagenes + "tabBusquedaPalabras2.png");
		tabBusquedaTemas = newImage(urlImagenes + "tabBusquedaTemas2.png");
		tabBusquedaPreguntas = newImage(urlImagenes + "tabBusquedaPreguntas2.png");
		tabResultadosDocumentos = newImage(urlImagenes + "tabResultadosDocumentos.png");
		tabResultadosMapas = newImage(urlImagenes + "tabResultadosMapas.png");
		
		buscar = newImage(urlImagenes + "buscar.png");
		buscar_activo = newImage(urlImagenes + "buscar_activo.png");
		
		criteriosOcultar = newImage(urlImagenes + "criteriosOcultar.png");
		flechaArriba = newImage(urlImagenes + "flechaArriba.png");
		criteriosAgregar = newImage(urlImagenes + "criteriosAgregar.png");
		flechaAbajo = newImage(urlImagenes + "flechaAbajo.png");
		
		result_mostrarEnVisor_over = newImage(urlImagenes + "result_mostrarEnVisor-over.png");
		result_mostrarEnVisor = newImage(urlImagenes + "result_mostrarEnVisor.png");
		result_verMetadatos = newImage(urlImagenes + "result_verMetadatos.png");
		result_verMetadatos_over = newImage(urlImagenes + "result_verMetadatos-over.png");
		
		preloadFlag = true;
	}
}

//---------------------------------------------------------------------------------
//selectPais: Cambia el texto del pais segun se cambie de bandera
//---------------------------------------------------------------------------------
function selectPais(pais){
	document.getElementById("menuBanderasTxt").innerHTML = pais;
}

//---------------------------------------------------------------------------------
//tabs: Control de los tabs: Busqueda, Resultados y Visor
//---------------------------------------------------------------------------------
var tabResultadosActivo = "mapas"; //variable pasa saber que tab de resultados se ha quedado activo
var flag_visor = false;
function tabs(id){
	/*var busqueda = document.getElementById("busqueda");
	var resultados = document.getElementById("resultados");
	var visor = document.getElementById("visor");
	var tab = document.getElementById("tabPpal");*/
	var busqueda = Ext.getDom("busqueda");
	var resultados = Ext.getDom("resultados");
	var visor = Ext.getDom("visor");
	var tab = Ext.getDom("tabPpal");
	var portalGeoRiesgo = Ext.getDom("portalGeoRiesgo");
	
	busqueda.style.display = "none";
	resultados.style.display = "none";
	visor.style.display = "none";
	portalGeoRiesgo.style.display = "none"; 

	switch (id){
		case "busqueda":
			changeImages("tabPpal", "tabBusqueda.png");
			busqueda.style.display = "block";
			portalGeoRiesgo.style.display = "block";
			break;
			
		case "resultados":
			changeImages("tabPpal", "tabResultados.png");
			resetCheckbox("resultados");
			resultados.style.display = "block"; 
			tabsResultados(tabResultadosActivo);
			break;
		
		case "visor":
			changeImages("tabPpal", "tabVisor.png");
			visor.style.display = "block";
			
			//Si es FF y es la primera vez que entramos al visor, lo recargamos por el bug
			if (!document.all && !flag_visor){
				//Ext.getDom("iframeVisor").contentWindow.config.objects.reset.select();
				//Ext.getDom("iframeVisor").contentWindow.config.loadModel("mainMap", "data/context/general.xml"); 
				//cargarVisor();
				Ext.getDom("iframeVisor").contentWindow.config.callListeners("loadModel");								
				flag_visor = true;
			}
			break;
	}
}


//---------------------------------------------------------------------------------
//tabsBusqueda: Al pinchar sobre los radio button de metodos de busqueda muestra el tipo 
//	de busqueda seleccionado en el div de la derecha (¿QUE?)
//---------------------------------------------------------------------------------
function tabsBusqueda(id){
	/*var busqClave = document.getElementById("busqClave");
	var busqTema = document.getElementById("busqTema");
	var busqAsist = document.getElementById("busqAsist");*/
	var busqClave = Ext.getDom("busqClave");
	var busqTema = Ext.getDom("busqTema");
	var busqAsist = Ext.getDom("busqAsist");
	
	busqClave.style.display = 'none';
	busqTema.style.display = 'none';
	busqAsist.style.display = 'none';
	
	switch(id){		
		case 'clave':
			busqClave.style.display = 'block';
			changeImages("tabsBusquedaImg", "tabBusquedaPalabras2.png");
			limpiaFenomenos();
			break;
			
		case 'temas':
			busqTema.style.display = 'block';
			changeImages("tabsBusquedaImg", "tabBusquedaTemas2.png");
			
			/*Ext.getDom("selProcesDiv").style.display = 'block';
			Ext.getDom("selFenom").style.display = 'block';
			Ext.getDom("selProces").style.display = 'block';*/
			
			limpiaFenomenos();
			ListasTematicas();
			//document.getElementById('divInforme').innerHTML = '';
			Ext.getDom("divInforme").style.display = 'none';
			Ext.getDom("divInformeTitulo").style.display = 'none';
			break;
			
		case 'asistida':
			busqAsist.style.display = 'block';
			changeImages("tabsBusquedaImg", "tabBusquedaPreguntas2.png");
			
			limpiaFenomenos();
			ListasAsistidas();
			//document.getElementById('divResultAsist').innerHTML = '';
			Ext.getDom("divResultAsist").style.display = 'none';
			Ext.getDom("divResultAsistTitulo").style.display = 'none';
			break;
	}
}

//---------------------------------------------------------------------------------
//tabsResultados: Control de los sub tabs de Resultados: Capas, Archivos y Mapas
//---------------------------------------------------------------------------------
function tabsResultados(id){
	//Suspicious Mind
	var mapas = Ext.getDom("resultadosMapas");
	var documentos = Ext.getDom("resultadosDocumentos");
	var tabsResultados = Ext.getDom("tabsResultadosImg");

	tabResultadosActivo = id;
	
	mapas.style.display = "none";
	documentos.style.display = "none";
	
	switch (id){
		case "mapas":
			mapas.style.display = "block";
			tabsResultados.style.display = "block";
			changeImages("tabsResultadosImg", "tabResultadosMapas.png");
			//Ext.DomHelper.overwrite('resultadosContCabeceraTxt', 'Seleccione los mapas deseados y pulse el bot&oacute;n para a&ntilde;adirlos al visor geogr&aacute;fico');
			Ext.getDom('resultadosContCabeceraMapas').style.display = 'block';
			Ext.getDom('resultadosContCabeceraDocumentos').style.display = 'none';
			break;
			
		case "documentos":
			documentos.style.display = "block";
			tabsResultados.style.display = "block";
			changeImages("tabsResultadosImg", "tabResultadosDocumentos.png");
			//Ext.DomHelper.overwrite('resultadosContCabeceraTxt', 'Pulse sobre el t&iacute;tulo de los documentos para acceder a ellos');
			Ext.getDom('resultadosContCabeceraMapas').style.display = 'none';
			Ext.getDom('resultadosContCabeceraDocumentos').style.display = 'block';
			break;
			
		default:
			tabsResultados.style.display = "none";
			break;
	}
}

//---------------------------------------------------------------------------------
//tabsBusqueda: Al pinchar sobre los radio button de metodos de busqueda muestra el tipo 
//	de busqueda seleccionado en el div de la derecha (QUE?)
//---------------------------------------------------------------------------------
function tabsEstadisticas(id){
    var tema = document.getElementById("tema");
    var freq = document.getElementById("freq");
    /*var tema = Ext.getDom("tema");
    var freq = Ext.getDom("freq");*/
   
    tema.style.display = 'none';
    freq.style.display = 'none';
   
    switch(id){
        case 'tema':
            tema.style.display = 'block';
            changeImages("tabsBusquedaImg","tabEstadisticasBusquedaTemas.png");
           
            break;
           
        case 'freq':
            freq.style.display = 'block';
            changeImages("tabsBusquedaImg","tabEstadisticasBusquedaPreguntas.png");
           
            break;
    }
}

//---------------------------------------------------------------------------------
//resetCheckbox: funcion que busca input type checkbox y los desmarca 
//---------------------------------------------------------------------------------
function resetCheckbox(div){
	div = document.getElementById(div);
	var inputs = div.getElementsByTagName("input");
	
	var max = inputs.length;
	//Si hay inputs
	if (max > 0){
		//recorremos los punts
		for (var i=0; i < max; i++){
			var input = inputs[i];
			//Si no es checkbox pasamos al siguiente
			if (input.type != "checkbox") continue;
			//Si es checkbox lo reseteamos
			input.checked = false;
		}
	}
}

//Funcion que elimina espacios de una cadena
function trim(cad) {
	while(cad.charAt(0)==" ") cad=cad.substring(1,cad.length);
	while(cad.charAt(cad.length-1)==" ") cad=cad.substring(0,cad.length-1);
	return cad;
}


//Funcion que se lanza en el onload e indica las url del iframe del visor
function cargarVisor(){
	document.getElementById('iframeVisor').src = urlIDESiapad;
	//Ext.getDom("iframeVisor").src = urlIDESiapad;
}

//Funcion que carga la url del iframe del minimap
function cargarMiniMap(){
	//document.getElementById('iframeDonde').src = urlMiniMap;
	var minimap = Ext.getDom("iframeDonde");
	if (minimap.src != urlMiniMap)
		minimap.src = urlMiniMap;
}


//Mostrar mascara cargando
function mostrarCargando(){
	cargando.show();
}
//Ocultar máscara cargando
function ocultarCargando(){
	cargando.hide();
}

function alerta(id){
	
	id = id + "Cont";
	
	if (id=="expresionCont"){
		
		var txt = Ext.getDom(id).value;
		//var txt = document.getElementById(id).value;
		
		// Show a dialog using config options:
		Ext.Msg.show({
		   title:'Expresión',
		   msg: txt,
		   //buttons: Ext.Msg.YESNOCANCEL,
		   //fn: processResult,
		   animEl: 'resultadosCabecera',
		   icon: Ext.MessageBox.INFO
		});
	}
	else if (id=="peticionCont"){
		
		//var xml = '<?xml version="1.0" encoding="UTF-8"?>';
		var xml = Ext.getDom(id).value;
		
		var parametro_post = 'xml='+xml;
		var proxyUrl= servidor_local + '/predecan/crearXml';
		
	    http.open("POST",proxyUrl, true);
	    ocultarCargando();
   		http.setRequestHeader("content-type","application/x-www-form-urlencoded");
   		http.onreadystatechange = handleMetadato;
   		http.send(parametro_post);
	}
}

function alertaError(txt){
	Ext.Msg.show({
		title: 'Error',
		msg: txt,
		buttons: Ext.Msg.OK,
		icon: Ext.MessageBox.WARNING
	});
}

function alertaInfo(id, txt){
	Ext.Msg.show({
		   title:'Información',
		   msg: txt,
		   //buttons: Ext.Msg.YESNOCANCEL,
		   //fn: processResult,
		   animEl: id,
		   buttons: Ext.Msg.OK,
		   icon: Ext.MessageBox.INFO
		});
}

//Para mostrar el div con el contenido de las noticias RSS
function ocultarLoadingRSS(){
	Ext.getDom("loadingRSS").style.display = "none";
	Ext.getDom("contenidoRSS").style.display = "block";
}

//Para mostrar u ocultar el div con los criterios de búsqueda
var flag_criterios = false
function mostrarOcultarCriterios(){
	if (!flag_criterios){
		Ext.getDom("criterios").style.display = "block";
		Ext.getDom("portalGeoRiesgo").style.display = "none";
		cargarMiniMap();
		changeImages("criteriosImg", "criteriosOcultar.png");
		changeImages("criteriosFlecha", "flechaArriba.png");
		Ext.getDom("criteriosEnlace").title = "Oculta las opciones de los criterios de búsqueda";
		flag_criterios = true;
	}
	else{
		Ext.getDom("criterios").style.display = "none";
		Ext.getDom("portalGeoRiesgo").style.display = "block";
		changeImages("criteriosImg", "criteriosAgregar.png");
		changeImages("criteriosFlecha", "flechaAbajo.png");
		Ext.getDom("criteriosEnlace").title = "Desplega las opciones de los criterios de búsqueda";
		flag_criterios = false;
	}
}

//Funcion que captura evento de teclado para saber si se ha pulsado la tecla enter
function tecla(evt){
	var key = nav4 ? evt.which : evt.keyCode;
	if (key ==  13){
		busquedaCatalogo();
	}
}

// Current Page Reference
// copyright Stephen Chapman, 1st Jan 2005
// you may copy this function but please keep the copyright notice with it
/* 
 * Example: http://javascript.about.com/library/blurl1.htm?id=1
 * domain (uri.dom) : "javascript.about.com"
 * path (uri.path) : "library"
 * page (uri.page) : "blurl1"
 * extension (uri.ext) : "htm"
 * filename (uri.file) : "blurl1.htm"
 * arguments (uri.arg) : "id=1"
 */
function getURL() {
	var uri = new Object();
	
	uri.dir = location.href.substring(0, location.href.lastIndexOf('\/'));
	
	uri.dom = uri.dir; 
	if (uri.dom.substr(0,7) == 'http:\/\/') 
		uri.dom = uri.dom.substr(7);
		
	uri.path = ''; 
	var pos = uri.dom.indexOf('\/'); 
	if (pos > -1) {
		uri.path = uri.dom.substr(pos+1); 
		uri.dom = uri.dom.substr(0,pos);
	}
	
	uri.page = location.href.substring(uri.dir.length+1, location.href.length+1);
	pos = uri.page.indexOf('?');
	if (pos > -1) 
		uri.page = uri.page.substring(0, pos);
	pos = uri.page.indexOf('#');
	if (pos > -1) 
		uri.page = uri.page.substring(0, pos);
		
	uri.ext = ''; 
	pos = uri.page.indexOf('.');
	if (pos > -1) {
		uri.ext =uri.page.substring(pos+1); 
		uri.page = uri.page.substr(0,pos);
	}
	
	uri.file = uri.page;
	if (uri.ext != '') 
		uri.file += '.' + uri.ext;
	if (uri.file == '') 
		uri.page = 'index';
		
	uri.args = location.search.substr(1).split("?");
	
	return uri;
}

//Funciones que realiza la carga de fenomenos en las select
function cargarFenomenos(){
	var proxyUrl='/predecan/listFenomenos';
	http.open("GET",proxyUrl, true);
	http.setRequestHeader("content-type","application/x-www-form-urlencoded");
	http.onreadystatechange = handleListFenomenos;
	http.send(null);
}
function handleListFenomenos(){
	switch (http.readyState){
    	case 1:
    	case 2:
    	case 3:
	 		//mostrarCargando();
	 	break;
        case 4:
        	xmlRes = http.responseXML;  
            var resultados = xmlRes.getElementsByTagName("List")[0];
            
			var numFenomenos = resultados.getElementsByTagName("Fenomeno").length;
			
			for (i=0; i<numFenomenos; i++){
		    	var fenomeno = resultados.getElementsByTagName("Fenomeno").item(i);
		        var nombre = fenomeno.getElementsByTagName("nombre").item(0).firstChild.data;
		        var id = fenomeno.getElementsByTagName("id").item(0).firstChild.data;			        
		        if (fenomeno.getElementsByTagName("expresion").item(0).firstChild != null){
			        var expr = fenomeno.getElementsByTagName("expresion").item(0).firstChild.data;
			    }else{
			    	var expr = "";
			    }
		        opt = document.createElement('option');
				opt.value = "fenom" + id;
				opt.id = "fenom" + id;				
				txt = document.createTextNode(nombre + ' ');				
				opt.appendChild(txt);
				input = document.createElement("input");
				input.id = "exprfen" + id;
				input.type = "hidden";
				input.value = expr;
				opt.appendChild(input);
				opt2=opt.cloneNode(true);
				document.getElementById('selFenom').appendChild(opt);
				document.getElementById('selFenomTemas').appendChild(opt2);
		    }
		    
		    //ocultarCargando();
		break;
		case 0:
            Ext.MessageBox.alert('Error','En la conexión con la BD');
        break;    
	}
}

//Funcion que selecciona la misma opcion en los combos selFenom y selFenomTemas
function seleccionarFenomenos(select){
	var seleccionado = select.selectedIndex;
	Ext.getDom("selFenom").selectedIndex = seleccionado;
	Ext.getDom("selFenomTemas").selectedIndex = seleccionado;
}

//Funcion que borra la seleccion de los fenomenos
function limpiaFenomenos(){
	Ext.getDom("selFenom").selectedIndex = 0;
	Ext.getDom("selFenomTemas").selectedIndex = 0;
}

//Funcion que selecciona el pais actual en el combo
function seleccionarPais(){
	var indice = 0;
	switch(pais){
		case "Bolivia":
			indice = 0;
			break;
		case "Colombia":
			indice = 1;
			break;
		case "Ecuador":
			indice = 2;
			break;
		case "Peru":
			indice = 3;
			break;
		default:
			break;
	}
	Ext.getDom("selPais").selectedIndex = indice;
}

//Funcion que selecciona el pais actual en el combo
function cambiarPais(indice){
	document.location.href = urlPais[indice]
}

//carga paginas de forma asincrona
function llamarasincrono (url, id_contenedor)
{
    var pagina_requerida = false;
    if (window.XMLHttpRequest)
    {
        // Si es Mozilla, Safari etc
        pagina_requerida = new XMLHttpRequest ();
    } else if (window.ActiveXObject)
    {
        // pero si es IE
        try 
        {
            pagina_requerida = new ActiveXObject ("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            // en caso que sea una versión antigua
            try
            {
                pagina_requerida = new ActiveXObject ("Microsoft.XMLHTTP");
            }
            catch (e)
            {
            }
        }
    } 
    else
    return false;
    pagina_requerida.onreadystatechange = function ()
    {
        // función de respuesta
        cargarpagina (pagina_requerida, id_contenedor, url);
    }
    pagina_requerida.open ('GET', url, true); // asignamos los métodos open y send
    pagina_requerida.send (null);
}

function cargarpagina (pagina_requerida, id_contenedor, url)
{
    if (pagina_requerida.readyState == 4 && (pagina_requerida.status == 200 || window.location.href.indexOf ("http") == - 1))
    document.getElementById (id_contenedor).innerHTML = pagina_requerida.responseText;   
}


//---------------------------------------------------------------------------------
//Funciones para componer y enviar mail, a partir del form 
//---------------------------------------------------------------------------------

function nuevoAjax()
{ 
	var xmlhttp=false; 
	try 
	{ 
		// No IE
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
	}
	catch(e)
	{ 
		try
		{ 
			// IE 
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
		} 
		catch(E) { xmlhttp=false; }
	}
	if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); } 
	return xmlhttp; 
}

function validarForm(){
	
	var lista = document.getElementById("lista").value;
	var comentario = document.getElementById("comentario").value;
	var nombre = document.getElementById("nombre").value;
	var institucion = document.getElementById("institucion").value;
	var contacto = document.getElementById("contacto").value;
	urlDestino="http://peru.georiesgo.net/predecan/sendmail";
	
	var ajax=nuevoAjax();
	ajax.open("POST", urlDestino, true);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.send("&lista="+lista+"&comentario="+comentario+"&nombre="+nombre+"&institucion="+institucion+"&contacto="+contacto);
	
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
			var respuesta=ajax.responseText;
			if(respuesta=="OK"){
				var texto="<br>Gracias por su mensaje.<br><br>";
			}
			else 
			alert(urlDestino);
				var texto="<br>Error: intente más tarde.<br><br>";
			alert(texto);
		}
	}
}

function enviaform(){
	document.getElementById("form").submit();

}