var tipoOficina;
//Array que contiene la lista de condiciones de cobro
var condicionesCobro = new Array();
//Índice de la condición de cobro seleccionada
var condicionSeleccionada = null;
//Permite guardar el anterior tipo de tarjeta que había seleccionado
var tipoTarjetaOriginal = "";
var tengoTarjetaVisaVI = false;
var lstTiposTarjeta;

function ocultaFormasPago()
{
    trCCC.style.display ='none';
	trTransferencia.style.display ='none';
	document.getElementById("trTarjeta").style.display = 'none';
	trPagoOficina.style.display = 'none'; 
	trBoton.style.display='';
	selectTarjeta = false;
	selectCCC = false;
}

function muestraFormasPago(tipoPago)
{
    if(tipoPago == "tarjeta")
    {		    
        selectTarjeta = true;	
        document.getElementById("trTarjeta").style.display = '';    
    }
    if(tipoPago == "domiciliacion") 		                  
    {	    
        selectCCC = true;	
        trCCC.style.display ='';	    
    }
    if (tipoPago == "")
    {
        trTransferencia.style.display ='';
    }
}

function validaTarjeta(){
    var num = document.reserva.num1.value + document.reserva.num2.value + document.reserva.num3.value + document.reserva.num4.value;
    var tipo = document.reserva.tipo.value;		    		    
    return ccchk(num, tipo);
}

// Deshabilitamos los radio para evitar que se lance la transacción de la lavadora varias veces
function DesHabilitaFormasPago(habilitado)
{
    if (document.reserva.formadePago && document.reserva.formadePago.length > 1)
    {
        for (var i=0; i<document.reserva.formadePago.length; i++)
        {
            document.reserva.formadePago[i].disabled=habilitado;
        }
        if (document.reserva.tengoVisaViajesIberia != null) document.reserva.tengoVisaViajesIberia.disabled=habilitado;
    }
    else
    {
        document.reserva.formadePago.disabled=habilitado;
        if (document.reserva.tengoVisaViajesIberia != null) document.reserva.tengoVisaViajesIberia.disabled=habilitado;
    }
}

function obtenerTarjetasFiltradas(marca, permiteFinanciacion, tipoTarjetaCod)
{    
    //falta poner que solo se calcule esto cuando pulse en la tarjeta, esta pendietne pq hay que modificar el maestro		        
    var urlFiltroTarjeta = "";	        
    urlFiltroTarjeta += "/negocio/getXML.ashx?sesion=" + global_sessionId;
    urlFiltroTarjeta += "&marca=" + marca;
    urlFiltroTarjeta += "&permiteFinanciacion=" + permiteFinanciacion;
    urlFiltroTarjeta += "&funcion=xmltipostarjeta";		         		        
    urlFiltroTarjeta += "&tipoCierre=" + global_tipoCierre;
    // FCG 24/05/2010 - Si llega un código de tipo de tarjeta informado, es porque queremos que sólo se muestre ese tipo.
    if (tipoTarjetaCod == null || tipoTarjetaCod == 'undefined')
        tipoTarjetaCod = '';
    urlFiltroTarjeta += "&tipoTarjetaCod=" + tipoTarjetaCod;
                               		        		        		        
    lstTiposTarjeta = new listbox()			    
    // FCG 20/05/2010 - Corregido error al modificar el check de residentes: sustituyo document.getElementById("tipo") por docuemnt.reserva.tipo.
    lstTiposTarjeta.object = document.reserva.tipo;	
    //lstTiposTarjeta.object = document.getElementById("tipo");

    var valorSeleccionado = ""
    //try{valorSeleccionado = lstTiposTarjeta.getValue();}
    //catch (e){}
    valorSeleccionado = tipoTarjetaOriginal;
    lstTiposTarjeta.clear();
    lstTiposTarjeta.load(urlFiltroTarjeta, "tipo", "des", "cod")		        				    		    		        		       
    
    if (valorSeleccionado == "")
        valorSeleccionado = "VI";

    lstTiposTarjeta.setValue(valorSeleccionado);
}
			
function compruebaInfoRecibida(pendienteCobro)
{
    if(isNaN(parseFloat(pendienteCobro.replace('.','').replace(',','.'))) == true) return false;
    
    return true;
}

//funcio que formateja un enter en format de preu
 function formatPreu(num){
	var signe = ""
	var sencer = num.toString()
	var dec = "00"

	//el signe
	if (sencer.indexOf('-')!=-1){
		signe = sencer.substring(0,1)
		sencer = sencer.substring(1);
	}

	var index_coma = sencer.indexOf('.');

	//part entera i part decimal
	if (index_coma != -1){
		dec = sencer.substring(index_coma + 1, index_coma + 3);
		
		while (dec.length<2)
			dec = dec + "0" 
			
		sencer = sencer.substring(0, index_coma);
	}

	//posar el punt de mils
	if (sencer.length>3){ 
		sencer = sencer.substring(0,sencer.length-3) + '.' + sencer.substring(sencer.length-3); 
	} 
	
	return (signe + sencer + "," + dec)  
}			

//OTRAS FUNCIONES NECESARIAS *************************************************************************************************************************************************
//**********************************************************************************************************************************************************************

