//-----------------------------------------------------------------------------------//
function validarNif(n)
{
	var nifChars1 = "ABCDEFGHPQSKLXabcdefghpqsklx";
	var nifChars2 = "ABCDEFGHTabcdefght";
	var nifChars3 = "TRWAGMYFPDXBNJZSQVHLCKE";
	var i;
	var longitud;
	var cero = false;
	var ss = '';
	var s = '';

	for(i=0;i<n.length;i++)
		if (isDigit(n.charAt(i)) || isLetter(n.charAt(i)))
			s = s + n.charAt(i);

	for(i=0;i<s.length;i++)	{
		if(s.charAt(i) != '0' || cero){
			ss = ss + s.charAt(i);
			cero = true;
			}
		}

	s = ss;

	if(s.length==0) {
			return '';
		}
	if(s.length > 9) {
			return '';
		}

	for(i=1;i<s.length-2;i++)	{
		if(!isDigit(s.charAt(i))){
			return '';
			}
	}

	// Si el primero y el último son numeros, el formato no es correcto
	if((isDigit(s.charAt(0))) && (isDigit(s.charAt(s.length-1)))) {
		return '';
	}

	// Si el primero es un numero, el ultimo seguro que es una letra
	if(isDigit(s.charAt(0))) {
		// VALIDAR FORMATO #3
		baseStr = s.substring(0,s.length-1);
		letra=s.charAt(s.length-1);
		letra=letra.toUpperCase();
	} else {
		// VALIDAR FORMATO #2
		baseStr = s.substring(1,s.length);
		letra=s.charAt(0);
		letra=letra.toUpperCase();
	}

	if(!isInteger(baseStr)) { return false; }
	baseInt = parseInt(baseStr);
	indice = baseInt % 23;

	if(letra==nifChars3.charAt(indice)) {
		return baseStr+letra;
	} else {
		return '';
	}
}
//-----------------------------------------------------------------------------------//
function validarEmail(s)
{
	 var i = 1;
	 var sLength = s.length;

	 if (sLength < 5) return false;

	 while ((i < sLength) && (s.charAt(i) != "@")) i++;

	 if ((i >= sLength) || (s.charAt(i) != "@")) return false;
	 else i += 2;

	 while ((i < sLength) && (s.charAt(i) != ".")) i++;

	 if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
	 else return true;
}
//-----------------------------------------------------------------------------------//
function validarCorreo(dir) {

	var caracteres_validos;
	var i;

	caracteres_validos = '1234567890QWERTYUIOPASDFGHJKLZXCVBNM_-.@qwertyuiopasdfghjklzxcvbnm';

	if (
		(dir.charAt(dir.length-1)=='-') ||
		(dir.charAt(dir.length-1)=='.') ||
		(dir.charAt(dir.length-1)=='@') ||
		(dir.charAt(dir.length-1)=='_')
		) {

		return false;
	}

	if (
		(dir.charAt(0)=='-') ||
		(dir.charAt(0)=='.') ||
		(dir.charAt(0)=='@') ||
		(dir.charAt(0)=='_')
		) {
		return false;
	}

	var j;
	j=0;
	for (i=0; i<dir.length; i++) {
		if (caracteres_validos.search(dir.charAt(i))==-1) {
			return false;
		}
		if (dir.charAt(i)=='@') j++;
	}

	//Si hay más de una @ la dirección es incorrecta
	if (j>1) {
		return false;
	}
	if (j==0) {
		return false;
	}

	if (dir.indexOf('.')==-1) return false;

	if (dir.indexOf('@.')!=-1) return false;
	if (dir.indexOf('.@')!=-1) return false;

	return true;

}
//-----------------------------------------------------------------------------------//
function isLetter(c)
{
	return(((c >= "a")&&(c<="z"))||((c >= "A")&&(c <= "Z")));
}
//-----------------------------------------------------------------------------------//
function isDigit(c)
{
	return((c >= "0")&&(c <= "9"));
}
//-----------------------------------------------------------------------------------//
function isDate(f)
{
	//	Comprueba si el formato de una fecha es correcto.

	if (f.indexOf('/') == -1)
		return(false);

	d = f.substring(0, f.indexOf('/'));
	m = f.substring(f.indexOf('/')+1, f.lastIndexOf('/'));
	a = f.substring(f.lastIndexOf('/')+1, f.length);

	if (isNaN(a) || isNaN(d) || isNaN(m))
		return false;

	if ((Number(d) < 1) || (Number(d) > 31))
		return false;

	if ((Number(m) < 1) || (Number(m) > 12))
		return false;

	if ((Number(a) < 1) || (Number(a) > 9999))
		return false;

	if (((Number(m) == 4) || (Number(m) == 6) || (Number(m) == 9) || (Number(m) == 11)) && (Number(d) > 30)) // Meses de 30 dias
		return false;

	if ((Number(m) == 2) && (Number(a)%4 != 0) && (Number(d) > 28)) // Para bisiestos
		return false;

	return true;
}
//-----------------------------------------------------------------------------------//
function isInteger(s)
{
	var i;
	var c;

	if (s.length == 0)
		return false;

	 for (i = 0; i<s.length; i++){
			c = s.charAt(i);

			if (!isDigit(c))
			return false;
	 }

	 return true;
}
//-----------------------------------------------------------------------------------//
function isFloat(s)
{
	var i;
	var c;

	if (s.length == 0)
		return false;

	 for (i = 0; i<s.length; i++){
         	c = s.charAt(i);
		 //alert(c=='.');
		 //alert(c==',');
                 if (!isDigit(c) && c !='.' && c !=',')
			return false;
	 }

	 return true;
}
//-----------------------------------------------------------------------------------//
function TrimIzquierda(cadena)
{
	var resultado = "";
	var i = len = 0;

	if (cadena+"" == "undefined" || cadena == null)
	return null;

	cadena += "";

	if (cadena.length == 0)
		resultado = "";
	else
	{
		len = cadena.length;

	 while ((i <= len) && (cadena.charAt(i) == " "))
		i++;

		resultado = cadena.substring(i, len);
	}

	return resultado;
}
//-----------------------------------------------------------------------------------//
function TrimDerecha(cadena)
{
	var resultado = "";
	var i = 0;

	if (cadena+"" == "undefined" || cadena == null)
		return null;

	cadena += "";

	if (cadena.length == 0)
		resultado = "";
	else
	{
	i = cadena.length - 1;
	while ((i >= 0) && (cadena.charAt(i) == " "))
			i--;

	 resultado = cadena.substring(0, i + 1);
	}

	return resultado;
}
//-----------------------------------------------------------------------------------//
function Trim(cadena)
{
	cadena = TrimIzquierda(cadena);
	cadena = TrimDerecha(cadena);

	return cadena;
}

