var Validator = new Class({
    Implements:Options,
    options: 
    {
    },		
    initialize: function(options)
    {	    
		this.setOptions(options);
		this.validators = $$(this.options.validators);
		this.validators.setStyles({'opacity':0,'display':'none'});
    },
    isValid:function(form)
    {   
		var errors = [];
		this.validators.each(
			function(validator)
			{
				var properties = validator.getProperty('class').split(' ');
				var fieldToValidate = properties[1];
				validator.setStyles({'opacity':0,'display':'none'});
				
				if(!errors.contains(fieldToValidate))
				{
					var fn = properties[2];
					var value = form[fieldToValidate].value.clean();
					
					if(window.no_validation == true && (fieldToValidate == 'email' || fieldToValidate == 'author'))
					{
						
					}
					else if(!this[fn](value))
					{
						errors.push(fieldToValidate);
						validator.setStyle('display','block');
						validator.fade('in');
					}
				}
			},this
		);
		return (errors.length == 0);
    },
    required:function(value)
    {
    	return (value != '');
    },
	email:function(value)
    {
    	if(value == '')
		{
			return true;
		}	
		var reg = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/
		return reg.test(value);  
    },
    url:function(value)
    {
		if(value == '')
		{
			return true;
		}
		var rx = new RegExp("^(https?://)?(([0-9a-z_!~*\'().&=+$%-]+: )?[0-9a-z_!~*\'().&=+$%-]+@)?(([0-9]{1,3}\\.){3}[0-9]{1,3}|([0-9a-z_!~*\'()-]+\\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!~*\'().;?:@&=+$,%#-]+)+/?)$");
		var matches = rx.exec(value);
		return (matches != null && value == matches[0]);
    }
});