
var urlServidor, idComisionista, order, fechaInicioBusqueda, fechaFinBusqueda, matriz, buscarFechaPor;
var arrayPaises = new Array();
var objsAeropuertosPais = new Array();

/*****************************************************************************/
/****				MÉTODOS PROPIOS DE LOS AGENTES				  		  ****/
/*****************************************************************************/
/*
 * Método q se encarga de crea la url para obtener los objetos JSON de los traslados
 *@param urlServer	. Url a la que se debe realizar la petición de listado
 *@param idComi	  	. Identificador del comisionista
 *@param ordenadoPor. Nos indica cómo se debe ordenar el resultado de la búsqueda
 *@param buscarPor	. Indica si el resultado lo debemos ordenar por la fecha de compra o de traslado
 */
function listarTraslados(urlServer, idComi, ordenadoPor, buscarPor){

	document.getElementById("botones").style.visibility="hidden";
	urlServidor = urlServer;
	idComisionista = idComi;
	order = ordenadoPor;

	//Inicializo el valor de la variable global
	var fechaElegida = document.formulario.comboFecha.options[document.formulario.comboFecha.selectedIndex].value;
	var fechaI = document.formulario.fechaInicio.value;
	var fechaF = document.formulario.fechaFin.value;

	if((fechaElegida!=-1 && document.formulario.buscarFecha[0].checked)
		|| (fechaI != 'dd/mm/yyyy' && fechaF != 'dd/mm/yyyy' && document.formulario.buscarFecha[1].checked)){

		var fechas=new Array(2);
		if(fechaElegida != -1 && document.formulario.buscarFecha[0].checked){
			fechas = fechaElegida.split("-");
			if(fechas.length==1){
				fechas[1] = fechas[0];
			}
		}else{
			fechas[0] = fechaI;
			fechas[1] = fechaF
		}
		fechaInicioBusqueda = fechas[0];
		fechaFinBusqueda = fechas[1];

		//Dependiendo del tipo de búsqueda, mostramos un texto u otro en la etiqueta
		var obj = $('etiquetaFecha');
		eliminarObjetosAnteriores(obj);

		//En el campo oculto le digo q ordenacion por fecha vamos a hacer
		//Será una ordenación mediante el timestamp de las fechas
		if(buscarPor=="fechaCompra"){

			obj.appendChild(document.createTextNode("Booking date"));
			$('ordenarFechaPor').value="fechaCompraTS";
			buscarFechaPor = "fechaCompra";
		}else{
			obj.appendChild(document.createTextNode("Transfer date"));
			$('ordenarFechaPor').value="fechaTrasladoTS";
			buscarFechaPor = "fechaTraslado";
		}
		//el método escape es para codificar el valor, como el urlencode
		//Llamamos a la función encargada de realizar la petición JSON
		insertarImagenEnCapaProcesando('Searching...');
		peticionJSON(urlServer+"?funcion=listadoTraslados&where=&orderBy="+ordenadoPor+"&fechaInicio="+fechas[0]+"&fechaFin="+fechas[1]+"&idComisionista="+idComisionista+"&buscarPor="+buscarPor+"&callback=mostrarListadoTraslados");

	}else{
		alert('You must to select a date');
	}
}

/**
 * Método q recoge el objeto json con el listado de traslados y si está todo
 * correcto, llama a la función encarga de imprimirla por pantalla
 * @param jsonData. Objeto json con el resultado
 */
function mostrarListadoTraslados(jsonData){

	//Me quedo con la capa
  	if (jsonData != null) {
		matriz = eval(jsonData);
		mostrarListado();
	}
}

