﻿// 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 creaSel(idCont, idSel, resuls) {
    var contenedor = document.getElementById(idCont);
    var sel = document.createElement("select");
    sel.setAttribute("id", idSel);
    contenedor.appendChild(sel);
    cargaSel(idSel, resuls);
}

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;
}

//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;

//  var valido = true;
//  var posArroba = mail.indexOf("@");
//  var len = mail.length;
//  if (len > 0) {  
//      if (posArroba > 0 && posArroba < len - 5) {
//        if (mail.indexOf("@", posArroba + 1) > 0) {
//          valido = false;
//        }
//        if (valido) {
//          posUltPunt = mail.lastIndexOf(".");
//          posPriPunt = mail.indexOf(".");      
//          if (posUltPunt > len - 3 || posPriPunt == 0 || posPriPunt == -1) {
//            valido = false;
//          } else {
//            if (mail.indexOf("..") >= 0 || mail.indexOf("@.") >= 0 || mail.indexOf(".@") >= 0) {
//              valido = false;
//            }
//          }    
//        }
//      } else {
//        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;   
}

//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 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;
        var part = ctl[i].split("_");
        var tipo = ctl[i].substring(ini, ini + 3);
        if (part.length > 1 && part[1].length > 3) {
            tipo = part[1].substring(0, 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);
}
