//Última modificación 15/6/2005 19:50

//Comprueba una cadena de texto si esta vacia		
function campo_vacio(cadena)
{
	if(cadena.length==0)
		return(true);
	else
		return(false);					
}
//Comprueba que una cadena es un numero, el minimo y maximo, y numero de cifras que tiene		
function comprueba_numero(numero,min,max,longitud)
{
	var resultado;
	if(!(isNaN(numero))&&(parseInt(numero)>=min)&&(parseInt(numero)<=max)&&(numero.length==longitud))
		resultado=true;
	else
		resultado=false;
	return(resultado);
}

//Comprueba partes de fecha, utilizado en "valida_fecha"		
function tres_trozos_validos(trozos)
{
	var dia,mes,anyo,resultado;
	dia=trozos[0];
	mes=trozos[1];
	anyo=trozos[2];
	if((comprueba_numero(dia,1,31,2))&&(comprueba_numero(mes,1,12,2))&&(comprueba_numero(anyo,1900,9999,4)))
		resultado=true;
	else
		resultado=false;
	return(resultado);
}

//Valida fechas	
function valida_fecha(cadena)
{
	var trozos_fecha=cadena.split("/");
	if ((trozos_fecha.length==3) && (tres_trozos_validos(trozos_fecha)))
		return(true);
	else
	{
		alert("No es una fecha valida");
		return(false);
	}
}

//Comprueba que una cadena solo tenga los caracteres validos segun tipo:
//0 -> alfanumerico, 1 -> alfabeto español+espacio, 2 -> entre a-z minusculas (ext del email)
//3 -> caracteres validos para dominio email, 4 -> caracteres validos para el usuario email
//5 -> igual que el tipo 1 más numeros, el punto y la coma
function comprueba_tipo_cadena(cadena,tipo)
{
	var caracteres,devuelve,contador,contador_caracteres;
	switch(tipo)
	{
		case 0:caracteres="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
			break;
		case 1:caracteres=" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZáéíóúñüçÁÉÍÓÚÑÜÇ";
			break;
		case 2:caracteres="abcdefghijklmnopqrstuvwxyz";
			break;
		case 3:caracteres="abcdefghijklmnopqrstuvwxyz0123456789-_";
			break;
		case 4:caracteres="abcdefghijklmnopqrstuvwxyz0123456789.-_";
			break;
		case 5:caracteres=" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZáéíóúñüçÁÉÍÓÚÑÜÇ0123456789.,";
			break;
		default:alert("Error en tipo");
			break;
	}
	devuelve=true;
	contador=0;
	while((devuelve)&&(contador<cadena.length))
	{
		contador_caracteres=0;
		devuelve=false;
		while((contador_caracteres<caracteres.length)&&(!devuelve))
		{
			if(cadena.charAt(contador)==caracteres.charAt(contador_caracteres))
				devuelve=true;
			else
				contador_caracteres++;
		}
		contador++;
	}
	return(devuelve);
}

//Valida email
function valida_email(email)
{
	var trozos_email,trozos_dominio,contador,devuelve;
	email=email.toLowerCase(email);
	trozos_email=email.split("@");
	if(trozos_email.length!=2)
		return(false);
	if(!comprueba_tipo_cadena(trozos_email[0],4))
		return(false);
	if(trozos_email[1].indexOf(".")<=0)
		return(false);
	if(trozos_email[1].lastIndexOf(".")==(trozos_email[1].length-1))
		return(false);		
	trozos_dominio=trozos_email[1].split(".");
	if(trozos_dominio.length<2)
		return(false);
	contador=0;
	devuelve=true;
	while((contador<=(trozos_dominio.length-2))&&devuelve)
	{
		if(campo_vacio(trozos_dominio[contador]))
			devuelve=false;
		else
			if(!comprueba_tipo_cadena(trozos_dominio[contador],3))
				devuelve=false;
			else
				contador++;		
	}		
	if(!devuelve)
		return(false);
	if((trozos_dominio[trozos_dominio.length-1].length<2)||(trozos_dominio[trozos_dominio.length-1].length>4)||(!comprueba_tipo_cadena(trozos_dominio[trozos_dominio.length-1],2)))
		devuelve=false;
	return(devuelve);
}

