/****************************************************************/
/*								*/
/*  		FUNCIONES DE VALIDACION DE FORMULARIOS		*/
/*								*/
/****************************************************************/


/* Determina si se ha pasado la cadena vac�a o nada */
/* ------------------------------------------------ */

function esVacio(val)
{
    return ((val == null) || (val.length == 0));
}


/* Determina si se ha pasado un tel�fono fijo correcto (Espa�a) */
/* ------------------------------------------------------------ */

function validaTelefono(val)
{
        if ((!minCaracteres(val,9)) || (!esDigitos(val)))
        {
//                alert('Tel�fono incorrecto');
		return false;
        }

	return true;
}


/* Determina si se ha pasado un tel�fono m�vil correcto (Espa�a) */
/* ------------------------------------------------------------- */

function validaMovil(val)
{
        if((!minCaracteres(val,9)) || (!esDigitos(val)) || (val.charAt(0) != "6"))
		return false;
//                alert('M�vil incorrecto');

	return true;
}


/* Determina si se est� pasando una direcci�n de correo v�lida */
/* ----------------------------------------------------------- */

function validaEmail(val)
{
        arroba = val.lastIndexOf('@');

        if ( arroba < 1 )
        {
//                alert('E-mail incorrecto');
		return false;
        }
        else
        {
                punto = val.indexOf('.', arroba);
                if ((punto < arroba + 2) || (punto > val.length - 2 ))
                {
//                        alert('E-mail incorrecto');
			return false;
                }
        }

	return true;
}


/* Determina si se est� pasando un c�digo postal correcto */
/* ------------------------------------------------------ */

function validaCodigoPostal(val)
{
        if (!minCaracteres(val,5))
        {
//                alert('C�digo postal incorrecto');
                return false;
        }

        if (!esDigitos(val))
        {
//                alert('C�digo postal incorrecto');
                return false;
        }

        return true;
}


/* Determina si lo que se ha pasado es un NIF correcto */
/* --------------------------------------------------- */

function validaNIF(val)
{
        val = val.toUpperCase();
        var LetrasNIF = "TRWAGMYFPDXBNJZSQVHLCKE";
   
        if (!minCaracteres(val,8))
        {
//                alert('NIF incorrecto');
                return false;
        }

        Letra = val.charAt(val.length-1);
        if (LetrasNIF.indexOf(Letra) == -1)
        {
//                alert('NIF incorrecto');
                return false;
        }

        if (val.charAt(0) == 'X')
                Numero = val.substring(1,val.length-1)
        else
                Numero = val.substring(0,val.length-1);

        if (!esDigitos(Numero))
        {
//                alert('NIF incorrecto');
                return false;
        }

        Numero = parseInt(Numero,10)
        Indice = Numero-(parseInt(Numero/23,10)*23);
        if (Letra != LetrasNIF.charAt(Indice))
        {
//                alert('NIF incorrecto');
                return false;
        }

        return true;
}

/* Determina si el formato de la imagen es correcto */
/***************************************************/

function validaFormato(val)
{

	i = val.indexOf('.');
	var formato = val.substring(i+1, val.length)
	formato = formato.toUpperCase();

	if((formato == 'GIF') || (formato == 'JPG') || (formato == 'JPEG'))
		return true;

	return false;

}

function validaDni(val)
{

val = val.toUpperCase();
Numero = val.substring(0, val.length);

if (!esDigitos(Numero))
     return false;

if((val.length != 7)&&(val.length != 8))
     return false;

return true;

}


/* Determina si se ha pasado una estructura de login correcta */
/* ---------------------------------------------------------- */

function validaLogin(val)
{
        if (!esLetra(val.charAt(0)))
        {
//                alert('El primer car�cter del login ha de ser una letra');
                return false;
        }

        for(i=1;i<val.length;i++)
        {
                if( (!esDigito(val.charAt(i))) && (!esLetra(val.charAt(i))) )
                {
//                        alert('Alg�n car�cter incorrecto en el login');
                        return false;
                }
        }

	return true;
}

/* Determina si se ha pasado una estructura de url correcta */
/* -------------------------------------------------------- */

function validaUrl(val)
{

	inicio = val.substring(0, 7).toLowerCase(); 
	if(inicio == 'http://')
	{
		return true;
	}

	return false;
}


/* Determina si se est� pasando una password con estructura correcta */
/* ----------------------------------------------------------------- */

