/*
* Validador de formularios
*
* Este es un validador de formularios que permite el uso
* de atributos dentro de los tags del formulario (inputs y textareas)
* para verificar la informacion antes de ser enviada al servidor.
*
* Funciona de manera simple. Ejemplo
* <TAGFORMA name="xx" ... validate="[OPCIONES:=O1|O2|..|On]"
   msg="Mensaje de error" [ffocus="campo a foco"]>
*
* Opciones son:
* R -> campo requerido. Esta opcion debe ser la primera, es decir,
*      si el campo del formulario es obligatorio y un numero real
*      las opciones deben ser R|F. F|R permitira valor nulo.
* E -> direccion de correo electronico
* F -> real (positivo y negativo).
* I -> entero (positivo y negativo)
* P -> porcentaje (valor real entre 0 y 100)
* G -> GMT ((+-)H:MM o (+-)H)
* A -> nn.nn.nn.nn.nn (numero de registro de partida arancelaria)
* U -> nombre de usuario (letras)
* T -> texto(letras, puede tener espacios en blanco
* C -> Compara clave (Uso: <input type='password' name='clave1' validate='R'> <input type='passowrd' name='otraclave' comparar='clave1' validate='R|C'> )
*/

var validGMT = /^(\+|-)?\d(:[012345][\d])?$/;
var validFloat = /^(((\+|-)?\d+(\.\d*)?)|((\+|-)?(\d*\.)?\d+))$/;
var validInteger = /^((\+|-)?\d+)$/;
var validEmail = /^([\w_\-]+)(\.[\w_\-]+)*@((\[[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.)|(([\w\-]+\.)+))([a-zA-Z]{2,4}|[\d]{1,3})(\]?)$/;
var validRegistryNumber = /^(\d){2}(\.(\d){2}){4}$/;
var validUsername = /^([A-Za-z])+$/;
var validText = /^([A-Z a-z])+$/;

function validate (form) {
	var i;
	var field;

	if (form == null) {
		alert ("Intenta validar una forma invalida");
		return false;
	}

	for (i = 0; i < form.elements.length; i++) {
		field = form.elements[i];
		if (!validateField (field,form)) {
			alert (field.msg);
			if (field.ffocus == null) {
				field.focus();
			}
			else {
				form.elements[field.ffocus].focus();
			}
			return false;
		}
	}
	form.submit();
	return true;
}

function validateField (field,theform) {
	var properties;
	var property;
	var comparar;

	if (field.validate != null) {
		properties = field.validate.split("|");
		for (i = 0; i < properties.length; i++) {
			property = properties[i];
			if (field.value.length == 0) {
				return (property != 'R');
			}
			if(field.type=='checkbox'){
				if(field.checked!=true){
					return false;
				}			
			}
			if (property == 'E' && !(validEmail.test(field.value))) {
				return false;
			}
			if (property == 'I' && !(validInteger.test(field.value))) {
				return false;
			}
			if (property == 'F' && !(validFloat.test(field.value))) {
				return false;
			}
			if (property == 'G' && !(validGMT.test(field.value))) {
				return false;
			}
			if (property == 'A' && !(validRegistryNumber.test(field.value))) {
				return false;
			}
			if (property == 'P' && !(validFloat.test(field.value) && field.value > 0 && field.value <= 100)) {
				return false;
			}
			if (property == 'U' && !(validUsername.test(field.value))) {
				return false;
			}
			if (property == 'T' && !(validText.test(field.value))) {
				return false;
			}
			if (property == 'C'){
				comparar=field.comparar;
				comparar="theform."+comparar+".value";
				comparar=eval(comparar);
				if(field.value!=comparar){
					return false;
				}
			}			
		}
	}

	return true;
}
