/**
 * validator（校验器）文件 110613
 *
 *
 */
wd.commonValidator={};
var lsSfzh;
/**
 * 非空校验器
 */
wd.commonValidator.notNull =
function(valueArr,//保存所有被校验的表单值的数组
		params//校验器的其余参数
		){

		var rs = '';
		var msgPrefix = params['msgPrfx'];//消息头

		var minValue = params['minLen'];//最断数值
		var maxValue = params['maxLen'];//最长数值
		var length = params['len'];//长度
		var trim =typeof params['trim']=="undefined"?true:params['trim'];//前后空格，true则不能保留空格,trim默认值为true
		var allNull =typeof params['allNull']=="undefined"?false:params['allNull'];//允许全部为空  2022-01-10

/// 增加 noZero="true"，值为 0 时，也作为空 -- 默认值为 true。Lin
 //    解决不允许为空的 码(int)、ID(long) 有默认值 0 的问题
		var noZero = (typeof params['noZero']=="undefined")? true : params['noZero'];
///

		if(!wd.commonValidator.condition.call(this,valueArr,params))return rs;

//		trim=(trim==null||trim==undefined)?true:trim;//
		var regTrim = /(^\s+)|(\s+$)/;

		var isNullCount = 0;
		var isBlankBefore = false;//曾经有空格
		var nullArr=[];
		for(var i=0;i<valueArr.length;i++){
			var value = valueArr[i];
/* 改，增加 noZero="true"，值为 0 时，也作为空 -- 默认值为 true。Lin
			if(value==null||value==''||value==undefined){
*/			if (value==null || value=='' || value==undefined || (noZero && value==0)) {
				nullArr.push(i);
			}
			/* 在公共校验器已经校验了
			if(value!=null&&value!=''){
					if(minValue!=null && value.length < minValue){
						rs += msgPrefix+'应至少'+minValue+'个字符\r\n';
					}
					if(maxValue!=null&&value.length> maxValue){
						rs += msgPrefix+'应不超过'+maxValue+'个字符\r\n';
					}
					if(maxValue!=null&&value.length> maxValue){
						rs += msgPrefix+'应不超过'+maxValue+'个字符\r\n';
					}
			}*/
			if(trim){
				if(value&& regTrim.test(value)&&isBlankBefore==false){
					rs += msgPrefix+'前后不能包含空格！\r\n';
					isBlankBefore=true;
				}
			}
		}

//		isNullCount==valueArr.length
		if(nullArr.length>0){

			//一个值
			if(valueArr.length==1){
				rs += msgPrefix+'不能为空！\r\n';
			}else{
				//多值
				var pp=msgPrefix.split(/,/);
				if(valueArr.length==nullArr.length){
					if(!allNull){
						rs += pp.join(",")+'不能全为空！\r\n';
					}
				}else{
					for(var i=0;i<nullArr.length;i++){
						var index=nullArr[i];
						rs += pp[index]+'不能为空！\r\n';
					}
				}
			}
		}

		rs += wd.commonValidator.validator(valueArr,params);
		return rs;
}


