
/***************************************************

    OPERACIONES DE VALIDACIÓN DE FORMULARIO

***************************************************/

function submitForm(idForm){
    var myForm = document[idForm];
    if ( myForm.length > 1 && myForm.action==null)
        myForm = myForm[myForm.length-1];
    //Validar en caso necesario
    if ( arguments.length>1){        
        eval("var correct = "+arguments[1]+"(myForm)");
        if (!correct)
            return;
    }
    myForm.submit();
}

function pintarCampo(formulario, campo, modo){    
    var label = getLabelByFor(formulario, campo["id"]);
    if ( modo == "lineas" )
        var divError = document.getElementById("error_"+campo["id"]);
    
    if ( label != null ){        
        if ( campo["error"]!=null ){
            if ( label.className == "obligatorio" )
                label.className = "error_obligatorio";
            else if (label.className == "normal")
                label.className  = "error_normal";
            
            if ( modo == "lineas" ){                
                if ( divError != null ){                    
                    divError.innerHTML = "<div>"+campo["error"]+"</div>";
                }else{
                    var campoObj = $("#"+campo["id"]).parent();
                    campoObj.append("<div class='errores_formulario_linea' id='error_"+campo["id"]+"'><div>"+campo["error"]+"</div></div>");
                    $("#"+"error_"+campo["id"]).hide().fadeIn();
                }
            }
        }else{
            if ( label.className == "error_normal" )
                label.className  = "normal";
            else if ( label.className == "error_obligatorio" )
                label.className  = "obligatorio";
            
            if ( divError != null )
                borrarDiv(divError);
        }
    }
}


function procesarCampo(formulario, campos, errorMsg, id){    
    for( var i = 0; i < campos.length; i ++ ){        
        if ( campos[i]["id"] == id ){
            if ( campos[i]["error"] != null )
                return; //Si el campo ya está asociado y tiene error, no hacer nada
            campos[i]["error"] = errorMsg;
            return;  //Si está asociado pero no tiene error, asocia el error
        }
    }
    var campo = new Array();
    campo["id"] = id;    
    
    if (errorMsg!=null && errorMsg.toLowerCase().indexOf("<span")!=-1){
        campo["error"]= errorMsg.substring(0,errorMsg.toLowerCase().indexOf("<span")) + errorMsg.substring(errorMsg.toLowerCase().indexOf("</span>"),errorMsg.length);
    }else{
        campo["error"] = errorMsg;
    }
    campos.push(campo);
}

function getLabelByFor(formulario, id){
    var labels=formulario.getElementsByTagName("label");            
    for( var i=0; i<labels.length; i++ ){
        if(labels[i].htmlFor==id)
            return labels[i];        
    }
    return null;
}


function procesarFormulario(formulario, campos, modo, alertMsg){
    var divErrores = document.getElementById("errores_"+formulario.name);
    var erroresMsg = "";
    var errores = false;
    
    //Procesar cada campo
    for ( var i=0; i<campos.length; i++){        
        var campo = campos[i];
        pintarCampo(formulario, campo, modo);
        if ( !errores && campo["error"]!=null )
            errores = true;
        if ( modo == "resumen" && campo["error"] != null )
            erroresMsg+= "<div>"+campo["error"]+"</div>";        
    }
    
    if ( modo == "resumen" ){
        if ( erroresMsg.length > 0 ){
            if ( divErrores == null ){
                formulario.innerHTML = "<div class='errores_formulario' id='errores_"+formulario.name+"'>"+erroresMsg+"</div>" + formulario.innerHTML;
            }else{
                divErrores.innerHTML = erroresMsg;
            }
            return false;
        }else{
            if ( divErrores != null )
                borrarDiv(divErrores);
            return false;
        }
    }
    if ( errores && alertMsg!=null )
        mostrarMensaje(translate(alertMsg),'error');
    
    if ( !errores )
        mostrarCargando();
    
    return !errores;    
}

function mostrarDiv(ddiv){
    if ( ddiv.style==null )
        var ddiv = document.getElementById(ddiv);
        
    if ( ddiv!=null){
        ddiv.style.display="block";
        ddiv.style.visibility="visible";
    }
}

