//校验器
function validator(validatorForm)
{
	var length=validatorForm.all.length;
	for(var i=0;i<length;i++)
	{
		var styles=validatorForm.all(i).style;
		if(styles.validator!=null&&styles.validator!="")
		{				
			var validators=splitType(styles.validator);
			for(var j=0;j<validators.length;j++)
			{
				styles=validators[j];
				var validatorType=findType(styles);
				var params=findParam(styles);
				var rtn=validatorChech(validatorForm.all(i),validatorType,params);
				if(!rtn)
				{
					return rtn;
				}
			}
		}
	}
	return true;
}



//拆分校验类型
function splitType(validator)
{
	var validators=validator.split("|");
	return validators;
}

function validatorChech(validatorObject,validatorType,params)
{
				switch(validatorType) { 
		   		case "checkNotNull": 
		   		return checkNotNull(validatorObject,params[0]);
		   		break; 
		
		   		case "checkemail": 
				return checkemail(validatorObject,params[0]);
		   		break; 
		   		
		   		case "checkinteger": 
		   		return checkinteger(validatorObject,params[0]);
		   		break; 
		   		
		   		case "checkfloat": 
		   		return checkfloat(validatorObject,params[0]);
		   		break; 
		   		
		   		case "intRange": 
		   		return intRange(validatorObject,params[0],params[1],params[2]);
		   		break; 
				
				case "floatRange": 
		   		return floatRange(validatorObject,params[0],params[1],params[2]);
		   		break; 
		   		
		   		case "minlength": 
		   		return minlength(validatorObject,params[0],params[1]);
		   		break; 
		   		
		   		case "maxlength": 
		   		return maxlength(validatorObject,params[0],params[1]);
		   		break; 
				
				case "checkPlus":  
		   		return checkPlus(validatorObject,params[0]);
		   		break; 

                case "checkNumber":  
		   		return checkNumber(validatorObject,params[0]);
		   		break; 

		   	        case "checkChinese":  
		   		return checkChinese(validatorObject,params[0]);
		   		break; 	

				case "testChinese":  
		   		return testChinese(validatorObject,params[0]);
		   		break; 
		   		
		   		case "iponly":
		   		return iponly(validatorObject,params[0]);
		   		break;
		   		
		   		case "trimField": 		   	 
		   		return trimField(validatorObject);
		   		break; 	
		   		
				case "IsTime": 		   	 
		   		return IsTime(validatorObject,params[0],params[1]);
		   		break; 
		   		
		   		case "fileName":
		   		return fileName(validatorObject,params[0]);
		   		break;
		   		
		   		case "versionNumber":
		   		return versionNumber(validatorObject,params[0]);
		  
				default:
				}
}

/*
*add by duanpeng 
*ip验证
*/
function iponly(object,Desc) {
   var ipDomainPat=/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/;
   var address = trim(object.value);
   if(!ipDomainPat.exec(address)){
   	alert(Desc+"\u8f93\u5165\u4e0d\u6b63\u786e\uff01");
        object.focus();
        object.select();
        return false;
   }
   return true;
}

//获得校验类型
function findType(validator)
{
	validatorType=validator.substring(0,validator.indexOf("("));
	return validatorType;
}
//获得校验类型
function findParam(validator)
{
	var param=validator.substring(validator.indexOf("(")+1,validator.indexOf(")"));
	var params=param.split(",");

	return params;
}

/**
*去字符串空格
*@param s 传入的字符串参数
*@author caiyuan
*/
function trim(s)
{
	return s.replace(/(^\s*)|(\s*$)/g, "");	
}

/**
*去输入字符串空格
*@param field 表单输入框对象
*@author caiyuan
*/
function trimField(field)
{
	field.value = field.value.replace(/(^\s*)|(\s*$)/g, "");	
	return true;
}

/**
*判断只能是数字
*@param object 传入的表单对象
*@param desc 描述
*@author yejianfeng
*/
function checkNumber(object,desc)
{      
   
    var rule = /^[0-9]*[1-9][0-9]*$/;//正则表达式在/与/之间
    if(!rule.test(object.value))
    {
        alert(desc+"\u53ea\u80fd\u8f93\u5165\u6570\u5b57");
        object.focus();
	object.select();
	return false;
    }
    return true;
}

/**
*判断正整数，可以为空
*@param object 传入的表单对象
*@param desc 描述
*@author caiyuan
*/
function checkPlus(object,desc)
{      
    var strValue = trim(object.value);
    if(strValue.length==0)
    	return true;
    
    var rule = /^[1-9][0-9]*$/;//正则表达式在/与/之间
    if(!rule.test(object.value))
    {
        alert(desc+"\u5fc5\u987b\u662f\u6574\u6570\u4e14\u5927\u4e8e0\uff01");
        object.focus();
				object.select();
				return false;
    }
    return true;
}