wd.commonValidator.idCard =
function(valueArr,//保存所有被校验的表单值的数组
		params//校验器的其余参数
		){
//	console.log("---------------------------------------");
//	console.log(valueArr);
//	console.log(params);
//	console.log("---------------------------------------");
	var rs = "";//返回的校验结果

	var value=valueArr[0];//身份证号值
	var sex;
	var csdqm;
	var birthday;


//	value=this.getElementValue("sfzh");

	birthday=this.getElementValue("csrq");
	if(birthday)
		birthday = birthday.replace(/-/g,'');

	sex=this.getElementValue("xbm");

	csdqm=this.getElementValue("csdqm");
	//仅校验身份号码	
	var sfzjlbm =params['sfzjlbm']||this.getElementValue(params['sfzjlbmName'])||this.getElementValue("sfzjlbm")||"1"; //valueArr[3];//身份证件类别码


	var msgPrefix = params['msgPrfx']||"";//消息头
/* 改，增加默认值。Lin
	var idCardNotNull = params['idCardNotNull'];//身份证号不能为空
*/  var idCardNotNull = (params['notBlank']? params['notBlank'] : false);
	if (!value && idCardNotNull)
	{
		rs+=msgPrefix+'身份证件号不能为空！\r\n';
	}




	//如果证件类型为身份证，且不为空
	//如果身份证为888开头的，就不验证
	if(!value||sfzjlbm!=1||value.match(/^888.*/)){
		return rs;
	}

	var getBirthdayByIdCard;

	var Errors=new Array(
	"",
	msgPrefix+"身份证号位数不对！\r\n",
	msgPrefix+"身份证号出生日期超出范围或含有非法字符！\r\n",
	msgPrefix+"身份证号校验错误！(如果含X的，必须是大写半角的X！)\r\n",
	msgPrefix+"身份证地区非法！\r\n"
	);
	var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
	var Y,JYM;
	var S,M;
	var value_array = new Array();
	value_array = value.split("");

	switch(value.length){
	case 15:
		if ((parseInt(value.substr(6,2))+1900) % 4 == 0 || ((parseInt(value.substr(6,2))+1900) % 100 == 0 && (parseInt(value.substr(6,2))+1900) % 4 == 0 )){
			ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
		} else {
			ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
		}
		if(ereg.test(value)) rs+=Errors[0];
		else rs+=Errors[2];
		break;
	case 18:
		//18位身份号码检测
		//出生日期的合法性检查
		//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
		//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
		if ( parseInt(value.substr(6,4)) % 4 == 0 || (parseInt(value.substr(6,4)) % 100 == 0 && parseInt(value.substr(6,4))%4 == 0 )){
			ereg=/^[1-9][0-9]{5}[0-9]{4}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
		} else {
			ereg=/^[1-9][0-9]{5}[0-9]{4}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
		}
		if(ereg.test(value)){//测试出生日期的合法性
		//计算校验位
			S = (parseInt(value_array[0]) + parseInt(value_array[10])) * 7
			+ (parseInt(value_array[1]) + parseInt(value_array[11])) * 9
			+ (parseInt(value_array[2]) + parseInt(value_array[12])) * 10
			+ (parseInt(value_array[3]) + parseInt(value_array[13])) * 5
			+ (parseInt(value_array[4]) + parseInt(value_array[14])) * 8
			+ (parseInt(value_array[5]) + parseInt(value_array[15])) * 4
			+ (parseInt(value_array[6]) + parseInt(value_array[16])) * 2
			+ parseInt(value_array[7]) * 1
			+ parseInt(value_array[8]) * 6
			+ parseInt(value_array[9]) * 3 ;
			Y = S % 11;
			M = "F";
			JYM = "10X98765432";
			M = JYM.substr(Y,1);//判断校验位
			if(M == value_array[17]) rs+=Errors[0]; //检测ID的校验位
			else rs+=Errors[3];
		}else
			rs+=Errors[2];


		break;
	default:
		rs+=Errors[1];
	break;
	}




//	if(birthPlaceValidate&&!rs){
//		var csdq = value.substring(0,6);
//		if(!csdqm||csdqm!=csdq){//不存在，或者不相等，校验失败
//			rs+=msgPrefix+'出生地区与身份证号不符！\r\n';
//		}
//	}





	try{



		var setValue = params['autoFill']?params['autoFill']:true;//自动填写性别、出生地区、出生日期
		if(!rs&&setValue&&(value.length==15||value.length==18)&&(!birthday||!sex)){

			var current_lsSfzh=lsSfzh;
			lsSfzh =value;

			var xbmVal;
			if(value.length == 15){
				xbmVal=(value.substring(14,15)%2==0?2:1);
			}else{
				xbmVal=(value.substring(16,17)%2==0?2:1);
			}
			this.setElementValue("xbm",xbmVal);


			this.setElementValue("csrq",value.substring(6,10)+"-"+value.substring(10,12)+"-"+value.substring(12,14));
			//处理出生地区

			//批量录入不支持级联，下面唔改住
//			var csdqm = value.substring(0,6);
			var thiscsdqm= this.getElementValue("csdqm");
			var thisjgdqm= this.getElementValue("jgdqm");
			thishkdqm= this.getElementValue("hkdqm");
			csdqm = value.substring(0,6);

			if(current_lsSfzh!=value&&(!thiscsdqm||!thisjgdqm)){
				$.ajax({
					async: false,
					type: "post",
					url: "/service?wdService=ry_getDqm",
					data: {
						dqm: csdqm
					},
					success: function (data) {
						var csdqm = data;
						if(!csdqm)return;
						if(wd.edit.cascading.getInstance("csdqm")&&!thiscsdqm){
							wd.edit.cascading.getInstance("csdqm").setValue(csdqm);
							if(wd.edit.objectPicker.getInstance("csxian")&&wd.edit.objectPicker.getInstance("csxian").onchange){
								wd.edit.objectPicker.getInstance("csxian").onchange();
							}
						}
						if(wd.edit.cascading.getInstance("jgdqm")&&!thisjgdqm){
							wd.edit.cascading.getInstance("jgdqm").setValue(csdqm);
							if(wd.edit.objectPicker.getInstance("jgxian")&&wd.edit.objectPicker.getInstance("jgxian").onchange){
								wd.edit.objectPicker.getInstance("jgxian").onchange();
							}
						}
						if(wd.edit.cascading.getInstance("hkdqm")&&!thishkdqm){
							wd.edit.cascading.getInstance("hkdqm").setValue(csdqm);
						}
					},
					error: function (data) {
						console.log(data);
					}
				})
			}
		}
//		lsSfzh = growHeightList["sfzh"].val();
	}catch(e){
		console.log(e);
	}


	//出生日期，性别 先自动填写，再校验
	birthday=this.getElementValue("csrq");

	if(birthday)
		birthday = birthday.replace(/-/g,'');

	sex=this.getElementValue("xbm");


	var birthDayValidate= params["chkCsrq"]?params["chkCsrq"]:true;//是否关联校验出生日期，默认false，false校验
	var sexValidate= params["chkXb"]?params["chkXb"]:true;//是否关联校验性别，默认false，false校验
	var birthPlaceValidate= params["chkCsdq"]?params["chkCsdq"]:true;//是否关联校验出生地，默认false，false校验
	if(birthDayValidate&&!rs){
		var birthdayFromIdCard = value.substring(6,14);
		if(!birthday){
			//不存在，直接过
		}else if(birthday!=birthdayFromIdCard){
			// 不相等，校验失败
		    rs+=msgPrefix+'出生日期与身份证号不符！\r\n';
		}
	}
	if(sexValidate&&!rs){
		var sexFromIdCard;
		if(value.length == 15){
		   sexFromIdCard=value.substring(14,15);
		}else{
		   sexFromIdCard=value.substring(16,17);
		}
		if(!sex||sex%2!=sexFromIdCard%2){//不存在，或者不相等，校验失败
			rs+=msgPrefix+'性别与身份证号不符！\r\n';
		}
	}

/// 增加。Lin
	if(!birthPlaceValidate){
		var csdq = value.substring(0,6);
		if(!csdqm||csdqm!=csdq){//不存在，或者不相等，校验失败
			rs+=msgPrefix+'出生地区与身份证号不符！\r\n';
		}
	}
///

	return rs;
}