//Calcula el digito de control de un número de cuenta
//se le pasan los parametros como cadenas->entidad,sucursal,dc,cuenta
//no comprueba que son números, hay que hacerlo antes
//devuelve true si el dc es correcto y false si no
function valida_dc(entidad,sucursal,dc,cuenta)
{
	var suma,a,b,d,c,d_mas_c;
	var pesos=new Array(1,2,4,8,5,10,9,7,3,6);
	while(entidad.length<4)
		entidad="0"+entidad;
	while(sucursal.length<4)
		sucursal="0"+sucursal;
	while(dc.length<2)
		dc="0"+dc;
	while(cuenta.length<10)
		cuenta="0"+cuenta;
	var entidad_sucursal=entidad+sucursal;
	suma=0;
	b=2;
	for(a=0;a<8;a++)
	{
		suma=suma+(pesos[b]*parseInt(entidad_sucursal.charAt(a)));
		b++;
	}
	d=11-(suma%11);
	if(d==10)
		d=1;
	if(d==11)
		d=0;
	suma=0;
	for(a=0;a<10;a++)
		suma=suma+(pesos[a]*parseInt(cuenta.charAt(a)));
	c=11-(suma%11);
	if(c==10)
		c=1;
	if(c==11)
		c=0;
	d_mas_c=""+d+c;
	if(d_mas_c==dc)
		return(true);
	else
		return(false);
}

//Usado en valida_cif
function cif_impares(numero)
{
	numero=numero*2;
	numero=""+numero;
	if(numero.length<2)
		return(parseInt(numero));
	else
		return(parseInt(numero.charAt(0))+parseInt(numero.charAt(1)));	
}

//Valida el C.I.F.
function valida_cif(cif)
{
	var i,a,b,c,d,dc,letra;
	var primeraletra="ABCDEFGHKLMNPQS";
	if(cif.length!=9)
		return(false);
	cif=cif.toUpperCase(cif);
	i=0;
	while((cif.charAt(0)!=primeraletra.charAt(i))&&(i<cif.length))
		i++;
	if(i==cif.length)
		return(false);
	if(isNaN(cif.substr(1,7)))
		return(false);
	a=parseInt(cif.charAt(2))+parseInt(cif.charAt(4))+parseInt(cif.charAt(6));
	b=cif_impares(cif.charAt(1))+cif_impares(cif.charAt(3))+cif_impares(cif.charAt(5))+cif_impares(cif.charAt(7));
	c=a+b;
	d=c%10;
	dc=10-d;
	if(dc==0)
		letra="J";
	else
		letra=String.fromCharCode(40+dc);
	dc=""+dc;
	if((cif.charAt(8)==dc)||(cif.charAt(8)==letra))
		return(true);
	else
		return(false);
}

//Usado en el evento onkeypress, solo funciona con explorer
//solo permite la pulsación de caracteres numericos y el caracter 8
//que es el de borrar
function quita_no_numeros()
{
	var caracteres=Array (48,49,50,51,52,53,54,55,56,57,8);
	var i,esta;
	i=0;
	esta=false;
	while((i<caracteres.length)&&(!esta))
	{
		if(event.keyCode==caracteres[i])
			esta=true;
		else
			i++;
	}
	if(!esta)
		window.event.keyCode=0;
}

//Valida el NIF
function valida_nif(nif)
{
	var letra="TRWAGMYFPDXBNJZSQVHLCKE";
	var numero,resto,letra_final;
	if((nif.length<2)||(nif.length>9))
		return(false);
	nif=nif.toUpperCase(nif);
	numero=nif.substr(0,nif.length);
	letra_final=nif.charAt(nif.length-1);
	if(!isNaN(numero))
		return(false);
	resto=parseInt(numero)%23;
	if(letra.charAt(resto)==letra_final)
		return(true);
	else
		return(false);	
}