function verOficinas(tipo){
    tipoOficina = tipo;
    document.getElementById("trOficinaGestoraEmision").style.display = 'none';
    try{
    document.getElementById("mapa").style.display = '';
    
    }
    catch(e){};
	
	try{
	document.getElementById("ventajas_bonomail").style.display = 'none';
	}
	catch(e){}
}
function verSucursales(){
        //****MIRAR PORQUE LO QUE VENE ABAJO NO LE GUSTA A FIREFOX. PROBAR CON DOCUMENT.RESERVA....
//     document.getElementById("nombreEnvio").value = "";
//     document.getElementById("localidadEnvio").value = "";     
//     document.getElementById("provinciaEnvio").value = "";
//     document.getElementById("calleEnvio").value = "";
//     document.getElementById("cpEnvio").value = "";
//     document.getElementById("paisEnvio").value = "";

     
    document.reserva.nombreEnvio.value = "";
    document.reserva.localidadEnvio.value = ""; 
    document.reserva.provinciaEnvio.value = "";
    document.reserva.calleEnvio.value = "";
    document.reserva.cpEnvio.value = "";
    document.reserva.paisEnvio.value = "";

     try{
        document.getElementById("trEnvioMensajero").style.display = 'none';
     }catch(e){}
     
     try{
        document.getElementById("trOficinaGestoraEmision").style.display = 'none';
     }catch(e){}

        document.getElementById("sucursales").style.display = '';
	//var a = window.open("popUpSucursales.aspx?sesion=" + global_sessionId,"windowOficinas","width:300;height:400;scrollbars:none;menubar:none");
}
function escondeOficina(){
    
    if (trOficinaGestoraEmision.style.display=='')
        document.getElementById("trOficinaGestoraEmision").style.display='none';
    
    try{
    
	document.getElementById("mapa").style.display='none';
	
	}
	catch(e){}
    
    try{
	document.getElementById("sucursales").style.display = 'none';
	}
	catch(e){
	//document.reserva.sucursales.style.display = 'none'
	}
    
    try{
	document.getElementById("ventajas_bonomail").style.display = '';
	}
	catch(e){}
}
function seleccionOficina(mostrarOficina, tipo){
    if (tipo == 'Gestora'){
        if (mostrarOficina){
		    document.getelementById("trOficinaGestoraEmision").style.display = '';				    
	    }else{
		    document.getelementById("trOficinaGestoraEmision").style.display = 'none';			    
	    }    
    }else if (tipo == 'Recogida'){

        if (mostrarOficina){		        
		    document.getelementById("trOficinaRecogida").style.display = '';				    		   
		    try{
		    document.getelementById("trEnvioMensajero").style.display = 'none';}
		    catch (e){};
	    }else{
		    //document.getelementById("trOficinaRecogida").style.display = 'none';		    
		    try{
		    document.getelementById("trEnvioMensajero").style.display = '';}
		    catch (e){};		    
	    }  
        		    
    }		   		    
}

//function loadPais(object,valor){
//    var lstPais = new listbox()
//	var psesion = global_sessionId;
//	var pais = valor;
//	
//	if (pais=="")
//		pais="ESP"
//		
//	lstPais.longitud = 15
//	lstPais.object = object; 
//	
//	
//	alert(object);
//	alert(valor);
//	//alert(pais);
//	//alert(psesion);
//	//lstPais.load("/contenidos/registro/" + global_marca + "/paises.xml","pais","des","cod")
//	lstPais.load("/negocio/getMaestros.ashx?sesion="+psesion+"&funcion=paises","pais","des","cod")
//	lstPais.setValue(pais);
//}

function loadPais(object,valor){
	var lstPais = new listbox()
	var psesion = global_sessionId;
	var pais = valor;
  
	if (pais=="")
		pais="ESP"
		
	lstPais.longitud = 15
	lstPais.object = object; 
	
		//alert(object);
	
	//lstPais.load("/contenidos/registro/" + global_marca + "/paises.xml","pais","des","cod")
	
	lstPais.load("/negocio/getMaestros.ashx?sesion="+psesion+"&funcion=paises","pais","des","cod")
	
	lstPais.setValue(pais);
}

function loadProvincia(object,pais,valor){

	var lstProvincia = new listbox()
	var psesion = global_sessionId;
	lstProvincia.object = object;
	lstProvincia.clear();
	//lstProvincia.load("/contenidos/registro/" + global_marca + "/provincias/prov_" + pais + ".xml","prov","des","cod")
	lstProvincia.load("/negocio/getMaestros.ashx?sesion="+psesion+"&funcion=provincias&pais="+pais,"prov","des","cod")
	lstProvincia.setValue(valor);
}

function cambiarDatosFacturacion(mostrar){
    oComprovacio.sinerrores = true;
	oComprovacio.anclaName = "";
    oComprovacio.comprovaPintatError(document.reserva.nombreFactura.value, "textnomfac", "")
    oComprovacio.comprovaPintatError(document.reserva.calleFactura.value, "textdirfac", "")
    oComprovacio.comprovaPintatError(document.reserva.localidadFactura.value, "textlocalidad", "")
    oComprovacio.comprovaPintatError(document.reserva.cpFactura.value, "textcpfactura", "")
    if (mostrar)
        document.getElementById("trFactura").style.display="";
    else{
        
        if ((document.getElementById("nombreFactura").value != "") &&
            (document.getElementById("provinciaFactura").value != "") &&
            (document.getElementById("localidadFactura").value != "") &&
            (document.getElementById("calleFactura").value  != "" ) &&
            (document.getElementById("cpFactura").value != "") &&
            (document.getElementById("paisFactura").value != "")){
                document.getElementById("trFactura").style.display="none";     
            }else{
                
            alert("Debe rellenar los datos de facturación")
            document.reserva.verFacura.checked = true;
            }  
    }      
}

function abrirCondicionesGenerales(){
	if ((global_tipoCierre == "3") && (global_nombreAplicacion == "fidelarium"))
		window.open("/fidelarium/popup/pop_condCompraOnline.html", "", "titlebar=no,toolbar=no,location=no,directories=no,status=no,menubar=yes,scrollbars=yes,resizable=yes,width=100%,height=500");
	else
	    	window.open("/" +  global_nombreAplicacion + "/html/" + global_idioma + "/condicionesGenerales.htm", "", "titlebar=no,toolbar=no,location=no,directories=no,status=no,menubar=yes,scrollbars=yes,resizable=yes,width=600,height=500");
}

function abrirCondicionesCancelacion(){
    window.open("/" + global_nombreAplicacion + "/html/" + global_idioma + "/condicionesCancelacion.htm", "", "titlebar=no,toolbar=no,location=no,directories=no,status=no,menubar=yes,scrollbars=yes,resizable=yes,width=100%,height=500");
}

function mensajero(){
    document.getElementById("trEnvioMensajero").style.display = '';
} 