/**
Algoritmo Seleccion O(n²). Le paso toda la matriz con los datos para
que ordene según la columna seleccionada.
@param columna  		  . Indica la columna por la q vamos a ordenar la matriz
@param tipoOrdenacion . Parámetro q indica si la ordenación va a ser asc o desc
*/
function ordenarMatriz(columna, tipoOrdenacion){

	//el método escape es para codificar el valor, como el urlencode
	//Llamamos a la función encargada de realizar la petición JSON
	insertarImagenEnCapaProcesando('Ordering...');

	//Inicializo el valor de la variable global para q después la exportación
	//a excel o csv muestre lo mismo q en pantalla
	if(columna=='referencia'){
		order = "codigoCompra";
	}else if(columna =='pax'){
		order = "pasajeros";
	}else if(columna =='precio'){
		order = "precioTotal";
	}else if(columna =='fechaCompraTS'){
		order = $('ordenarFechaPor').value;
	}else{
		order = columna;
	}
	order += " "+tipoOrdenacion;

	for(i=0; i<matriz.length; i++){
		for(j=i+1,menor=i; j<matriz.length; j++){
		  // Si el elemento j es menor que el menor:
		  if(tipoOrdenacion=="asc" &&
		  	matriz[j][columna]!="" &&
		  	matriz[menor][columna]!="" &&
		  	((columna!='referenciaAgente' &&
		  		eval(matriz[j][columna])<eval(matriz[menor][columna]))
		  		||
		  	(columna=='referenciaAgente' &&
		  	matriz[j][columna]<matriz[menor][columna])
		  	)){

		    menor=j; // el menor pasa a ser el elemento j.
		  }
		  if(tipoOrdenacion=="desc" &&
		  	matriz[j][columna]!="" &&
		  	matriz[menor][columna]!="" &&
		  	((columna!='referenciaAgente' &&
		  		eval(matriz[j][columna])>eval(matriz[menor][columna]))
		  		||
		  	(columna=='referenciaAgente' &&
		  	matriz[j][columna]>matriz[menor][columna])
		  	)){

			    menor=j; // el menor pasa a ser el elemento j.
		  }
		}
		aux=matriz[menor]; // Se intercambian los elementos
		matriz[menor]=matriz[i]; // de las posiciones i y menor
		matriz[i]=aux; // usando una variable auxiliar.
	}
	mostrarListado();
}

/**
 * Método q se encarga de mostrar el listado de los traslados.
 *@param jsonData. Objeto devuelto por la parte servidora con el resultado del listado
 */
function mostrarListado(){

	total = document.getElementById("totalReservas");
	obj = document.getElementById("listado");
	eliminarObjetosAnteriores(total);
//	eliminarObjetosAnteriores(obj);

	//Borro todo el contenido anterior de la tabla de reservas. Desde la 1 para
	//no borrar la cabecera de la tabla
	var arrayFilas = $('listado').getElementsByTagName("tr");
	for(x=1; x<arrayFilas.length; ){
		var padre = arrayFilas[x].parentNode;
		padre.removeChild(arrayFilas[x]);
	}


	//Me quedo con la capa
  	if (matriz != null) {

		if(matriz.length>0){

			total.appendChild(document.createTextNode("Number of transfers: "+
				matriz.length));

			document.getElementById("botones").style.visibility="visible";
			for(x=0; x<matriz.length; x++){

				var fila = document.createElement('tr');
				var tdTipoTraslado = document.createElement('td');
				var tdSubAgente = document.createElement('td');
				var tdCodigoCompra = document.createElement('td');
				var tdReferenciaAgente = document.createElement('td');
				var tdPasajero = document.createElement('td');
				var tdFecha = document.createElement('td');
				var tdRuta = document.createElement('td');
				var tdPrecio = document.createElement('td');

				tdTipoTraslado.appendChild(document.createTextNode(matriz[x]["tipoTraslado"]));
				tdTipoTraslado.width="1%";
				tdTipoTraslado.align="center";

				tdSubAgente.appendChild(document.createTextNode(matriz[x]["subAgente"]));
				tdSubAgente.width="12%";
				tdSubAgente.align="center";

				tdCodigoCompra.appendChild(document.createTextNode(matriz[x]["referencia"]));
				tdCodigoCompra.width="15%";
				tdCodigoCompra.align="center";

				tdReferenciaAgente.appendChild(document.createTextNode(matriz[x]["referenciaAgente"]));
				tdReferenciaAgente.width="15%";
				tdReferenciaAgente.align="center";

				tdPasajero.appendChild(document.createTextNode(matriz[x]["pax"]));
				tdPasajero.width="10%";
				tdPasajero.align="center";

				tdFecha.appendChild(document.createTextNode(matriz[x]["fechaCompra"]));
				tdFecha.width="20%";
				tdFecha.align="center";

				tdRuta.appendChild(document.createTextNode(matriz[x]["ruta"]));
				tdRuta.width="30%";
				tdRuta.align="center";

				tdPrecio.appendChild(document.createTextNode(matriz[x]["precio"]+" Eur"));
				tdPrecio.width="10%";
				tdPrecio.align="center";

				fila.appendChild(tdTipoTraslado);
				fila.appendChild(tdSubAgente);
				fila.appendChild(tdCodigoCompra);
				fila.appendChild(tdReferenciaAgente);
				fila.appendChild(tdPasajero);
				fila.appendChild(tdFecha);
				fila.appendChild(tdRuta);
				fila.appendChild(tdPrecio);

				obj.appendChild(fila);
			}
		}
		eliminarImagenEnCapaProcesando()
	}
}

