/****************************************************************/
/*								*/
/*  		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;
	
}