function verBilleteElectronico(){
   //window.open("/cierreVI/popup/ciberti cket.aspx?sesion=" + global_codigoSesion,"billeteelectronico", "scrollbars=no,menubar=no,titlebar=no,toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,width=650,height=375");
   //window.open("/cierreVI/popup/ciberticket.aspx?sesion=" + global_codigoSesion,"billeteelectronico", "scrollbars=no,menubar=no,titlebar=no,toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,width=650,height=375");      
   var url = "/cierreVI/popup/ciberticket.aspx?sesion=" + global_codigoSesion
   showPager.openPage(url, 500, 350)
}
		
function compruebaAcentos(campo){
    campo.value = replaceSubstring(campo.value, "á", "a");
    campo.value = replaceSubstring(campo.value, "é", "e");
    campo.value = replaceSubstring(campo.value, "í", "i");
    campo.value = replaceSubstring(campo.value, "ó", "o");
    campo.value = replaceSubstring(campo.value, "ú", "u");
    campo.value = replaceSubstring(campo.value, "à", "a");
    campo.value = replaceSubstring(campo.value, "è", "e");
    campo.value = replaceSubstring(campo.value, "ì", "i");
    campo.value = replaceSubstring(campo.value, "ò", "o");
    campo.value = replaceSubstring(campo.value, "ù", "u");
    campo.value = replaceSubstring(campo.value, "Á", "A");
    campo.value = replaceSubstring(campo.value, "É", "E");
    campo.value = replaceSubstring(campo.value, "Í", "I");
    campo.value = replaceSubstring(campo.value, "Ó", "O");
    campo.value = replaceSubstring(campo.value, "Ú", "U");
    campo.value = replaceSubstring(campo.value, "À", "A");
    campo.value = replaceSubstring(campo.value, "È", "E");
    campo.value = replaceSubstring(campo.value, "Ì", "I");
    campo.value = replaceSubstring(campo.value, "Ò", "O");
    campo.value = replaceSubstring(campo.value, "Ù", "U");
    campo.value = replaceSubstring(campo.value, "ñ", "n");
    campo.value = replaceSubstring(campo.value, "Ñ", "N");
    campo.value = replaceSubstring(campo.value, "ç", "c");
    campo.value = replaceSubstring(campo.value, "Ç", "C");
    campo.value = replaceSubstring(campo.value, "º", "o");
    campo.value = replaceSubstring(campo.value, "ª", "a");
}

function validaTarjeta(){
    var num = document.reserva.num1.value + document.reserva.num2.value + document.reserva.num3.value + document.reserva.num4.value;
    var tipo = document.reserva.tipo.value;			                                                    			                                                    
    return ccchk(num, tipo);
    
}

function compruebaSucursal(){
    if (eval("document.reserva.nombreEnvio.value") == '') 
        return false;
    else
        return true;
       
}

function compruebaOficinaGestora (billeteElectronico) {
    
    var tipo = "";
    var oficina = "";
    		
    if (eval(billeteElectronico.toLowerCase())) {
	    tipo = "tipoEmision";    
	    oficina = "oficinaGestora";
	}else{
	    tipo = "tipoEnvio";
	    oficina = "oficinaRecogida"; 
	}

    //if ((! eval("document.reserva." + tipo + "[0].checked")) && (eval("document.reserva." + tipo + "[1].checked"))) {
      if ((! eval("document.getElementsByName('" + tipo + "')[0].checked")) && (eval("document.getElementsByName('" + tipo + "')[1].checked"))) {
        if (eval("document.reserva." + oficina + ".value") == '') {
    	    return false;
    	}else{
    		return true;
    	}
    }else{
        return true;
    }
}



function parseNumero(valor)
{
    valor = valor.replace(".","")
    valor = valor.replace(",",".")
    valor = parseFloat(valor)
    return valor
}

function muestraElemento (elemento) {
    var elemento = document.getElementById(elemento);
    if(elemento != null)
    {
        elemento.style.display = '';
    }
}
function escondeElemento (elemento) {
    var elemento = document.getElementById(elemento);
    if(elemento != null)
    {
        elemento.style.display = 'none';
    }
}


//FUNCIONES DE MANEJO DE CONDICIONES DE COBRO Y DESCUENTOS VISA VI

//Función que permite crear un nuevo objeto de condicion de cobro
function condicionCobro(index, id, cod, desc, porcentaje, anticipo, totalReserva, marca, idResto, codResto, descResto, tipoPago, tipoTarjetaCod, permiteFinanciacion, validaVisaVI, seleccionar)
{
    this.index = index;
    this.id = id;
    this.cod = cod;
    this.desc = desc;
    this.porcentaje = porcentaje;
    this.anticipo = anticipo;    
    this.importeCobro = anticipo;
    this.totalReserva = totalReserva;    
    this.marca = marca;
    this.idResto = idResto;
    this.codResto = codResto;
    this.descResto = descResto;
    this.tipoPago = tipoPago;
    this.tipoTarjetaCod = tipoTarjetaCod;
    this.permiteFinanciacion = permiteFinanciacion;
    this.validaVisaVI = validaVisaVI;
    
    this.descuento = 0;
    this.pendienteCobro = 0;
    this.tipoDescuentoId = 0;
    this.importeDescuentoTotal = 0;
    this.importeMinimoCobro = 0; 
    this.importeGasto = 0;
    this.tipoGastoId = 0;
    this.tipoGastoDes = "";
    this.descEliminados = new Array();
    this.xmlDescuentoCobro = null;
    //Indica si se ha calculado el descuento de esta condición de cobro
    this.descuentoCalculado = false;
    
    //Función para ocultar el elemento contenedor de la condición de cobro
    this.ocultar = function(){
                        var elemento = document.getElementById("tr_condicionCobro_" + this.index);
                        if(elemento != null)
                        {
                            elemento.style.display = "none"
                        }
                   };
    //Función para mostrar el elemento contenedor de la condición de cobro
    this.mostrar = function(){
                        var elemento = document.getElementById("tr_condicionCobro_" + this.index);
                        if(elemento != null)
                        {
                            elemento.style.display = ""
                        }
                   };
    //Función que actualiza el elemento que muestra el importe a pagar con el importe de cobro
    this.actualizarImporte = function(){
                        var elemento = document.getElementById("porcentaje_" + this.cod);
                        if(elemento != null)
                        {
                            //OJO: lo actualizamos con el importeCobro y no con el anticipo, ya que anticipo se refiere al importe original (antes de calcular los descuentos)
                            //mientras que el importeCobro se actualiza con el descuento aplicado
                            elemento.innerHTML = formatPreu(this.importeCobro) + "&nbsp;&euro;";
                        }
                   };
   //Función que permite seleccionar el radio button correspondiente a esta condición de cobro y aplicar a al reserva los importes y descuentos de la condición seleccionada
   this.seleccionar = function(){
                        this._getRadio().checked = true;
                        //Si se ha seleccionado una condición que no es de VISA VI, debe deseleccionarse el radio button de "Tengo Tarjeta Visa Viajes Iberia"
                        //ya que este no se deselecciona automáticamente al seleccionar otra condición de cobro
                        if(!this.validaVisaVI)
                        {
                            deseleccionarTengoTarjetaVisaVI();
                        }
                        else
                        {
                            seleccionarTengoTarjetaVisaVI();
                        }
                            
                        condicionSeleccionada = this.index;
                        seleccionaCondicion(this);
                   };
   //Función que permite deseleccionar el radio button correspondiente a esta condición de cobro
   this.deseleccionar = function(){
                        this._getRadio().checked = false;
                        condicionSeleccionada = null;
                   };
   //Función que permite deseleccionar el radio button correspondiente a esta condición de cobro
   this.estaSeleccionada = function(){
                            return this._getRadio().checked;
                   };
   //Devuelve el elemento de tipo radio buttom que corresponde a esta condición
   this._getRadio = function(){
                        return document.getElementById(this.index);
                   };                 
                   
   //Si se envía parámetro seleccionar = True, seleccionamos la condición actual                         
   if(seleccionar) this.seleccionar();
}