/**
 * Este método se encarga de realizar la petición de objetos JSON a la parte servidora
 * @param url. Url servidora con todos los parámetros necesarios
 */
function peticionJSON(url){
	// Creamos la peticón json. Le ponemos el parámetro callback
	//para que en el retorno se llame su función correspondiente
	bObj = new JSONscriptRequest(url);
	//Construimos el objeto json
	bObj.buildScriptTag();
	//Realizamos la petición a la parte servidora
	bObj.addScriptTag();
}

function eliminarObjetosAnteriores(objetoPadre){
	//Borro la última etiqueta
	while(objetoPadre.hasChildNodes()){
		objetoPadre.removeChild(objetoPadre.lastChild);
	}
}

/**
 * Este método se encarga de mostrar el reloj de procesando mientras
 * se ejecuta por completa la petición
 */
function insertarImagenEnCapaProcesando(frase){
	var capaProc = document.getElementById("procesando");

	//Creo la imagen q contendrá el gif animado
	var img = document.createElement("img");
	img.src = "/img/elementos/reloj.gif";
	img.border=0;
	img.className = "procesando2";
	//Creo la etiqueta
    var etiq = document.createElement("label");
	etiq.appendChild(document.createTextNode(frase));

	capaProc.appendChild(img);
	capaProc.appendChild(etiq);
}

/**
 * Este método se encarga de borrar la imagen del reloj una vez se ha acabado
 * de procesar la petición
 */
function eliminarImagenEnCapaProcesando(){

	var capaProc = document.getElementById("procesando");
	eliminarObjetosAnteriores(capaProc);
}

/**
 * Método q se encarga de realizar el submit al script encargado de generar
 * el fichero xls con los datos de los traslados
 */
function exportar2Excel(){
	document.formulario.action="exportarListadoAgente2Excel.php";
	document.formulario.fechaInicioElegida.value=fechaInicioBusqueda;
	document.formulario.fechaFinElegida.value=fechaFinBusqueda;
	document.formulario.orderQuery.value=order;
	document.formulario.ordenarFechaPor.value=buscarFechaPor;
	document.formulario.target='_blank';
	document.formulario.submit();
}

/**
 * Método q se encarga de realizar el submit al script encargado de generar
 * el fichero csv con los datos de los traslados
 */
function exportar2Csv(){
	document.formulario.action="exportarListadoAgente2Csv.php";
	document.formulario.fechaInicioElegida.value=fechaInicioBusqueda;
	document.formulario.fechaFinElegida.value=fechaFinBusqueda;
	document.formulario.orderQuery.value=order;
	document.formulario.ordenarFechaPor.value=buscarFechaPor;
	document.formulario.target='_blank';
	document.formulario.submit();
}

/**
 * Función que llama a la parte servidora encargada de enviar el correo recordatio
 *@param urlServer	. Url a la que se debe realizar la petición de listado
 */
function enviarCorreoRecordatorioPassword(urlServer){
	if(document.login.email.value!=''){
		peticionJSON(urlServer+"?funcion=enviarCorreoRecordatorioPassword&email="+document.login.email.value+"&callback=mostrarResultadoEnvioCorreoRecordatorio");
	}else{
		alert("You must to insert a valid email address");
	}
}