//-----------------------------------------------------------------------------------//

function ValidarFormulario(formulario)
{
    var indiceMenor;
	for (i = 0; i < document.getElementById('formulario').length; i++)
	{
		var elemento = formulario.elements[i];
		var completo, correcto, longitudminima;

		completo = true;
		correcto = true;
		longitudminima = true;

		if (elemento.title != null && elemento.title.charAt(0) == '*'){	
			//alert(elemento.title + ' --' + elemento.name)	;
			if ( ((elemento.type == 'file' || elemento.type == 'hidden' || elemento.type == 'text' || elemento.type == 'textarea' || elemento.type == 'password' || elemento.type.toString().indexOf('select') >= 0 )
			&& (Trim(elemento.value).length) <= 0 || (elemento.type.toString().indexOf('select') >= 0 && (elemento.value == 0 || elemento.value == '' || elemento.selectedIndex == -1))))
			{	
				completo = false;
			}
		}

		/*
		Añadimos ademas la comprobación de cada campo del formulario en base al tipo de datos que debe
		contener para asegurarnos que el formato es correcto, además de si la longitud del mismo es la
		mínima exigida.
		Para ellos utilizaremos los siguientes tipos de datos
		int, float, date, email
		*/
		if (completo && elemento.minlength != null && elemento.title.charAt(0) == '*')
		{
			if ( elemento.type.toLowerCase() == 'text'  && Trim(elemento.value).length < Number(elemento.minlength))
				longitudminima = false;
		}
		if (completo && longitudminima && elemento.tipo != null){
          	if ( elemento.type.toLowerCase() == 'text'  && elemento.value.length > 0){
				if (elemento.tipo.toLowerCase() == 'date') correcto = isDate(elemento.value);
			 	if (elemento.tipo.toLowerCase() == 'int') correcto = isInteger(elemento.value);
			 	if (elemento.tipo.toLowerCase() == 'url'){
                      correcto = (elemento.value.toLowerCase().indexOf('http://') >= 0 && elemento.value.toLowerCase().indexOf('.') >= 0 && elemento.value.length > 7);

                    }
			 	if (elemento.tipo.toLowerCase() == 'tlf'){
					if (isInteger(elemento.value) && elemento.value.length>=9 )
						correcto = true;
					else{
						alert('El formato de teléfono del campo "' + elemento.title.substring(elemento.title.charAt(0) == '*' ? 1:0, elemento.title.length) + '" es incorrecto');
						return false;
					}
			 	}
			 	if (elemento.tipo.toLowerCase() == 'float') correcto = isFloat(elemento.value);
			 	if (elemento.tipo.toLowerCase() == 'email') correcto = validarEmail(elemento.value);
    			     if (elemento.tipo.toLowerCase() == 'nif')   correcto = (validarNif(elemento.value)==elemento.value);
			}
		}
		if (!completo)
		{
			//alert('El campo "' + elemento.title.substring(elemento.title.charAt(0) == '*' ? 1:0, elemento.title.length) + '" es obligatorio');
			return false;
		}

		if (! longitudminima)
		{
			alert('El campo "' + elemento.title.substring(elemento.title.charAt(0) == '*' ? 1:0, elemento.title.length) + '" ha de tener una longitud mínima de ' + elemento.minlength + ' caracteres');
			return false;
		}

		if (!correcto)
		{
			alert('El formato del campo "' + elemento.title.substring(elemento.title.charAt(0) == '*' ? 1:0, elemento.title.length) + '" es incorrecto');
			return false;
		}
	}

	return true;
}
//-----------------------------------------------------------------------------------//

