if(document.getElementById){  // si se trata de Netscape 6
        Refcapa='document.getElementById("'
        Refestilo='").style'
}else if(document.layers){ // si se trata de Netscape 4
        Refcapa='document.'
        Refestilo=''
}else if(document.all){ // si se trata de Internet Explorer 4
        Refcapa=''
        Refestilo='.style'
}

/*********************************************
FUNCIONES QUE SE UTILIZAN PARA ASOCIAR LOS COMBOS DE PAIS Y PROVINCIA.

*cambia_provincia(formulario, campo):
Se llama desde el onChange de pais y al calgar página. El funcionamiento es el siguiente:
	1.	Si el pais seleccionado tiene provincias, estas aparecen en el combo de provincias.
	2.	En cualquier otro caso, oculta la capa de provincias e instroduce un único valor en el
		combo con texto "Provincia desconocida" y valor '99'

Parámetros:	formulario: nombre del formulario sobre el que actuamos
			campo: campo del formulario sobre el que actuamos
		 

*tipoProvincias(codProv, prov):
Crea un tipo de dato con el codigo y la descripcion de la provincia.
return- tipo creado.
*********************************************/

function cambia_provincia (formulario, campo){
	// referencia al combo de provincias
	var comboProvincias = eval("document."+formulario+"."+campo); 

	//tomo el valor del select del pais elegido. En el formulario de reserva el nombre del campo es Nacionalidad y no pais.
	var comboPais;
	if (formulario == 'frReserva'){
		comboPais= eval("document."+formulario+".NACIONALIDAD");
	}else {
		comboPais= eval("document."+formulario+".pais");
	}

	//miro a ver si el pais está definido
	if (comboPais.selectedIndex <= 0) {
		quitarComboProvincia(comboProvincias);
	}else{
		var pais= "";

		pais = comboPais.options[comboPais.selectedIndex].value;

		// reseteo el combo
		comboProvincias.length = 0;
		// miro en el array pais_prov para sacar solo las prov de ese pais
		// indica la posición en la que se inserta en el combo de provincias
		var posComboProv = 1;
		var hayProv = false;

		for (i=0; i<array_prov.length; i++ )
		{
			if (pais.toUpperCase() == array_prov[i].pais.toUpperCase())
			{
				comboProvincias.options[0] = new Option(" ", "");	
				comboProvincias.options[(posComboProv++)] = new Option(array_prov[i].prov, array_prov[i].codProv);
				hayProv = true;
			}
		}
		if (!hayProv)
		{
			quitarComboProvincia(comboProvincias);
		}
		else{
			comboProvincias.selectedIndex=0;
			anadirComboProvincia();
		}

	}
}

// funcion que carga las provincias
function tipoProvincias(codProv, prov, pais) {
	this.codProv = codProv;
	this.prov = prov;
	this.pais = pais;
	return this;
}


/*********************************************
FUNCIONES DE CONTROL DEL COMBO DE PROVINCIAS

function quitarComboProvincia(combo)-	Oculta la capa del combo de provincias e instroduce un único valor en él
										con texto "Provincia desconocida" y valor '99'
Parámetros-	combo:	la variable del combo de provincias. La necesta para modificar su contenido

function anadirComboProvincia()		-	Visualiza la capa del combo de provincias. No modifica su contenido.
*********************************************/

function quitarComboProvincia(combo){
	eval(Refcapa+"capaProv"+Refestilo+'.visibility="hidden"');
	eval(Refcapa+"texProv"+Refestilo+'.visibility="hidden"');
	combo.length = 0;
	combo.options[0] = new Option("Provincia Desconocida", "");
}

function anadirComboProvincia(){
	eval(Refcapa+"capaProv"+Refestilo+'.visibility="visible"');
	eval(Refcapa+"texProv"+Refestilo+'.visibility="visible"');
}

/*********************************************
FUNCIÓN QUE QUITA LOS ESPACIOS EN BLANCO DE UNA CADENA DE CARACTERES
Parámetros:
campo- caja de texto

Return: devuelve la cadena pasada sin espacios.
*********************************************/

function quitarBlancos (campo){
	var blancos = " \t\n\r";
	var cadena = campo.value;
	var returnCadena = "";
	if (cadena == null || cadena != "")
	{
		for (i=0;i<cadena.length; i++ )
		{
			var c = cadena.charAt(i);
			if (blancos.indexOf(c) == -1){
				returnCadena += c;
			}
		}
	}
	campo.value= returnCadena;
}