/**
 * Función que muestra el resultado de la petición de envío de password
 * @param jsonData. Objeto json con el resultado
 */
function mostrarResultadoEnvioCorreoRecordatorio(jsonData){

	//Me quedo con la capa
  	if (jsonData != null) {
		resultado = eval(jsonData);
		alert(resultado[0]["resultado"]);
	}
}

function obtenerDatosTrasladoDesdeLocalizadorAgente(urlServer, numTraslado, idComisionista){
	id = "localizadorAgente"+numTraslado;
	var obj = $(id);

	//Compruebo si el valor del localizador del agente es nulo
	if(obj.value!=''){
		$("procesando").style.display="block";
		peticionJSON(urlServer+"?funcion=obtenerDatosTrasladoDesdeLocalizadorAgente&localizadorAgente="+obj.value+"&callback=mostrarDatosTrasladoDesdeLocalizadorAgente&numTraslado="+numTraslado+"&idComisionista="+idComisionista+"&desde="+$("desde").value);
	}
}

function mostrarDatosTrasladoDesdeLocalizadorAgente(jsonData){

	//Me quedo con la capa
  	if (jsonData != null) {
		resultado = eval(jsonData);

		if(resultado[0]["resultado"]=="OK"){

			var id = "localizadorAgente"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = resultado[0]["localizadorAgente"];

/*			arrayFecha = resultado[0]["fechaAeropuertoDestino"].split("/");

			var id = "dia"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = arrayFecha[0];

			var id = "mes"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = arrayFecha[1];

			var id = "year"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = arrayFecha[2];*/

			var id = "nombrePasajero"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = resultado[0]["pasajero"];

			/*var id = "movil"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = resultado[0]["movil"];*/

			var id = "pax"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = resultado[0]["pax"];

			var valorIdPais = resultado[0]["idPaisAeropuertoOrigen"];
			var valorIdAeropuerto = resultado[0]["idAeropuertoOrigen"];

			if(resultado[0]["desde"]=="poblacion"){
				valorIdPais = resultado[0]["idPaisAeropuertoDestino"];
				valorIdAeropuerto = resultado[0]["idAeropuertoDestino"];
			}
			var idPais = "pais"+resultado[0]["numTraslado"];
			for(x=0; x<$(idPais).options.length; x++){
				if($(idPais).options[x].value==valorIdPais){
					$(idPais).options[x].selected = true;
				}
			}

			var idAeropuerto = "aeropuerto"+resultado[0]["numTraslado"];
			for(x=0; x<$(idAeropuerto).options.length; x++){
				if($(idAeropuerto).options[x].value==valorIdAeropuerto){
					$(idAeropuerto).options[x].selected = true;
				}
			}

			/*****************************************************************/
			/**AQUI VOY A METER LOS DATOS EN LOS CAMPOS USADOS PARA LA
			/**INTRODUCCION DE VUELOS DE FORMA MANUAL
			/*****************************************************************/

			if(resultado[0]["desde"]=="aeropuerto"){
				$("aeropuertoVueloNoEncontrado"+resultado[0]["numTraslado"]).value=
					resultado[0]["aeropuertoOrigen"];

				$("horaVueloNoEncontrado"+resultado[0]["numTraslado"]).value=
					resultado[0]["horaAeropuertoOrigen"];

				//Preselecciono en el combo la primera opción, q es desde aeropuerto
				$("desde").options[0].selected=true;

				//Miro si el destino es el albir o benidorm para seleccionarlos
				if(resultado[0]["idDestino"]==9){
					$("lugarTuristico").options[0].selected=true;
				}
				else if(resultado[0]["idDestino"]==11){
					$("lugarTuristico").options[1].selected=true;
				}

				var idFecha = "fecha"+resultado[0]["numTraslado"];
				var obj = $(idFecha);
				obj.value = resultado[0]["fechaAeropuertoDestino"];

			}else{

				var idFecha = "fecha"+resultado[0]["numTraslado"];
				var obj = $(idFecha);
				obj.value = resultado[0]["fechaAeropuertoOrigen"];

				$("aeropuertoVueloNoEncontrado"+resultado[0]["numTraslado"]).value=
					resultado[0]["aeropuertoDestino"];

				$("horaVueloNoEncontrado"+resultado[0]["numTraslado"]).value=
					resultado[0]["horaAeropuertoDestino"];

				//Preselecciono en el combo la segunda opción, q es desde poblacion
				$("desde").options[1].selected=true;

				//Miro si el destino es el albir o benidorm para seleccionarlos
				if(resultado[0]["idOrigen"]==9){
					$("lugarTuristico").options[0].selected=true;
				}
				else if(resultado[0]["idOrigen"]==11){
					$("lugarTuristico").options[1].selected=true;
				}

			}

			cambiarEtiquetaArrivalDeparture('desde', 'etiquetaArrivalDeparture');

			$("lineaAereaVueloNoEncontrado"+resultado[0]["numTraslado"]).value=
				resultado[0]["airline"];

			$("codigoLineaAereaVueloNoEncontrado"+resultado[0]["numTraslado"]).value=
				resultado[0]["airline"];

			$("vueloNoEncontrado"+resultado[0]["numTraslado"]).value=
				resultado[0]["vuelo"];

			//Llamo al método q se encuentra dentro del autocompletadoVueloDWR.js
			//el cual mira de poner el código de la línea aérea dentro
			//de campo 'airline code', en caso de q existiera dicho código
			getCodigoLineaAerea("lineaAereaVueloNoEncontrado"+resultado[0]["numTraslado"],
								"codigoLineaAereaVueloNoEncontrado"+resultado[0]["numTraslado"]);

			/*****************************************************************/
			/**FIN DE LA INICIALIZACION DE LOS CAMPOS PARA LOS VUELOS MANUALES
			/*****************************************************************/

			getVuelos(idPais,
						idAeropuerto,
						idFecha,
						"vuelo"+resultado[0]["numTraslado"],
						"ALC",
						resultado[0]["numTraslado"],
						'En',
						resultado[0]["vuelo"]);

			/*var id = "lineaAerea"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = resultado[0]["airline"];*/

			/*var id = "vuelo"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = resultado[0]["vuelo"];

			if(resultado[0]["desde"]=="aeropuerto"){
				var id = "aeropuertoOrigen"+resultado[0]["numTraslado"];
				var obj = $(id);
				obj.value = resultado[0]["aeropuertoOrigen"];
			}

			var id = "hora"+resultado[0]["numTraslado"];
			var obj = $(id);
			if(resultado[0]["desde"]=="aeropuerto"){
				obj.value = resultado[0]["horaAeropuertoDestino"];
			}else{
				obj.value = resultado[0]["horaAeropuertoOrigen"];
			}*/

			var id = "hotel"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = resultado[0]["hotel"];

			/*var id = "direccion"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = resultado[0]["hotel"];*/


		}else if(resultado[0]["resultado"]=="Error"){
			alert(resultado[0]["descripcion"]);
		}
		//Si no se obtienen resultados, limpio los valores de los campos
		else if(resultado[0]["resultado"]=="No encontrado"){

			var id = "fecha"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';

/*			var id = "dia"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';

			var id = "mes"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';

			var id = "year"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';*/

			var id = "nombrePasajero"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';

/*			var id = "movil"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';*/

			var id = "pax"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';

			/*var id = "lineaAerea"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';

			var id = "vuelo"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';

			if(resultado[0]["desde"]=="aeropuerto"){
				var id = "aeropuertoOrigen"+resultado[0]["numTraslado"];
				var obj = $(id);
				obj.value = '';
			}

			var id = "hora"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';
*/
			var id = "hotel"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';

/*			var id = "direccion"+resultado[0]["numTraslado"];
			var obj = $(id);
			obj.value = '';*/
		}
	}
	$("procesando").style.display="none";
}