/**
 * 身份证号校验器
 */
wd.commonValidator.idCard20190625 =
function(valueArr,//保存所有被校验的表单值的数组
		params//校验器的其余参数
		){

	var rs = "";//返回的校验结果

	var value = document.querySelector("[name='sfzh']").value// valueArr[0];//身份证号值
	var birthday = document.querySelector("[name='csrq']").value//valueArr[1];//出生日期
	//var sex = document.querySelector("[name='xbm']").value//valueArr[2];//性别码
	var sfzlbmInput=document.querySelector("[name='sfzjlbm']")
	var sfzjlbm = sfzlbmInput?sfzlbmInput.value:1 //valueArr[3];//身份证件类别码
	if(!sfzjlbm)sfzjlbm=1;
	//var csdqm = document.querySelector("[name='csdqm']").value//valueArr[3];//身份证件类别码
	var msgPrefix = params['msgPrefix'];//消息头
	var idCardNotNull = params['sfzhNotNull'];//身份证号不能为空
	//var birthDayNotNull = params['csrqNotNull'];//出生年月不能为空
	//var sexNotNull = params['xbNotNull'];//性别不能为空
	//var csdqmNotNull = params['csdqmNotNull'];//性别不能为空

	var setValue = params['setValue'];//自动填写性别、出生地区、出生日期

	if(!msgPrefix)//如果用户有输入消息头
		msgPrefix='';
	var msgPrefix = params['msgPrefix'];//消息头
	if (!value && idCardNotNull)
	{
		rs+=msgPrefix+'身份证件号不能为空！\r\n';
	}
	/*if(!birthday&&birthDayNotNull)
		rs+=msgPrefix+'出生日期不能为空！\r\n';
	else{
		if(birthDayNotNull){
			birthday = birthday.replace(/-/g,'');
		}
	}*/
	if(birthday)
		birthday = birthday.replace(/-/g,'');
	/*if(!sex&&sexNotNull)
		rs+=msgPrefix+'性别不能为空！\r\n';
	if(!csdqm&&csdqmNotNull){
		rs+=msgPrefix+'出生地区不能为空！\r\n';
	}*/

	if(value&&(!sfzjlbm||sfzjlbm==1)){//如果证件类型为身份证，且不为空

		if(value.match(/^888.*/)){//如果身份证为888开头的，就不验证

		}else{

			var Errors=new Array(
			"",
			msgPrefix+"身份证号位数不对！\r\n",
			msgPrefix+"身份证号出生日期超出范围或含有非法字符！\r\n",
			msgPrefix+"身份证号校验错误！(如果含X的，必须是大写半角的X！)\r\n",
			msgPrefix+"身份证地区非法！\r\n"
			);
			var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
			var value,Y,JYM;
			var S,M;
			var value_array = new Array();
			value_array = value.split("");
			//地区检验
			//if(csdqm.substr(0,4)!=value.substr(0,4)/*area[parseInt(value.substr(0,2))]==null*/) rs+=Errors[4];
			//身份号码位数及格式检验
			switch(value.length){
			case 15:
				if ((parseInt(value.substr(6,2))+1900) % 4 == 0 || ((parseInt(value.substr(6,2))+1900) % 100 == 0 && (parseInt(value.substr(6,2))+1900) % 4 == 0 )){
					ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
				} else {
					ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
				}
				if(ereg.test(value)) rs+=Errors[0];
				else rs+=Errors[2];

				//校验出生年月
				/*if(birthday){
					var birthdayFromIdCard = value.substring(6,12);
					if(birthday!=birthdayFromIdCard)
						rs+=msgPrefix+'出生日期与身份证号不符！\r\n';
				}

				//校验性别
				if(sex){
					var sexFromIdCard = value.substring(14,15);
					if(sex%2!=sexFromIdCard%2)
						rs+=msgPrefix+'性别与身份证号不符！\r\n';
				}*/
				break;
			case 18:
				//18位身份号码检测
				//出生日期的合法性检查
				//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
				//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
				if ( parseInt(value.substr(6,4)) % 4 == 0 || (parseInt(value.substr(6,4)) % 100 == 0 && parseInt(value.substr(6,4))%4 == 0 )){
					ereg=/^[1-9][0-9]{5}[0-9]{4}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
				} else {
					ereg=/^[1-9][0-9]{5}[0-9]{4}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
				}
				if(ereg.test(value)){//测试出生日期的合法性
				//计算校验位
					S = (parseInt(value_array[0]) + parseInt(value_array[10])) * 7
					+ (parseInt(value_array[1]) + parseInt(value_array[11])) * 9
					+ (parseInt(value_array[2]) + parseInt(value_array[12])) * 10
					+ (parseInt(value_array[3]) + parseInt(value_array[13])) * 5
					+ (parseInt(value_array[4]) + parseInt(value_array[14])) * 8
					+ (parseInt(value_array[5]) + parseInt(value_array[15])) * 4
					+ (parseInt(value_array[6]) + parseInt(value_array[16])) * 2
					+ parseInt(value_array[7]) * 1
					+ parseInt(value_array[8]) * 6
					+ parseInt(value_array[9]) * 3 ;
					Y = S % 11;
					M = "F";
					JYM = "10X98765432";
					M = JYM.substr(Y,1);//判断校验位
					if(M == value_array[17]) rs+=Errors[0]; //检测ID的校验位
					else rs+=Errors[3];
				}else
					rs+=Errors[2];

				//校验出生年月
				/*if(birthday){
					var birthdayFromIdCard = value.substring(6,14);
					if(birthday!=birthdayFromIdCard){
						rs+=msgPrefix+'出生日期与身份证号不符！\r\n';
					}
				}

				//校验性别
				if(sex){
					var sexFromIdCard = value.substring(16,17);
					if(sex%2!=sexFromIdCard%2)
						rs+=msgPrefix+'性别与身份证号不符！\r\n';
				}*/
				break;
			default:
				rs+=Errors[1];
			break;
			}
		}

	}
	//回显性别、出生日期、地区
	if(!rs&&setValue){
		if(value.length == 15){
			wd.edit.objectPicker.getInstance("xbm").initValue(value.substring(14,15)%2==0?2:1);
		}else{
			wd.edit.objectPicker.getInstance("xbm").initValue(value.substring(16,17)%2==0?2:1);
		}
		document.querySelector("[name='csrq']").value = value.substring(6,10)+"-"+value.substring(10,12)+"-"+value.substring(12,14);
		//处理出生地区
		var csdqm = value.substring(0,6);
		var csdqmstr = String(csdqm);

		var csshengdqm=csdqmstr.substring(0,2)+"0000";
		var csshidqm=csdqmstr.substring(0,4)+"00";
		if($("input[name='csdqm']").val()){
			return rs;
		}
		wd.edit.objectPicker.getInstance("cssheng").initValue(csshengdqm);
		wd.edit.objectPicker.getInstance("csshi").initValue(csshidqm);
		$("input[name=xbm]").click();//需要触发一次，否则级联无法生效
		wd.edit.objectPicker.getInstance("csxian").initValue(csdqm);
		$("input[name='csdqm']").val(csdqm);

		if($("input[name='hkdqm']").val()){
			return rs;
		}
		wd.edit.objectPicker.getInstance("hksheng").initValue(csshengdqm);
		wd.edit.objectPicker.getInstance("hkshi").initValue(csshidqm);
		//$("input[name=xbm]").click();//需要触发一次，否则级联无法生效
		wd.edit.objectPicker.getInstance("hkxian").initValue(csdqm);
		$("input[name='hkdqm']").val(csdqm);

	}
	return rs;
}

