var language	= new Array();
language['header'] = ' SE HAN DETECTADO LOS SIGUIENTES ERRORES: ';
language['start']	= '->';
language['field'] = ' Campo ';
language['require'] = ' requerido ';
language['have'] = ' debe tener ';
language['and'] = ' y ';
language['min'] = ' debe teber al menos ';
language['max'] = ' y no debe tener mas de ';
language['minmax'] = ' entre ';
language['chars'] = ' caracteres';
language['num'] = ' debe ser un numero';
language['email'] = ' debe ser una direccion de e-mail válida';
language['str'] = ' y no debe contener numeros';
language['noletra'] = ' no tiene digito';
language['nifinc'] = ' es incorrecto';
language['anyomal'] = ' El año debe tener 4 cifras';
language['mesmal'] = ' Mes incorrecto';
language['diamal'] = ' Dia incorrecto';
language['unode'] = ' Al menos uno de los campos: ';
language['todos'] = 'Los campos: ';
language['deben'] = ' deben tener todos ';
language['valor'] = ' valor';
language['banco'] = ' Cuenta bancaria incorrecta';
// -----------------------------------------------------------------------------
var checkObjects	= new Array();
var grupos		= new Array();
var Ngrupos		= "";
var errors		= "";
var returnVal		= false;
var numeros = "0123456789";
// -----------------------------------------------------------------------------
// FUNCION PARA CHEQUEAR NUMS,STRINGS,EMAILS, FECHAS, NIF Y CUENTAS BANCARIAS
// Francisco Orts (c) 2002
// define - Llamar a esta funcion en el BODY onLoad
// 		r = Campo requerido t/f (requerido)
// 		n = nombre interno del campo (requerido)
// 		type= string, num, email, mix, date, nif, ccc (requerido)
// 		HTMLname - Nombre del campo en la pantalla (requerido)
// 		group - Campos que pertenecen al mismo grupo (opcional)
// 		min = El valor debe tener al menos [min] caracteres (Opcional)
// 		max = El valor puede tener como maximo [max] caracteres (Opcional)
// 		d = (Opcional)
// -----------------------------------------------------------------------------
function define(r, n, type, HTMLname, min, max, group, d) {
	var p;
	var i;
	var x;
	if (!d) d = document;
	if ((p=n.indexOf("?"))>0&&parent.frames.length) {
		d = parent.frames[n.substring(p+1)].document;
		n = n.substring(0,p);
	}
	if (!(x = d[n]) && d.all) x = d.all[n];
	for (i = 0; !x && i < d.forms.length; i++) {
		x = d.forms[i][n];
	}
	for (i = 0; !x && d.layers && i < d.layers.length; i++) {
		x = define(r, n, type, HTMLname, min, max, group, d.layers[i].document);
		return x;       
	}
	eval("V_"+n+" = new formResult(r, x, type, HTMLname, min, max, group);");
	checkObjects[eval(checkObjects.length)] = eval("V_"+n);
}

function formResult(req, form, type, HTMLname, min, max, group) {
	this.req = req;
	this.form = form;
	this.type = type;
	this.HTMLname = HTMLname;
	this.min  = min;
	this.max  = max;
	this.group = group;
}

