var Validacion = Class.create({
	initialize: function(formulario){ 
		this.formulario = $(formulario);
		this.borrarErrores();
		this.mensajesError = {};
		this.validarCampos();
	}
	, validarCampos: function() {
		var _this = this;
		this.formulario.getElements().each(
			function(s, index){
				_this.getCampos(s);
			}
		);
	}
	, getCampos: function(campo){
		var _this = this;
		Element.classNames(campo).each(
			function(s, index){
				switch(s){
					case "requerida":
					case "requerido":
						if($F(campo) == '' || $F(campo) == null || $F(campo) == 0){
							this[campo.id] = $$("label[for=" + campo.id + "]")[0].innerHTML + " es " + s;
						}
					break;
					case "numerico":
						var regExp = /^[-]?\d+(\.\d+)?$/;
						if(!$F(campo).match(regExp) && $F(campo) != ""){
							this[campo.id] = "Solo números en este campo.";
						}
					break;
					case "cp":
						var regExp = /^[ABCDEFGHJKLMNPQRSTUVWXYZ]\d{4}[A-Z]{3}$/;
						if(!$F(campo).match(regExp) && $F(campo) != ""){
							this[campo.id] = "Código postal no válido.";
						}
					break;
					case "email":
						var regExp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/
						if(!$F(campo).match(regExp) && $F(campo) != ""){
							this[campo.id] = "E-mail no válido.";
						}
					break;
					case "ajax":
						if($F(campo) != ""){
							var pars = campo.name + "=" + $F(campo);
							var ajax = new Ajax.Request(campo.id + ".request.php",{method: "get", asynchronous: false, parameters: pars, onComplete:function(response){
									if(response.responseText != ""){
										this[campo.id] = response.responseText;
									}
								}.bind(this)
							});
						}
					break;
				}
			}, _this.mensajesError
		);
	}
	, borrarErrores: function(){
		$$("#" + this.formulario.id + " span").each(
			function(s, index){
				s.remove();
			}
		);
	}
	, mostrarErrores: function(){
		this.mensajesError = $H(this.mensajesError);
		if(this.mensajesError.any()){
			this.mensajesError.each(
				function(s, index){
					$(s.key).insert({after: '<span class=\"validacion ' + s.key +'\">' + s.value + '</span>'});
				}
			);
			return false;
		}
		else {
			return true;
		}
	}
});