function validarFidelitas(sNumero){
		var longitud;
		var dc ;
		var pares=0;
		var impares=0;
		var tmp;
		var tmp1;
		var constante= 27;


		longitud = sNumero.length
	
		if (longitud!=12 )
			return false;

		if(isNaN(sNumero))
			return false;

		if(sNumero.substring(0,1)!="5")
				return false;
		
		dc = new Number(sNumero.substring(longitud-1));
		
	
		for (n= 2; n <=10; n+=2){
			
			pares+= new Number(sNumero.substring(n-1,n));
		}
		
	
		for(n=3;n<=11; n+=2){
			
			tmp = new Number(sNumero.substring(n-1,n)) * 2;

			if (tmp>9){
				impares+=retornaSumaDigitos(new String(tmp))
			}
			else{
				impares+=tmp
			}
		}
		
		tmp = pares + impares + constante;

		
		tmp =  new String(tmp);
		

		tmp1= (	(new Number(rellena(tmp,"0",12).substring(10,11))+1) *10 ) - new Number(tmp);
	
		if (tmp1==10)
			tmp1=0;

		if (tmp1!= dc)
			return false;
		else
			return true;


	}

function validarSpanair(sNumero){

		var longitud=0;
		var dc=0;
		var pares=0;
		var impares=0;
		var total=0;
		var cociente=0;
		var resto=0;

		longitud = sNumero.length;
	
		if (longitud>9 ) return false;

		if (isNaN(sNumero)) return false;

		dc = new Number(sNumero.substring(longitud-1));
	
		for (n=2; n<=8; n+=2){
			total = new Number(sNumero.substring(n-1,n)) * 2;
			if (total>9) pares+=(total-9);
			else pares+=total;
		}
	
		for (n=1; n<=7; n+=2){
			impares+= new Number(sNumero.substring(n-1,n));
		}
		
		total = pares + impares;

		resto = total % 10;
		cociente = (total - resto) / 10;
		
		if (resto==0) total=0;
		else {
			cociente = (cociente + 1) * 10;
			total = cociente - total;
			}

		if (total!=dc) return false;
		else return true;

	}

	function rellena(stexto,caracter,longitud){
		var tmp = ""
		var  pfinal= longitud - stexto.length;

		for (n=0;n< pfinal; n++)
			tmp+= ""+caracter;
		return tmp+""+stexto;
	}

	function retornaSumaDigitos(sTexto){
		var n=0;	
		var num;
		var result=0
		for (n=0;n<sTexto.length;n++){
			num = new Number(sTexto.substring(n,n+1));
			result+=num;
		}
		return result
	}