function getPaises(idSelect, valorSeleccionado){

	if(arrayPaises==null || arrayPaises.length==0){

		BeanViajesAlameda.getPaises("asc", "En", function(objs) {

			arrayPaises = objs;
			//Compruebo q se ha creado correctamente
			if(arrayPaises!=null && arrayPaises.length>0){

				//Bucle que va rellenado el combo
				for (var i = 0; i < arrayPaises.length; i++) {
					DWRUtil.addOptions(idSelect, [{codigoISOAlpha3:arrayPaises[i].codigoISOAlpha3, id:arrayPaises[i].id}],'id','codigoISOAlpha3');
					if(arrayPaises[i].codigoISOAlpha3==valorSeleccionado){
						$(idSelect).options[i].selected = true;
					}
			    }
			}
		});
	}else{
		//Bucle q para cada pais comprueba si es el elegido
		for(var x=0; x<arrayPaises.length; x++){

		    DWRUtil.removeAllOptions(idSelect);
			DWRUtil.addOptions(idSelect, [{codigoISOAlpha3:"Choose a country",id:-1}],'id','codigoISOAlpha3');
			//Bucle que va rellenado el combo
			for (var i = 0; i < arrayPaises.length; i++) {
				DWRUtil.addOptions(idSelect, [{codigoISOAlpha3:arrayPaises[i].codigoISOAlpha3, id:arrayPaises[i].id}],'id','codigoISOAlpha3');
				if(arrayPaises[i].codigoISOAlpha3==valorSeleccionado){
					$(idSelect).options[i].selected = true;
				}
		    }
		}
	}
}

