/**
 * 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.
 * E -> direccion de correo electronico
 * F -> real (positivo y negativo).
 * I -> entero (positivo y negativo)
 * G -> GMT ((+-)H:MM o (+-)H)
 * A -> nn.nn.nn.nn.nn (numero de registro de partida arancelaria)
 * U -> nombre de usuario (letras y guion)
 * C -> GIF File
 * W -> verifica que un campo se identico a otro
 * P -> 8 a 100 caracteres alfanumericos
 *
 */

var validators = new Array();
validators['G'] = /^(\+|-)?\d(:[012345][\d])?$/;
validators['F'] = /^(((\+|-)?\d+(\.\d*)?)|((\+|-)?(\d*\.)?\d+))$/;
validators['I'] = /^((\+|-)?\d+)$/;
validators['E'] = /^([\w_\-]+)(\.[\w_\-]+)*@((\[[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.)|(([\w\-]+\.)+))([a-zA-Z]{2,4}|[\d]{1,3})(\]?)$/;
validators['A'] = /^(\d){2}(\.(\d){2}){4}$/;
validators['U'] = /^([A-Za-z])+(-)*([A-Za-z])*$/;
validators['C'] = /\.(jpg|gif|png)$/;
validators['P'] = /^\w{8,100}$/;

function validate (form) {
	for(i=0;i<form.length;i++)
	{
		if(form.elements[i].getAttribute('validate'))
		{
			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.getAttribute('msg'));
						
							if (!field.getAttribute('ffocus'))
							{
								field.focus();
							}
							else
							{
								if(field.getAttribute('ffocus')!='none')
								{
									form.elements[field.getAttribute('ffocus')].focus();
								}
							}
					return false;
					}
			}
			form.submit();
			return true;
		}
	}
}

function validate2 (form) {
	for(i=0;i<form.length;i++)
	{
		if(form.elements[i].getAttribute('validate'))
		{
			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.getAttribute('msg'));
							if (!field.getAttribute('ffocus'))
							{
								field.focus();
							}
							else
							{
								if(field.getAttribute('ffocus')!='none')
								{
									form.elements[field.getAttribute('ffocus')].focus();
								}
							}
					return false;
					}
			}
//			form.submit();
			return true;
		}
	}
}

function validateField (field, form)
{
	var properties;
	var property;	
	if (field.getAttribute('validate') != null) 
	{
		properties = field.getAttribute('validate').split('|');			
		for (i = 0; i < properties.length; i++)
		{
			property = properties[i];
			if(property)
			{			
				if (property.length > 1)
				{
					if (!validateComplexProperty (property, field, form))
					{
					return false;
					}
				}
				else
				{
					if (property == 'R' && field.value.length == 0)
					{
					return false;
					}
					if (property != 'R' && field.value.length > 0)
					{
						if (!validators[property].test(field.value))
						{
						return false;
						}
					}
				}
			}
		}
	}	
	return true;
}

function validateComplexProperty (paramStr, field, form) {
	var params;
	var property;
	var temp;
	
	temp = paramStr.split('=');
	property = temp[0];
	if (temp.length > 1) {
		params = temp[1].split('&');
	}
	else {
		alert ('El parametro ' + property + ' del validador ha sido utilizado incorrectamente');
		return false;
	}
	
	if (property == 'W') {
		return (field.value == (form.elements[params[0]]).value);
		
	}
	
	return false;
}
function handleEnter (field, event) {
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		if (keyCode == 13) {
			var i;
			for (i = 0; i < field.form.elements.length; i++)
				if (field == field.form.elements[i])
					break;
			i = (i + 1) % field.form.elements.length;
			field.form.elements[i].focus();
			return false;
		} 
		else
		return true;
	}
	
	
function validate_new (form) {
	for(i=0;i<form.length;i++)
	{
		if(form.elements[i].getAttribute('validate'))
		{
			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.getAttribute('msg'));
						
							if (!field.getAttribute('ffocus'))
							{
								field.focus();
							}
							else
							{
								if(field.getAttribute('ffocus')!='none')
								{
									form.elements[field.getAttribute('ffocus')].focus();
								}
							}
					return false;
					}
			}
		//	form.submit();
		
			return true;
		}
	}
}

