/*
 * Metodo que comprueba que el campo este relleno.
 * @param valor Valor del campo a comprobar.
 */
function relleno(valor) {
	var ret = valor.length > 0;

	return ret;
}

/*
 * Metodo que comprueba que el campo contenga un DNI valido.
 * @param valor Valor del campo a comprobar.
 */
function validarDNI(valor) {
	var ret = true;

	valor = valor.toUpperCase();

	if (valor.indexOf('X') != -1) {
		// Tarjeta de residencia empieza siempre por X, ignorar la X.
		valor = valor.substring(1, valor.length);
	}

	var miLetra = valor.substring(valor.length - 1, valor.length);

	var dni = valor.substring(0, valor.length - 1);

	if (dni > 0 && dni < 99999999) {
		var letra;

		resto = dni % 23; // Resto de la division entre 23.

		switch (resto) {
			// En funcion del resto asigna letra.
			case 0:	letra = "T";
					break;
			case 1:	letra = "R";
					break;
			case 2:	letra = "W";
					break;
			case 3:	letra = "A";
					break;
			case 4:	letra = "G";
					break;
			case 5:	letra = "M";
					break;
			case 6:	letra = "Y";
					break;
			case 7:	letra = "F";
					break;
			case 8:	letra = "P";
					break;
			case 9:	letra = "D";
					break;
			case 10:letra = "X";
					break;
			case 11:letra = "B";
					break;
			case 12:letra = "N";
					break;
			case 13:letra = "J";
					break;
			case 14:letra = "Z";
					break;
			case 15:letra = "S";
					break;
			case 16:letra = "Q";
					break;
			case 17:letra = "V";
					break;
			case 18:letra = "H";
					break;
			case 19:letra = "L";
					break;
			case 20:letra = "C";
					break;
			case 21:letra = "K";
					break;
			case 22:letra = "E";
					break;
			case 23:letra = "U";
					break;
		}

		if (letra != miLetra) {
			ret = false;
		} else {
			ret = true;
		}
	} else {
		ret = false;
	}

	return ret;
}

/*
 * Metodo que comprueba que el campo contenga un Codigo Postal valido.
 * @param valor Valor del campo a comprobar.
 */
function validarCP(valor) {
	var ret = (valor.length == 5);
	ret &= (valor >= 0) && (valor <= 99999);

	return ret;
}

/*
 * Metodo que comprueba que el campo contenga un Telefono valido.
 * @param valor Valor del campo a comprobar.
 */
function validarTelefono(valor) {
	var ret = (valor.length == 9);
	ret &=
		((valor >= 600000000) && (valor <= 699999999)) ||
		((valor >= 800000000) && (valor <= 899999999)) ||
		((valor >= 900000000) && (valor <= 999999999))
		;

	return ret;
}

/*
 * Metodo que comprueba que el campo contenga un E-Mail valido.
 * @param valor Valor del campo a comprobar.
 */
function validarEmail(valor) {
	var at     = "@";
	var dot    = ".";
	var lat    = valor.indexOf(at);
	var lvalue = valor.length;
	var ldot   = valor.indexOf(dot);
	
	if	(
			valor.indexOf('!') >= 0 || valor.indexOf('?') >= 0 || valor.indexOf('*') >= 0 || valor.indexOf('$') >= 0 ||
			valor.indexOf('#') >= 0 || valor.indexOf('%') >= 0 || valor.indexOf('&') >= 0 || valor.indexOf('/') >= 0 ||
			valor.indexOf('(') >= 0 || valor.indexOf(')') >= 0 || valor.indexOf('=') >= 0 || valor.indexOf('?') >= 0 ||
			valor.indexOf('[') >= 0 || valor.indexOf(']') >= 0 || valor.indexOf('{') >= 0 || valor.indexOf('}') >= 0
		)
	{
		return false;
	}

	if (valor.indexOf(at) == -1) {
		return false
	}

	if (valor.lastIndexOf(at) != valor.indexOf(at)) {
		return false
	}

	if (valor.indexOf(at) == -1 || valor.indexOf(at) == 0 || valor.indexOf(at) == lvalue) {
		return false
	}

	if (valor.indexOf(dot) == -1 || valor.indexOf(dot) == 0 || valor.indexOf(dot) == lvalue) {
		return false
	}

	if (valor.indexOf(at, (lat + 1)) != -1) {
		return false
	}

	if (valor.substring(lat - 1, lat) == dot || valor.substring(lat + 1, lat + 2) == dot) {
		return false
	}

	if (valor.indexOf(dot, (lat + 2)) == -1) {
		return false
	}

	if (valor.indexOf(" ") != -1 || valor.indexOf('/') != -1) {
		return false
	}

	//Check if we have addresses like something@somewhere.dkjfkdfjkldjkfldklf
	var afterDot = valor.substring(ldot + 1, lvalue);
	if (afterDot.length < 2) {
		return false;
	}


	return true;
}

/*
 * Metodo que comprueba que el campo contenga una Fecha valida.
 * @param valor Valor del campo a comprobar.
 */
function validarFecha(valor, patron) {
//	alert('validarFecha: ' + valor + ' - ' + patron);
	var ret = true;

	// TODO REVISAR.

	if(valor.indexOf("-") > 0) {
		var idx1 = valor.indexOf("-");
		var idx2 = valor.indexOf("-", idx1 + 1);

		var dia  = valor.substring(0, idx1);
		var mes  = valor.substring(idx1 + 1, idx2);
		var anno = valor.substring(idx2 + 1);

		if((dia.length == 2) && (mes.length == 2) && (anno.length == 4)) {
			ret =
				((dia  > 0) && (dia  <=   31)) &&
				((mes  > 0) && (mes  <=   12)) &&
				((anno > 0) && (anno <= 9999));
		} else {
			ret = false;
		}
	} else {
		ret = false;
	}

//	alert('ret: ' + ret);
	return ret;
}

/*
 * Metodo que comprueba que el campo de seleccion tenga un valor seleccionado.
 * @param valor Valor del campo a comprobar.
 */
function seleccionado(valor) {
	var ret = valor != -1;

	return ret;
}

/*
 * Metodo que comprueba que el campo no supere el limite de caracteres.
 * @param valor Valor del campo a comprobar.
 * @param limite Limite de caracteres para el campo.
 */
function longitud(valor, limite) {
	var ret = valor.length <= limite;

	return ret;
}

function validarNumero(valor) {
	return !isNaN(valor);
}