/**
 * 浮点数校验器
 */
wd.commonValidator.float =
function(valueArr,//保存所有被校验的表单值的数组
		params//校验器的其余参数
		){
			var rs = '';
			var value = valueArr[0];
			var msgPrefix = params['msgPrfx'];//消息头
			var minValue = params['minVal'];//最小数值
			var maxValue = params['maxVal'];//最大数值
			var decimalLength = params['decLen'];//保留几位
			var reg = new RegExp('^\\d+(\\.\\d{0,'+decimalLength+'})?$');
			var regValue = new RegExp('^\\d+(\\.\\d+)?$');

			var notNull = params['notBlank']==null?false:params['notBlank'];
			if(notNull){
				rs +=  wd.commonValidator.notNull(valueArr,params);
			}else{
				rs +=  wd.commonValidator.validator(valueArr,params);
			}

			if(value!=null&&value!=''){
				if(!minValue)//minValue值不指定默认为0
					minValue="0";
//				if(!regValue.test(value)){
				if(isNaN(value)){
					rs += msgPrefix+'应为数字！\r\n';
				}else{
//					if(minValue!=null&&value<minValue){
//						rs += msgPrefix+'应不小于'+minValue+'\r\n';
//					}
//					if(maxValue!=null&&value>maxValue){
//						rs += msgPrefix+'应不大于'+maxValue+'\r\n';
//					}
					if(minValue!=null && (parseInt(value) < parseInt(minValue)&&minValue!="-")){
						rs += msgPrefix+'应不小于'+minValue+'\r\n';
					}
					if(maxValue!=null&&(parseInt(value) > parseInt(maxValue)&&maxValue!="+")){
						rs += msgPrefix+'应不大于'+maxValue+'\r\n';
					}

//					if(decimalLength!=null&&!reg.test(value)){
					var arr=value.toString().split(".");
					if(arr.length>1&&arr[1].length>parseInt(decimalLength)){
						rs += msgPrefix+'小数部分应不多于'+decimalLength+'位。\r\n';
					}
				}

			}

			return rs;
		}