function validaPassword(val)
{
        for(i=1;i<val.length;i++)
        {
                if( (!esDigito(val.charAt(i))) && (!esLetra(val.charAt(i))) )
                {
//                        alert('Caracteres no v�lidos en la password');
			return false;
                }
        }

	return true;
}

/* Convierte el nombre y los apellidos a la primera letra en may�scula y sin espacios */
/* ---------------------------------------------------------------------------------- */

function convierteNombreApellido(val)
{

	primerBlanco = /^ /
	ultimoBlanco = / $/
	variosBlancos = /[ ]+/g

	val = val.replace(primerBlanco, "");
	val = val.replace(ultimoBlanco, "");
	val = val.replace(variosBlancos, " ");

	nombres = val.split(" ");
	val = "";

	for(i=0; i<nombres.length; i++)
	{
		nombre = nombres[i].substring(0, 1).toUpperCase(); 
		nombre += nombres[i].substring(1, nombres[i].length).toLowerCase();
		
		if(i+1 != nombres.length)		
			val += nombre + " ";
		else val += nombre;

	}

	return val;

}

/* Determina si la cadena tiene un m�nimo de caracteres */
/* ---------------------------------------------------- */

function minCaracteres(val,num)
{
    return !(val.length < num);
}


/* Determina si se ha pasado una cadena de d�gitos */
/* ----------------------------------------------- */

function esDigitos(val)
{
        for(i=0;i<val.length;i++)
        {
                if(!esDigito(val.charAt(i)))
                        return false;
        }

        return true;
}


/* Determina si estamos pasando un d�gito */
/* -------------------------------------- */

function esDigito(val)
{
        return ((val >= "0") && (val <= "9"));
}


/* Determina si se pasa una letra */
/* ------------------------------ */

function esLetra(val)
{
    return ( ((val >= "a") && (val <= "z")) || ((val >= "A") && (val <= "Z")) );
}

/* Determina si lo que se est� pasando es una fecha */
/* ------------------------------------------------ */

function validaFecha(val)
{
	var digitosDia = 0;
	
	// Determinaci�n de que la variable dia tiene  la forma 0D/,  DD/ o D/ donde D es un d�gito
	var dia;
	if(esDigitos(val.charAt(0)))
	{
		dia = parseInt(val.charAt(0));
		digitosDia++;
		
		if(esDigitos(val.charAt(1)))
		{
			if(dia == 0)
				dia = parseInt(val.charAt(1));
			else
				dia = parseInt(dia + val.charAt(1));

			digitosDia++;
			
			if(val.charAt(2) != '/')
				return false
			else
				digitosDia++;
			
		}
		else
		{
			if(val.charAt(1) != '/')
				return false;
			else
				digitosDia++;
		}
	}
	else
		return false;
	
	// Determinaci�n de que la variable mes tiene  la forma 0D/,  DD/ o D/ donde D es un d�gito
	
	var digitosMes = 0;
	
	var mes;
	if(esDigitos(val.charAt(digitosDia)))
	{
		mes = parseInt(val.charAt(digitosDia));
		digitosMes++;
		
		if(esDigitos(val.charAt(digitosDia + 1)))
		{
			if(mes == 0)
				mes = parseInt(val.charAt(digitosDia + 1));
			else
				mes = parseInt(mes + val.charAt(digitosDia + 1));

			digitosMes++;
			
			if(val.charAt(digitosDia + 2) != '/')
				return false;
			else
				digitosMes++;
			
		}
		else
		{
			if(val.charAt(digitosDia + 1) != '/')
				return false;
			else
				digitosMes++;
		}
	}
	else
		return false;

	//Determinaci�n de que la variable a�o es de la forma DD# o DDDD# donde D es un d�gito y # el fin de cadena
	
	var anno;

	var digitosAnno = val.length - digitosDia - digitosMes;
	
	if( (digitosAnno == 2) || (digitosAnno == 4) )
	{
		if(digitosAnno == 2)
		{
			if( esDigitos(val.charAt(val.length - 2)) && esDigitos(val.charAt(val.length - 1)) )
				anno = parseInt( val.charAt(val.length - 2) + val.charAt(val.length - 1) );
			else
				return false;
		}
		else
		{
			if( esDigitos(val.charAt(val.length - 4)) && esDigitos(val.charAt(val.length - 3)) && esDigitos(val.charAt(val.length - 2)) && esDigitos(val.charAt(val.length - 1)) )
				anno = parseInt(val.charAt(val.length - 4) + val.charAt(val.length - 3) + val.charAt(val.length - 2) + val.charAt(val.length - 1) );
			else
				return false;
		}
	}
	else
		return false;

	// Una vez comprobado que el formato de la fecha es l�gico comprobamos que tenga sentido la fecha:
	
	if( (anno<0) || (anno>9999) )
		return false;
		
	if( (mes<1)  || (mes>12) )
		return false;
	
	if( dia < 1 )
		return false;
		
        if((mes==4)||(mes==6)||(mes==9)||(mes==11)) //meses de 30 d�as
	{
		if( dia > 30 )
			return false;
	}
	
        if((mes==1)||(mes==3)||(mes==5)||(mes==7)||(mes==8)||(mes==10)||(mes==12)) //meses de 31 d�as
	{
		if( dia > 31 )
			return false;
	}
	
        if((mes==2) && (!esBisiesto(anno))) // Febrero no bisiesto
	{
		if( dia > 28 )
			return false;
	}
	
        if((mes==2) && (esBisiesto(anno))) // Febrero bisiesto
	{
		if( dia > 29)
			return false;
	}
	
	// Si hemos superado todos las condiciones, la fecha es correcta
	return true;
}

