/************************************************************************************************************************
			calse formValidador 1.0
			
			validador de formularios
			
	Esta clase valida un formulario cuyo nombre se le para como unico parametro al instanciar el objeto.
		
		Ej: var validador = new formValidador("nombre_formulario");
		
		
	La unica propiedad interesante para el programador es invalidClass. Esta propiedad ha de contener la
	clase CSS que se le aplicara al los campos que sean delcarados invalidos.
		
		Ej:  validador.invalidClass = "invalid-input";
	
	De esta manera se resaltaran los campos que sean delcarados invalidos.
	
	
	El unico metodo disponible para el programador es validateForm. Este metodo repasa todos los nodos input
	del formulario comparando su contenido con unas expresiones regulares predefinidas en la clase.
		
		Uso:  validador.validateForm();
	
	Este metodo devolvera false si un campo se ha declarado como invalido y true si todos cumplian
	las normas de validacion.`
	
	
	La forma en la que se le indica al objeto como se deven validar los nodos input es mediante los mismos
	atributos id de los input.
		
		Ej: <input type="text" size="20" class="input" name="nombre" id="nombre@text" />
		
	Esto le indicara al objeto que para este input se requiere contenido de tipo texto.
	Las validaciones disponibles son:
		@			-> Se requiere alfanumerico
		@text		-> Solo Texto
		@phone		-> Solo Numeros
		@email		-> Direccion e-mail
	Aunque estos son las validaciones permitidas resultaria sencillo aņadir mas. Esto se haria aņadiendo apartados "case"
	en el "switch" del metodo validateForm

*************************************************************************************************************************/
function formValidador(formName)
	{
	//Almacena el formualrio a validar
	this.formInputs = eval("document."+formName+".getElementsByTagName('input')");
	
	//Alamcena la clase que se aplicara a un campo cuando sea declarado invalido
	this.invalidClass = null;
	
	this.fieldsPreClases = new Array();
	
	this.invalidField = function(field)
		{
		if(field.className && field.className != this.invalidClass)this.fieldsPreClases.push([field.id,field.className]);
		field.className = this.invalidClass;
		}
		
	this.validField = function(field)
		{
		for(i=0;i<this.fieldsPreClases.length;i++)
			{
			if(this.fieldsPreClases[i][0] == field.id)
				{
				field.className = this.fieldsPreClases[i][1];
				this.fieldsPreClases.splice(i,1);
				}
			}
		}
	
	//valida el formulario
	this.validateForm = function()
		{
		var expre = new RegExp();
		var validez = true;
		for(x in this.formInputs)
			{
			if(this.formInputs[x].tagName == 'INPUT' && this.formInputs[x].id.indexOf('@') != -1)
				{
				/*
				Seleccionamos una expresion regular dependiendo del tipo de validacion requerida
				*/
				switch(this.formInputs[x].id.substring(this.formInputs[x].id.indexOf('@')+1))
					{
					case 'text': // TEXTO
						expre = /^[a-zA-Z\s]+$/;
						break;
					case 'phone': // TELEFONO
						expre = /^([0-9\s\+\-])+$/;
						break;
					case 'email':  // E-MAIL
						expre = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
						break;
					default:  // ALFANUMERICO
						expre = /^([\w\s])+$/;
						break;
					}
				
				// comprobamos la validez del campo actual
				if(expre.test(this.formInputs[x].value))
					{
					this.validField(this.formInputs[x]);
					}
				else
					{
					validez = false;
					this.invalidField(this.formInputs[x]);
					}
				}
			else
				{
				continue;
				}
			}
		return validez;
		};
	}
