var Validate = Class.create();
Validate.prototype = {

	errors: null,
	reqire_fields: null,
	emailReg: /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]{2,4})$/,
	defaultErrors: {empty: 'cannot be empty', invalid_email: 'Invalid email'},


	initialize: function(options)
	{
	    if(options && options.require_fields) this.reqire_fields = options.require_fields;
	    var form = $$('form.validate_form');
		this.form = form[0];
		var btn = $$('form.validate_form a.btn_submit');
		this.btn_submit = btn[0];
		if($$('span.important')[0]) $$('span.important')[0].style.display = 'none';

		this.btn_submit.observe('click', function (){
			this.check_form();
		}.bind(this));
	},

	check_form: function ()
	{
        this.errors = {};
		$$('span.valid').invoke('remove');
		for(method in this.reqire_fields){
			for(i in this.reqire_fields[method]){
				this[method](i, this.reqire_fields[method][i]);
			}
		}

		for(element_id in this.errors)
		{
			var msg = this.errors[element_id];
			element_id = $(element_id).parentNode.parentNode;
			var span = (new Element('span', {'class': 'valid'})).update(msg);
			$(element_id).insert(span);
		}

		if(Object.values(this.errors) == ""){
			$$('span.important')[0].style.display	 = 'none';
			if(Object.isFunction(this.submit_form)) {
                this.submit_form();
			} else {
			     alert("Ready for submit");
                //this.form.submit();
            }
			
		}else{
			$$('span.important')[0].style.display = 'inline';
		}
	},


	presence_of: function (element_id, options)
	{

		if(!Object.isString(options) && options.message != ""){
			var message = options.message;
		}else{

			var message = element_id+' '+this.defaultErrors.empty;
		}

		if(!$F(element_id)){
			this.errors[element_id] = message;
		}

	},


	format_of: function (element_id, options)
	{
		if(!Object.isString(options)){
			var theReg = (options.use == "email") ? this.emailReg : options.use;
			var message = options.message;
		}
		else
		{
			var theReg = (options == "email") ? this.emailReg : options;
			var message = this.defaultErrors.invalid_email;
		}

		if($(element_id) && !theReg.test($F(element_id))){
			this.errors[element_id] = message;
		}
	}

};