/**
 * Método q usando DWR muestra los aeropuertos del pais seleccionado previamente
 * @param idPais  . Id del select pais
 * @param idSelect. Id del select al q se van a añadir los resultados obtenidos
 */
function mostrarAeropuertosSegunPais(idPais, idSelect){

	if($(idPais).value!=-1 && $(idPais).value!=""){
		//Peticion al servidor mediante DWR
		BeanViajesAlameda.getAeropuertosPais($(idPais).value, 1, "Code asc",
			function(objs){

			if(objs!=null){

			    DWRUtil.removeAllOptions(idSelect);
				DWRUtil.addOptions(idSelect, [{code:"Choose an airport",id:-1}],'id','code');
				//Bucle que va rellenado el combo
				for (var i = 0; i < objs.length; i++) {
					DWRUtil.addOptions(idSelect, [{code:objs[i].code, id:objs[i].id}],'id','code');
			    }
			}
		});
	}
}

/**
 * Método q busca los vuelos atacando al dwr, para un pais, aeropuerto
 * @param idSelectPais		. Id del combo de paises
 * @param idSelectAeropuerto. Id del combo de aeropuertos
 * @param idSelectVuelo		. Id del combo de vuelos donde meter los resultados
 * @param aeropuerto		. Código del aeropuerto de origen o destino
 * @param numTraslado		. Nº de fila del formulario
 * @param idioma			. Idioma en el que mostrar la info
 * @param numVuelo			. Nº de vuelo de la reserva, para preseleccionarlo
 */
function getVuelos(idSelectPais, idSelectAeropuerto, idFecha, idSelectVuelo, aeropuerto,
					numTraslado, idioma, numVuelo){


	if($(idFecha).value!='' && $(idFecha).value!='dd/mm/yyyy'){

		//Llamada a dwr para la obtención de los vuelos
		BeanTransfer.getVuelos(DWRUtil.getValue(idSelectAeropuerto), aeropuerto,
		  						$(idFecha).value,
		  						$("desde").value=="aeropuerto" ? "llegada":"salida",
		  						'dd/MM/yyyy', idioma, function(objs) {

			DWRUtil.removeAllOptions(idSelectVuelo);

			//Si he obtenido resultados
			if(objs!=null){

				var opcion = new Option('Select your flight',-2);
				$(idSelectVuelo).options[0] = opcion;

				//Bucle que va rellenado el combo
				for (var i = 0; i < objs.length; i++) {

					//Ahora compruebo si debo poner la hora de salida o llegada
					var texto = objs[i].carrierCode+" "+objs[i].flightNumber+" "+
						($("desde").value=="aeropuerto" ?
							objs[i].horaLlegada :objs[i].horaSalida);

					var opcion = new Option(texto,objs[i].id);

					$(idSelectVuelo).options[i] = opcion;
					$(idSelectVuelo).options[i].selected = false;

					//Compruebo si debo preseleccionar el vuelo
					if(numVuelo!=-1 && numVuelo==objs[i].id){
						$(idSelectVuelo).options[i].selected = true;
					}
			    }

				var opcion = new Option('Another unlisted flight',-1);
				$(idSelectVuelo).options[$(idSelectVuelo).options.length] = opcion;
			}
			if(objs==null){
				/*if($("enlaceVueloManual"+numTraslado)!=null){
					$("enlaceVueloManual"+numTraslado).style.display="block";
				}*/
				var opcion = new Option('There are no flights',-2);
				$(idSelectVuelo).options[0] = opcion;
			}
		});
	}else{
		alert("Error, you must insert a valid flight date");
		$(idFecha).focus();
	}
}

