var req,objForm,ventanaEmergente,mapaInicialTraslado,descripcionVerMapaInicialTraslado;

/**
 * Este método se encarga de inicialiar el objeto q realizará el XmlHttpRequest
 * @param string url. Cadena con la url de la parte servidora a cargar
 */
function setValoresReq(url){
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }
	//La función open no empieza la operación, sólo prepara el objeto.
	//El tercer parámetro es un booleano: true siginifica comunicación
	//con la url (normalmente parte servidora) en forma asíncrona, false en
	//forma síncrona
    req.open("GET", url, true);
}

/**
 * Este método se encarga de realizar la petición a un servlet para mover el 
 * mapa obtenido por michelin.
 * @param Form objForm. Formulario
 */
function moverMapaMichelin(nombreFormulario,origen,destino,paisOrigen,paisDestino,vAccionesSobreMapa,vValoresAccionesSobreMapa,latitud,longitud,buscarPor,direccionOrigen,direccionDestino,codigoPostalOrigen,codigoPostalDestino,numeroPasajeros,descripcionVerMapaInicial,descripcionProcesando,salidaDesde){

	document.getElementById("cargandoMapaMichelin").src = "/img/elementos/reloj.gif";
	document.getElementById("procesando").innerHTML = descripcionProcesando+"...";
	objForm = document.forms[nombreFormulario];
	objForm.accionesSobreMapa.value += vAccionesSobreMapa+"*";
	objForm.valoresAccionesSobreMapa.value += vValoresAccionesSobreMapa+"*";
	url  =  '/ajax/util.php?metodo=MOVERMAPA&origen='+origen+'&destino='+destino+'&paisOrigen='+paisOrigen+'&paisDestino='+paisDestino+'&accionesSobreMapa='+objForm.accionesSobreMapa.value+'&valoresAccionesSobreMapa='+objForm.valoresAccionesSobreMapa.value+'&poblacionesEncontradas='+destino+'&latitud='+latitud+'&longitud='+longitud+'&buscarPor='+buscarPor+'&direccionOrigen='+direccionOrigen+'&direccionDestino='+direccionDestino+'&codigoPostalOrigen='+codigoPostalOrigen+'&codigoPostalDestino='+codigoPostalDestino+'&numeroPasajeros='+numeroPasajeros+'&salidaDesde='+salidaDesde;
	setValoresReq(url);
	mapaInicialTraslado = objForm["pathImagenRuta"].value;
	descripcionVerMapaInicialTraslado=descripcionVerMapaInicial;
    req.onreadystatechange = moverMapaMichelinXmlHttpRequest;
	//Con la función send es cuando empieza el proceso de comunicación
    req.send(null);
}

/**
 * Este método se encarga de realizar la petición a un servlet para mover el 
 * mapa obtenido por michelin.
 * @param Form objForm. Formulario
 */
function moverPlanoMichelin(nombreFormulario,poblacion,direccion,codPostal,provincia,paisCodigoISOAlpha3,vAccionesSobreMapa,vValoresAccionesSobreMapa,urlMapaInicial,descripcionVerMapaInicial,descripcionProcesando){

	document.getElementById("cargandoMapaMichelin").src = "/img/elementos/reloj.gif";
	document.getElementById("procesando").innerHTML = descripcionProcesando+"...";
	objForm = document.forms[nombreFormulario];
	objForm.accionesSobreMapa.value += vAccionesSobreMapa+"*";
	objForm.valoresAccionesSobreMapa.value += vValoresAccionesSobreMapa+"*";
	url  =  '/ajax/util.php?metodo=PLANODIRECCION&poblacion='+poblacion+'&direccion='+direccion+'&codPostal='+codPostal+'&provincia='+provincia+'&paisCodigoISOAlpha3='+paisCodigoISOAlpha3+'&accionesSobreMapa='+objForm.accionesSobreMapa.value+'&valoresAccionesSobreMapa='+objForm.valoresAccionesSobreMapa.value;
	setValoresReq(url);
	mapaInicialTraslado=urlMapaInicial;
	descripcionVerMapaInicialTraslado=descripcionVerMapaInicial;
    req.onreadystatechange = moverMapaMichelinXmlHttpRequest;
	//Con la función send es cuando empieza el proceso de comunicación
    req.send(null);
}

/**
 * Este método preselecciona el pais del destino en la búsqueda avanzada
 * una vez se ha elegido el aeropuerto.
 * @param Form objForm. Formulario
 */
function preselCodigoISOAlpha3PaisDesdeAeropuertoEnBusquedaAvanzada(form){

	objForm = form;
	url  =  '/ajax/util.php?metodo=BUSCARCODIGOISOALPHA3AEROPUERTO&aeropuerto='+objForm.origen.options[objForm.origen.selectedIndex].value;
	setValoresReq(url);
    req.onreadystatechange = preselCodigoISOAlpha3;
	//Con la función send es cuando empieza el proceso de comunicación
    req.send(null);
}

/**
 * Este método se encarga de crear el objeto XMLHttpRequest dependiendo del
 * tipo de navegador. Se llama desde el html, capturando para ello el evento deseado
 * @param string valor. Cadena metida en el campo de texto. Texto a validar
 */
function loadXMLDoc(nombreFormulario) {

	objForm = document.forms[nombreFormulario];
	valor = document.forms[nombreFormulario].destino.value;
	url  =  '/ajax/util/busquedaPoblacionesPorSimilitudDeNombre.php?idOrigen='+objForm.origen.options[objForm.origen.selectedIndex].value+'&poblacion=' + escape(valor);
	setValoresReq(url);
    req.onreadystatechange = procesarXmlResultado;
	//Con la función send es cuando empieza el proceso de comunicación
    req.send(null);
}

