﻿// Variables separadoras
var sepPar = "{_P_}"; 	//separa orden ajax de sus parametros
var sepElem = "{_E_}"; //separa elementos (a un control select se le pueden cargar varios elementos)
var sepVal = "{_V_}"; 	//separa valores de sus claves, donde clave y valor forman un elemento
var sepCtl = "{_C_}"; 	//separa controles (tanto simples: txt, pwd, spa), como compuestos
var sepBloc = "{_B_}"; //separa bloques: parametros que no tienen nada que ver entre si (en algunas ocasiones pueden contener subbloques)
var sepSBloc = "{_S_}"; //Separa subbloques: estructuras formadas por elementos o controles
var sepArg = "{_A_}"; 	//separa argumentos: estructuras formadas por bloques
var sepGra = "(_)"; 	//Separador de argumentos del GridAjax
var idLngActual; 	//id de idioma actual
var vecLangs; 		//Vector con los nombres de los idiomas en el idioma actual


// 1 Declarmos una variable var tmp  = [];
// 2 La rellenamos con los valores a ordenador, esn este caso solo se permiten numeros tmp[i] = ....
// 3 Copiamos la variable de la siguiente manera o tmp = tmp.sortNum
//------------------------------------------------------------------------
//    var tmp = [];
//     var filas = res.split("|");
//      for(var i = 0; i < filas.length; i ++ )
//      {
//         if(filas[i] != "")
//         {
//            tmp[i] = filas[i].substr(filas[i].indexOf(":") + 1, 2);
//         }
//      }
//      tmp = tmp.sortNum();
//----------------------------------
Array.prototype.sortNum = function() {
    return this.sort(function(a, b) { return a - b; });
}


function alertAjax(nMsg) {
    petiAjaxMain("alert" + sepGra + nMsg + sepBloc, alertAjaxVuelta);
}

function alertAjaxVuelta(res) {
    //alert(res.replace("{#lang#}", vecLangs[idLngActual]));
    alert(res);
}

function borraSels(ids) {
    var id = ids.split(",");
    for (var i = 0; i < id.length; i++) {
        getCtl(id[i]).options.length = 0;
    }
}