//Crea un nuevo objeto condicionCobro a partir de los parámetros proporcionados y lo añade a la lista de condiciones de cobro
function crearCondicionCobro(index, id, cod, desc, porcentaje, anticipo, totalReserva, marca, idResto, codResto, descResto, tipoPago, tipoTarjetaCod, permiteFinanciacion, validaVisaVI, seleccionar)
{
    //Solo la crea si no existe ya en la lista
    if(condicionesCobro[index] == null || condicionesCobro[index] == "undefined")
    {
        var cond = new condicionCobro(index, id, cod, desc, porcentaje, anticipo, totalReserva, marca, idResto, codResto, descResto, tipoPago, tipoTarjetaCod, permiteFinanciacion, validaVisaVI, seleccionar);
        condicionesCobro[index] = cond;
    }
}

//Manejador de evento que se llama al seleccionar un checkbox de condición de cobro
function onCondicionCobroSeleccionada(index)
{
    var condicion = condicionesCobro[index];
    if(condicion != null)
    {
        //Llamamos a la función seleccionar de la condición que ha sido seleccionada
        condicion.seleccionar();
    }
}

////Deshabilita todas las tarjetas excepto la seleccionada
//function deshabilitarSeleccionTarjeta()
//{
////    createCSS('OPTION[value="AX"]', "color: orange");
////    lstTiposTarjeta.object.prevSelectedIndex = lstTiposTarjeta.object.selectedIndex;
////    lstTiposTarjeta.object.prevonchange = lstTiposTarjeta.object.onchange;
////    lstTiposTarjeta.object.onchange = function()
////                                        { 
////                                            if (this.prevSelectedIndex == null 
////                                             || this.prevSelectedIndex == "undefined")
////                                            {
////	                                            this.prevSelectedIndex = 0;
////                                            }
////                                            if(this.options[this.selectedIndex].disabled)
////                                            {
////                                                this.selectedIndex = this.prevSelectedIndex;
////                                            }
////                                            else
////                                            {
////                                                 this.prevSelectedIndex = this.selectedIndex;  
////                                                 if (this.prevonchange)
////                                                 {
////                                                    this.prevonchange(); 
////                                                 }
////                                            }
////                                        };
////                                        

//    lstTiposTarjeta.object.options_ = lstTiposTarjeta.object.options;
//    lstTiposTarjeta.clear();
////    for (var i = 0; i < lstTiposTarjeta.object.options.length; i++)
////    {
////        lstTiposTarjeta.object.options[i];
////        if (!lstTiposTarjeta.object.options[i].selected) 
////        {
////            lstTiposTarjeta.object.options[i] = null;
////        }   
////         
////    }
//}

////Habilita todas las tarjetas
//function habilitarSeleccionTarjeta()
//{
////    for (var i = 0; i < document.reserva.tipo.options.length; i++)
////    {
////        document.reserva.tipo.options[i].disabled = false;
////    }
////    lstTiposTarjeta.object.options = lstTiposTarjeta.object.options_;
//}

