var inputsValidator = new Class({
	options:{
		focus_css_class:'focus',
		valid_css_class:'valid',
		invalid_css_class:'invalid',
		norequired_css_class:'norequired',
		rules:{
			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,}))$/

		}
	},

	initialize: function(elemns,options){
		this.enabled = true;
		this.status = false;
		this.setOptions(options);
		this.elems = elemns;
		this.elems.each(function(el){
			//el.rule = eval('this.options.rules.'+el.getProperty('class').split(' ')[0]);
			el.rule = this.options.rules.mail;
			el.required = !el.hasClass(this.options.norequired_css_class);
			el.addEvents({
				focus:function(){
						if(!this.enabled) return;
						el.removeClass(this.options.valid_css_class).removeClass(this.options.invalid_css_class).addClass(this.options.focus_css_class);
					}.bind(this),
				blur:function(){
						if(!this.enabled) return;
						el.removeClass(this.options.focus_css_class);
						//testing
						if((!el.required && el.getProperty('value')=='') || el.getProperty('value').test(el.rule)){
							el.addClass(this.options.valid_css_class);
						}else{
							el.addClass(this.options.invalid_css_class);
							this.status = false;
						}
					}.bind(this)
			})
		}, this)
	},
	
	test: function(){
		if(!this.enabled) return false;
		this.status = true;
		this.elems.each(function(el){el.fireEvent('focus').fireEvent('blur')});
		return this.status;
	},

	on:function(){
		if(this.enabled) return;
		this.enabled = true;
		this.test();
	},

	off:function(){
		if(!this.enabled) return;
		this.elems.each(function(el){el.removeClass(this.options.valid_css_class).removeClass(this.options.invalid_css_class).removeClass(this.options.focus_css_class)},this);
		this.enabled = false;
	}

});

inputsValidator.implement(new Options);