﻿// 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 sepGrid = "(_G_)";
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_},{_LT_},{_GT_}";
    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;
}

//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 != "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 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;
}

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 = true;
    var filter = /^[\_]*([a-zA-Z0-9\-]+(\.|\_*)?)+@([a-zA-Z][a-zA-Z0-9\-]+(\.|\-*\.))+[a-zA-Z]{2,4}$/;
    if (mail.length > 0) {
        if (!filter.test(mail)) {
            valido = false;
        }
    }

    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;
}

// Devuelve un hashtable con las claves del querystring
function parseQueryString(query)
{
    var params = {};
    if (!query) { return params; } // return empty object
    var pairs = query.split(/[;&]/);
    for (var i = 0; i < pairs.length; i++) {
        var keyVal = pairs[i].split('=');
        if (!keyVal || keyVal.length != 2) { continue; }
        var key = unescape(keyVal[0]);
        var val = unescape(keyVal[1]);
        val = val.replace(/\+/g, ' ');
        params[key] = val;
    }
    return params;
}

//Retorna el valor del parametro indicado
function getParam(param)
{
    var loc = window.location.href;
    //var parametros = loc.toLowerCase();
    var parametros = loc;
    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 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) {
            if (ctl[i].indexOf("ctl00") != -1) {
                ini = ctl[i].lastIndexOf("_") + 1;
            } else
                ini = ctl[i].indexOf("_") + 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);
}