function CondicionVisaVI() {
    if(tengoTarjetaVisaVI)
    {
        //Cuando tengamos el numero de tarjeta completo comprobamos si es VISA VI.
        if ((document.getElementById("num1").value.length == 4) && (document.getElementById("num2").value.length == 4) && (document.getElementById("num3").value.length == 4) && (document.getElementById("num4").value.length == 4)){
           
           try
           {
                var num = document.getElementById("num1").value + document.getElementById("num2").value + document.getElementById("num3").value + document.getElementById("num4").value;
          
                //MIH 21/09/2010 - La comprobación pasa a ser asíncrona
                var callbackFunction = function(valida){
                                        if (valida)
                                        {                                        
        //                                        if (document.getElementById("tipo").value == "VI"){
        //                                            // FCG 20/05/2010 - Corregido error al modificar el check de residentes: sustituyo document.getElementById("tipo") por docuemnt.reserva.tipo.
        //                                            //document.getElementById("tipo").options[document.getElementById("tipo").selectedIndex].value = global_CodTarjetaVVI;
        //                                            document.reserva.tipo.options[document.getElementById("tipo").selectedIndex].value = global_CodTarjetaVVI;
        //                                        }
                                            
                                            //Si es VISA VI mostramos condiciones de cobro VISA VI.
                                            mostrarCondCobroVVI();
                                         }else{
                                         
        //                                        if (document.getElementById("tipo").value == global_CodTarjetaVVI){
        //                                            lstTiposTarjeta.setValue(global_CodTarjetaVVI);
        //                                            // FCG 20/05/2010 - Corregido error al modificar el check de residentes: sustituyo document.getElementById("tipo") por docuemnt.reserva.tipo.
        //                                            //document.getElementById("tipo").options[document.getElementById("tipo").selectedIndex].value = "VI";
        //                                            document.reserva.tipo.options[document.getElementById("tipo").selectedIndex].value = "VI";
        //                                        }
                                            
                                            ocultarCondCobroVVI();
                                            //Habilitamos los radio buttons
                                            DesHabilitaFormasPago(false);	
                                            escondeElemento("img_wait");
                                         }
                                         
                                    };
                // Deshabilitamos los radio buttons
                DesHabilitaFormasPago(true);	   
                muestraElemento("img_wait");                
                //Llamamos a la función de validar tarjeta VVI (VISA VI) asíncronamente. Cuando ésta termine, ejecutará la función de callback que le hemos pasado
                validarNumTarjetaAsync(global_sessionId,num,lstTiposTarjeta.getValue(),callbackFunction);
                //validarTarjetaMbnaAsync(global_sessionId,num,callbackFunction);
            }
            catch(ex)
            {        
                //Habilitamos los radio buttons
                DesHabilitaFormasPago(false);	
                //para que en caso de error no se queda activa la imagen de espera...
                escondeElemento("img_wait");
                throw ex;        
            }	 
        }
    }  
}

function mostrarCondCobroVVI()
{  
    //Al mostrar las condiciones de Visa VI, las inicializamos mediante la función initFormaPagoVisaVI
    initFormaPagoVisaVI();
    //Si todavía no se pueden mostrar las condiciones de cobro VVI (falta calcular sus descuentos), calculamos sus descuentos
    //De esta manera evitamos volver a calcular los descuentos si ya se habían calculado anteriormente (puede pasar que después de calcularlos se oculten las cond. visa VI y luego se quieran volver a mostrar, en cuyo caso no querremos volver a calcularlos)
    if(!comprobarMostrarCondicionesCobroVVI())
    {
        //Calculamos descuentos para las condiciones de cobro VISA VI
        for(var condIndex in condicionesCobro)
        {
           var cond = condicionesCobro[condIndex];
           //Si la condición de cobro es de VISA VI    
           if(cond.validaVisaVI) 
           {
                //El descuento lo calculamos sobre el anticipo. No debe hacerse sobre el importe de cobro, ya que éste se modifica al aplicar un descuento, mientras que el anticipo permanece con su valor original aunque se aplique el descuento
                calcularDescuentoEnCobros(cond.anticipo.toString().replace(".", ","), cond.porcentaje.toString().replace(".", ","), cond.index, lstTiposTarjeta.getValue());
           }
        }
    }
}

function comprobarMostrarCondicionesCobroVVI()
{
    var allReady = true;
    //Recorremos las condiciones de cobro de Visa VI
    for(var condIndex in condicionesCobro)
    {
        var cond = condicionesCobro[condIndex];
        //Si hay alguna que no tiene "descuentoCalculado" salimos del bucle
        if(cond.validaVisaVI && !cond.descuentoCalculado) 
        {
            allReady = false;            
            break;
        }
    }
    //Si todas están "ready", escondemos la espera y mostramos la sección de condiciones cobro VISA VI
    if(allReady)
    {
        escondeElemento("img_wait");
        var elemento = document.getElementById("condicionesCobroVisaVI");
        if(elemento != null)
        {
            elemento.style.display = ""; 
        }
        //Seleccionamos la condición por defecto
        seleccionarCondCobroVVIDefecto();	
        //Habilitamos los radio buttons de formas de pago
        DesHabilitaFormasPago(false);        
    }       
    return allReady;
}

function seleccionarCondCobroVVIDefecto()
{
    for(var condIndex in condicionesCobro)
    {
        var cond = condicionesCobro[condIndex];
        //Si tiene el código de la cond. por defecto, la seleccionamos
        if(cond.cod == global_CondCobroVVIDefecto) cond.seleccionar();  
    }
}



function ocultarCondCobroVVI()
{
    var elemento = document.getElementById("condicionesCobroVisaVI");
    if(elemento != null) elemento.style.display = "none";
    //Si la condición seleccionada era de VISA VI, seleccionamos la primera de la lista que NO sea de VISA VI (ya que las hemos ocultado)
    if(condicionSeleccionada != null && condicionesCobro[condicionSeleccionada].validaVisaVI)
    {
        for(var condIndex in condicionesCobro)
        {
           var cond = condicionesCobro[condIndex];
           if(!cond.validaVisaVI) 
           {
                cond.seleccionar();
                break;
           }
        }  
    }
}