/**
 * 整数校验器
 */
wd.commonValidator.int =
function(valueArr,//保存所有被校验的表单值的数组
		params//校验器的其余参数
		){
			var rs = '';
			var value = valueArr[0];
			var msgPrefix = params['msgPrfx'];//消息头
			var minValue = params['minVal'];//最小数值
			var maxValue = params['maxVal'];//最大数值
			var regValue = new RegExp('^[1-9]*[1-9][0-9]*$');

			var notNull = params['notBlank']==null?false:params['notBlank'];
			if(notNull){
				rs +=  wd.commonValidator.notNull(valueArr,params);
			}else{
				rs +=  wd.commonValidator.validator(valueArr,params);
			}
			//minValue值不指定默认为0
			if(!minValue){
				minValue="0";
			}
			if(value!=null&&value!=''){
//				if(value != 0 && !regValue.test(value)){
//					rs += msgPrefix+'应为正整数！\r\n';
//				}
				if(isNaN(value)){
					rs += msgPrefix+'应为整数！\r\n';
				}
				if(minValue!=null && (parseInt(value) < parseInt(minValue)&&minValue!="-")){
					rs += msgPrefix+'应不小于'+minValue+'\r\n';
				}
				if(maxValue!=null&&(parseInt(value) > parseInt(maxValue)&&maxValue!="+")){
					rs += msgPrefix+'应不大于'+maxValue+'\r\n';
				}
			}

			return rs;
		}
/**
 * 	2022-3-1 新加的整数校验器,isInt不知谁改成了数字校验器!!
 */
wd.commonValidator.isInteger =
function(valueArr,//保存所有被校验的表单值的数组
		params//校验器的其余参数
		){
			var rs = '';
			var value = valueArr[0];
			var msgPrefix = params['msgPrfx'];//消息头
			var minValue = params['minVal'];//最小数值
			var maxValue = params['maxVal'];//最大数值
			var regValue = new RegExp('^[1-9]*[1-9][0-9]*$');

			var notNull = params['notBlank']==null?false:params['notBlank'];
			if(notNull){
				rs +=  wd.commonValidator.notNull(valueArr,params);
			}
			rs +=  wd.commonValidator.validator(valueArr,params);


			if(value!=null&&value!=''){
				if(value != 0 && !regValue.test(value)){
					rs += msgPrefix+'应为正整数！\r\n';
				}
				if(!rs&&minValue&& value <minValue){
					rs += msgPrefix+'应不小于'+minValue+'\r\n';
				}
				if(!rs&&maxValue&&value>maxValue){
					rs += msgPrefix+'应不大于'+maxValue+'\r\n';
				}
			}

			return rs;
		}

/**
 * 金额数校验器
 */
