var FormValidator=Class.create({
	initialize:function(form){
		this.form=$(form);
		
		var result=this.findAllValidatableField();
		for(var i=0;i<result.length;i++){
			Event.observe(result[i],'blur',this.validateField.bindAsEventListener(this,result[i]));//光标离开时校验
		}
		Event.observe(this.form,'submit',this.validateForm.bindAsEventListener(this));
	},
	findAllValidatableField:function(){
		return this.form.getInputs().findAll(function(e){
			return e.hasAttribute('validate');//form下所有拥有validate这个属性的对象
		});
	},
	validateField:function(){
		var element = $A(arguments).last();
		var result = eval('Validators.is'+element.readAttribute('validate')+'("'+element.value+'")');
		
		if(!result){
			this.changeFailtrueView(element);
			return false;
		}
		this.changeSuccessView(element);
		return true;
	},
	validateForm:function(event){//校验整个表单,一般用于onSubmit()时进行全局的校验
		var result=this.findAllValidatableField();
		var flag=true;
		for(var i=0;i<result.length;i++){
			if(!this.validateField(result[i])){
				flag=false;
			};
		}
		if(!flag){
			Event.stop(event);
		}
	},
	changeSuccessView:function(element){//校验成功,移除原来的错误信息
		var next=element.next(1);
		if(next.hasClassName('note_2')){
			next.removeClassName('note_2');
			next.addClassName('note_1');
		}
	},
	changeFailtrueView:function(element){//校验失败,显示错误信息,禁用全部的submit按钮
		var next=element.next(1);
		if(!next.hasClassName('note_2')){
			next.removeClassName('note_1');
			next.addClassName('note_2');			
		}
	}
});



//校验器
Validators={
	isShorterThan:function(str){//长度是否小于num
		return /^(\w){0,5}$/.test(str);
	},
	isSamesymbol:function(str){//是否都是同样的合法字符
		return new RegExp('^('+str.charAt(0)+'){'+str.length+'}').test(str);
	},
	isContainInteger:function(str){//是否含有数字
		return /[0-9]+/.test(str);
	},
	isOnlyInteger:function(str){//是否仅含有数字
		return new RegExp('^[0-9]{'+str.length+'}').test(str);
	},
	isOnlyLetter:function(str){//是否仅含有字符
		return new RegExp('^[a-zA-Z]{'+str.length+'}').test(str);
	},
	isContainLetter:function(str){//是否含有字母
		return /[a-zA-Z]+/.test(str);
	},
	isContainValidSymbol:function(str){//是否还有字符:_ 
		return /[_]+/.test(str);
	},
	isContainInvalidSymbol:function(str){//是否含有除了a-zA-Z0-9_之外的字符
		return /\W+$/.test(str);
	},
	isEMail:function(str){//是否是合适的Email
		var pattern='\\b(^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+(\\.[A-Za-z0-9-]+)*((\\.[A-Za-z0-9]{2,})|(\\.[A-Za-z0-9]{2,}\\.[A-Za-z0-9]{2,}))$)\\b';
		return new RegExp(pattern).test(str);
	},
	isBetween:function(str,min,max){//字符串长度是否落在合理区间
		min=2;
		max=20;
		str=trim(str);
		return str.length>=min && str.length<=max;
	},
	isBetween2to30:function(str,min,max){//被lgy逼的
		min=2;
		max=30;
		return str.length>=min && str.length<=max;
	},
	isNotBlank:function(str){//是否为空
		
	},
	isTel:function(str){//是否为电话号码
		return /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/.test(str);
	},
	isPostalCode:function(str){//是否为邮政编码
		return /^[0-9 ]{6}$/.test(str);
	},
	isUrl:function(){//是否是正确的url地址
		
	}
};

function CStr(inp)
{
    return(""+inp+"");
}

function trim(str)
{
    var i,strlength,t,chartemp,returnstr;
    str=CStr(str);
    strlength=str.length;
    t=str;
    for(i=0;i<strlength;i++)
    {
        chartemp=str.substring(i,i+1);
        if(chartemp==" ")
        {
            t=str.substring(i+1,strlength);
        }
        else
        {
               break;
        }
    }
    returnstr=t;
    strlength=t.length;
    for(i=strlength;i>=0;i--)
    {
        chartemp=t.substring(i,i-1);
        if(chartemp==" ")
        {
            returnstr=t.substring(i-1,0);
        }
        else
        {
            break;
        }
    }
    return (returnstr);
}