function establecerDescuentoNivelExpediente(descuento,pendienteCobro,importeCobro,totalReserva, tipoDescuentoId,importeDescuentoTotal,importeMinimoCobro, tipoGastoId, tipoGastoDes, importeGasto)
{	        
    if (descuento != 0 || importeGasto != 0) 
    {
        //tablaDesgloseReservaEspera.style.display='';
        
        //tdPromoServicio.innerHTML='0,00&nbsp;&#128;'; //Promociones en servicios 0,00 €
        //tdImporteTotalReserva.innerHTML = '<b><span class="verdana9azul">' + formatPreu(totalNuevaReserva) + "</b>&nbsp;&#128;"			        
        //tdDescuento.innerHTML = "-" + formatPreu(importeDescuentoTotal) + "&nbsp;&#128;"	
        
        //tablaDesgloseReserva.style.display='';			    
        //tablaDesgloseReservaEspera.style.display='none';		        
        
        /*if (tipoGastoDes !="")    //assumim que no hi ha gastos de gestió
        {			        
        tdGastosExpedienteDesc.innerHTML = tipoGastoDes;
        }
        else
        {
        tdGastosExpedienteDesc.innerHTML = "Gasto Expediente";
        }*/
    }
    else
    {	
        //neutralizaValoresDescuentoExpediente();		
        tablaDesgloseReservaEspera.style.display='none';
                
        //tdPromoServicio.innerHTML=promocionANivelServicio;			       		        
        //tdImporteTotalReserva.innerHTML = '<b><span class="verdana9azul">' + formatPreu(totalNuevaReserva) + '&nbsp;&#128;</span></b>';
        //tdDescuento.innerHTML = "0,00&nbsp;&#128;"
        //tdGastosExpedienteDesc.innerHTML = "Gasto Expediente";				        	        
    }
    
//    if (pendienteCobro !=0)
//        tdPendienteCobro.innerHTML = "<b>" + formatPreu(pendienteCobro) + "</b>&nbsp;&#128;";
//    else
//        tdPendienteCobro.innerHTML = "<b>0,00&nbsp;</b>&#128;";

    //asumimos que siempre viene a 0!!		           
    /*if (importeGasto != 0)
    {			      
        tdGastosExpediente.innerHTML = "" + formatPreu(importeGasto) + "&nbsp;&#128;";	
        //document.reserva.importeCobroPromocionTxt.value=formatPreu(importeCobro);
    }
    else
    { 			        
        tdGastosExpediente.innerHTML = "0,00&nbsp;&#128;";
    }	*/	    

    //tdPagoAnticipo.innerHTML = "<b>" + formatPreu(importeCobro) + "&nbsp;&#128; </b>";
    //tdGastosEmision.innerHTML = formatPreu(global_gastosGestion)+ "&nbsp;&#128;";
    //tdGastosEnvio.innerHTML = formatPreu(global_importeDatosEnvio)+ "&nbsp;&#128;";
    //tdPagoAnticipoPorcentaje.innerHTML = "<b>PAGO ANTICIPO &nbsp;(" + document.reserva.porcentaje.value + "%)</b>"
    
     //MIH 21/09/2010 - Si vienen informados los campos, se asignan. Sino, se borran
     document.reserva.tipoGastoId.value = (tipoGastoId!=0?tipoGastoId:"");
     document.reserva.tipoGastoDes.value = tipoGastoDes;
     document.reserva.importeGasto.value = (importeGasto!=0?formatPreu(importeGasto):"");
     document.reserva.importeCobro.value = (importeCobro!=0?formatPreu(importeCobro):"");
     document.reserva.importePromocionExpediente.value = (descuento!=0?formatPreu(descuento):"");
     document.reserva.tipoDescuentoId.value = (tipoDescuentoId!=0?tipoDescuentoId:"");
}

//MIH 21/09/2010 - Recibe un objeto de tipo condición de cobro
function seleccionaCondicion(cond)
{	
    var tarjetaID = "";
    var codigoTarjeta = "";
    ocultaFormasPago();
     		    		    
    muestraFormasPago(cond.tipoPago);
    
    //MIH 15/09/2010 - Solo actualizamos la lista de tarjetas si no es cond. cobro VVI, ya que en ese caso el cliente ya habría seleccionado su tarjeta (Visa)
    if(!cond.validaVisaVI)
    {
        if (cond.tipoPago == "tarjeta"){     
            // FCG 24/05/2010 - Si llega un código de tipo de tarjeta informado, es porque queremos que sólo se muestre ese tipo.
            obtenerTarjetasFiltradas(cond.marca, cond.permiteFinanciacion, cond.tipoTarjetaCod);	
            codigoTarjeta = document.getElementById("tipo").value;	
            if (cond.permiteFinanciacion)
            {
                calcularDescuentoEnCobros(cond.anticipo.toString().replace(".", ","), cond.porcentaje.toString().replace(".", ","), cond.index, codigoTarjeta);		
            }		             
        }
    }       	

    tablaDesgloseReserva.style.display='none';			    
    tablaDesgloseReservaEspera.style.display='none';
    
    //Asignamos los valores del formulario de reserva a partir de los valores de la condición seleccionada
    document.reserva.importeCobro.value = cond.importeCobro;
   	establecerDescuentoNivelExpediente(cond.descuento,cond.pendienteCobro,cond.importeCobro,cond.totalReserva, cond.tipoDescuentoId,cond.importeDescuentoTotal,cond.importeMinimoCobro, cond.tipoGastoId,cond.tipoGastoDes, cond.importeGasto);	    
    document.reserva.codigoAnticipo.value = cond.cod;
    document.reserva.codigoResto.value = cond.codResto;
    document.reserva.tipoPago.value = cond.tipoPago;
    document.reserva.permiteFinanciacion.value = cond.permiteFinanciacion;
    document.reserva.porcentaje.value = cond.porcentaje;		    
    document.reserva.iDant.value = cond.id;
    document.reserva.iDres.value = cond.idResto;
    document.reserva.descAnt.value = cond.desc;
    document.reserva.descRes.value = cond.descResto;
    //Actualizamos los importes y desgloses de la reserva
    actualizarImportesYDesgloses(cond);
    //Habilitamos los radio buttons por si estaban desactivados
    DesHabilitaFormasPago(false);	
}	