wd.commonValidator.money =
function(valueArr,//保存所有被校验的表单值的数组
		params//校验器的其余参数
		){
			var rs = '';
			var value = valueArr[0];
			var msgPrefix = params['msgPrfx'];//消息头
			var reg = new RegExp('^\\d+(\\.\\d{0,2})?$');
			var regValue = new RegExp('^\\d+(\\.\\d+)?$');

			rs += wd.commonValidator.float(valueArr,params);


			if(regValue.test(value)&&value!=null&&value!=''&&!reg.test(value)){
				rs += msgPrefix+'小数部分应在两位以内。\r\n';
			}


			return rs;
		}


/**
 * 公共校验器
 */
wd.commonValidator.validator =
function(valueArr,//保存所有被校验的表单值的数组
		params//校验器的其余参数
		){
			var rs = '';
			var value = valueArr[0];
			var msgPrefix = params['msgPrfx'];//消息头
			var noBlank = params['notBlank']==null?false:params['notBlank'];
			var minLength = params['minLen'];
			var maxLength = params['maxLen'];


			var length = params['len'];

			var regNoBlank = /\s/g;
			var regMin = new RegExp("^.{"+minLength+",}$");
			var regMax = new RegExp("^.{0,"+maxLength+"}$");
			var regScope = new RegExp("^.{"+minLength+","+maxLength+"}$");
			var regLength = new RegExp("^.{"+length+"}$");

			if(value!=null&&value!=''){
				if(noBlank&&regNoBlank.test(value)){
					rs += msgPrefix+'不能含空格！\r\n';
				}


				if(minLength!=null&&!(value.length>=minLength)){
					rs += msgPrefix+'应至少'+minLength+'个字符！\r\n';
				}else if(maxLength!=null&&minLength!=null&&(value.length>=minLength&&value.length<=maxLength)){
					//rs += msgPrefix+'必需在'+minLength+' ～'+maxLength+'！\r\n';
				}else if(maxLength!=null&&!(value.length<=maxLength)){
					rs += msgPrefix+'长度应不超过'+maxLength+'\r\n';
				}

				if(length!=null&&!(value.length==length)){
					rs += msgPrefix+'必需等于'+length+'！\r\n';
				}
			}
			return rs;
		}



/**
 * 内容管理技术规范的编码规则：[a-zA-Z_0-9] 和减号 校验器
 */
wd.commonValidator.contentCodeRule =
function(valueArr,//保存所有被校验的表单值的数组
		params//校验器的其余参数
		){
			var rs = '';
			var value = valueArr[0];
			var msgPrefix = params['msgPrfx'];//消息头
			var regValue = new RegExp('^[\w-]+$');

			var notNull = params['notBlank']==null?false:params['notBlank'];
			if(notNull){
				rs +=  wd.commonValidator.notNull(valueArr,params);
			}else{
				rs +=  wd.commonValidator.validator(valueArr,params);
			}

			if(value!=null&&value!=''){
				if(value != 0 && !regValue.test(value)){
					rs += msgPrefix+'必需由字母、数字、减号、下划线组成！\r\n';
				}
			}

			return rs;
}


/**
 * 页码，只允许字母和数字
 */
wd.commonValidator.pageNum =
function(valueArr,//保存所有被校验的表单值的数组
		params//校验器的其余参数
		){
			var rs = '';
			var value = valueArr[0];
			var msgPrefix = params['msgPrfx'];//消息头
			var regValue = new RegExp('^[\\da-zA-Z]+$');

			var notNull = params['notBlank']==null?false:params['notBlank'];
			if(notNull){
				rs +=  wd.commonValidator.notNull(valueArr,params);
			}else{
				rs +=  wd.commonValidator.validator(valueArr,params);
			}

			if(value!=null&&value!=''){
				if(value != 0 && !regValue.test(value)){
					rs += msgPrefix+'必需由字母、数字组成！\r\n';
				}
			}

			return rs;
}

/**
 *	英文名
 *	由数字、字母和下划线组成，长度为2-30个字符
 */
wd.commonValidator.enName = function(valueArr, params){
	var rs = '';
	var value = valueArr[0];
	var msgPrefix = params['msgPrfx'];
	var regValue = new RegExp('^\\w{2,30}$');

	var notNull = params['notBlank'] == null ? false : params['notBlank'];
	if(notNull){
		rs += wd.commonValidator.notNull(valueArr, params);
	}

	if(value != null && value != ''){
		if(!regValue.test(value)){
			rs += msgPrefix + '只能由数字、字母和下划线组成，长度为2-30个字符！\r\n';
		}
//		var ryid =$('#ryid').val()||$('input[name=ryid]').val();
		var ryid=this.getElementValue("ryid");
		var cb = $.ajax({type: "post",
			url: "/service?&wdService=ry_yzywm",
			data:{'userywm':valueArr.toString(), 'ryid': ryid},
			cache:false,
			async:false,
			dataType: "json" });

		if(cb.status==404){
			rs+="服务器连接失败！刷新页面";
		}else{
			var queryData = cb.responseJSON;
			if(queryData.isFind != "false"){
				rs+="英文名已存在！";
			}
		}
	}
	return rs;
}

