    /**
    * Archivo con las funciones específicas de esta app que utilizan
    * el agente AJAX para realizar operaciones descritas en archivos PHP
    * 06/03/2008
    */
    
    /**
    * function jsFunciones_agent__enviarSysMensaje(sMensaje, sTipo)
    * muestra un mensaje en forma de dialogo modal
    * @param sMensaje el mensaje a mostrar en el cuerpo
    * @param sTipo si vale 'e' mostrar mensaje de error, caso contrario mostrar mensaje de notificacion normal
    */    
    function jsFunciones_agent__enviarSysMensaje(sMensaje, sTipo)
    {
        if (sTipo=='e'){ //si hay algun error presentar mensaje con exclamacion
            //$('#modal_dialog_mensajes_sistema').dialog('option', 'dialogClass', 'alert');
            //$('#modal_dialog').html('<center><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>'+sMensaje+'</center>');
        }
        else { //sino presentar mensaje con "circulito checkeado"
            //$('#modal_dialog_mensajes_sistema').dialog('option', 'dialogClass', '');
            //$('#modal_dialog').html('<center><span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>'+sMensaje+'</center>');
        }
        $('#modal_dialog').dialog('close');
        $('#modal_dialog_mensajes_sistema').html('<center>'+sMensaje+'</center>');
        $('#modal_dialog_mensajes_sistema').dialog('open');
    }
       
    /**
    * Muestra los datos de una oferta
    */    
    function call_vMostrarDatosOferta(iPkBusquedaHoteles)
    {
        iWidth='670';
        iHeight='450';
        sMensajeCargando="Cargando...";
        sMensajeCargando=preparaDialog(sMensajeCargando,iWidth,iHeight);
        call_llamadaAjaxTransparenciaInicioJquery(sMensajeCargando,'functions/func_app.php', 'func_app__vMostrarDatosOferta', iPkBusquedaHoteles, iWidth, iHeight, "./img/");
    }

    
    /**
    * funciones__desactivaCheckBox()
    * desactiva el campo de la checkbox si el usuario del que se recuperan
    * los datos tiene marcada la opción de "DESEO RECIBIR OFERTAS"
    */   
    function call_vActivaCheckBox()
    {
        // comprueba si el formulario de solicitud de datos
        // al usuario hay un hidden name=hPkUsuario value=<id de usuario>
        // si hay algo quiere decir que después de clickar al botón de obtener datos
        // se encontró algo y que se debe ocultar la opción de recibir ofertas si ya la tiene seleccionada
        var hPkUsuario = document.getElementById('hPkUsuario').value;
        $.get("functions/func_usuarios.php", {func: "func_usuarios__bTieneActivadoRecibirBoletin",
            param1: hPkUsuario},
            function(data){
                callback_vActivaCheckBox(data);
                }
            );
    }
    
 
    /**
    * function callback_vActivaCheckBox()
    */ 
    function callback_vActivaCheckBox(str)
    {
        if(document.getElementById('divChkOfertas'))
        {
            if(str=="false")
            {
                document.getElementById('divChkOfertas').style.visibility = "visible";
            }
            else
            {
                document.getElementById('divChkOfertas').style.visibility = "hidden";
            }
        }
    }
 

    /**
    * Function res_change_order()
    * cambia el orden a la hora de mostrar los resultados
    */ 
    function call_results_change(iPagina)
    {
        /*$('#modal_dialog').dialog('option', 'height', 80);
        $('#modal_dialog').dialog('option', 'width',200);
        $('#modal_dialog').dialog('option', 'title','Resultados de Búsqueda');
        $("#modal_dialog").html("<center>Ordenando Resultados...</center>");
        $('#modal_dialog').dialog('open');*/
        call_llamadaProcesoInicio("Recuperando la p&aacute;gina "+iPagina);

        // Obtengo el indice seleccionado de la combo de registros por página
        var indice                  = document.getElementById('slt_resultados_pagina').selectedIndex;
        var iRegistrosPorPagina     = document.getElementById('slt_resultados_pagina').options[indice].text;        
        // Obtengo el índice del orden seleccionado
        with(document.frmOrden)
        {
            var iOrder = iGetRadioButtonSelectedValue(chkorder);
        }

        var iRegistrosPorPaginaOld='';
        $.get("core/includes/common.inc.php", { func: "common__session_manager__getValue", param1: "iRegistrosPorPagina" },
            function(data){
                iRegistrosPorPaginaOld=removeChar(data);
                if(iRegistrosPorPaginaOld != iRegistrosPorPagina && iRegistrosPorPaginaOld!='')
                    iPagina = 1;
                // Salvamos los parámetros en el session manager
                var sVar="iRegistrosPorPagina|iOrder|iPagina";
                var sValue=iRegistrosPorPagina+"|"+iOrder+"|"+iPagina;
                $.get("core/includes/common.inc.php", { func: "common__session_manager__saveValues", param1: sVar, param2: sValue },
                    function(data){
                        // Llámamos de nuevo al mostrar resultados
                        $.get("functions/func_busqueda_hoteles.php", {
                            func: "func_busqueda_hoteles__sMostrarResultadosBusqueda"},function(data){
                                callback_results_change(data);
                            });
                    });
            });
    }
     function callback_ObtenerDetalleGTA_results_change(bDeboActualizar)
     {

        if (bDeboActualizar){
            $.get("functions/func_busqueda_hoteles.php", {
                func: "func_busqueda_hoteles__sMostrarResultadosBusqueda"},function(data){
                    aValores    = data.split('|');
                    aValores[0] = removeChar(aValores[0]);
                    if( (aValores[0]==='true') || (aValores[0]===true) )
                        {
                        ocultarDiv('est__divCuerpoBuscador');
                        mostrarDiv('est_divCuerpoLinkNuevaBusqueda');
                        $("#est__divCuerpoCentro").html(aValores[1]);
                        }
                    });
        }
    }
    function callback_results_change(str)
    {    
        call_llamadaProcesoFin();
        aValores = str.split('|');
        aValores[0] = removeChar(aValores[0]);
        
        if(aValores[0]=='true')
        {
            document.getElementById('est__divCuerpoCentro').innerHTML = aValores[1];
            $.get("functions/func_busqueda_hoteles.php", {
                func: "func_busqueda_hoteles__ObtenerDetalleGTA"},function(data){
                    callback_ObtenerDetalleGTA_results_change(data);
                    });
            // document.getElementById('est__divCuerpoCentro').focus();            
        }
        else
        {
            alert(aValores[1]);
        }
    }
    

    /**
    * function call_vProcesoReserva_0()
    */       
    function call_vProcesoReserva_0(sFormulario)    
    {    
            $.get("core/includes/common.inc.php", {
                    func: "common__setUrlBack", 
                    param1: 'call_vProcesoReserva_0'});
            // Recogemos todos los parámetros del formulario indicado
            var sParametros = formData2QueryString(document.getElementById(sFormulario));
                    
            // Extrae el valor del campo hidden sPkTmpBusquedaHotel de la cadena.
            // Éste es el identificador de la reserva(LOCALIZADOR)
            iPkTmpBusquedaHotel = sBuscarEnFormData2QueryString(sParametros, 'hPkTmpBusquedaHotel');
             
            // Hace visible el div mágico.
            call_llamadaAjaxTransparenciaInicioJquery('','', '', '', '720', '550', "./img/");
            
            // Llamamos a la función de PHP que inicia el proceso (las variables)
            $.get("functions/func_reservas.php", {
                    func: "func_reservas__sIniciarReserva",
                    param1: iPkTmpBusquedaHotel},
                    function(data){
                        aResultado = data.split('|');
                        // Si hay un error al iniciar el proceso, mostramos un mensaje y cerramos el DIV mágico
                        if (aResultado[0]=='false')
                            {
                            call_llamadaAjaxTransparenciaFin();
                            }
                        else
                            {
                            // Si todo fue correcto, llamamos al paso 1,
                            // El resultado de esta petición lo devolverá a una función genérica del proceso
                            // de reserva, que se encarga de mostrar los mensajes de error o la pantalla correspondiente
                            call_vProcesoReserva_1();
                            }
                        });
    }
 
    /**
    * function call_vProcesoReserva_1()
    * paso 1 del proceso de reserva
    */ 
    function call_vProcesoReserva_1()
    {
        $.get("core/includes/common.inc.php", {
            func: "common__setUrlBack",
            param1: 'call_vProcesoReserva_1'});
        $.get("functions/func_reservas.php", {
            func: "func_reservas__sReservarPaso_01"},
            function(data){
                callback_vProcesoReservaGenerico(data);
            });
    }
 
    /**
    * function call_vProcesoReserva_2()
    * paso 2 del proceso de reserva
    */
    function call_vProcesoReserva_2()
    {                                    
        with(document.frmProcesoReserva)
        {    
            if(!iGetRadioButtonSelectedValue(rb_seguro))
            {
                alert("Debes seleccionar una opci\xF3n para el seguro.");
                return(false);
            }
                        
            submit();            
        }                
    }
    
    /**
    * @desc function call_vProcesoReservaNieve_2()
    * Saltamos al segundo paso de la reserva
    */
    function call_vProcesoReservaNieve_2()
    {
        with(document.frmProcesoReserva)
        {                                 
            // Comprobaciones en caso de ser necesarias
            
            submit();
        }                
    }

    
    /**
    * function call_vProcesoReserva_3()
    * paso 3 del proceso de reserva
    */
    function call_vProcesoReserva_3()
    {
        var sParametros = formData2QueryString(document.getElementById("frmProcesoReserva"));    
        var iPkUsuario  = sBuscarEnFormData2QueryString(sParametros, 'hPkUsuario');
        
        // El usuario ya existe, compruebo que esten los datos necesarios
        if(iPkUsuario!="")
        {
            /* NOMBRE */
            if(!bCampoVacio("NOMBRE","Debe introducir su nombre"))
            {
                return(false);
            }
            /* APELLIDOS */
            if(!bCampoVacio("APELLIDO1","Debe introducir su 1er Apellido"))
            {
                return(false);
            }
         /*   if(!bCampoVacio("APELLIDO2","Debe introducir su 2do Apellido"))
            {
                return(false);
            }*/
            /* CORREO */
            if(!bEmailValido("EMAIL","Debe proporcionar un email v\xE1lido"))
            {
                return(false);
            }
            /* NIF */
            if(!bCampoVacio("VALOR_NIF_PASAPORTE","Se requiere el documento de identificaci\xF3n"))
            {
                return(false);
            }
            
            else
            {
                if (document.getElementById("TIPO_NIF_PASAPORTE").value==1){

                    //validar NIF / DNI
                    var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
                    var nif=document.getElementById("VALOR_NIF_PASAPORTE").value;
                    if (!/^\d{8}([a-z]|[A-Z])$/.test(nif)) {
                        alert ("El nif introducido no es v\xE1lido");
                        return false;
                    }else { //comprobar letra
                        var numero = nif.substr(0, nif.length-1) % 23;
                        var letra_buena = letras.substring(numero,numero+1);
                        var letra_introducida = nif.substr(nif.length-1,nif.length);
                        letra_introducida = letra_introducida.toUpperCase();
                        if (letra_buena!=letra_introducida) {
                            alert ("El nif introducido no es v\xE1lido, la letra es incorrecta");
                            return false;
                        }
                    }
                }
                else if (document.getElementById("TIPO_NIF_PASAPORTE").value==3)
                {
                    //validar NIE
                    letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
                    nie=document.getElementById("VALOR_NIF_PASAPORTE").value;
                    nie=nie.substr(1,nie.length);//eliminar X del principio
                    if (!/^\d{7,8}([a-z]|[A-Z])$/.test(nie)) {
                        alert ("El nie introducido no es v\xE1lido");
                        return false;
                    }else { //comprobar letra
                        numero = nie.substr(0, nie.length-1) % 23;
                        letra_buena = letras.substring(numero,numero+1);
                        letra_introducida = nie.substr(nie.length-1,nie.length);
                        letra_introducida = letra_introducida.toUpperCase();
                        if (letra_buena!=letra_introducida) {
                            alert ("El nie introducido no es v\xE1lido, la letra es incorrecta");
                            return false;
                        }
                    }
                }
            } 
        }
        // Si el usuario se quiere dar de alta ahora
        else
        {
            /* NOMBRE */
            if(!bCampoVacio("NOMBRE","Debe introducir su nombre"))
            {
                return(false);
            }
            /* APELLIDOS */
            if(!bCampoVacio("APELLIDO1","Debe introducir su 1er Apellido"))
            {
                return(false);
            }
           /* if(!bCampoVacio("APELLIDO2","Debe introducir su 2do Apellido"))
            {
                return(false);
            }*/
            /* CORREO */
            if(!bEmailValido("EMAIL","Debe proporcionar un email v\xE1lido"))
            {
                return(false);
            }
            /* NIF */
            if(!bCampoVacio("VALOR_NIF_PASAPORTE","Se requiere el documento de identificaci\xF3n"))
            {
                return(false);
            }
            else{
                if (document.getElementById("TIPO_NIF_PASAPORTE").value==1){

                    //validar NIF / DNI
                    var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
                    var nif=document.getElementById("VALOR_NIF_PASAPORTE").value;                                       
                    if (!/^\d{8}([a-z]|[A-Z])$/.test(nif)) {
                        alert ("El nif introducido no es v\xE1lido");
                        return false;
                    }else { //comprobar letra
                        var numero = nif.substr(0, nif.length-1) % 23;
                        var letra_buena = letras.substring(numero,numero+1);
                        var letra_introducida = nif.substr(nif.length-1,nif.length);
                        letra_introducida = letra_introducida.toUpperCase();
                        if (letra_buena!=letra_introducida) {
                            alert ("El nif introducido no es v\xE1lido, la letra es incorrecta");
                            return false;
                        }
                    }
                } else if (document.getElementById("TIPO_NIF_PASAPORTE").value==3){
                    //validar NIE
                    letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
                    nie=document.getElementById("VALOR_NIF_PASAPORTE").value;
                    nie=nie.substr(1,nie.length);//eliminar X del principio
                    if (!/^\d{7,8}([a-z]|[A-Z])$/.test(nie)) {
                        alert ("El nie introducido no es v\xE1lido");
                        return false;
                    }else { //comprobar letra
                        numero = nie.substr(0, nie.length-1) % 23;
                        letra_buena = letras.substring(numero,numero+1);
                        letra_introducida = nie.substr(nie.length-1,nie.length);
                        letra_introducida = letra_introducida.toUpperCase();
                        if (letra_buena!=letra_introducida) {
                            alert ("El nie introducido no es v\xE1lido, la letra es incorrecta");
                            return false;
                        }
                    }
                }
            }
            /* LOGIN */
            if(!bCampoVacio("USUARIO","Se requiere un usuario"))
            {
                return(false); 
            }
            /* CLAVE */
            if(!bCampoVacio("PASSWORD","Se requiere una clave"))
            {
                return(false); 
            }
            /* LONGITUD CLAVE */
            if(!bLongitudMinima("PASSWORD","La clave debe tener como m\xEDnimo 6 d\xEDgitos", 6))
            {
                return(false); 
            }        
        }
        
        // Campos genéricos para todos
        if(!bCampoVacio("txt_huesped_nombre", "Introduzca el nombre del titular"))
        {
            return(false);
        }
            
        if(!bCampoVacio("txt_huesped_apellidos", "Introduzca los apellidos del titular"))
        {
            return(false);
        }
            
        if(!bCampoVacio("txt_huesped_fono_movil", "Ingrese Tel\xE9fono/M\xF3vil del titular"))
        {
            return(false);
        }

        if(!bEmailValido("txt_huesped_email","Ingrese el Email del titular"))
        {
            return(false);
        }
    
        // Compruebo que esten seleccionadas las checkbox
        if(!bCheckBoxSeleccionada("chk_acepto0", "Para continuar con la reserva debe aceptar las condiciones generales y de privacidad."))
        {        
            return(false)
        }
            
        with(document.frmProcesoReserva)
        {        
            submit();
        }
        // Si todo es OK    
        // agent.call('','func_reservas__sReservarPaso_03', 'callback_vProcesoReservaGenerico', sParametros);     
    }
 
    /**
    * función genérica para el proceso de la reserva que recibe los resultados
    * de los pasos del proceso
    */
    function callback_vProcesoReservaGenerico(str)
    {            
        call_llamadaAjaxTransparenciaFin();
        aValores = str.split('|');
        aValores[0] = removeChar(aValores[0]);
        if( (aValores[0]==="true") || (aValores[0]===true) )
        {
            document.getElementById('modal_dialog').innerHTML = aValores[1];
        }
        else
        {
            alert(aValores[1]);
            // No Cerramos la ventana, que la cierre el usuario
            // call_llamadaAjaxTransparenciaFin();            
        }        
    }
 
    /**
    * función que calcula el importe del seguro y el total con el seguro aplicado
    */
    function call_vCalcularSeguroCancelacionReserva(fPrecioFinal, bAplicaSeguro)
    {
        $.get("functions/func_reservas.php", {
            func: "func_reservas__aCalculaSeguro",
            param1: fPrecioFinal,
            param2: bAplicaSeguro},
            function(data){
                aValores = data.split('|');
                document.getElementById('divPrecioSeguroCancelacion').innerHTML = aValores[0]+' &euro;';
                document.getElementById('divPrecioFinal').innerHTML             = '<strong>'+aValores[1]+' &euro;</strong>';
                }
            );
    }
    function call_vCalcularSeguroCancelacionReserva2(fPrecioFinal,fPrecioFinalOnline, bAplicaSeguro,fImporteHotel)
    {
        $.get("functions/func_reservas.php", {
            func: "func_reservas__aCalculaSeguro",
            param1: fImporteHotel,
            param2: bAplicaSeguro},

            function(data){
                aValores = data.split('|');
				var seguro=new Number(aValores[0].replace(",", "."));
                $('#divPrecioSeguroCancelacion').html(seguro.toFixed(2)+' &euro;');
                $('#divPrecioFinal').html('<strong>'+(parseFloat(fPrecioFinal)+parseFloat(aValores[0].replace(/[,]/g,'.'))).toFixed(2)+' &euro;</strong>');
                $('#divPrecioFinalOnLine').html('<strong>'+(parseFloat(fPrecioFinalOnline)+parseFloat(aValores[0].replace(/[,]/g,'.'))).toFixed(2)+' &euro;</strong>');
                }
            );
    }

    /**
     * function call_vProcesoPago()
     * llama al inicio del proceso de pago
     */ 
    function call_vProcesoPago()
    {
        alert("A continuaci\xF3n vas a entrar a un lugar seguro.");
        with(document.frmProcesoPago)
        {
            // Actualizamos el estado de la reserva para indicar que está en la pasarela
            $.get("functions/func_reservas.php",
                {func: "func_reservas__marcaEnPasarela"},
                function(data){                    
                    submit();
                    }
            );
        }
    }

    /**
     * function call_vProcesoPagoVuelos()
     * llama al inicio del proceso de pago
     */ 
    function call_vProcesoPagoVuelos()
    {
        alert("A continuaci\xF3n vas a entrar a un lugar seguro.");
        with(document.frmProcesoPago)
        {
            // TODO : aquí se debería marcar en la reserva que he saltado a la pasarela
            $.get("functions/func_vuelos.php", {func: "func_vuelos__marcaEnPasarela"},
                function(data){
                    submit();
                    }
                );
        }
    }    
    
    
    /**
    * function call_vMostrarFotoPrimeraLinea()
    * Carga en el div mágico la foto en grande que nos vendrá desde primera linea
    */
    function call_vMostrarFotoPrimeraLinea(sImage)
    {
        $.get("core/includes/common.inc.php", {func: "common__setUrlBack", param1: sImage},
            function(data){
                call_vMostrarFotoPrimeraLinea(data);
                }
            );
        $('#modal_dialog').html( '<img src="'+sImage+'" border="1" /><br /><a href="#null" onclick="javascript:goBack();">volver</a>');
    }