/**
*判断只能输入中文，可以为空
*@param object 传入的表单对象
*@param desc 描述
*@author caiyuan
*/
function checkChinese(object,desc)
{      
    var strValue = trim(object.value);
    if(strValue.length==0)
    	return true;
    
    var rule = /^[\u4e00-\u9fa5]*$/;//正则表达式在/与/之间
    if(!rule.test(object.value))
    {
        alert(desc+"\u53ea\u80fd\u8f93\u5165\u4e2d\u6587\uff0c\u8bf7\u4fee\u6539\uff01");
        object.focus();
				object.select();
				return false;
    }
    return true;
}

/**
*checkNotNull函数校验此框输入的数据不为空,返回的值为真和假,true和false;
*
*Object目标对象,Desc中文的描述.
*/
function checkNotNull(Object,Desc)
{
 var strValue=trim(Object.value);
 if(strValue.length==0)
 {
  alert(Desc+"\u4e0d\u80fd\u4e3a\u7a7a\uff0c\u8bf7\u4fee\u6539\uff01");
  Object.focus();
  return false;
 }
 else
 {
  return true;
 }
}

/**
*checkemail 函数校验此框输入的是否为email型的数据,返回的值为真和假,true和false;
*
*object目标对象,desc中文的描述.
*/
function checkemail(object,desc){
var pattern =/[a-za-z0-9_.]{1,}@[a-za-z0-9_]{1,}.[a-za-z0-9_]{1,}/;
var strvalue=object.value;
if (strvalue.length==0)
	return true;

if(strvalue.match(pattern)==null){
	alert(desc+"\u5fc5\u987b\u4e3a\u5408\u6cd5\u7684email\uff0c\u8bf7\u4fee\u6539\uff01");
	object.focus();
	return false;
	}else{
	return true;
	}
}
	
/**
*checkinteger 函数校验此框输入的是否为integer型的数据,返回的值为真和假,true和false;
*
*object目标对象,desc中文的描述.
*/
function checkinteger(object,desc) {
               
                var argvalue =trim(object.value);
                var validChars = "0123456789";
                var startFrom = 0;
                if (argvalue.substring(0, 2) == "0x") {
                   validChars = "0123456789abcdefABCDEF";
                   startFrom = 2;
                } else if (argvalue.charAt(0) == "0") {
                   validChars = "0123456789";
                   startFrom = 1;
                } else if (argvalue.charAt(0) == "-") {
                    startFrom = 1;
                }
                
                for (var n = startFrom; n < argvalue.length; n++) {
                    if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) 
                    {
                    alert(desc+"\u5fc5\u987b\u4e3a\u4e00\u4e2a\u6574\u6570\uff0c\u8bf7\u4fee\u6539\uff01");
					object.focus();
                    return false;
                    }
                }
                return true;
}


/**
*checkfloat 函数校验此框输入的是否为float型的数据,返回的值为真和假,true和false;
*
*object目标对象,desc中文的描述.
*/
function checkfloat(object,desc) {
                var argvalue =object.value;
                // remove '.' before checking digits
                argvalue= argvalue.split('.');
                argvalue= argvalue.join('');
                var validChars = "0123456789";
                var startFrom = 0;
                if (argvalue.substring(0, 2) == "0x") {
                   validChars = "0123456789abcdefABCDEF";
                   startFrom = 2;
                } else if (argvalue.charAt(0) == "0") {
                   validChars = "0123456789";
                   startFrom = 1;
                } else if (argvalue.charAt(0) == "-") {
                    startFrom = 1;
                }
                
                for (var n = startFrom; n < argvalue.length; n++) {
                    if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) 
                    {
                    alert(desc+"\u5fc5\u987b\u4e3a\u4e00\u4e2a\u6570\u5b57\uff0c\u8bf7\u4fee\u6539\uff01");
					object.focus();
                    return false;
                    }
                }
                return true;
}

/**
*intRange函数校验此框输入的是否为int型的数据,同时校验是否在值范围内,返回的值为真和假,true和false;
*
*object目标对象,desc中文的描述.iMin最小值，iMax 最大值
*/
function intRange(object,desc,iMin ,iMax ) {
                var argvalue =object.value;
                
                var validChars = "0123456789";
                var startFrom = 0;
                if (argvalue.substring(0, 2) == "0x") {
                   validChars = "0123456789abcdefABCDEF";
                   startFrom = 2;
                } else if (argvalue.charAt(0) == "0") {
                   validChars = "0123456789";
                   startFrom = 1;
                } else if (argvalue.charAt(0) == "-") {
                    startFrom = 1;
                }
                
                for (var n = startFrom; n < argvalue.length; n++) {
                    if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) 
                    {
                    alert(desc+"\u5fc5\u987b\u4e3a\u4e00\u4e2a\u6570\u5b57\uff0c\u8bf7\u4fee\u6539\uff01");
					object.focus();
                    return false;
                    }
                }
                
                if (!(parseInt(argvalue) >= parseInt(iMin) && parseInt(argvalue) <= parseInt(iMax))) {
					alert(desc+"\u4e0d\u5728"+iMin+"\u548c"+iMax+"\u4e4b\u95f4\uff0c\u8bf7\u4fee\u6539\uff01");
					object.focus();
                    return false;

				}
                return true;
}