wd.commonValidator.csenName = function(valueArr, params){
	var rs = '';
	var value = valueArr[0];
	var msgPrefix = params['msgPrfx'];
	var regValue = new RegExp('^\\w{2,30}$');

	var notNull = params['notBlank'] == null ? false : params['notBlank'];
	if(notNull){
		rs += wd.commonValidator.notNull(valueArr, params);
	}

	if(value != null && value != ''){
		if(!regValue.test(value)){
			rs += msgPrefix + '只能由数字、字母和下划线组成，长度为2-30个字符！\r\n';
		}
//		var ryid =$('#ryid').val()||$('input[name=ryid]').val();
		var ryid=this.getElementValue("ryid");
		var cb = $.ajax({type: "post",
			url: "/service?&wdService=csry_yzywm",
			data:{'userywm':valueArr.toString(), 'ryid': ryid},
			cache:false,
			async:false,
			dataType: "json" });

		if(cb.status==404){
			rs+="服务器连接失败！刷新页面";
		}else{
			var queryData = cb.responseJSON;
			if(queryData.isFind != "false"){
				rs+="英文名已存在！";
			}
		}
	}
	return rs;
}

/**
 *	域名唯一
 *
 */
wd.commonValidator.ymwy = function(valueArr, params){
	var rs = '';
	var value = valueArr[0];
	var msgPrefix = params['msgPrfx'];//消息头
	var regValue = new RegExp('^[\w-]+$');

	var notNull = params['notBlank']==null?false:params['notBlank'];
	if(notNull){
		rs += wd.commonValidator.notNull(valueArr, params);
	}

	if(value!=null&&value!=''){
//		var wangzid = ($('input[name="wangzid"]') != undefined ? $('input[name="wangzid"]').val() : $('#wangzid').val());
		var wangzid=this.getElementValue("wangzid");
		var cb = $.ajax({
			type:'post' ,
			url:"/service?wdService=grwzbj_wz_ym_wy",
			data:{
				ym:value,
				wangzid:wangzid
			},
			dataType:"json",
			async:false,

		});
		if(cb.status==404){
			rs+="服务器连接失败！刷新页面";
		}else{
			var queryData = cb.responseJSON;
			if(queryData.isFind != false){
				rs+="域名已存在！";
			}
		}
	}

	return rs;
}

/**
 * 附件是否为空校验
 * @param {*} valueArr
 * @param {*} params
 * @returns
 */
wd.commonValidator.fjNotNull =
	function(valueArr,//保存所有被校验的表单值的数组
		params//校验器的其余参数
		){

		var rs = '';
		var msgPrefix = params['msgPrfx'];//消息头

		//var nrid = this.getElementValue("fjid");
		var nrid=valueArr[0];
		if (!nrid) {
			rs += msgPrefix+'不能为空！\r\n';
		} else {
			$.ajax({
				async: false,
				type: "post",
				url: "/service?wdService=getSubNrCount",
				data: {
					nrid: "T-" + nrid,
					jlztm:1
				},
				success: function (data) {
					var names = JSON.parse(data);
					var isArray = $.isArray(names);
					if (!isArray || names.length <= 0) {
						rs += msgPrefix+'不能为空！\r\n';
					}
				},
				error: function (data) {
					console.log(data);
				}
			})
		}


		rs += wd.commonValidator.validator(valueArr,params);
		return rs;
}


/**
 * 大于
 * @param {Object} valueArr
 * @param {Object} params
 */
wd.commonValidator.greater = function(valueArr, params){
	var rs = '';
	var msgPrefix = params['msgPrfx'];//消息头
	var pp=msgPrefix.split(/,/);
	msgPrefix=pp[0]+"大于"+pp[1]+"! \r\n";
	if(valueArr.length<2){
		return rs;
	}
	var leftValue=valueArr[0];
	var rightValue=valueArr[1];
	if(!leftValue||!rightValue){
		return rs;
	}

	var eq =typeof params['equal']=="undefined"?false:params['equal'];//包括大小相等
	if(!!parseFloat(leftValue)&&!!parseFloat(rightValue) ){
		if(eq){
			if(parseFloat(leftValue)<parseFloat(rightValue)){
//				 console.log(arguments);
				 rs += msgPrefix;
			}
		}else{
			if(parseFloat(leftValue)<=parseFloat(rightValue)){
//				 console.log(arguments);
				 rs += msgPrefix;
			}
		}
	}
	return rs;
}