// Función que valida el dni
function validarDNI(form, dni){

	var campoDni = eval("document." + form + "." + dni);
	var campoDniOriginal = campoDni.value; // NIF introducido por el usuario

	// Letras de a-z mayúscula y minúscula. No signos
	var letras = /[A-Za-z]/;
	// Numeros de 0-9
	var numeros = /\d/;
	var posInicio="";
	var posMedio="";
	var posFin="";
	var cif_chars = /[ABCDEFGHPQSN]/;
	var num_cif1, num_cif2, num_cif3, num_cif4, num_cif5, num_cif6, num_cif7, result_num_cif, result2_num_cif;
	var letra_final_cif, letra_final_cif_2;
	var tipoDocumento; // puede ser CIF (C), DNI/NIF (D) o pasaporte (X)
	var posicion=""; // variable donde se almacena el numero o la letra que se esta tratando
	var letrasDNI = "TRWAGMYFPDXBNJZSQVHLCKET";

	// variables de error
	var ERROR_NIF_VACIO = ""; // Cadena vacia
	var ERROR_LONG_NIF = ""; // longitud cadena mayor o menor que 9
	var ERROR_LETRA_NIF = ""; // No coincide la última letra con la calculada
	var ERROR_FORMATO_NIF = ""; // Error formato DNI.
							  // encontrado caracter erroneo en el churro del medio que tiene que ser numérico
							  // Error último caracter, encontrado número
	
	// Compruebo si el campo esta vacio
	if (campoDni.value == "" || campoDni.value == null){
		return "ERROR_NIF_VACIO";
	}

	// Llamo a la función quitarBlancos
	quitarBlancos(campoDni);
	
	var dniOriginal = campoDni.value;

	var dni = "";
	
	// Quito todos los caracteres que no sean número o letra
	var cont =0;
	for (i=0 ; i<dniOriginal.length ; i++ )
	{
		if (letras.test(dniOriginal.charAt(i)))
		{
			dni = dni+dniOriginal.charAt(i);
		}
		
		if (numeros.test(dniOriginal.charAt(i)))
		{
			dni = dni+dniOriginal.charAt(i);
		}
		cont++;
	}

	// Si el primer caracter es una letra no se añaden ceros
	primeraLetra = dni.substr(0,1).toUpperCase();
	if (!isNaN(primeraLetra))
	{
		while (cont < 9)
		{
			// Completo con ceros a la izda si el número del DNI es menor de 9 caracteres
			dni = "0"+dni;
			cont++;
		}
		
	}
	
	// miro si el DNI tiene 9 caracteres
	if (dni.length != 9)
	{
		// Si hay error muestro el NIF introducido por el usuario
		campoDni.value = campoDniOriginal;
		return "ERROR_LONG_NIF";
	}

	// Pongo el NIF limpio en el campo
	campoDni.value = dni;

	// obtengo el primer caracter, carasteres del medio y el último
	posInicio = dni.substr(0,1).toUpperCase();
	posMedio = dni.substr(1,7).toUpperCase();
	posFin = dni.substr(8,9).toUpperCase();
	
	// posMedio debe ser numérico
	if (isNaN(posMedio))
	{
		// Si hay error muestro el NIF introducido por el usuario
		campoDni.value = campoDniOriginal;
		return "ERROR_FORMATO_NIF";
	}
	
	// Si no es un número el primer caracter
	if (isNaN(posInicio))
	{ 
		// Si no es un número el último caracter
		if (isNaN(posFin)){
			// Miro si coincide la letra de la posición uno con alguna de cif_chars (ABCDEFGHPQSN)
			if (cif_chars.test(posInicio))
			{
				// Coincide: es un CIF
				// num_cif1
				posicion = posMedio.substr(0,1);
				num_cif1 = eval (posicion * 2);
				
				if (num_cif1 >9){
					num_cif1 = num_cif1 -9;
				}

				// num_cif3
				posicion = posMedio.substr(2,1);
				num_cif3 = eval (posicion * 2);
				
				if (num_cif3 >9){
					num_cif3 = num_cif3 -9;
				}

				// num_cif5
				posicion = posMedio.substr(4,1);
				num_cif5 = eval (posicion * 2);
				
				if (num_cif5 >9){
					num_cif5 = num_cif5 -9;
				}

				// num_cif7
				posicion = posMedio.substr(6,1);
				num_cif7 = eval (posicion * 2);
				
				if (num_cif7 >9){
					num_cif7 = num_cif7 -9;
				}

				result_num_cif = num_cif1 + num_cif3 + num_cif5 + num_cif7;

				// num_cif2
				num_cif2 = parseInt(posMedio.substr(1,1));
				// num_cif4
				num_cif4 = parseInt(posMedio.substr(3,1));
				// num_cif6
				num_cif6 = parseInt(posMedio.substr(5,1));

				result2_num_cif = num_cif2 + num_cif4 + num_cif6;

				result_num_cif = eval(result_num_cif + result2_num_cif);

				result_num_cif = eval(result_num_cif % 10);

				result_num_cif = eval(20 - result_num_cif);

				result_num_cif = eval(result_num_cif % 10);
				
				switch(result_num_cif)
				{
					case 1: 
						letra_final_cif = "A";
						break;
					case 2: 
						letra_final_cif = "B";
						break;
					case 3: 
						letra_final_cif = "C";
						break;
					case 4: 
						letra_final_cif = "D";
						break;
					case 5: 
						letra_final_cif = "E";
						break;
					case 6: 
						letra_final_cif = "F";
						break;
					case 7: 
						letra_final_cif = "G";
						break;
					case 8: 
						letra_final_cif = "H";
						break;
					case 9: 
						letra_final_cif = "I";
						break;
					case 10: 
						letra_final_cif = "J";
						break;
				}

				tipoDocumento = "C"; // CIF
				if (posFin != letra_final_cif)
				{
					// Si hay error muestro el NIF introducido por el usuario
					campoDni.value = campoDniOriginal;
					return "ERROR_LETRA_NIF";
				} else {
					campoDni.value = posInicio+""+posMedio+""+posFin;
				}

			}else{
				// No coincide con ninguna letra de cif_chars.  IF linea 90
				if (posInicio == "X" || posInicio == "M")
				{
					// NIF extranjero
					// Copio el valor de los digitos del medio en una variable
					posicion = parseInt(dni.substr(1,7));

					posicion = parseInt(posicion % 23);

					posicion = posicion + 1;

					result_num_cif = posicion;

					result_num_cif = eval(result_num_cif % 10);

					result2_num_cif = (posicion - result_num_cif) / 10;

					switch(result_num_cif)
					{
						// NOTA: el original era 0
						case 10: 
							letra_final_cif = "D";
							break;
						case 1: 
							letra_final_cif = "T";
							break;
						case 2: 
							letra_final_cif = "R";
							break;
						case 3: 
							letra_final_cif = "W";
							break;
						case 4: 
							letra_final_cif = "A";
							break;
						case 5: 
							letra_final_cif = "G";
							break;
						case 6: 
							letra_final_cif = "M";
							break;
						case 7: 
							letra_final_cif = "Y";
							break;
						case 8: 
							letra_final_cif = "F";
							break;
						case 9: 
							letra_final_cif = "P";
							break;
					}

					// Si result2 es igual a 1
					if (result2_num_cif == 1)
					{
						switch(letra_final_cif)
						{
							case "T": 
								letra_final_cif_2 = "X";
								break;
							case "R": 
								letra_final_cif_2 = "B";
								break;
							case "W": 
								letra_final_cif_2 = "N";
								break;
							case "A": 
								letra_final_cif_2 = "J";
								break;
							case "G": 
								letra_final_cif_2 = "Z";
								break;
							case "M": 
								letra_final_cif_2 = "S";
								break;
							case "Y": 
								letra_final_cif_2 = "Q";
								break;
							case "F": 
								letra_final_cif_2 = "V";
								break;
							case "P": 
								letra_final_cif_2 = "H";
								break;
						}
					}else {
						// Si result2 es igual a 1
						if (result2_num_cif == 2)
						{
							switch(letra_final_cif)
							{
								case "D": 
									letra_final_cif_2 = "L";
									break;
								case "T": 
									letra_final_cif_2 = "C";
									break;
								case "R": 
									letra_final_cif_2 = "K";
									break;
								case "W": 
									letra_final_cif_2 = "E";
									break;
							}
						}
					}
					
					tipoDocumento = "X"; // Pasaporte

					if (posFin != letra_final_cif_2)
					{
						// Si hay error muestro el NIF introducido por el usuario
						campoDni.value = campoDniOriginal;
						return "ERROR_LETRA_NIF";
					}else {
						campoDni.value = posInicio+""+posMedio+""+posFin;
					}


				}else {
					if (posInicio != "K" && posInicio != "L")
					{
						// Si hay error muestro el NIF introducido por el usuario
						campoDni.value = campoDniOriginal;
						return "ERROR_FORMATO_NIF";
					}else {
						tipoDocumento = "X"; // Pasaporte
					}
				}
				
			}

		}else{
			// el último caracter es un número
			// Cambio las posibles letras del cif
			cif_chars = /[ABCDEFGH]/;
			posicion = dni.substr(0,1).toUpperCase();

			if (cif_chars.test(posicion) 
				&& posMedio.substr(0,2)!= "01" 
				&& posMedio.substr(0,2)!= "20"
				&& posMedio.substr(0,2)!= "31"
				&& posMedio.substr(0,2)!= "48"
				&& posMedio.substr(0,2)!= "98")
			{
					// num_cif1
					posicion = posMedio.substr(0,1);
					num_cif1 = eval (posicion * 2);
				
					if (num_cif1 >9){
						num_cif1 = num_cif1 -9;
					}

					// num_cif3
					posicion = posMedio.substr(2,1);
					num_cif3 = eval (posicion * 2);
					
					if (num_cif3 >9){
						num_cif3 = num_cif3 -9;
					}

					// num_cif5
					posicion = posMedio.substr(4,1);
					num_cif5 = eval (posicion * 2);
					
					if (num_cif5 >9){
						num_cif5 = num_cif5 -9;
					}

					// num_cif7
					posicion = posMedio.substr(6,1);
					num_cif7 = eval (posicion * 2);
					
					if (num_cif7 >9){
						num_cif7 = num_cif7 -9;
					}

					result_num_cif = num_cif1 + num_cif3 + num_cif5 + num_cif7;

					// num_cif2
					num_cif2 = parseInt(posMedio.substr(1,1));
					// num_cif4
					num_cif4 = parseInt(posMedio.substr(3,1));
					// num_cif6
					num_cif6 = parseInt(posMedio.substr(5,1));

					result2_num_cif = num_cif2 + num_cif4 + num_cif6;

					result_num_cif = eval(result_num_cif + result2_num_cif);

					result_num_cif = eval(result_num_cif % 10);

					result_num_cif = eval(20 - result_num_cif);

					result_num_cif = eval(result_num_cif % 10);
					
					tipoDocumento = "C"; // CIF
					if (posFin != result_num_cif)
					{
						// Si hay error muestro el NIF introducido por el usuario
						campoDni.value = campoDniOriginal;
						return "ERROR_LETRA_NIF";
						//campoDni.value = posInicio+""+posMedio+""+result_num_cif.substr(result_num_cif.length -1, result_num_cif.length);
					} else {
						campoDni.value = posInicio+""+posMedio+""+posFin;
					}

			}else {
				if ( posInicio != "T" && cif_chars.test(posicion) )
				{
					// Si hay error muestro el NIF introducido por el usuario
					campoDni.value = campoDniOriginal;
					return "ERROR_FORMATO_NIF";
				} else {
					tipoDocumento = "X"; // Pasaporte
				}

			}
		}
	}else{
		//  Entra cuando el primer caracter es un número
		if (!numeros.test(posFin))
		{
			result_num_cif = dni.substr(0,8);
			result2_num_cif = result_num_cif / 23;

			// Quito los decimales
			posPunto = result2_num_cif.toString().indexOf(".");

			if (posPunto != -1)
			{
				result2_num_cif = result2_num_cif.toString().substr(0, parseInt(posPunto));
			}
			
			result2_num_cif = result2_num_cif * 23;
			result_num_cif = result_num_cif - result2_num_cif;
			result_num_cif = result_num_cif + 1;

			tipoDocumento = "D"; // DNI

			if (posFin != letrasDNI.substr((result_num_cif - 1), 1))
			{
				// Si hay error muestro el NIF introducido por el usuario
				campoDni.value = campoDniOriginal;
				return "ERROR_LETRA_NIF";
				//campoDni.value = posInicio+""+posMedio+""+letrasDNI.substr((result_num_cif - 1), 1);
			}else {
				campoDni.value = posInicio+""+posMedio+""+posFin;
			}
		}else {
			// Si hay error muestro el NIF introducido por el usuario
			campoDni.value = campoDniOriginal;
			return "ERROR_FORMATO_NIF";
		}
	}
}