function calcDigControl(digitos) {
    var pesos = new Array(6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
    var resul = 0;
    var n = 0;
    for (var i = digitos.length - 1; i > -1; i--) {
        var cifra = parseInt(digitos.substring(i, i + 1));
        resul += cifra * pesos[n];
        n++;
    }
    var resto = resul % 11;
    resto = 11 - resto;
    if (resto == 10) {
        resto = 1;
    } else if (resto == 11) {
        resto = 0;
    }
    return resto;
}

function cargaSels(ids, elems) {
    var idSel = ids.split(",");
    var vals = elems.split(sepCtl);
    var resul = "";
    var nSel = idSel.length;
    for (var i = 0; i < nSel; i++) {
        var tipo = idSel[i].substring(0, 3);
        var control = getCtl(idSel[i]);
        if (control != null && vals[i].length > 0) {
            if (tipo == "sel") {
                cargaSel(idSel[i], vals[i]);
            }
        }
    }
}

//Funciona como 'cargaSels' pero para controles que su id no empiece por 'sel'
function cargaSelsNoIdentif(ids, elems) {
    var idSel = ids.split(",");
    var vals = elems.split(sepCtl);
    var resul = "";
    var nSel = idSel.length;
    for (var i = 0; i < nSel; i++) {
        var tipo = idSel[i].substring(0, 3);
        var control = getCtl(idSel[i]);
        if (control != null && vals[i].length > 0) {
            cargaSel(idSel[i], vals[i]);
        }
    }
}

function cargaSel(idSel, resuls) {
    var opciones = resuls.split(sepElem);
    var selTipo = document.getElementById(idSel);
    var nOptions = opciones.length;
    selTipo.options.length = nOptions;
    for (var i = 0; i < nOptions; i++) {
        var valRes = opciones[i].split(sepVal);
        selTipo.options[i].text = valRes[0];
        selTipo.options[i].value = valRes[1];
        selTipo.options[i].title = valRes[0];
    }
}

function cargaSelTexto(resuls, patron, idSel) {
    var opciones = resuls.split(patron);
    var selTipo = document.getElementById(idSel);
    var nOptions = opciones.length;
    selTipo.options.length = nOptions;
    for (var i = 0; i < nOptions; i++) {
        selTipo.options[i].text = opciones[i];
        selTipo.options[i].value = opciones[i];
    }
}

function codificaDatos(datos) {
    var cars = "&,\r\n,+,-";
    var codif = "{_AMT_},{_SL_},{_MS_},{_MN_}";
    var car = cars.split(",");
    var cod = codif.split(",");
    for (var i = 0; i < car.length; i++) {
        while (datos.indexOf(car[i]) != -1) {
            datos = datos.replace(car[i], cod[i]);
        }
    }
    return datos;
}

function codificaParametros(datos) {
    var cars = "&";
    var codif = "{_AMP_}";
    var car = cars.split(",");
    var cod = codif.split(",");
    for (var i = 0; i < car.length; i++) {
        while (datos.indexOf(car[i]) != -1) {
            datos = datos.replace(car[i], cod[i]);
        }
    }
    return datos;
}

function descodificaDatos(datos) {
    if (datos != null) {
        var cars = "&,\r\n,+,-";
        var codif = "{_AMT_},{_SL_},{_MS_},{_MN_}";
        var car = cars.split(",");
        var cod = codif.split(",");
        for (var i = 0; i < car.length; i++) {
            while (datos.indexOf(cod[i]) != -1) {
                datos = datos.replace(cod[i], car[i]);
            }
        }
    }
    return datos;
}

function descodificaParametros(datos) {
    var cars = "&";
    var codif = "{_AMP_}";
    var car = cars.split(",");
    var cod = codif.split(",");
    for (var i = 0; i < car.length; i++) {
        while (datos.indexOf(cod[i]) != -1) {
            datos = datos.replace(cod[i], car[i]);
        }
    }
    return datos;
}

function esAlfaNumerico(campo) {
    var esAlfaNum = true;
    var i = 0;
    for (i = 0; i < campo.length && esAlfaNum; i++) {
        var c = campo.substring(i, i + 1);
        if (!esDigito(c) && !esLetra(c)) {
            esAlfaNum = false;
        }
    }
    return esAlfaNum;
}

function esCampoObligatorio(esValido, idCtl, nError) {
    if (esValido) {
        if (idCtl.substring(0, 3) == "sel") {
            esValido = getCtl(idCtl).value != "0";
        } else {
            esValido = getCtl(idCtl).value.length > 0;
            if (esValido) {
                esValido = getCtl(idCtl).value != getCtl(idCtl).name;
            }
        }
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function mensajeAjax(idsErr, nError) {
    if (idsErr != "") {
        idsErr += ",";
    }
    idsErr += nError;
    return idsErr;
}

//En caso de estar el campo de texto vacío devuelve el parametro 'nError'
function esCampoObligatorioErr(idsErr, idCtl, nError) {
    var resul = "";
    var esValido = true;
    if (idCtl.substring(0, 3) == "sel") {
        esValido = getCtl(idCtl).value != "-1"; // getCtl(idCtl).value != "0";
    } else if (idCtl.substring(0, 3) == "chk") {
        esValido = getCtl(idCtl).checked;
    } else {
        esValido = getCtl(idCtl).value.length > 0;
        if (esValido) {
            esValido = getCtl(idCtl).value != getCtl(idCtl).name;
        }
    }
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function esCCCValida(entidad, oficina, control, cuenta) {
    var cont1 = parseInt(control.substring(0, 1));
    var cont2 = parseInt(control.substring(1, 2));
    var calc1 = calcDigControl(entidad + oficina);
    var calc2 = calcDigControl(cuenta);
    return calc1 == cont1 && calc2 == cont2;
}

//Se debe colocar al evento 'onKeyPress' de la caja que se quiera aplicar fechas
function escribeFecha(evt, caja) {
    var key = window.event ? evt.keyCode : evt.which;
    var esCorrecta = (key <= 13 || (key >= 48 && key <= 57));
    var c = caja.value;
    var len = caja.value.length;
    if (esCorrecta) {
        esCorrecta = false;
        if (len == 0 && key < 52) {
            esCorrecta = true;
        } else if (len == 1) {
            if (c.substring(0, 1) == "3") {
                if (key < 50) {
                    esCorrecta = true;
                }
            } else {
                esCorrecta = true;
            } 423
        } else if (len == 3) {
            if (key == 48 || key == 49) {
                esCorrecta = true;
            }
        } else if (len == 4) {
            if (key == 48 && c.substring(3, 4) == "0") {
                esCorrecta = false;
            } else {
                if (c.substring(3, 4) == "1") {
                    if (key < 51) {
                        if (key == 49) {
                            if (c.substring(0, 2) != "31") {
                                esCorrecta = true;
                            }
                        } else {
                            esCorrecta = true;
                        }
                    }
                } else {
                    if (c.substring(0, 1) == "3") {
                        if (key != 50) {
                            esCorrecta = true;
                        }
                        if (c.substring(0, 2) == "31") {
                            if (key == 49 || key == 51 || key == 53 || key == 55 || key == 56) {
                                esCorrecta = true;
                            } else {
                                esCorrecta = false;
                            }
                        }
                    } else {
                        esCorrecta = true;
                    }
                }
            }
        } else if (len >= 6 && len <= 10) {
            esCorrecta = true;
        }
    }
    return esCorrecta;
}

function esDiaDeMes(campo) {
    var esDia = true;
    if (campo.length > 0) {
        var n = parseInt(campo);
        if (!(n >= 1 && n <= 31)) {
            esDia = false;
        }
    }
    return esDia;
}

function esDigito(c) {
    return ((c >= "0") && (c <= "9"))
}

function esDireccion(campo) {
    var esDir = true;
    var i = 0;
    for (var i = 0; i < campo.length && esDir; i++) {
        var c = campo.substring(i, i + 1);
        if (!esDigito(c) && !esLetraExt(c) && c != "-" && c != "'" && c != "/" && c != "\'" && c != "," && c != "." && c != " " && c != "º" && c != "ª" && c != ":" && c != "(" &&
				c != ")") {
            esDir = false;
        }
    }
    return esDir;
}

function delFirstZero(val) {
    if (val.substring(0, 1) == "0") {
        val = val.substring(1, val.length);
    }

    return val;
}

function deshabilitaCtl(id) {
    getCtl(id).disabled = true;
}

// Comprueba si la fecha es correcta
function esFecha(campo) {
    esValido = true;
    if (campo.length > 0 && campo.length < 10) {
        esValido = false;
    }
    if (campo.length > 0 && esValido) {
        var val = campo.split("/");
        val[0] = delFirstZero(val[0]);
        val[1] = delFirstZero(val[1]);
        if (val.length != 3) {
            esValido = false;
        } else {
            try {
                esValido = esFechaCorrecta(parseInt(val[2]), parseInt(val[1]), parseInt(val[0]));
            } catch (ex) {
                esValido = false;
            }
        }
    }
    return esValido;
}

function esFecha2aMayor(fecha1, fecha2) {
    var esMayor = false;
    var anyo1 = fecha1.getFullYear();
    var anyo2 = fecha2.getFullYear();
    if (anyo2 > anyo1) {
        esMayor = true;
    } else if (anyo2 == anyo1) {
        var mes1 = fecha1.getMonth();
        var mes2 = fecha2.getMonth();
        if (mes2 > mes1) {
            esMayor = true;
        } else if (mes2 == mes1) {
            var dia1 = fecha1.getDate();
            var dia2 = fecha2.getDate();
            if (dia2 > dia1) {
                esMayor = true;
            }
        }
    }
    return esMayor;
}

function esFecha2aIgualoSup(fecha1, fecha2) {
    var esMayor = false;
    var anyo1 = fecha1.getFullYear();
    var anyo2 = fecha2.getFullYear();
    if (anyo2 > anyo1) {
        esMayor = true;
    } else if (anyo2 == anyo1) {
        var mes1 = fecha1.getMonth();
        var mes2 = fecha2.getMonth();
        if (mes2 > mes1) {
            esMayor = true;
        } else if (mes2 == mes1) {
            var dia1 = fecha1.getDate();
            var dia2 = fecha2.getDate();
            if (dia2 > dia1 || dia2 == dia1) {
                esMayor = true;
            }
        }
    }
    return esMayor;
}

function esFechaCorrecta(anyo, mes, dia) {
    var esCorrecta = true;
    if (anyo < 1583) {
        esCorrecta = false;
    } else if (mes < 1 || mes > 12) {
        esCorrecta = false;
    } else if (dia < 1 || dia > 31) {
        esCorrecta = false;
    } else if (dia == 31 && (mes == 2 || mes == 4 || mes == 6 || mes == 9 || mes == 11)) {
        esCorrecta = false;
    } else if (dia == 30 && mes == 2) {
        esCorrecta = false;
    } else if (dia == 29 && mes == 2 && anyo % 4 != 0) {
        esCorrecta = false;
    } else if (dia == 29 && mes == 2 && anyo % 4 == 0 && anyo % 100 == 0) {
        if (anyo % 400 != 0) {
            esCorrecta = false;
        }
    }
    return esCorrecta;
}

// Comprueba si la fecha es correcta
function esHora(campo) {
    esValido = true;
    var val = campo.split(":");
    if (val.length > 2) {
        esValido = false;
    } else if (val.length == 2) {
        try {
            var horas = parseInt(val[0]);
            var minutos = parseInt(val[1]);
            if (horas > 99) {
                esValido = false;
            }
            if (minutos > 59) {
                esValido = false;
            }
        } catch (Exception) {
            esValido = false;
        }
    }
    return esValido;
}

function esHoraDia(campo) {
    esValido = true;
    if (campo.length > 0) {
        var val = campo.split(":");
        if (val.length != 2) {
            esValido = false;
        } else {
            try {
                var horas = parseInt(val[0]);
                var minutos = parseInt(val[1]);
                if (horas < 0 || horas > 23) {
                    esValido = false;
                }
                if (minutos < 0 || minutos > 59) {
                    esValido = false;
                }
            } catch (Exception) {
                esValido = false;
            }
        }
    }
    return esValido;
}

function esLenCampoValido(esValido, nomTxt, minLenTxt, maxLenTxt, nError) {
    if (esValido) {
        esValido = false;
        var len = getCtl(nomTxt).value.length;
        if (len >= minLenTxt && len <= maxLenTxt) {
            esValido = true;
        }
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function esLenCampoValidoErr(idsErr, idCtl, minLenTxt, maxLenTxt, nError) {
    var esValido = false;
    var len = getCtl(idCtl).value.length;
    if (len >= minLenTxt && len <= maxLenTxt) {
        esValido = true;
    }
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function esLenFijaCampoValido(esValido, nomTxt, lenTxt, nError) {
    if (esValido) {
        esValido = false;
        var lenCampo = getCtl(nomTxt).value.length;
        if (lenCampo == lenTxt || lenCampo == 0) {
            esValido = true;
        }
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

//En caso de que el campo no tenga la longitud fija deseada devuelve el parametro 'nError'
function esLenFijaCampoValidoErr(idsErr, idCtl, lenTxt, nError) {
    var resul = "";
    var esValido = true;
    var lenCampo = getCtl(idCtl).value.length;
    esValido = lenCampo == lenTxt;

    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function esLetra(c) {
    return (((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")))
}

function esLetraExt(c) {
    var letrasExt = "ñÑÇçÁáÉéÍíÓóÚúÀàÈèÒòìÌùÙâêîôûÂÊÎÔÛãõÃÕäëïöüÄËÏÖÜ";
    var esExt = false;
    for (var i = 0; i < letrasExt.length - 1 && !esExt; i++) {
        if (c == letrasExt.substring(i, i + 1)) {
            esExt = true;
        }
    }
    return (esLetra(c) || esExt);
}

function esMailValido(mail) {
    var valido = false;

    if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(mail)) {
        valido = true;
    }

    return valido;
}

function esMaxLenCampoValido(esValido, nomTxt, lenTxt, nError) {
    if (esValido) {
        esValido = false;
        if (getCtl(nomTxt).value.length <= lenTxt) {
            esValido = true;
        }
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function esMinLenCampoValido(esValido, nomTxt, lenTxt, nError) {
    if (esValido) {
        esValido = false;
        if (getCtl(nomTxt).value.length >= lenTxt) {
            esValido = true;
        }
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function esNick(campo) {
    var esAlfaNum = true;
    var i = 0;
    for (i = 0; i < campo.length && esAlfaNum; i++) {
        var c = campo.substring(i, i + 1);
        if (!esDigito(c) && !esLetra(c) && c != '_') {
            esAlfaNum = false;
        }
    }
    return esAlfaNum;
}

function esNombre(campo) {
    var esNom = true;
    var i = 0;
    for (var i = 0; i < campo.length && esNom; i++) {
        var c = campo.substring(i, i + 1);
        if (!esLetraExt(c) && c != "'" && c != "," && c != "." && c != " ") {
            esNom = false;
        }
    }
    return esNom;
}

function esNumeroDecimal(n) {
    var esNumero = true;
    var i = 0;
    var nComas = 0;
    for (var i = 0; i < n.length && esNumero; i++) {
        var c = n.substring(i, i + 1);
        if (!esDigito(c)) {
            if (nComas == 0 && c == ",") {
                nComas++;
            } else {
                if (!(i == 0 && c == "-")) {
                    esNumero = false;
                }
            }
        }
    }
    return esNumero;
}

function esNumeroEntero(n) {
    var esNumero = true;
    var i = 0;
    for (var i = 0; i < n.length && esNumero; i++) {
        var c = n.substring(i, i + 1);
        if (!esDigito(c)) {
            esNumero = false;
        }
    }
    return esNumero;
}

function esTelefono(campo) {
    var esTel = true;
    var i = 0;
    for (var i = 0; i < campo.length && esTel; i++) {
        var c = campo.substring(i, i + 1);
        if (!esDigito(c) && c != ' ' && c != '-' && c != '.' && c != '(' && c != ')') {
            esTel = false;
        }
    }
    return esTel;
}

function esTextoPlano(campo) {
    var esTp = true;
    for (var i = 0; i < campo.length && esTp; i++) {
        var c = campo.substring(i, i + 1);
        if (!esDigito(c) && !esLetraExt(c) && c != ' ' && c != ',' && c != '.' && c != ':' && c != ';' && c != '?' && c != '¿' && c != '!' && c != '¡' && c != '(' && c != ')' &&
                c != '&' && c != '-' && c != '\n' && c != '\r' && c != '/' && c != '%' && c != '€' && c != '#' && c != 'º' && c != 'ª' && c != "'") {
            esTp = false;
        }
    }
    return esTp;
}

function esUrl(campo) {
    //Enter (13), 0 (48), 9 (57), a (97), z (122), . (46), : (58), & (38), ? (63), - (45), _ (95), / (47)
    var es = true;
    for (var i = 0; i < campo.length && es; i++) {
        var c = campo.substring(i, i + 1);
        if (!esDigito(c) && !esLetraExt(c) && c != '.' && c != ':' && c != '?' && c != '&' && c != '-' && c != '_' && c != '/') {
            es = false;
        }
    }
    return es;
}

function expirarSesion(txtError, context) {
    //location.href = "Default.aspx";
}

//Devuelve las coordenadas X e Y del cursor
function getCoordCursor(event) {
    if (navigator.userAgent.indexOf("MSIE") >= 0) {
        cursorX = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
        cursorY = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
    } else {
        cursorX = event.clientX + window.scrollX;
        cursorY = event.clientY + window.scrollY;
    }
}

//Devuelve una cadena de un Select con sus elementos separados por 'sepElem' y sus valores por 'sepVal'
function getSelEnString(idSel) {
    var selTipo = getCtl(idSel);
    var resul = "";
    var nOptions = selTipo.options.length;
    for (var i = 0; i < nOptions; i++) {
        if (i > 0) {
            resul += sepElem;
        }
        resul += selTipo.options[i].text;
        resul += sepVal;
        resul += selTipo.options[i].value;
    }
    return resul;
}

function getSelsEnString(idsSel) {
    var idSel = idsSel.split(",");
    var resul = "";
    for (var i = 0; i < idSel.length; i++) {
        if (i > 0) {
            resul += sepCtl;
        }
        resul += getSelEnString(idSel[i]);
    }
    return resul;
}

function getSelValsEnString(idSel) {
    var selTipo = getCtl(idSel);
    var resul = "";
    var nOptions = selTipo.options.length;
    for (var i = 0; i < nOptions; i++) {
        if (i > 0) {
            resul += sepElem;
        }
        resul += selTipo.options[i].value;
    }
    return resul;
}

function getCtl(idCtl) {
    return document.getElementById(idCtl);
}

function getNomPagina(url) {
    var indIniP = url.lastIndexOf("/") + 1;
    var indFinP = url.lastIndexOf("aspx") + 4;
    var pag = url.substring(indIniP, indFinP);
    return pag;
}

//Retorna el valor del parametro indicado
function getParam(param) {
    var loc = window.location.href;
    var parametros = loc.toLowerCase();
    var pars = parametros.split("?");
    var result = "";
    if (pars.length > 1) {
        var par = pars[1].split("&");
        var salir = false;
        for (var p = 0; p < par.length && !salir; p++) {
            var elem = par[p].split("=");
            var clave = elem[0];
            var valor = elem[1];
            if (clave == param) {
                result = valor;
                salir = true;
            }
        }
    }
    return result;
}

function getParamDeCad(cad, param) {
    var loc = cad;
    var parametros = loc.toLowerCase();
    var pars = parametros.split("?");
    var result = "";
    if (pars.length > 1) {
        var par = pars[1].split("&");
        var salir = false;
        for (var p = 0; p < par.length && !salir; p++) {
            var elem = par[p].split("=");
            var clave = elem[0];
            var valor = elem[1];
            if (clave == param) {
                result = valor;
                salir = true;
            }
        }
    }
    return result;
}

//retorna valores de un checkboxList en parejas de valorId y checked (0 ó 1)
function getValoresCkl(nomCtl, sepCheck, sepValor) {
    var nId = 0;
    var existe = true;
    var resul = "";
    while (existe) {
        var chk = getCtl(nomCtl + nId);
        if (chk == null) {
            existe = false;
        } else {
            if (nId > 0) {
                resul += sepCheck;
            }
            resul += chk.value + sepValor;
            if (chk.checked) {
                resul += "1";
            } else {
                resul += "0";
            }
            nId++;
        }
    }
    return resul;
}

function getValoresForm(nomsCtl) {
    var ctl = nomsCtl.split(",");
    var resul = "";
    var nCtl = ctl.length;
    var subSep = sepElem;
    var separador = sepCtl;
    for (var i = 0; i < nCtl; i++) {
        var tipo = ctl[i].substring(0, 3);
        var subCtl = ctl[i].split("|");
        var estaSel = false;
        var nSCtl = subCtl.length;
        for (var j = 0; j < nSCtl; j++) {
            var control = getCtl(subCtl[j]);
            if (control != null) {
                if (tipo == "sel" || tipo == "txt" || tipo == "hid" || tipo == "tar" || tipo == "pwd") {
                    resul += control.value;
                } else if (tipo == "chk" || tipo == "rad") {
                    if (control.checked) {
                        resul += "{true}";
                    } else {
                        resul += "{false}";
                    }
                } else if (tipo == "hlk") {
                    resul += control.href;
                } else if (tipo == "spa" || tipo == "lbl" || tipo == "div") {
                    resul += control.innerHTML;
                } else {
                    resul += control.value;
                }
                if (i < nCtl - 1) {
                    if (nSCtl > 1 && j < nSCtl - 1 && tipo != "rad") {
                        resul += subSep;
                    }
                }
            }
        }
        if (i < nCtl - 1) {
            resul += separador;
        }
    }
    return resul;
}

function getNomYValsForm(nomsCtl) {
    var ctl = nomsCtl.split(",");
    var resul = "";
    var idCtl = "";
    var nCtl = ctl.length;
    var subSep = sepElem;
    var separador = sepCtl;
    for (var i = 0; i < nCtl; i++) {
        var tipo = ctl[i].substring(0, 3);
        var subCtl = ctl[i].split("|");
        var estaSel = false;
        var nSCtl = subCtl.length;

        for (var j = 0; j < nSCtl; j++) {
            var control = getCtl(subCtl[j]);
            if (control != null) {
                idCtl += control.id;
                if (tipo == "sel" || tipo == "txt" || tipo == "hid" || tipo == "tar" || tipo == "pwd") {
                    resul += control.value;
                } else if (tipo == "chk" || tipo == "rad") {
                    if (control.checked) {
                        resul += "{true}";
                    } else {
                        resul += "{false}";
                    }
                } else if (tipo == "hlk") {
                    resul = control.href;
                } else if (tipo == "spa" || tipo == "lbl" || tipo == "div") {
                    resul += control.innerHTML;
                } else {
                    resul += control.value;
                }
                if (i < nCtl - 1) {
                    if (nSCtl > 1 && j < nSCtl - 1 && tipo != "rad") {
                        resul += subSep;
                    }
                }
            }
        }
        if (i < nCtl - 1) {
            resul += separador;
            idCtl += separador;
        }
    }

    return idCtl + sepArg + resul;
}

function getTextoTraduceAjax(nMsg) {
    petiAjaxMain("alert" + sepGra + nMsg + sepBloc, getTextoTraduceAjaxVuelta);
}

function getTextoTraduceAjaxVuelta(res) {
    //alert(res.replace("{#lang#}", vecLangs[idLngActual]));
    return res;
}

function hayNumeros() {
    var hay = true;
    if (document.Form1.texUnitats.value.length == 0) {
        alert("Debe introducir el número de unidades que desea");
        hay = false;
    }
    return hay;
}

function muestraCtl(id) {
    getCtl(id).style.display = "block";
}

function multiAlertAjax(nMsg) {
    petiAjaxMain("multiAlert" + sepGra + nMsg, alertAjaxVuelta);
}

function noEscribir(evt) {
    var key = window.event ? evt.keyCode : evt.which;
    return (key <= 13 || (key >= 48 && key <= 57) || (key >= 65 && key <= 90) || (key >= 97 && key <= 122) ||
	  key == 44 || key == 46 || key == 27 || key == 32 || key == 47 || key == 166 || key == 167 || (key >= 192 && key <= 252) || key == 170 || key == 186 || key == 58 || key == 40
		|| key == 41 || key == 39);
}

function ocultaCamposForm(nomsCtl) {
    var ctl = nomsCtl.split(",");
    var nCtl = ctl.length;
    for (var i = 0; i < nCtl; i++) {
        var tipo = ctl[i].substring(0, 3);
        var control = getCtl(ctl[i]);
        if (control != null) {
            control.style.display = "none";
        }
    }
}

function ocultaCtl(id) {
    getCtl(id).style.display = "none";
}

function ocultaCtls(ctls) {
    var ocul = ctls.split(",");
    for (var i = 0; i < ocul.length; i++) {
        ocultaCtl(ocul[i]);
    }
}

function habilitaCtl(id) {
    getCtl(id).disabled = false;
}

function pasaABool(valor) {
    var resul = false;
    if (valor == "True" || valor == "true") {
        resul = true;
    }
    return resul;
}

function pasaSelAString(idSel) {
    var sel = getCtl(idSel);
    var nOptions = sel.options.length;
    var resul = "";
    for (var i = 0; i < nOptions; i++) {
        if (i > 0) {
            resul += sepElem;
        }
        resul += sel.options[i].text;
        resul += sepVal;
        resul += sel.options[i].value;
    }
    return resul;
}

function pasaTxtAFecha(txt) {
    var stFecha = getCtl(txt).value;
    var valor = stFecha.split("/");
    valor[0] = delFirstZero(valor[0]);
    valor[1] = delFirstZero(valor[1]);
    var fecha = new Date(parseInt(valor[2]), parseInt(valor[1]) - 1, parseInt(valor[0]));
    return fecha;
}

function ponDescrip(idElem, texto) {
    var ctlDesc = getCtl(idElem);
    if (ctlDesc.value == "") {
        ctlDesc.value = texto;
    }
}

function ponInputVacio(nomCtl) {
    getCtl(nomCtl).value = "";
}

//Se debe colocar al evento 'onKeyUp' de la caja que se quiera aplicar fechas
function ponMarcasFecha(evt, caja) {
    var len = caja.value.length;
    if (len == 2) {
        caja.value = caja.value + "/";
    }
    if (len == 5) {
        caja.value = caja.value + "/20";
    }
}

function ponTexto(idCtl, texto) {
    if (getCtl(idCtl).value == "") {
        getCtl(idCtl).value = texto;
    }
}

function ponValsCtlsForm(nomsCtl, valsCtl) {
    var ctl = nomsCtl.split(",");
    var val = valsCtl.split(sepCtl);
    var resul = "";
    var nCtl = ctl.length;
    for (var i = 0; i < nCtl; i++) {
        var ini = 0;
        if (ctl[i].indexOf("_") != -1) {
            ini = ctl[i].lastIndexOf("_") + 1;
        }
        var tipo = ctl[i].substring(ini, ini + 3);
        var control = getCtl(ctl[i]);
        if (control != null) {
            if (tipo == "txt" || tipo == "hid" || tipo == "tar" || tipo == "sel") {
                control.value = val[i];
            } else if (tipo == "chk" || tipo == "rad") {
                control.checked = pasaABool(val[i]);
            } else if (tipo == "hlk") {
                control.innerHTML = val[i];
                control.href = val[i];
            } else if (tipo == "img") {
                control.src = val[i];
            } else if (tipo == "spa" || tipo == "div") {
                control.innerHTML = val[i];
            }
        }
    }
}

// igual que 'ponValsCtlsForm pero sin tener en cuenta ids con guiones bajos
function ponValsCtlsFormSinGB(nomsCtl, valsCtl) {
    var ctl = nomsCtl.split(",");
    var val = valsCtl.split(sepCtl);
    var resul = "";
    var nCtl = ctl.length;
    var ini = 0;
    for (var i = 0; i < nCtl; i++) {
        var tipo = ctl[i].substring(ini, ini + 3);
        var control = getCtl(ctl[i]);
        if (control != null) {
            if (tipo == "txt" || tipo == "hid" || tipo == "tar" || tipo == "sel") {
                control.value = val[i];
            } else if (tipo == "chk" || tipo == "rad") {
                control.checked = pasaABool(val[i]);
            } else if (tipo == "hlk") {
                control.innerHTML = val[i];
                control.href = val[i];
            } else if (tipo == "img") {
                control.src = val[i];
            } else if (tipo == "spa" || tipo == "div") {
                control.innerHTML = val[i];
            } else {
                control.innerHTML = val[i];
            }
        }
    }
}


function quitaTexto(idCtl, texto) {
    if (getCtl(idCtl).value == texto) {
        getCtl(idCtl).value = "";
    }
}

function resetValoresForm(nomsCtl) {
    var ctl = nomsCtl.split(",");
    var resul = "";
    var nCtl = ctl.length;
    for (var i = 0; i < nCtl; i++) {
        var tipo = ctl[i].substring(0, 3);
        var control = getCtl(ctl[i]);
        if (control != null) {
            if (tipo == "div" || tipo == "spa") {
                control.innerHTML = "";
            } else if (tipo == "txt" || tipo == "hid" || tipo == "tar" || tipo == "pwd") {
                control.value = "";
            } else if (tipo == "sel") {
                control.options.selectedIndex = 0;
            } else if (tipo == "chk") {
                control.checked = false;
            } else if (tipo == "hlk") {
                control.innerHTML = "";
                control.href = "";
            } else if (tipo == "img") {
                control.src = "img/sinImagen.gif";
            }
        }
    }
}

function soloAlfaNumericos(evt) {
    // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
    var key = window.event ? evt.keyCode : evt.which;
    return (key <= 13 || (key >= 48 && key <= 57) || (key >= 65 && key <= 90) || (key >= 97 && key <= 122));
}

function soloDireccion(evt) {
    var key = window.event ? evt.keyCode : evt.which;
    return (key <= 13 || (key >= 48 && key <= 57) || (key >= 65 && key <= 90) || (key >= 97 && key <= 122) || key == 44 || key == 46 || key == 27 || key == 32 || key == 47 ||
    key == 166 || key == 167 || (key >= 192 && key <= 252) || key == 170 || key == 186 || key == 58 || key == 40 || key == 41 || key == 39);
}

function soloFechas(evt, caja) {
    var key = window.event ? evt.keyCode : evt.which;
    var esCorrecta = (key <= 13 || (key >= 48 && key <= 57));
    var len = caja.value.length;
    if (len == 2) {
        caja.value = caja.value + "/";
    }
    if (len == 5) {
        caja.value = caja.value + "/";
    }
    if (len == 0 && key > 51) {
        esCorrecta = false;
    }
    if (len == 1 && caja.value.indexOf("3") == 0 && key > 49) {
        esCorrecta = false;
    }
    if (len == 3 && key > 49) {
        esCorrecta = false;
    }
    if (len == 4 && caja.value.indexOf("1") == 3 && key > 50) {
        esCorrecta = false;
    }
    return esCorrecta;
}

function soloHoras(evt, caja) {
    var key = window.event ? evt.keyCode : evt.which;
    var esCorrecta = (key <= 13 || (key >= 48 && key <= 57) || key == 58);
    var len = caja.value.length;
    if (len == 0 && key == 58) {
        esCorrecta = false;
    }
    if (len == 1 && key != 58) {
        var valor = parseInt(caja.value);
        if (valor > 2) {
            esCorrecta = false;
        } else if (valor == 2 && (key > 51)) {
            esCorrecta = false;
        }
    }
    if (len == 2) {
        var car = caja.value.substring(1, 2);
        if (car == ":") {
            if (key > 53) {
                esCorrecta = false;
            }
        } else {
            if (key != 58) {
                esCorrecta = false;
            }
        }
    }
    if (len == 3) {
        var car = caja.value.substring(2, 3);
        if (car == ":") {
            if (key > 53) {
                esCorrecta = false;
            }
        }
    }
    if (len == 4) {
        var car = caja.value.substring(1, 2);
        if (car == ":" && key > 13) {
            esCorrecta = false;
        }
    }
    return esCorrecta;
}

function soloNicks(evt) {
    var key = window.event ? evt.keyCode : evt.which;
    return (key <= 13 || (key >= 48 && key <= 57) || (key >= 65 && key <= 90) || (key >= 97 && key <= 122) || key == 95);
}

function soloNombres(evt) {
    // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57, '.'=46, '-'=45, '_'= 95, '('=40, ')'=41, ' '=32
    var key = window.event ? evt.keyCode : evt.which;
    return (key <= 13 || (key >= 65 && key <= 90) || (key >= 97 && key <= 122) || key == 32 || key == 46 || (key >= 192 && key <= 252) || key == 39 || (key >= 48 && key <= 57));
}

function soloNumeros(evt) {
    // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
    var key = window.event ? evt.keyCode : evt.which;
    return (key <= 13 || (key >= 48 && key <= 57));
}

function soloNumerosDecimales(evt, caja) {
    var key = window.event ? evt.keyCode : evt.which;
    var esCorrecta = (key <= 13 || (key >= 48 && key <= 57));
    if (key == 46) {
        if (window.event) {
            key = 44;
            evt.keyCode = 44;
        }
    }
    if (key == 44 && (caja.value.indexOf(",") == -1) && caja.value.length > 0) {
        esCorrecta = true;
    }
    return esCorrecta;
}

function soloNumerosDecimales(evt, caja, decimales) {
    //var esSel = caja.
    var key = window.event ? evt.keyCode : evt.which;
    var esCorrecta = (key <= 13 || (key >= 48 && key <= 57));
    if (key == 46) {
        if (window.event) {
            key = 44;
            evt.keyCode = 44;
        }
    } else if (key == 44 && (caja.value.indexOf(",") == -1) && caja.value.length > 0) {
        esCorrecta = true;
    } else if (key == 45 && caja.value.length == 0) {
        esCorrecta = true;
    } else if (esCorrecta && key >= 48 && key <= 57) {
        var len = caja.value.length;
        var indice = caja.value.indexOf(",");
        if (indice > -1) {
            if (len > indice + 2) {
                esCorrecta = false;
            }
        }
    }
    return esCorrecta;
}

// Solo permite escribir números comprendidos entre los margenes indicados
// Los valores desde y hasta ponerlos en forma de cadena
function soloMesEnNumero(evt) {
    var key = window.event ? evt.keyCode : evt.which;
    var esCorrecta = (key <= 13 || (key >= 48 && key <= 57));
    var len = caja.value.length;
    if (len == 1 && caja.value.indexOf("1") && key > 50) {
        esCorrecta = false;
    }
    return esCorrecta;
}

function soloTelefonos(evt) {
    // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57, '.'=46, '-'=45, '_'= 95, '('=40, ')'=41, ' '=32
    var key = window.event ? evt.keyCode : evt.which;
    return (key <= 13 || (key >= 48 && key <= 57) || key == 46 || key == 45 || key == 40 || key == 41 || key == 32);
}

function soloTextoMail(evt) {
    // NOTA: Backspace=8, Enter=13, '0'=48, '9'=57, 'A'=65, 'Z'=90, 'a'=97, 'z'=122, '.'=46, '_'=95, '@'=64, '-'=45
    evt = (evt) ? evt : event;
    var key = window.event ? evt.keyCode : evt.which;
    return ((key >= 48 && key <= 57) || (key >= 65 && key <= 90) || (key >= 97 && key <= 122) || key == 46 || key == 95 ||
    key == 64 || key == 45);
}

function soloTextoPlano(evt) {
    // NOTA: Backspace=8, Enter=13, '0'=48, '9'=57, 'A'=65, 'Z'=90, 'a'=97, 'z'=122, '''=27, ','=44, '.'=46, 'ñ'=241, 'Ñ'=209, ':'=58, ' '=32 
    // '&'=38, '?'=63, '!'=33, '¡'=173, '¿'=168, '-'=45, '(' = 40, ')' = 41, '/' = 47, '%' = 37, '€' = 8364, '#' = 35, 'ª'=170, 'º'=186
    var key = window.event ? evt.keyCode : evt.which;
    return (key <= 13 || (key >= 48 && key <= 57) || (key >= 65 && key <= 90) || (key >= 97 && key <= 122) || (key >= 192 && key <= 252) || key == 44 || key == 46 || key == 27
	    || key == 58 || key == 32 || key == 38 || key == 63 || key == 33 || key == 173 || key == 168 || key == 45 || key == 40 || key == 41 || key == 47 || key == 37 || key == 8364
	    || key == 35 || key == 170 || key == 186 || key == 39);
}

function soloTextoUrl(evt) {
    //Enter (13), 0 (48), 9 (57), a (97), z (122), . (46), : (58), & (38), ? (63), - (45), _ (95), / (47)
    var key = window.event ? evt.keyCode : evt.which;
    return (key <= 13 || (key >= 48 && key <= 57) || (key >= 97 && key <= 122) || key == 46 || key == 58 || key == 38 || key == 63 || key == 45 || key == 95 || key == 47)
}

function validaAlfaNumerico(esValido, id, nError) {
    if (esValido) {
        esValido = esAlfaNumerico(getCtl(id).value);
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaAlfaNumericoErr(idsErr, id, nError) {
    var esValido = esAlfaNumerico(getCtl(id).value);
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaCCC(esValido, idEntidad, idOficina, idControl, idCuenta, nError) {
    if (esValido) {
        var entidad = getCtl(idEntidad).value;
        var oficina = getCtl(idOficina).value;
        var control = getCtl(idControl).value;
        var cuenta = getCtl(idCuenta).value;
        if (entidad.length == 0 && oficina.length == 0 && control.length == 0 && cuenta.length == 0) {
            esValido = true;
        } else {
            esValido = esCCCValida(getCtl(idEntidad).value, getCtl(idOficina).value, getCtl(idControl).value, getCtl(idCuenta).value);
        }
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaCCCErr(idsErr, idEntidad, idOficina, idControl, idCuenta, nError) {
    var entidad = getCtl(idEntidad).value;
    var oficina = getCtl(idOficina).value;
    var control = getCtl(idControl).value;
    var cuenta = getCtl(idCuenta).value;
    var esValido = true;
    if (entidad.length == 0 && oficina.length == 0 && control.length == 0 && cuenta.length == 0) {
        esValido = true;
    } else {
        esValido = esCCCValida(getCtl(idEntidad).value, getCtl(idOficina).value, getCtl(idControl).value, getCtl(idCuenta).value);
    }
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaDiaDeMes(esValido, id, nError) {
    if (esValido) {
        esValido = esDiaDeMes(getCtl(id).value);
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaDiaDeMesErr(idsErr, id, nError) {
    var esValido = esDiaDeMes(getCtl(id).value);
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaDireccion(esValido, id, nError) {
    if (esValido) {
        esValido = esDireccion(getCtl(id).value);
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaDireccionErr(idsErr, id, nError) {
    var esValido = esDireccion(getCtl(id).value);
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}


function validaEmail(esValido, id, nError) {
    if (esValido) {
        esValido = esMailValido(getCtl(id).value)
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaEmailErr(idsErr, id, nError) {
    var esValido = esMailValido(getCtl(id).value)
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaFecha(esValido, id, nError) {
    if (esValido) {
        esValido = esFecha(getCtl(id).value)
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaFechaErr(idsErr, id, nError) {
    var esValido = esFecha(getCtl(id).value)
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaHora(esValido, id, nError) {
    if (esValido) {
        esValido = esHora(getCtl(id).value)
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaHoraErr(idsErr, id, nError) {
    var esValido = esHora(getCtl(id).value)
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaHoraDia(esValido, id, nError) {
    if (esValido) {
        esValido = esHoraDia(getCtl(id).value)
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaHoraDiaErr(idsErr, id, nError) {
    var esValido = esHoraDia(getCtl(id).value)
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaNick(esValido, id, nError) {
    if (esValido) {
        esValido = esNick(getCtl(id).value);
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaNickErr(idsErr, id, nError) {
    var esValido = esNick(getCtl(id).value);
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaNombre(esValido, id, nError) {
    if (esValido) {
        esValido = esNombre(getCtl(id).value)
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaNombreErr(idsErr, id, nError) {
    var esValido = esNombre(getCtl(id).value)
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaNumeroDecimal(esValido, id, nError) {
    if (esValido) {
        esValido = esNumeroDecimal(getCtl(id).value)
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaNumeroDecimalErr(idsErr, id, nError) {
    var esValido = esNumeroDecimal(getCtl(id).value)
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaNumeroEntero(esValido, id, nError) {
    if (esValido) {
        esValido = esNumeroEntero(getCtl(id).value)
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaNumeroEnteroErr(idsErr, id, nError) {
    var esValido = esNumeroEntero(getCtl(id).value)
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaTarjetaErr(idsErr, id, nError) {
    var cadena = getCtl(id).value;
    var longitud = cadena.length;
    var cifra = null;
    var cifra_cad = null;
    var suma = 0;
    for (var i = 0; i < longitud; i += 2) {
        cifra = parseInt(cadena.charAt(i)) * 2;
        if (cifra > 9) {
            cifra_cad = cifra.toString();
            cifra = parseInt(cifra_cad.charAt(0)) + parseInt(cifra_cad.charAt(1));
        }
        suma += cifra;
    }
    for (var i = 1; i < longitud; i += 2) {
        suma += parseInt(cadena.charAt(i));
    }
    var esValido = (suma % 10) == 0;
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}



function validaTelefono(esValido, id, nError) {
    if (esValido) {
        esValido = esTelefono(getCtl(id).value)
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaTelefonoErr(idsErr, id, nError) {
    var esValido = esTelefono(getCtl(id).value)
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaTextoPlano(esValido, id, nError) {
    if (esValido) {
        esValido = esTextoPlano(getCtl(id).value)
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaTextoPlanoErr(idsErr, id, nError) {
    var esValido = esTextoPlano(getCtl(id).value)
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return idsErr;
}

function validaUrl(esValido, id, nError) {
    if (esValido) {
        esValido = esUrl(getCtl(id).value)
        if (!esValido) {
            alertAjax(nError);
        }
    }
    return esValido;
}

function validaUrlErr(idsErr, id, nError) {
    var esValido = esUrl(getCtl(id).value)
    if (!esValido) {
        if (idsErr != "") {
            idsErr += ",";
        }
        idsErr += nError;
    }
    return esValido;
}

function verCtl(idCtl) {
    var ctl = getCtl(idCtl);
    /*
    ctl.style.position = "relative";
    ctl.style.visibility = "visible";
    ctl.style.top = "0";
    ctl.style.left = "0";
    */
    ctl.style.display = "block";
}

function verCtls(nomsCtl) {
    var ctl = nomsCtl.split(",");
    var nCtl = ctl.length;
    for (var i = 0; i < nCtl; i++) {
        verCtl(ctl[i]);
    }
}

function visualizaCamposForm(nomsCtl, separador) {
    var ctl = nomsCtl.split(separador);
    var nCtl = ctl.length;
    for (var i = 0; i < nCtl; i++) {
        var tipo = ctl[i].substring(0, 3);
        var control = getCtl(ctl[i]);
        if (control != null) {
            control.style.visibility = "visible";
        }
    }
}

function replace(texto, s1, s2) {
    return texto.split(s1).join(s2);
}

function trim(str) {
    var str = str.replace(/^\s\s*/, ''),
		ws = /\s/,
		i = str.length;
    while (ws.test(str.charAt(--i)));
    return str.slice(0, i + 1);
}

function OpenPopup(url, title, attr) {
    window.open(url, title, attr);
}

/*
function validarCIF(texto) {
var pares = 0;
var impares = 0;
var suma;
var ultima;
var unumero;
var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I");
var xxx;

texto = texto.toUpperCase();

var regular = new RegExp(/^[ABCDEFGHJKLMNPQRSUVW]\d\d\d\d\d\d\d[0-9,A-J]$/g);
if (!regular.exec(texto)) return false;

ultima = texto.substr(8, 1);

for (var cont = 1; cont < 7; cont++) {
xxx = (2 * parseInt(texto.substr(cont++, 1))).toString() + "0";
impares += parseInt(xxx.substr(0, 1)) + parseInt(xxx.substr(1, 1));
pares += parseInt(texto.substr(cont, 1));
}
xxx = (2 * parseInt(texto.substr(cont, 1))).toString() + "0";
impares += parseInt(xxx.substr(0, 1)) + parseInt(xxx.substr(1, 1));

suma = (pares + impares).toString();
unumero = parseInt(suma.substr(suma.length - 1, 1));
unumero = (10 - unumero).toString();
if (unumero == 10) unumero = 0;

if ((ultima == unumero) || (ultima == uletra[unumero]))
return true;
else
return false;
}

function validarCIF(cif) {
    // Validación de CIF de la nueva normativa de la Orden EHA/451/2008, en lenguaje ActionScript para las validaciones en los PDFs
    var par = 0;
    var non = 0;
    var letras = "ABCDEFGHJKLMNPRQSUVW";
    var caracterControlLetra = "KPQS";
    var caracterControlNum = "ABEH";
    var i;
    var parcial;
    var control;
    var controlLetra = "JABCDEFGHIJ";
    var letraIni = cif.charAt(0);

    if (cif.length != 9) {
        //app.alert("El Cif debe tener 9 dígitos", 3);
        return false;
    } else {
        if (letras.indexOf(letraIni.toUpperCase()) == -1) {
            //app.alert("La letra del CIF introducido no es correcta", 3);
            return false;
        }
        for (i = 2; i < 8; i += 2) {
            par = par + parseInt(cif.charAt(i));
        }

        for (i = 1; i < 9; i += 2) {
            var nn = 2 * parseInt(cif.charAt(i));
            if (nn > 9) nn = 1 + (nn - 10);
            non = non + nn;
        }

        parcial = par + non;
        control = (10 - (parcial % 10));

        if (caracterControlLetra.indexOf(letraIni.toUpperCase()) != -1) {
            // El caracter de control deberá ser una letra

            if (controlLetra.charAt(control) != cif.charAt(8).toUpperCase()) {
                //app.alert("El Cif no es válido", 3);
                return false;
            }
        }
        if (caracterControlNum.indexOf(letraIni.toUpperCase()) != -1) {
            // El caracter de control deberá ser un número

            if (control == 10) control = 0;

            if (control != cif.charAt(8)) {
                //app.alert("El Cif no es válido", 3);
                return false;
            }
        }
        if ((caracterControlLetra.indexOf(letraIni.toUpperCase()) == -1) && (caracterControlNum.indexOf(letraIni.toUpperCase()) == -1)) {
            // En este caso el carácter de control puede ser una letra o un número

            if (control == 10) {
                control = 0;
            }
            if ((controlLetra.charAt(control) != cif.charAt(8).toUpperCase()) && (control != cif.charAt(8))) {
                //app.alert("El Cif no es válido", 3);
                return false;
            }
        }
    }

    return true;
}
*/
function validarCIF(cif) {
    par = 0;
    non = 0;
    letras = "ABCDEFGHKLMNPQS";
    let = cif.charAt(0);

    if (!isNaN(let)) {
        return false;
    }

    if (cif.length != 9) {
        //alert('El Cif debe tener 9 dígitos')
        //document.formulario.nif.focus()
        return false;
    }

    if (letras.indexOf(let.toUpperCase()) == -1) {
        //alert("El comienzo del Cif no es válido")
        //document.formulario.nif.focus()
        return false;
    }

    for (zz = 2; zz < 8; zz += 2) {
        par = par + parseInt(cif.charAt(zz));
    }

    for (zz = 1; zz < 9; zz += 2) {
        nn = 2 * parseInt(cif.charAt(zz));
        if (nn > 9) nn = 1 + (nn - 10);
        non = non + nn;
    }

    parcial = par + non;
    control = (10 - (parcial % 10));

    if (control != cif.charAt(8)) {
        //alert("El Cif no es válido")
        //document.formulario.nif.focus()
        return false;
    }
    //alert("El Cif es válido")
    return true;
}

function validarNif(dni) {
    numero = dni.substr(0, dni.length - 1);
    let = dni.substr(dni.length - 1, 1);
    numero = numero % 23;
    letra = 'TRWAGMYFPDXBNJZSQVHLCKET';
    letra = letra.substring(numero, numero + 1);
    if (letra != let)
        return false;
    return true;
}

//Retorna: 1 = NIF ok, 2 = CIF ok, 3 = NIE ok, -1 = NIF error, -2 = CIF error, -3 = NIE error, 0 = ??? error
function valida_nif_cif_nie(a) {
    var temp = a.toUpperCase();
    var cadenadni = "TRWAGMYFPDXBNJZSQVHLCKE";

    if (temp != '') {
        //si no tiene un formato valido devuelve error
        if ((!/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(temp) && !/^[T]{1}[A-Z0-9]{8}$/.test(temp)) && !/^[0-9]{8}[A-Z]{1}$/.test(temp)) {
            return 0;
        }

        //comprobacion de NIFs estandar
        if (/^[0-9]{8}[A-Z]{1}$/.test(temp)) {
            posicion = a.substring(8, 0) % 23;
            letra = cadenadni.charAt(posicion);
            var letradni = temp.charAt(8);
            if (letra == letradni) {
                return 1;
            }
            else {
                return -1;
            }
        }

        //algoritmo para comprobacion de codigos tipo CIF
        suma = parseInt(a[2]) + parseInt(a[4]) + parseInt(a[6]);
        for (i = 1; i < 8; i += 2) {
            temp1 = 2 * parseInt(a[i]);
            temp1 += '';
            temp1 = temp1.substring(0, 1);
            temp2 = 2 * parseInt(a[i]);
            temp2 += '';
            temp2 = temp2.substring(1, 2);
            if (temp2 == '') {
                temp2 = '0';
            }

            suma += (parseInt(temp1) + parseInt(temp2));
        }
        suma += '';
        n = 10 - parseInt(suma.substring(suma.length - 1, suma.length));

        //comprobacion de NIFs especiales (se calculan como CIFs)
        if (/^[KLM]{1}/.test(temp)) {
            if (a[8] == String.fromCharCode(64 + n)) {
                return 1;
            }
            else {
                return -1;
            }
        }

        //comprobacion de CIFs
        if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp)) {
            temp = n + '';
            if (a[8] == String.fromCharCode(64 + n) || a[8] == parseInt(temp.substring(temp.length - 1, temp.length))) {
                return 2;
            }
            else {
                return -2;
            }
        }

        //comprobacion de NIEs
        //T
        if (/^[T]{1}/.test(temp)) {
            if (a[8] == /^[T]{1}[A-Z0-9]{8}$/.test(temp)) {
                return 3;
            }
            else {
                return -3;
            }
        }

        //XYZ
        if (/^[XYZ]{1}/.test(temp)) {
            pos = str_replace(['X', 'Y', 'Z'], ['0', '1', '2'], temp).substring(0, 8) % 23;
            if (a[8] == cadenadni.substring(pos, pos + 1)) {
                return 3;
            }
            else {
                return -3;
            }
        }
    }

    return 0;
}

function str_replace(search, replace, subject) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   bugfixed by: Anton Ongson
    // +      input by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    tweaked by: Onno Marsman
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'

    var f = search, r = replace, s = subject;
    var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;

    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f) { };
        }
    };

    return sa ? s : s[0];
} 