function borrarDiv(ddiv){
    if ( ddiv.style==null )
        var ddiv = document.getElementById(ddiv);    
    $("#"+ddiv.id).fadeOut(300, function() { $(this).remove(); });    
}

function ocultarDiv(ddiv){
    if ( ddiv.style==null )
        var ddiv = document.getElementById(ddiv);    
    
    if ( ddiv!=null){
        ddiv.style.display="none";
        ddiv.style.visibility="hidden";
    }
}

function canviarDiv(divId1, divId2){
    ocultarDiv(divId1);
    mostrarDiv(divId2);
}


function esVacio(valor){
    if(valor!=null && valor !=""){
        return false;
    }
    else{
        return true;
    }                            
}

function esEmail(texto){
    if ( texto.length == 0 ) return true;
    var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    return filter.test(texto);
}

function trim(texto){
    for(i=0; i<texto.length; )
        if(texto.charAt(i)==" ") texto=texto.substring(i+1, texto.length);
        else break;

    for(i=texto.length-1; i>=0; i=texto.length-1)
        if(texto.charAt(i)==" ") texto=texto.substring(0,i);
        else break;

    return texto;
}

function quitarEspacios(texto){
    return texto.replace(" ", "");
}

function esAlfanumerico(texto){
    if ( texto.length == 0 ) return true;
    var illegalChars = /[^A-Za-z0-9_àâèéêíîòóôúûÀÂÈÉÊÍÎÒÓÔÚÛ·.ñçÑÇ]/;
    return !(illegalChars.test(texto));
}
    
function esNumerico(texto){
    var ValidChars = "0123456789";        
    var Char;
    if ( texto.length == 0 ) return true;
    for (i = 0; i < texto.length ; i++){ 
        Char = texto.charAt(i); 
        if (ValidChars.indexOf(Char) == -1)
            return false;
    }
    return true;
}


function validarCampo(formulario, campos, nombre_campo, funcion, mensaje){
    var errorMsg = null;
    eval("var campo = formulario['"+nombre_campo+"'];");
    if ( campo == null ) return;
    
    var valor = campo.value;    
    if ( campo.className=="default" )
        valor = "";
    
    eval("var resultado = "+funcion+"(valor); ");
        
    if ( !resultado )
        errorMsg = translate(mensaje,'alert', getLabelByFor(formulario,formulario[nombre_campo].id).innerHTML);        
    procesarCampo(formulario, campos, errorMsg, formulario[nombre_campo].id);
}


function validarVacio( formulario, campos, nombre_campo ){
    return validarCampo(formulario, campos, nombre_campo, "!esVacio", "campo_obligatorio");    
}


function validarNumerico( formulario, campos, nombre_campo ){
    return validarCampo(formulario, campos, nombre_campo, "esNumerico", "campo_numerico");
}


function validarEmail( formulario, campos, nombre_campo ){
    return validarCampo(formulario, campos, nombre_campo, "esEmail", "email_invalido");
}


function validarDNICIF( formulario, campos, nombre_campo ){    
    var errorMsg = null;
    eval("var campo = formulario['"+nombre_campo+"'];");
    if ( campo == null ) return;
    if ( !esCIF(campo.value) && !esDNI(campo.value) )
        errorMsg = translate('campo_invalido','alert', getLabelByFor(formulario,campo.id).innerHTML);    
    procesarCampo(formulario, campos, errorMsg, campo.id);
}


function validarSelectVacio( formulario, campos, nombre_campo ){
    var errorMsg = null;
    eval("var campo = formulario['"+nombre_campo+"'];");    
    if ( campo == null ) return;
    
    if ( campo.options[campo.selectedIndex].value == 0 || campo.options[campo.selectedIndex].value == -1 )
        errorMsg = translate('campo_obligatorio','alert', getLabelByFor(formulario,campo.id).innerHTML);            
    procesarCampo(formulario, campos, errorMsg, campo.id);
}


function validarPrivacidad( formulario, campos, nombre_campo ){
    var errorMsg = null;    
    eval("var campo = formulario['"+nombre_campo+"'];");
    if ( campo == null ) return;
    if ( !campo.checked )
        errorMsg = translate('aceptar_politica');            
    procesarCampo(formulario, campos, errorMsg, campo.id);
}


