var inputsValidator = new Class({
	options:{
		focus_css_class:'focus',
		valid_css_class:'valido',
		invalid_css_class:'invalid',
		norequired_css_class:'norequired',
		rules:{
			name:/^[1-9a-zA-ZáéèíóúñÁÉÍÓÚÑ ]{2,36}$/,
			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,4}))$/,
			password:/^[a-zA-Z1-9]{3,36}$/,
			number:/^\d+$/,
			testo:/^[\w\d\s\.,:]{10,1024}$/
			//alphanum, spaces and some symbols, min length:0 max length:1024
		}
	},

	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.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 null;
		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);