/**
 * Método q se encarga de buscar mediante DWR el agente mediante el teléfono
 * introducido en el formulario
 * @param telefono		. Teléfono
 * @param idSelectAgente. Id del combo de agentes
 */
function getAgentePorTelefono(telefono, idSelectAgente){
	if(telefono!=""){
		BeanViajesAlameda.getAgentePorTelefono(telefono, function(objs) {

			//Si he obtenido resultados
			if(objs!=null){
				for(x=0; x<$(idSelectAgente).options.length; x++){
					if($(idSelectAgente).options[x].value==objs.id){
						$(idSelectAgente).options[x].selected = true;
					}
				}
			}else{
				alert("The phone number does not exist in our system");
				$(idSelectAgente).options[0].selected = true;
			}
		});
	}
}

/**
 * Este método se encarga de abrir una ventana para introducir manualmente
 * los datos del vuelos, a la que se le pasan los parámetros del posible
 * vuelo introducido anteriormente a mano
 * @param idSelectVuelo. Id del combo del vuelo para ver si hemos elegido
 						introducir los datos del vuelo manualmente
 * @param numServicio  . Indicar del nº de vuelo a trabajar
 * @param idioma	   . Idioma en el que mostrar la página
 * @param desde		   . Indica si el traslado es desde aeropuerto o poblacion
 */
function mostrarDatosVueloManual(idSelectVuelo, numServicio, idioma){

	if($(idSelectVuelo).value==-1){
		abrirDatosVueloManual(numServicio, idioma)
	}
}

/**
 * Este método se encarga de abrir una ventana para introducir manualmente
 * los datos del vuelos, a la que se le pasan los parámetros del posible
 * vuelo introducido anteriormente a mano
 * @param idSelectVuelo. Id del combo del vuelo para ver si hemos elegido
 						introducir los datos del vuelo manualmente
 * @param numServicio  . Indicar del nº de vuelo a trabajar
 * @param idioma	   . Idioma en el que mostrar la página
 * @param desde		   . Indica si el traslado es desde aeropuerto o poblacion
 */
function abrirDatosVueloManual(numServicio, idioma, desde){

	openWindow(700,330,"datosVueloManual.php?codigoCompra=&numServicio="+
		numServicio+"&idioma="+idioma+"&desde="+$("desde").value+
		"&aeropuertoVueloNoEncontrado="+
			$("aeropuertoVueloNoEncontrado"+numServicio).value+
		"&lineaAereaVueloNoEncontrado="+
			$("lineaAereaVueloNoEncontrado"+numServicio).value+
		"&codigoLineaAereaVueloNoEncontrado="+
			$("codigoLineaAereaVueloNoEncontrado"+numServicio).value+
		"&vueloNoEncontrado="+
			$("vueloNoEncontrado"+numServicio).value+
		"&horaVueloNoEncontrado="+
			$("horaVueloNoEncontrado"+numServicio).value
		);
}

/**
 * Método q se encarga de preseleccionar los paises y aeropuertos dependiende
 * de si el usuario ha elegido desde poblacion o q llega a la población, es decir
 * desde aeropuerto o población. Si elige q el origen del traslado es desde un
 * aeropuerto, preseleccionamos GBR, ya q es el más impte, si salimos desde
 * Benidorm o el Albir, lógicamente indicamos ESP. Una vez seleccionado el país,
 * cargaremos los aeropuertos de dicho país.
 * @param idSelect. Id del campo q me indica si es desde un aeropuerto o poblacion
 */