/**
*floatRange函数校验此框输入的是否为int型的数据,同时校验是否在值范围内,返回的值为真和假,true和false;
*
*object目标对象,desc中文的描述.iMin最小值，iMax 最大值
*/
function floatRange(object,desc,iMin ,iMax ) {
                var argvalue =object.value;
                // remove '.' before checking digits
                argvalue= argvalue.split('.');
                argvalue= argvalue.join('');

                var validChars = "0123456789";
                var startFrom = 0;
                if (argvalue.substring(0, 2) == "0x") {
                   validChars = "0123456789abcdefABCDEF";
                   startFrom = 2;
                } else if (argvalue.charAt(0) == "0") {
                   validChars = "0123456789";
                   startFrom = 1;
                } else if (argvalue.charAt(0) == "-") {
                    startFrom = 1;
                }
                
                for (var n = startFrom; n < argvalue.length; n++) {
                    if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) 
                    {
                    alert(desc+"\u5fc5\u987b\u4e3a\u4e00\u4e2a\u6570\u5b57\uff0c\u8bf7\u4fee\u6539\uff01");
					object.focus();
                    return false;
                    }
                }
                
                if (!(parseInt(object.value) >= parseInt(iMin) && parseInt(object.value) <= parseInt(iMax))) {
					alert(desc+"??"+iMin+"?"+iMax+"???????");
					object.focus();
                    return false;

				}
                return true;
}


/**
*minlength函数校验此框输入的是否小于设定长度,返回的值为真和假,true和false;
*
*object目标对象,desc中文的描述,length最小长度
*/
function minlength(object,desc,length){
var strvalue=object.value;
var newlength = strvalue.replace(/[^\x00-\xff]/g,'**').length;
if (newlength > 0 && (newlength < length)) {
		alert(desc+"\u7684\u957f\u5ea6\u4e0d\u80fd\u5c0f\u4e8e"+length+"\uff0c\u8bf7\u4fee\u6539\uff01");
		object.focus();
		return false;
		}else{
		return true;
		}
}

/**
*maxlength函数校验此框输入的是否超过设定长度,返回的值为真和假,true和false;
*
*object目标对象,desc中文的描述,length最大长度
*/
function maxlength(object,desc,length){
var strvalue=object.value;
var newlength = strvalue.replace(/[^\x00-\xff]/g,'**').length;
if (newlength > 0 && (newlength > length)) {
		alert(desc+"\u7684\u957f\u5ea6\u4e0d\u80fd\u5927\u4e8e"+length+"\uff0c\u8bf7\u4fee\u6539\uff01");
		object.focus();
		return false;
		}else{
		return true;
		}
}


/**
*maxlength函数校验此框输入的是否超过设定长度,返回的值为真和假,true和false;
*
*object目标对象,desc中文的描述,length最大长度
*/
function testChinese(object,desc){
var strvalue=object.value;
if((/[\u0391-\uFFE5]+$/).test(strvalue)){
		alert(desc+'\u4e0d\u80fd\u4e3a\u4e2d\u6587!');
		object.focus();
		return false;
		}else{
		return true;
		}
}

 function IsTime (obj,desc,curtime)   
 {  
  	var s = obj.value;
  	if (s.split(":").length > 2) {
  		  alert(desc+"\u683c\u5f0f\u4e0d\u6b63\u786e\uff01");
  	 	  obj.value = curtime;
  	 	  return false;
  	}else {
  	 	  s = s + ":00";
        var b = /^([01]?\d|2[0-3])(:)([0-5]?\d)\2([0-5]?\d)$/.test(s);   
        if (!b) {
        	alert(desc+"\u683c\u5f0f\u4e0d\u6b63\u786e\uff01");
  	 	    obj.value = curtime;
  	 	    return false;
     	  }
  	}  	 
  	return true;
} 
/**
 * 验证目录或文件名，只能包含数字、字母、下划线，首尾不能为下划线
 * 
 */
function fileName(obj,desc){
	var objValue = obj.value;
	if(!(/^(?!_)(?!.*?_$)[a-zA-Z0-9_]+$/).test(objValue)){
		alert(desc + "只能由数字、字母、下划线组成，且首尾不能是下划线！");
		obj.focus();
		return false;
	}
	return true;
}
/**
 * 版本号，只能由数字、字母、小数点组成，且小数点不在首尾
 */
function versionNumber(obj,desc){
	
	var objValue = obj.value;
	if(!(/^(?!_)(?!.*?_$)[a-zA-Z0-9.]+$/).test(objValue)){
		alert(desc + "只能由数字、字母、小数点组成，且首尾不能是小数点！");
		obj.focus();
		return false;
	}
	return true;
}