/**
 * Este método se encarga de crear el objeto XMLHttpRequest dependiendo del
 * tipo de navegador. Se llama desde el html, capturando para ello el evento deseado
 * Preseleccionamos en el combo, el país devuelto en el xml
 */
function moverMapaMichelinXmlHttpRequest(){
	
	//El valor 4 indica que la carga de datos ha sido completa
    if (req.readyState == 4) {
        //Indica que la url existe
        if (req.status == 200) {
	        // ...processing statements go here...
		    response  = req.responseXML.documentElement;
			//Aqui se utiliza DOM (Modelo de Objetos de documento), se encarga
			//de presentar los datos estructurados como podría ser páginas xml o html
			urlMapa = response.getElementsByTagName("url");
			//Si se encuentra mapa, lo asigno a la imagen
			if(urlMapa[0].firstChild.data!=''){
				document.getElementById('mapaMichelin').src = urlMapa[0].firstChild.data;
				//ventanaEmergente.close() 
				document.getElementById("cargandoMapaMichelin").src = "/img/elementos/reloj.gif";
				document.getElementById("procesando").innerHTML = "";
				document.getElementById('mostrarMapaInicial').innerHTML = "<a href=\"javascript:onclick=mostrarMapaInicialTraslado('formulario','"+mapaInicialTraslado+"')\">"+descripcionVerMapaInicialTraslado+"</a>";
			}
		}
	}
}


/**
 * Este método se encarga de crear el objeto XMLHttpRequest dependiendo del
 * tipo de navegador. Se llama desde el html, capturando para ello el evento deseado
 * Preseleccionamos en el combo, el país devuelto en el xml
 */
function preselCodigoISOAlpha3(){
	
	//El valor 4 indica que la carga de datos ha sido completa
    if (req.readyState == 4) {
        //Indica que la url existe
        if (req.status == 200) {
	        // ...processing statements go here...
		    response  = req.responseXML.documentElement;
			//Aqui se utiliza DOM (Modelo de Objetos de documento), se encarga
			//de presentar los datos estructurados como podría ser páginas xml o html
			poblaciones = response.getElementsByTagName("codigoISOAlpha3Pais");
			for (var x = 0; x < objForm.isoAlpha3.length; x++) {
				if(poblaciones[0].firstChild.data == objForm.isoAlpha3.options[x].value){
					objForm.isoAlpha3.options[x].selected = true;
					break;
				}
			}
		}
	}
}

/**
 * Esta función se encarga de procesar el xml recibido de la parte servidora.
 * Para ello se comprueba antes q la carga del script se haya hecho correctamente
 * y que la url indicada exista. Si todo está correcto, se llama a la funcióm
 * imprimir resultado, encarga de mostrar en el html el resultado final
 */
function procesarXmlResultado(){

	//El valor 4 indica que la carga de datos ha sido completa
    if (req.readyState == 4) {
        //Indica que la url existe
        if (req.status == 200) {
	        // ...processing statements go here...
		    response  = req.responseXML.documentElement;
			//Aqui se utiliza DOM (Modelo de Objetos de documento), se encarga
			//de presentar los datos estructurados como podría ser páginas xml o html
			poblaciones = response.getElementsByTagName("poblacion");

			//Primero limpiamos los posibles valores anteriores
			for(x=0; x<100; x++){
				document.getElementById("pais"+x).innerHTML = "";
				document.getElementById("provincia"+x).innerHTML = "";
				document.getElementById("nombrePoblacion"+x).innerHTML = "";
				document.getElementById("id"+x).innerHTML = "";
				document.getElementById("longitud"+x).innerHTML = "";
				document.getElementById("latitud"+x).innerHTML = "";
				document.getElementById("km"+x).innerHTML = "";
				document.getElementById("mapa"+x).innerHTML = "";
				document.getElementById("michelin"+x).innerHTML = "";
			}

			//Insertamos los valores obtenidos 
			//(innerHTML da problemas en Mozilla4 pero es mucho más rápido en el resto)
			for(x=0,numPoblaciones = response.getAttribute("num"); x<numPoblaciones; x++){

				document.getElementById("pais"+x).innerHTML = poblaciones[x].getAttribute("pais");
				document.getElementById("provincia"+x).innerHTML = poblaciones[x].getAttribute("provincia");
				document.getElementById("nombrePoblacion"+x).innerHTML = poblaciones[x].getAttribute("nombre");
				document.getElementById("id"+x).innerHTML = poblaciones[x].getAttribute("id");
				document.getElementById("longitud"+x).innerHTML = poblaciones[x].getAttribute("longitud");
				document.getElementById("latitud"+x).innerHTML = poblaciones[x].getAttribute("latitud");
				document.getElementById("km"+x).innerHTML = poblaciones[x].getAttribute("km");
				document.getElementById("mapa"+x).innerHTML = poblaciones[x].getAttribute("nombre");
				document.getElementById("michelin"+x).innerHTML = poblaciones[x].getAttribute("busquedaMichelin");

				//Utilizando DOM (falta sabes como limpiar esos campos :-S )
/*				document.getElementById("poblacion"+x).appendChild(document.createTextNode(poblaciones[x].getAttribute("nombre")));
				document.getElementById("id"+x).appendChild(document.createTextNode(poblaciones[x].getAttribute("id")));
				document.getElementById("km"+x).appendChild(document.createTextNode(poblaciones[x].getAttribute("nombre")));
				document.getElementById("mapa"+x).appendChild(document.createTextNode(poblaciones[x].getAttribute("nombre")));
*/
			}
        } else {
            alert("There was a problem retrieving the XML data:\n" + req.statusText);
        }
    }
}