function preseleccionarPaisesAeropuertos(idSelect){

	//Me quedo con las filas de la tabla q contiene las reservas
	var arrayFilas = $("listado").getElementsByTagName("tr");
	var codIso = "GBR";

	if($(idSelect).value=="poblacion"){
		var codIso = "ESP";
	}

	if(arrayFilas!=null && arrayFilas.length>0){

		//Recorro todas las filas sin contar en encabezado de la tabla
		for(x=1, numCombo=0; x<arrayFilas.length; x++, numCombo++){

			//Recorro el combo del país para seleccionar el q toque
			for(y=0; y<$("pais"+numCombo).length; y++){
				if($("pais"+numCombo).options[y].text==codIso){

					$("pais"+numCombo).options[y].selected = true;

					//Cargo los aeropuertos del pais en cuestión
					mostrarAeropuertosSegunPais("pais"+numCombo,
												"aeropuerto"+numCombo);
				}
			}
		}
	}
}

/**
 * Este método cambia la etiqueta de llegadas o salidas dependiendo del valor
 * del combo 'from' elegido.
 */
function cambiarEtiquetaArrivalDeparture(idSelect, idEtiqueta){

	var obj = $(idEtiqueta);
	eliminarObjetosAnteriores(obj);

	if($(idSelect).value=="poblacion"){
		obj.appendChild(document.createTextNode("Departure"));
	}else{
		obj.appendChild(document.createTextNode("Arrival"));
	}
}

/**
 * Este método lo único que hace es hacer un submit (refresco) del formulario
 * si ya se ha elegido nº de transfers y se elige un agente distinto, pq así
 * le podemos enviar a la parte servidor el agente con el que queremos trabajar
 */
function comprobarCambioComisionista(idSelect, idSelectNum){
	if($(idSelectNum).value!=-1){
		$(idSelectNum).options[0].selected=true;
		document.formulario.submit();
	}
}

function addTelefonoAgente(idTabla){
	var arrayFilas = $(idTabla).getElementsByTagName("tr");

	if(arrayFilas!=null && arrayFilas.length>0){
		var tr = document.createElement("tr");
		var td1 = document.createElement("td");
		var td2 = document.createElement("td");
		var td3 = document.createElement("td");

		td1.appendChild(document.createTextNode("Teléfono "+arrayFilas.length));

		//Creo el input  box
		var input = document.createElement("input");
		input.type="checkbox";
		input.id="checkTlf"+arrayFilas.length;
		input.name="checkTlf"+arrayFilas.length;
		input.value="on";
		//Añado el input a la columna
		td2.appendChild(input);

		var input = document.createElement("input");
		input.type="text";
		input.id="telefonoAgente"+arrayFilas.length;
		input.name="telefonoAgente"+arrayFilas.length;

		td3.appendChild(input);

		//Añado la columna a la fila
		tr.appendChild(td1);
		tr.appendChild(td2);
		tr.appendChild(td3);

		$(idTabla).appendChild(tr);
	}
	$("numTelefonosAgente").value=arrayFilas.length;
}

function eliminarTelefonosAgenteSeleccionados(idTablaContenido){

	//Obtengo todas las filas de la tabla
	var arrayFilas = $(idTablaContenido).getElementsByTagName("tr");

	//Ahora voy a recorrer todas las filas de la tabla y borrar las seleccionadas
	for(x=1, id=1; x<=arrayFilas.length; id++){

		if($("checkTlf"+id).checked){

			var padre = arrayFilas[x].parentNode;
			padre.removeChild(arrayFilas[x]);
			$("numTelefonosAgente").value=$("numTelefonosAgente").value-1;
		}else{
			x++;
		}
	}
}

function seleccionarTodosTelefonosAgente(idTabla, idCheckPrincipal){

	var arrayFilas = $(idTabla).getElementsByTagName("tr");

	if(arrayFilas!=null && arrayFilas.length>0){
		for(x=1; x<arrayFilas.length; x++){
			$("checkTlf"+x).checked = $(idCheckPrincipal).checked;
		}
	}
}