/* Determina si lo que se est� pasando es un real (float) construido con el separador decimal '.' */
/* *********************************************************************************************  */

function esReal(val)
{

	// Considera real que no haya ninguna entrada
	if(esVacio(val))
	{
		return true;
	}

	if(val.charAt(0) != "-")
	{
		if(!esDigito(val.charAt(0)) && val.charAt(0)!=".")
			return false; 
	}

	encontradoPunto = 0;
	
	//Recorremos val en busca de d�gitos y el separador decimal '.' (el primer caracter
	//ya ha sido comprobado al evaluar si el n�mero era negativo o no)
	
	for(i = 1; i<val.length; i++)
	{
		if(!esDigito(val.charAt(i))) 
		{
			if(val.charAt(i) == "." && encontradoPunto == 0)
				encontradoPunto = 1;
			else
				return false;
		}
	}
	return true;
}

function esEntero(val)
{
	//Consideramos entero ninguna entrada
	if(esVacio(val))
	{
		return true;
	}

	if(val.charAt(0) != "-")
	{
		if(!esDigito(val.charAt(0)))
			return false;
	}

	for(i = 1; i<val.length; i++)
	{
		if(!esDigito(val.charAt(i)))
			return false;
	}

	return true;
	
}

function fechaCorrecta(formu,valor,myfield, e, dec)
{
    var key;
    var keychar;
    var cadena="";

    if (window.event)
        key = window.event.keyCode;
    else if (e)
        key = e.which;
    else
        return true;

    if(key==8)
        return true;

    keychar = String.fromCharCode(key);
    
    if(valor.length==0)
    {
        cadena="0123";
    }
    if(valor.length==1)
    {
        cadena="0123456789";
        if(valor.charAt(0)==0)
            cadena="123456789";

        if(valor.charAt(0)==3)
            cadena="01";
    }

    if(valor.length==2)
       formu.value=formu.value+"/";

    if(valor.length==2 || valor.length==3)
        cadena="01";

    if(valor.length==4)
    {
        cadena="0123456789";
        if(valor.charAt(3)==0)
            cadena="123456789";

        if(valor.charAt(3)==1)
            cadena="012";
    }
    
    if(valor.length==5)
       formu.value=formu.value+"/";
    
    if(valor.length==5 || valor.length==6)
        cadena="12";
        
    if(valor.length==7)
    {
        if(valor.charAt(6)==1)
            cadena="9";

        if(valor.charAt(6)==2)
            cadena="01";
    }
    
    if(valor.length==8)
    {
        if(valor.charAt(6)==1)
            cadena="0123456789";

        if(valor.charAt(6)==2)
            cadena="0123456789";
    }
    
    if(valor.length==9)
        cadena="0123456789";
    
    if(valor.length>9)
        cadena="";
    
    if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) )
        return true;
    else if (((cadena).indexOf(keychar) > -1))
        return true;   
    

    else if (dec && (keychar == "."))
    {
        myfield.form.elements[dec].focus();
        return false;
    }
    else
        return false;
}     