/**
 * 小于
 * @param {Object} valueArr
 * @param {Object} params
 */
wd.commonValidator.less = function(valueArr, params){
	var rs = '';
	var msgPrefix = params['msgPrfx'];//消息头
	var pp=msgPrefix.split(/,/);
	msgPrefix=pp[0]+"小于"+pp[1]+"! \r\n";
	var eq =typeof params['equal']=="undefined"?false:params['equal'];//包括大小相等

	if(valueArr.length>=2&&!!parseFloat(valueArr[0])&&!!parseFloat(valueArr[1]) ){
		if(eq){
			if(parseFloat(valueArr[0])>parseFloat(valueArr[1])){
//				 console.log(arguments);
				 rs += msgPrefix;
			}
		}else{
			if(parseFloat(valueArr[0])>=parseFloat(valueArr[1])){
//				console.log(arguments);
				 rs += msgPrefix;
			}
		}

	}
	return rs;
}


/**
 * 不等于
 * @param {Object} valueArr
 * @param {Object} params
 */
wd.commonValidator.notEqual = function(valueArr, params){
	var rs = '';
	var msgPrefix = params['msgPrfx'];//消息头
	var pp=msgPrefix.split(/,/);
	console.log(valueArr);
	for(var i=0;i<valueArr.length;i++){
		if(!valueArr[i])continue;
		var index=valueArr.indexOf(valueArr[i],i+1);
		if(index!=-1){
			rs+=pp[i]+"和"+pp[index]+"不能相同！\r\n";
			break;
		}
	}





	return rs;
}


wd.commonValidator.condition=function(valueArr, params){

	//满足条件才会校验
	if(params['condition']){
			try{
				//xybalxm:["51"]
				var condition=eval("({"+params['condition']+"})");
				for(var key in condition){
					var n=this.getElementValue(key);
					if(condition[key].indexOf(n)==-1){
						return false;
					}
				}
			}catch(e){
				console.log(e);
			}
	}

	return true;
}

/**
 * 数值是否已存在校验
 * @param {*} valueArr
 * @param {*} params
 * @returns
 */
wd.commonValidator.exists = function(valueArr, params){
	var rs = '';
	//表名
	var table = params['tab'];	// ['table']。Lin
	//字段名
	var field = params['field'];
	//数值
	var value = valueArr[0];
	//主键
/* 改为改用 对象ID。Lin
	var id = this.getElementValue("validationId");;
*/
/* 再改，ID 字段名由上层决定。Lin
	var id = this.getElementValue(table+"id");
*/
	var idName = params['id'];
	var id = this.getElementValue(idName);

	if(value!=null&&value!=''){
		var cb = $.ajax({type: "post",
				url: "/service?&wdService=chkDup",
/* 再改，增加 "idName" -- ID 字段名由上层决定。Lin
				data:{'table':table, 'field': field, 'value': value, 'id': id},
*/				data:{'table':table, 'field': field, 'value': value, 'id': id, 'idName': idName},
				cache:false,
				async:false,
				dataType: "json" });
		var queryData = cb.responseJSON;
		if(queryData.isFind != "false"){
		  rs= params['msg'];
		}
	}
	return rs;
}


// 增加，多个字段值是否匹配。Lin
// <notMatch field="jfrxm,jfrgrdh" parm="{relField:'jfrxm,jfrgrdh',srcTab:'ry',srcField:['xm','grdh']}"/>
wd.commonValidator.chkMatch = function(valueArr, params){
	var rs = '';
	//表名
	var table = params['srcTab'];	// "ry"(人员)。Lin
	//字段名
	var field = params['srcField'];	// "xm,grdh"(姓名，个人电话)。Lin
	//数值
/* 增加 parm="{relField:'jfrxm,jfrgrdh', -- 相关的页面字段。Lin
 *    去掉原来的 <ichker defField="['sfzh','csrq','xbm']
 * value，串成 "张三,12345"
	var value = valueArr[0];
*/
	var relField = params['relField'];	// "jfrxm,jfrgrdh"(接访人姓名，接访人个人电话)。Lin
	if (relField == null || relField == "")
		return rs;
	var value = "";
	var fieldArr = relField.split(",");
	for(var i = 0; i < fieldArr.length; i++) {
		var v = this.getElementValue(fieldArr[i]);
		if (v == null || v == "") {
			value = "";
			break;
		}
		if (value != "")
			value += ",";
		value += v.trim();
	}
	if (value == "")
		return rs;
	var cb = $.ajax({type: "post",
			url: "/service?&wdService=chkMatch",
			data:{'table':table, 'field': field, 'value': value},
			cache:false,
			async:false,
			dataType: "json" });
	var queryData = cb.responseJSON;
	if (queryData.isMatch == "false") {
		rs= params['msg'];
	}
	return rs;
}