/**************************************************************************
*****
***** Función que comprueba que la fecha de nacimiento este comprendida
***** entre 1900 y la fecha actual. si no es asi reportara error.
*****
**************************************************************************/

function validarFechaNacimiento(form, dia, mes, year){
	var campoAnyo = eval("document."+  form+ "." + year);
	var campoMes = eval("document."+  form+ "." + mes);
	var campoDia = eval("document."+  form+ "." + dia);
	
	if (campoAnyo.value == null && campoMes.value == null && campoDia.value == null)
		return "ERROR_FECHA_NAC";
	if (campoAnyo.value != "" && campoMes.value != "" && campoDia.value != "")
	{
	
		fechaN = new Date(campoAnyo.value, campoMes.value-1, campoDia.value); // Fecha introducida por el usuario
		fecha = new Date(); // Fecha actual
		fechaMen = new Date(1900,0,1); // fecha limite inferior

		var fechaActual = fecha.getTime(); // fecha actual en milisegundos
		var fechaNac = fechaN.getTime(); // fecha pasada en milisegundos
		var fechaMenor = fechaMen.getTime();
		
		var Diferencia = fechaActual - fechaNac;
		var DiferenciaMenor = fechaMenor - fechaNac;
		// Variables de error 
		var ERROR_FECHA_NAC = ""; // fecha mayor a la actual o menor a 1900

		if (Diferencia < 0) {
			return "ERROR_FECHA_NAC";
		}
		else {
			if (DiferenciaMenor > 0)
			{
				return "ERROR_FECHA_NAC";
			}
		}
	}else {
		return "ERROR_FECHA_NAC";
	}
}

function swapImage(Image1, Image2)
{
	var tmp = new Image;
		tmp.src 	= Image1.src;
		tmp.width 	= Image1.width;
		tmp.height	= Image1.height;		
		Image1.src 	= Image2.src;
		Image1.width 	= Image2.width;
		Image1.height	= Image2.height;		
		Image2.src 	= tmp.src;
		Image2.width 	= tmp.width;
		Image2.height	= tmp.height;	
}


function conversor(Amount,From,To ){
	var dir ="../../reservations/jsp/conversor.jsp?Amount=" + Amount + "&From="+ From +"&To=" + To;
	var name="conversor";
	var ancho = 320;
	var alto = 300; 
	var left = (screen.width /2 ) - (ancho/2);
	var top = (screen.height /2 ) - (alto/2);
	var settings = "width="+ancho+",height="+alto+",left="+left+",top="+top+",scrollbars=no";
	var win = window.open(dir,"conversor",settings);
	win.focus();
}

function addLoadEvent(func) {
  	var oldonload = window.onload;
  	if (typeof window.onload != 'function') {
    	window.onload = func;
  	} else {
    	window.onload = function() {
    		if (oldonload) {
       			oldonload();
    		}
    		func();
    	}
 	}
}