function validarMinimo ( formulario, campos, nombre_campo, minimo ){
    var errorMsg = null;
    eval("var campo = formulario['"+nombre_campo+"'];");        
    if ( campo == null ) return;
    if ( campo.value.length < minimo )
        errorMsg = translate('tamano_minimo_campo','alert', getLabelByFor(formulario,campo.id).innerHTML, minimo);    
    procesarCampo(formulario, campos, errorMsg, campo.id);    
}


function validarMaximo( formulario, campos, nombre_campo, maximo ){            
    var errorMsg = null;
    eval("var campo = formulario['"+nombre_campo+"'];");
    if ( campo == null ) return;
    if ( campo.value.length > maximo )
        errorMsg = translate('campo_caracters_maximos','alert', getLabelByFor(formulario,campo.id).innerHTML, maximo);    
    procesarCampo(formulario, campos, errorMsg, campo.id);    
}


function validarIgual( formulario, campos, nombre_campo2, nombre_campo, errorMsgKey ){
    var errorMsg = null;
    eval("var campo = formulario['"+nombre_campo+"'];");
    eval("var campo2 = formulario['"+nombre_campo2+"'];")    
    if ( campo == null || campo2 == null) return;
    if ( campo.value != campo2.value )
        errorMsg = translate(errorMsgKey);
    procesarCampo(formulario, campos, errorMsg, campo.id);
}


function validarExtension( formulario, campos, nombre_campo, extensiones, errorMsgKey ){
    var errorMsg = null;
    eval("var campo = formulario['"+nombre_campo+"'];");
    if ( campo == null ) return;
    if ( campo.length > 0 && !esExtension(campo, extensiones) )
        errorMsg = translate(errorMsgKey,'alert', getLabelByFor(formulario,campo.id).innerHTML);    
    procesarCampo(formulario, campos, errorMsg, campo.id);
}


function crearMensaje(mensaje, tipo){
    var divMensaje = '<div class="oculto"><a id="msg_caller" href="#msg">&nbsp;</a></div><div id="msg"><div id="msg_ventana" class="msg_'+tipo+'"><div class="msg_txt" id="msg_txt"><div class="msg_ico">&nbsp;</div>'+mensaje+'</div></div></div>';    
    $("div#msg_container").empty().append($(divMensaje));
}

function mostrarMensaje(mensaje, tipo){
    
    crearMensaje(mensaje,tipo);
    $('div#msg').css('display','block');
    var alturaVentana = $('div#msg_txt').height() + 20;
    
    if ( arguments.length==3 ){
        var opts = arguments[2];
    }else{
        var opts = {'frameWidth': 440};
    }
    
    $(document).ready(function(){
        if (opts['frameHeight']==null){
            //Hay 3 o más líneas            
            if ( alturaVentana > 60 ){                                
                $('div#msg_txt div.msg_ico').css("height",alturaVentana-10);
                alturaVentana = $('div#msg_txt').height()+20;
                $('div#msg_txt div.msg_ico').css("height",alturaVentana-10);
            }else if ( alturaVentana < 52 ){
                //Si solo hay una línea
                if ( alturaVentana <= 40 ){
                    $('div#msg_txt').css("height",32);
                    $('div#msg_txt').css("line-height","30px");                                    
                    alturaVentana = 52;
                }else{
                    $('div#msg_txt').css("height",32);
                    alturaVentana = 52;
                }
            }            
            opts['frameHeight']=alturaVentana;            
        }
        $('div#msg').css('display','none');
        $("a#msg_caller").fancybox(opts);        
        setTimeout('$("a#msg_caller").click()',50);
    });
}


function mostrarCargando(){        
    mostrarMensaje(translate("enviando_espere","web"), "cargando",{'canClose': false});
}

function cerrarEmergente(elemento){
    $('a#msg_caller').fancybox.close();
}

function mostrarPregunta(mensaje, funcion){
    var respuestas = '<div class="botones_emergentes"><div class="boton_accion boton_naranja_accion" onclick="'+funcion+'">'+translate("aceptar","web")+'</div><div class="boton_accion boton_gris_accion" onclick="cerrarEmergente()">'+translate("cancelar","web")+'</div></div>';
    mostrarMensaje(mensaje+respuestas,'pregunta',{'canClose': false})
}