var validationForm = new Class({
	options:{
		required_identifier:'required',
		norequired_css_class:'norequired',
		focus_css_class:'focus',
		writing_css_class:'writing',
		valid_css_class:'valid',
		invalid_css_class:'invalid',
		rules:{
			name:/^[A-Za-z0-9áéíóúñÁÉÍÓÚÑ][A-Za-z0-9áéíóúñÁÉÍÓÚÑ ]{2,128}$/,
			mail:/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
			password:/^[a-zA-Z0-9]{3,18}$/,
			number:/^\d+$/
		}
	},

	initialize: function(elemns,options){
		this.status = false;
		this.enabled = true;
		this.setOptions(options);
		this.elems = $type(elemns)=='string'?$$(elemns):elemns;
		this.elems.each(function(elem){
			elem.addEvents({
				focus:function(){
						if(!this.enabled) return;
						elem.removeClass(this.options.valid_css_class).removeClass(this.options.invalid_css_class).removeClass(this.options.norequired_css_class).addClass(this.options.writing_css_class).addClass(this.options.focus_css_class);
					}.bind(this),
				blur:function(){
						if(!this.enabled) return;
						elem.removeClass(this.options.writing_css_class).removeClass(this.options.focus_css_class);
						if(elem.value=='' && !elem.hasClass('required')){
							elem.addClass(this.options.valid_css_class);
							this.status=true;
							return;
						}
						//define rule
						var rule = '';
						var classes = elem.className.split(' ');
						eval('rule=this.options.rules.'+classes[1]);
						//testing
						if(rule=='' || elem.value.test(rule)){
							elem.addClass(this.options.valid_css_class);
							//this.status=true;
						}else{
							elem.addClass(this.options.invalid_css_class);
							this.status=false;
						}
					}.bind(this)
			});
		}, this)
	},
	
	run: function(){
		if(!this.enabled) return;
		this.status=true;
		this.elems.each(function(elem){elem.fireEvent('blur');});
	},

	restore:function(){
		this.elems.each(function(elem){
			elem.removeClass(this.options.valid_css_class).removeClass(this.options.invalid_css_class).removeClass(this.options.norequired_css_class).removeClass(this.options.writing_css_class).removeClass(this.options.focus_css_class);
		},this);
	},

	clean: function(){
		this.elems.each(function(elem){elem.value = '';});
		this.run();
	},
	
	on:function(){
		this.enabled=true;
	},

	off:function(){
		this.enabled=false;
	}
});
validationForm.implement(new Options);