function validate() {
	if (checkObjects.length > 0) {
		for (i = 0; i < checkObjects.length; i++) {
			validarObj = new Object();
			validarObj.req = checkObjects[i].req;
			validarObj.type = checkObjects[i].type;
			validarObj.form = checkObjects[i].form;
			validarObj.HTMLname = checkObjects[i].HTMLname;
			validarObj.val = checkObjects[i].form.value;
			validarObj.len = checkObjects[i].form.value.length;
			validarObj.min = checkObjects[i].min;
			validarObj.max = checkObjects[i].max;
			validarObj.group = checkObjects[i].group;

if(validarObj.group) {
	if(Ngrupos.indexOf(validarObj.group) == -1) {
		Ngrupos += ' '+validarObj.group;
	}
}

//------------------------------------------------------------
// QUITA LOS ESPACIOS DEL PRINCIPIO (SI LOS HAY)
//------------------------------------------------------------
			while(''+validarObj.val.charAt(0)==' ') {
				validarObj.val=validarObj.val.substring(1,validarObj.len);
				validarObj.len--;
			}
//------------------------------------------------------------
// CREA CABECERA Y CHEQUEA REQUERIDOS
//------------------------------------------------------------

			cab = language['start'] + language['field'] + validarObj.HTMLname;
			flag=0;
			err="";

			//if(validarObj.group) {
				//if(grupo[validarObj.group]==undefined) {
					//grupo[validarObj.group]="";
				//}
				//grupo[validarObj.group] += validarObj.form.name+" ";
			//} 

		if(validarObj.req=='t' || (validarObj.req=='f' && validarObj.len>0)) {

			if(validarObj.req=='t' && validarObj.len==0) { 
				if(!validarObj.group) {
					cab += language['require']; 
					flag=1;
				}
			}
			
		//if(validarObj.req=='t' && validarObj.type=='combo') {
			//temp=validarObj.selectedIndex;
			//if(temp == 0) {
				//cab += language['require']; 
				//flag=1;
			//}	
		//}

//------------------------------------------------------------
// DETERMINA EL TIPO Y COMPRUEBA LA VALIDEZ DEL CONTENIDO
//------------------------------------------------------------
			//--------------------------------------------------
			// TIPO 'NUM'. Pues eso. Tiene que ser un numero
			//--------------------------------------------------
			if(validarObj.type=="num" && isNaN(validarObj.val)) {
				err += language['num']
				flag=1;
			} else 
			//--------------------------------------------------
			// TIPO 'STRING' PURO. No debe contener numeros
			//--------------------------------------------------
			if(validarObj.type=="string") {
				cont=0;
				for(n=0; n<validarObj.len; n++) {
					c=validarObj.val.substring(n, n+1);
					// SI ENCUENTRA NUMEROS NO ES ALFABETICA
                	if(numeros.indexOf(c)>0) { cont++; }
				}
				if(cont > 0) {
					err += language['str']; 
					flag=1;
				}
			} else
			//--------------------------------------------------
			// TIPO 'EMAIL'. Debe tener > 5 car. Contener una '@'
			// 		y el '.' no puede estar detras de la '@'
			//--------------------------------------------------
			if(validarObj.type=="email") {
            	if ((validarObj.val.indexOf("@") == -1) ||
                	(validarObj.val.charAt(0) == ".") ||
                	(validarObj.val.charAt(0) == "@") ||
                	(validarObj.len < 5) ||
                	(validarObj.val.indexOf(".") == -1) ||
                	(validarObj.val.charAt(validarObj.val.indexOf("@")+1) == ".") ||
                	(validarObj.val.charAt(validarObj.val.indexOf("@")-1) == ".")) {
                    	err += language['email']; 
						flag=1;}

			} else
			//--------------------------------------------------
			// TIPO 'DATE'. Se comprueba la validez de la fecha
			// y el formato.
			//--------------------------------------------------
			if(validarObj.type=="date" && validarObj.len > 0) {
	
				// *** SUSTITUYO '-' y '.' POR '/'
				cad="";
				for(x=0; x<validarObj.len; x++) {
					c=validarObj.val.substring(x,x+1);
					if(c=="-" || c==".") { c="/"; }
					cad += c;
				}
				dia=cad.split("/")[0];
				mes=cad.split("/")[1];
				anyo=cad.split("/")[2];

				if(anyo.length < 4) { 
					err += language['anyomal'];
					flag=1; 
				}

				if(mes<1 || mes>12) { 
					err += language['mesmal'];
					flag=1; 
				}

				if(((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes=10) || (mes==12)) && ((dia < 1) || (dia > 31))) { 
					err += language['diamal'];
					flag=1; 
				}
				if(((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia < 1) || (dia>30))) { 
					err += language['diamal'];
					flag=1; 
				}

				// *** EL ANYO ES BISIESTO? ***
				if(mes==2) {
					if((anyo % 4) != 0) { 
						bis="n"; 
					} else {
						if((anyo % 100) == 0) {
							if((anyo % 400) == 0) {
								bis="s";
							} else {
								bis="n";
							} 
						} else {
							bis="s";
						}
					}
					if(bis=="s" && dia >29) { err += language['diamal']; flag=1; }
					if(bis=="n" && dia >28) { err += language['diamal']; flag=1; }
				}
			} else
			//--------------------------------------------------
			// TIPO 'NIF'. Se comprueba el digito de control
			//--------------------------------------------------
			if(validarObj.type=="nif") {

				letras="TRWAGMYFPDXBNJZSQVHLCKE";
				letra_old = "";
				cad = "";
				nuevo = "";

				// *** QUITA ESPACIOS Y GUIONES ***
				for(m=0; m < validarObj.len; m++) {
					car=validarObj.val.substring(m, m+1);
					if(car != " " && car != "-") {
						cad += car;
					}
				}
				cadlen=cad.length;
				a = cad.substring(0, 1);
				z = cad.substring(cadlen -1, cadlen);

				// *** LA PRIMERA NO ES UNA LETRA (CIF) ***
				if(letras.indexOf(a) < 0) {

					// *** LA ULTIMA ES UNA LETRA (NIF) ***
					if(letras.indexOf(z) >= 0)  {

						num_old = cad.substring(0, cadlen-1);
						letra_old = z;

						// *** CALCULA  LETRA ***
						dig = parseInt(num_old) % 23;
						letra = letras.substring(dig, dig+1);
	
						if(letra_old != letra) {
							err += language['nifinc'];
							flag=1;
						}
					} else {
					// *** NO TIENE LETRA ***
						num_old = cad;
						err += language['noletra'];
						flag=1;
					}
		
				}

			} else
			//--------------------------------------------------
			// TIPO 'CCC'. Se comprueban los digitos de control
			//--------------------------------------------------
			if(validarObj.type="cc*") {
				switch(validarObj.type){
					case cc1:
						var cc1=validarObj.type;
						break;
					case cc2:
						var cc2=validarObj.type;
						break;
					case cc3:
						var cc3=validarObj.type;
						break;
					case cc4:
						var cc4=validarObj.type;
						break;
				}
				if(cc1 && cc2 && cc3 && cc4) {
				num=0;
				entofi=cc1+cc2;
				APesos = new Array(1,2,4,8,5,10,9,7,3,6); // Array de "pesos"
				DC1=0;
				DC2=0;
				x=8;
				while(x>0){
					digito=entofi.substr(x-1,1);
					num = parseInt(APesos[x+1]*(digito));
					DC1 = DC1 + num;
					x--;
				}
				Resto = DC1 % 11;
				DC1=11-Resto;
				if (DC1==10) DC1=1;
				if (DC1==11) DC1=0;              // D�gito control Entidad-Oficina

				x=10;
				while(x>0) {
					digito=cc4.substr(x-1,1);
					num = parseInt(APesos[x-1]*(digito));
					DC2 = DC2 + num;
					x--;
				}
				Resto = DC2 % 11;
				DC2 = 11 - Resto;
				if (DC2==10) DC2=1;
				if (DC2==11) DC2=0;         // D�gito Control C/C

				DigControl="" + DC1 + DC2;   // los 2 n�meros del D.C.
				if(cc3 != DigControl) {
					err += language['banco'];
					flag=1;
				} 
				} 

			}

//------------------------------------------------------------
//	SI TIENE MAX o MIN DEFINIDOS, SE COMPRUEBA
//------------------------------------------------------------
			if((validarObj.min || validarObj.max) && 
				(validarObj.len < validarObj.min || validarObj.len > validarObj.max)) {

				if(validarObj.min && !validarObj.max) {
					err += language['min'] + validarObj.min + language['chars'];
					flag=1;
				} else
				if(!validarObj.min && validarObj.max) {
					err += language['max'] + validarObj.max + language['chars'];
					flag=1;
				} else
				if((validarObj.min && validarObj.max) && (validarObj.min != validarObj.max)) {
					err += language['have'] + language['minmax'] + validarObj.min + 
						language['and'] + validarObj.max +  language['chars'];
					flag=1;
				} else
				if(validarObj.min == validarObj.max) {
					err += language['have'] + validarObj.min + language['chars'];
					flag=1;
				}

			}	// Fin comprobacion longitud

			if(flag==1) { 
				errors += cab + err + "\n"; 
			}
			if(validarObj.req=='t') {
				if(validarObj.len == 0) { 
					validarObj.form.style.backgroundColor='#C0C0C0';
				} else {
					validarObj.form.style.backgroundColor='white';
				}
			}
		}		// Fin requeridos o no requeridos pero con contenido
		}		// Fin bucle objetos
	}			// Fin checkObjects.length
//------------------------------------------------------------
//	REVISA LOS GRUPOS
//------------------------------------------------------------
grupo=Ngrupos.split(" ");
for(z=1; z<grupo.length; z++){
bandera=0;
churro='';
clave=grupo[z].substring(0,1);
	for(zz=0; zz < checkObjects.length; zz++) {
		if(checkObjects[zz].group==grupo[z])  {
			if(clave == "X") {
				if(checkObjects[zz].form.value.length > 0) {
					bandera=1;
				}
				churro += checkObjects[zz].HTMLname + ' ';
			} else {
				if(checkObjects[zz].form.value.length > 0) {
					bandera=1;
				} else {
					if(checkObjects[zz].req=="t") {
						bandera=0;
					} 
				}
				churro += checkObjects[zz].HTMLname + ' ';
			}
		}
	}
	if(bandera==0 && clave=='X') { 
		errors += language['unode'] + churro +language['have'] + language['valor'] +"\n"; 
	}
	if(bandera==0 && clave=='G') { 
		errors += language['todos'] + churro +language['deben'] + language['valor'] +"\n"; 
	}
}


//------------------------------------------------------------
// SI HAY ERROR, LO 'CANTA'.
// SI NO, HACE EL SUBMIT.
//------------------------------------------------------------
	if (errors) {
		alert(language["header"].concat("\n" + errors));
		errors = "";
		msg = "";
		returnVal = false;
	} else {
		document.datos.submit();
		returnVal = true;
   }
}