function actualizarImportesYDesgloses(condicionCobro) 
{
    if(condicionCobro != null)
    {
        
        // FCG 20/05/2010 - Corregido error al modificar el check de residentes: sustituyo document.getElementById("tipo") por docuemnt.reserva.tipo.
        //var combo = document.getElementById("tipo");
        var combo = document.reserva.tipo;
        var PrecioTotalReserva = condicionCobro.totalReserva;//formatPreu(parseNumero(global_precioTotalReserva) + parseNumero(global_importeDescuentoServicios) - parseNumero(global_importeDescuentoNivelExpediente));
//OBSOLETO - Ya no se muestra este mensaje
//        //MIH 21/09/2010 - Si hay descuento VISA VI, mostramos el aviso (en caso contrario lo ocultamos)
//        if(condicionCobro.descuento > 0 && condicionCobro.validaVisaVI)
//        {
//            muestraElemento("infoMbna");
//        }
//        else
//        {
//            escondeElemento("infoMbna");
//        }
        if(document.getElementById("BigImporteTotal")) document.getElementById("BigImporteTotal").innerHTML = formatPreu(PrecioTotalReserva) + "&nbsp;&euro;";
        if(document.getElementById("PrecioTotalReserva")) document.getElementById("PrecioTotalReserva").innerHTML = formatPreu(PrecioTotalReserva) + "&nbsp;&euro;";
    
        //MIH 21/09/2010 - Si hay descuento VISA VI, mostramos la línea de desglose correspondiente (en caso contrario la ocultamos)
        if(condicionCobro.descuento > 0)
        {
            muestraElemento("DescuentoLavadora");
        }
        else
        {
            escondeElemento("DescuentoLavadora");
        }
        
        //Obtenemos los elementos por nombre (DescuentoServicio)
        var descuentosServicio = document.getElementsByName("DescuentoServicio");
        if(descuentosServicio != null && descuentosServicio.length > 0)
        {      
            //Primero mostramos todos los descuentos del desglose
            for(i=0; i < descuentosServicio.length; i++)
            {  
                if(descuentosServicio[i].parentNode != null)
                {
                    descuentosServicio[i].parentNode.style.display='';
                }
            }  
            //Luego, si la condición de cobro tiene descuentos a eliminar los ocultamos del desglose
            if(condicionCobro.descEliminados != null && condicionCobro.descEliminados.length > 0)
            {
                    for(i=0; i < condicionCobro.descEliminados.length; i++)
                    {            
                        var descId = parseInt(condicionCobro.descEliminados[i]);
                        //descId corresponde al número de orden del descuento (en teoría), así que ocultamos el elemento que se encuentre en esa posición
                        if(descId >= 0 && descId < descuentosServicio.length)
                        {
                            if(descuentosServicio[descId].parentNode != null)
                            {
                                descuentosServicio[descId].parentNode.style.display='none';
                            }
                        }  
                    }           
            }
        }
        
        if(document.getElementById("ImporteDescuento") != null)
        {
            document.getElementById("ImporteDescuento").innerHTML = "-&nbsp;" + formatPreu(condicionCobro.descuento) + "&nbsp;&euro;&nbsp;";
        }
        if(document.getElementById("ImporteTotalDesglose") != null)
        {
            document.getElementById("ImporteTotalDesglose").innerHTML = "<b>" + formatPreu(PrecioTotalReserva) + "&nbsp;&euro;</b>&nbsp;&nbsp;";
        }
        if(document.getElementById("ConceptoPromocionExpediente") != null)
        {
            if(condicionCobro.descuento > 0 && condicionCobro.validaVisaVI)
            {
                 document.getElementById("ConceptoPromocionExpediente").value = condicionCobro.desc;
            }
            else
            {
                document.getElementById("ConceptoPromocionExpediente").value = "";
            }
        }        
        //Asignamos el importe de cobro de la reserva con el valor del importe de cobro de la condición de cobro seleccionada
        document.reserva.importeCobro.value = formatPreu(condicionCobro.importeCobro);
    }
}

function calcularDescuentoEnCobros(importeACobrar, porcentaje, condicionCobroIndex, tipoTarjetaId)
{   	    
    tablaDesgloseReserva.style.display='none';			    
    //tablaDesgloseReservaEspera.style.display='';
        
    //promocionExp.style.display='none';
    // Llamamos a la lavadora		  
    
    //Obtenemos el objeto condicionCobro de la lista a partir del id de la condición de cobro
    var condicionCobro = condicionesCobro[condicionCobroIndex];
    //Solo calculamos su descuento si no tiene activo el campo descuento calculado, es decir, si no se ha calculado ya anteriormente
    if(!condicionCobro.descuentoCalculado)
    {
        condicionCobro.xmlDescuentoCobro = Sarissa.getDomDocument();
        condicionCobro.xmlDescuentoCobro.async = true; // this is the important part    
        condicionCobro.xmlDescuentoCobro.onreadystatechange = function()
        {
            obtenerRespuestaCalcularDescuentoEnCobros(condicionCobro);
        }

        var urlDescuentoCobro = ""; 
        urlDescuentoCobro += "getDescuentoCobro.ashx?sesion=" + global_sessionId;
        urlDescuentoCobro += "&totalReserva=" + global_precioTotalReserva + "&ImporteDescuentoServicios=" + global_importeDescuentoServicios;
        urlDescuentoCobro += "&importeACobrar=" + importeACobrar;
        urlDescuentoCobro += "&porcentaje=" + porcentaje;
        urlDescuentoCobro += "&condicionCobroId=" + condicionCobro.id;
        urlDescuentoCobro += "&tipoTarjetaId=" + tipoTarjetaId;
        urlDescuentoCobro += "&descuentoAnterior=0"; 
        condicionCobro.xmlDescuentoCobro.load(urlDescuentoCobro);
    }
}

