﻿// TGS 验证类

Validator={

    //form所包含的所有元素对象集合
    elems:null,
    //form所包含的所有元素的个数
    elems_cnt:null,
    //验证类型
    val_type:null,
    //验证的内容
    val_content:null,
    ///验证结果，默认值为true表示所有验证项都验证通过
    ValidateResult:true,

//成员变量
	Email : /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,	
	//Phone : /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/,	
	//如下匹配01069529286,010-69529286,(010)69529286
	Phone : /^(\(\d{3,4}\)|\d{3,4}-|\d{3,4}|\s)?\d{8}$/,	
	//Mobile : /^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/,
	//如下匹配中国移动和中国联通现行发放的手机号段,如有扩充则在(13|15)处进行后续添加。
	Mobile :  /^(\(86\)|86)?0?(13|15)\d{9}$/,	
	Url : /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
	IdCard : "this.IsIdCard(value)",
	Currency : /^\d+(\.\d+)?$/,
	Number : /^\d+$/,
	Zip : /^[1-9]\d{5}$/,
	QQ : /^[1-9]\d{4,8}$/,
	Integer : /^[-\+]?\d+$/,
	Double : /^[-\+]?\d+(\.\d+)?$/,
	English : /^[A-Za-z]+$/,
	Chinese :  /^[\u0391-\uFFE5]+$/,	
	//Username : /^[a-z]\w{3,}$/i,
	//如下匹配用户名为大小写英文字母、数字和下划线组成，长度5-20位
	Username : /^([a-zA-Z0-9]|[_]){5,20}$/,
	//如下匹配密码为大小写英文字母、数字和下划线组成，长度8-16位
	Password : /^([a-zA-Z0-9]|[_]){8,16}$/,	
	UnSafe : /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,
	IsSafe : function(str){return !this.UnSafe.test(str);},
	SafeString : "this.IsSafe(value)",
	Filter : "this.DoFilter(value, getAttribute('accept'))",
	Limit : "this.limit(value.length,getAttribute('min'),  getAttribute('max'))",
	LimitB : "this.limit(this.LenB(value), getAttribute('min'), getAttribute('max'))",
	Date : "this.IsDate(value, getAttribute('min'), getAttribute('format'))",
	Repeat : "value == document.getElementsByName(getAttribute('to'))[0].value",
	Range : "getAttribute('min') < (value|0) && (value|0) < getAttribute('max')",
	Compare : "this.compare(value,getAttribute('operator'),getAttribute('to'))",
	Custom : "this.Exec(value, getAttribute('regexp'))",
	Group : "this.MustChecked(getAttribute('name'), getAttribute('min'), getAttribute('max'))",
	ErrorItem : [document.forms[0]],
	ErrorMessage : ["以下原因导致提交失败：\t\t\t\t"],
	//信息提示类型
	AlertType : "exclamation",
    //成员函数
    //验证函数
    //Scope：表示要在那个区域内进行验证检索,目前就是指所用的表单的名称.检索在指定form内的所有元素
    //TagName：用于标识在验证区域内的每个需要进行验证的组件,这个只适用于纯Html的控件,因为可以用getElementsByName,
    //获得相同name值的对象数组,但对于asp.net控件来说,id和name系统默认都是一样的[微软定义]，没有办法通过getElementsByName
    //来获取，所以这项为可选项。
    Validate : function (Scope,TagName)
    {   
        //form所包含的所有元素对象集合
        elems=Scope.elements;
        //form所包含的所有元素的个数
        elems_cnt=Scope.elements.length;
        //验证类型
        
        //验证的内容
        
        //验证结果，默认值为true表示所有验证项都验证通过
        //ValidateResult=true;
        
        for(var i=0;i<elems_cnt;i++)
        {
            with(elems[i])
            {                
                if(getAttribute("validation")=="true")
                {                    
                    val_type=getAttribute("validationtype");                    
                    val_content=value;
                    
                    //首先检测要进行验证的控件的内容是否为必填项
                    if(getAttribute("notnull")=="true")
                    {
                        if(val_content=="" || val_content=="undefined")
                        {
                            this.AlertType="exclamation";
                            this.AddError(getAttribute("id"),"");
                            ValidateResult=false;
                            break;
                        }
                        
                    }
                    //判断是否是非法验证类型
                    //alert("val_type:"+val_type);
                    
                    if(val_type!=null)
                    {
                        if(!eval(this[val_type]))
                        {                   
                            this.AlertType="typeerror";
				            this.AddError(getAttribute("id"),getAttribute("msg"));		
				            ValidateResult=false;		        
					    }
					    else
					    {					   
//					        alert("准备验证");
//					        alert("验证类型："+val_type);
//					        alert("验证内容："+val_content);
					        if(!this[val_type].test(val_content))
                            {    
                                this.AlertType="regexerror";
				                this.AddError(getAttribute("id"),getAttribute("msg"));
				                ValidateResult=false;
				            }
//				            else
//				            {
//				                alert("验证通过");
//				            }
					    }        
                    }                                      
                }
            }                        
        }
        return ValidateResult;
    },    
   
    AddError : function(id, info)
    {    
        switch(this.AlertType)
        {
            case "exclamation":
                  //info="带星号的为必填项";
                  //此处的alert(info);是为了只先弹出该项错误的提示信息，以后视情况而定，将这句去掉，而将下面的alert(info);放开
                  //alert(info);
            break;            
            case "typeerror":
                  info="控件id为："+id+"的验证类型指定有误,请开发者检查更正";
            break;            
            case "regexerror":
                  info=info+";请查看红色标注的部分";
                  //alert("出错控件id："+id);
                  document.getElementById(id).style.color="#FF0000";                      
            break;
        } 
        //错误信息提示
        //alert(info);    
    },
    
    CompareValidation:function(content1,content2)
    {
        //alert("密码一致性比较开始");
        if(content1==content2)
        {
            return true;
        }
        return false;
    },
    
    initStatus:function(Scope)
    {
        //form所包含的所有元素对象集合
        elems=Scope.elements;
        //form所包含的所有元素的个数
        elems_cnt=Scope.elements.length;
        //验证类型
        
        //验证的内容
        
        //验证结果，默认值为true表示所有验证项都验证通过
        ValidateResult=true;
        
        for(var i=0;i<elems_cnt;i++)
        {
            elems[i].style.color="#000000";
        }       
    },
    
    //去掉字符串中所包含的所有空格
    Trim:function(strcontent) 
    { 
        return strcontent.replace(/(^\s*)|(\s*$)/g, ""); 
    },

    //去掉字符串中左边的所有空格
    LTrim:function(strcontent) 
    { 
        return strcontent.replace(/(^\s*)/g, ""); 
    },

    //去掉字符串中右边的所有空格
    RTrim:function(strcontent) 
    { 
        return strcontent.replace(/(\s*$)/g, ""); 
    } 
}  