var validateForm = Class.create();
validateForm.prototype = {
	initialize:function(rule)
	{
		/*this.rule = {
			username:{reg:/\d{6}/, error:'err', success:'suc'},
			password:[{reg:/[a-z]{6}/, error:'err pas'}, {func:function(value){
				alert(value);
			}, error:'err func pas'}],
			email:function(){alert('ok');}
		};*/
		this.rule = rule;
	},
	setRule:function(rule)
	{
		this.rule = Object.extend(this.rule, rule || {} );
	},
	run:function()
	{
		var result = false, elt, o, value;
		for(o in this.rule){
			//alert( this.isFunction(this.rule[o]));
			elt = $(o);
			if(!elt || !this.rule[o]) continue;
			value = $F(o);
			if(this.isObject(this.rule[o])){
				//alert(1);
				result = this.valid(value, this.rule[o]);
				if(!result){
					elt.focus();
					return false;
				}
			}else if(this.isArray(this.rule[o])){
				//alert(2);
				for(var i=0; i< this.rule[o].length; i++){
					result = this.valid(value, this.rule[o][i]);
					if(!result) {
						elt.focus();
						return false;
					}
				}
			}else if(this.isFunction(this.rule[o])){
				//alert(3);
				result = this.rule[o](value);
				if(!result) {
					elt.focus();
					return false;
				}
			}else{
				return false;
			}
		}
		
		return result;
	},
	valid:function(value, rule)
	{
		var value = this.trim(value);
		if(rule.reg){
			if(!rule.reg.test(value)){
				alert(rule.error);
				return false;
			}
		}else if(rule.func){
			if(!rule.func(value)){
				alert(rule.error);
				return false;
			}
		}else{
			return false;
		}
		return true;
	},
	isObject : function(o)
	{
		return Object.prototype.toString.apply(o) === '[object Object]';
	},
	isArray : function(o)
	{
		return Object.prototype.toString.apply(o) === '[object Array]';
	},
	isFunction : function (o)
	{
		return Object.prototype.toString.apply(o) === '[object Function]';
	},
	trim : function(str)
	{
		return str.replace(/(^\s*)|(\s*$)/g, '');
		return str;
	}
};