function obtenerRespuestaCalcularDescuentoEnCobros(condicionCobro)
{			
    // Recogemos el resultado de la lavadora
    if (condicionCobro != null && condicionCobro.xmlDescuentoCobro != null)
    {
        var xmlDescuentoCobro = condicionCobro.xmlDescuentoCobro;
        if (xmlDescuentoCobro.readyState == 4 && xmlDescuentoCobro.documentElement)
        {      
            var isLavadoraActivada =  Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("LavadoraActivada"), false); 
            if (isLavadoraActivada == "true")
            {
                var importeAnt = condicionCobro.importeCobro;
                //asignamos los valores recibidos a la condición de cobro                         
                condicionCobro.descuento = Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("importeDescuento"), false);
                condicionCobro.pendienteCobro = Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("pendienteCobro"), false);
                condicionCobro.importeCobro = Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("NuevoImporteACobrar"), false);
                condicionCobro.totalReserva = Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("totalNuevaReserva"), false);
                condicionCobro.tipoDescuentoId = Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("tipoDescuentoId"), false);
                condicionCobro.importeDescuentoTotal = Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("importeDescuentoTotal"), false);
                condicionCobro.importeMinimoCobro = Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("importeMinimoCobro"), false);        
                condicionCobro.tipoGastoId = Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("tipoGastoId"), false);
                condicionCobro.tipoGastoDes = Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("tipoGastoDes"), false);
                condicionCobro.importeGasto = Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("importeGasto"), false);                  
                
                //Añadimos a la condición, los Id's de descuentos que se deben eliminar del desglose cuando se seleccione esta condición
                if (xmlDescuentoCobro.documentElement.selectSingleNode("descuentosAEliminar") != null)
                {
                   var descEliminar = Sarissa.getText(xmlDescuentoCobro.documentElement.selectSingleNode("descuentosAEliminar"), false);
                   //Vienen separados por el carácter "_"
                   var arrayEliminar = descEliminar.split("_");
                   if(arrayEliminar != null) condicionCobro.descEliminados = arrayEliminar;
                }
                
                if (compruebaInfoRecibida(condicionCobro.pendienteCobro) == false)
                {
                    tablaDesgloseReserva.style.display='none';			    
                    tablaDesgloseReservaEspera.style.display='none';
                }
                //Aplica el formato float a los importes asignados
                condicionCobro.importeCobro = parseFloat(condicionCobro.importeCobro.replace('.','').replace(',','.'));
   	            condicionCobro.descuento = parseFloat(condicionCobro.descuento.replace('.','').replace(',','.'));	
   	            condicionCobro.importeDescuentoTotal = parseFloat(condicionCobro.importeDescuentoTotal.replace('.','').replace(',','.'));               		            
                condicionCobro.importeGasto = parseFloat(condicionCobro.importeGasto.replace('.','').replace(',','.'));
                condicionCobro.totalReserva = parseFloat(condicionCobro.totalReserva.replace('.','').replace(',','.'));		            
                condicionCobro.pendienteCobro = parseFloat(condicionCobro.pendienteCobro.replace('.','').replace(',','.'));

                //Actualiza el importe mostrado por esta condición de cobro
		if(condicionCobro.importeCobro != importeAnt) condicionCobro.actualizarImporte();
                                
            }
            //Activamos descuentoCalculado de la condición de cobro
            condicionCobro.descuentoCalculado = true;
            //Solo en caso de que la condición sea de Visa VI
            if(condicionCobro.validaVisaVI)
            {
                //Comprobamos si ya se pueden mostrar las cond. cobro VVI (se mostrarán cuando todas tengan activo descuentoCalculado, o sea, cuando todas hayan terminado de calcular sus descuentos)
                comprobarMostrarCondicionesCobroVVI();       
            }
            //Si esta seleccionada, la volvemos a seleccionar para que se aplique su importe
            if(condicionCobro.estaSeleccionada) condicionCobro.seleccionar();               
        }		
    }
}


function neutralizaValoresDescuentoExpediente()
{
    document.reserva.tipoGastoId.value = "";
    document.reserva.tipoGastoDes.value = "";
    document.reserva.importeGasto.value = "";
    document.reserva.importePromocionExpediente.value = "";
    document.reserva.tipoDescuentoId.value = "";
}

function seleccionarTengoTarjetaVisaVI()
{
       //Marcamos el radio
       var element = document.getElementById("tengoVisaViajesIberia");
       if(element != null) element.checked = true;       
       onTengoTarjetaVisaVISeleccionada();
}

function onTengoTarjetaVisaVISeleccionada()
{
      //Lo siguiente solo lo hace si no estaba ya seleccionada
      if (!tengoTarjetaVisaVI)
      {
      	  ocultaFormasPago();   		    
	      muestraFormasPago("tarjeta");
          //ponemos a true la variable
          tengoTarjetaVisaVI = true;
          if(document.reserva.tipo.selectedIndex > -1)
          {
              //Guardamos el código de la tarjeta seleccionada actualmente
              tipoTarjetaOriginal = document.reserva.tipo.options[document.reserva.tipo.selectedIndex].value;
          }           
	      //Impedimos que se puedan seleccionar otras tarjetas
          if(lstTiposTarjeta) 
          {
		    lstTiposTarjeta.clear();
	      }
	      else
	      {
		    lstTiposTarjeta = new listbox();
		    lstTiposTarjeta.object = document.reserva.tipo;	
	      }
          //deshabilitarSeleccionTarjeta();
          //Creamos la nueva opción de tarjeta "Visa Viajes Iberia" y la seleccionamos
          lstTiposTarjeta.object.options[lstTiposTarjeta.object.options.length] = new Option("Visa Viajes Iberia", global_CodTarjetaVVI);
          lstTiposTarjeta.setValue(global_CodTarjetaVVI);
          if(condicionSeleccionada != null ) 
          {
            //Deseleccionamos la condición actual ya que la opción "Tengo Visa Viajes Iberia" no comparte el mismo "name" que
            //los radiobuttons de las otras condiciones y por tanto al seleccionar esta no se deselecciona automáticamente la actual sino que hay que hacerlo manualmente
            condicionesCobro[condicionSeleccionada].deseleccionar();
            CondicionVisaVI();
          }
      }
}

function deseleccionarTengoTarjetaVisaVI()
{
    //desmarcamos el radio
    var element = document.getElementById("tengoVisaViajesIberia");
    if(element != null) element.checked = false;       
    //Lo siguiente solo se hace si estaba seleccionada
    if (tengoTarjetaVisaVI)
    {
       //ponemos a false la variable
       tengoTarjetaVisaVI = false;

       //ocultamos las condiciones Visa VI
       ocultarCondCobroVVI();       
       
       if(lstTiposTarjeta.object.selectedIndex > -1)
       {
//            if(tipoTarjetaOriginal && tipoTarjetaOriginal != "") 
//            {
//                //Seleccionamos el tipo que había seleccionado anteriormente
//                lstTiposTarjeta.setValue(tipoTarjetaOriginal);
//                tipoTarjetaOriginal = "";
//            }
            //Borramos la opción VISA VI
            lstTiposTarjeta.object.options[lstTiposTarjeta.object.selectedIndex] = null;
       }
       //Volvemos a permitir seleccionar tarjeta
       //habilitarSeleccionTarjeta();   
   }
}

function mostrarInfoVisaVI()
{
    var elemento = document.getElementById("infoVisaVI");
    if(elemento != null) elemento.style.display = "";
}

function ocultarInfoVisaVI()
{
    var elemento = document.getElementById("infoVisaVI");
    if(elemento != null) elemento.style.display = "none";
}
