/*
Current Version : 1.0.2
author			: Paul.lee

更新记录:
2008-03-27
Version 1.0.1  
Modified by Paul.lee
1、添加了设置是否弹出提示信息的方法setPopupMsg 
2、添加了验证后获取提示信息的方法getValidErrMsg
3、添加了日期(yyyy-MM-dd)正则表达方式的变量DATE_YMD_PATTERN
4、添加了年月日分别由3个不同的输入框输入然后组成日期的合法性验证	 splitDateValidator
5、添加了两个年月日分别由3个不同的输入框输入组成日期的大小验证 splitCompareDateValidator
6、添加了与指定的值的比较的验证 specifyValueValidator
2009-11-19
Version 1.0.2 
1、修改字符转整数进制的问题  parseInt(valueText)改为parseInt(valueText,10)

一、调用函数说明:
1  	setValidate(array)  	设置须要验证的数据数组,数据格式请看下面验证格式说明.
2  	setIdPrefix(prefix)		设置控件id的前缀
3	setPopupMsg(isPopup)	设置是否弹出提示信息(true=弹出 false=不弹)
4  	validate()				执行验证
5	getValidErrMsg()		获取验证后的提示信息


二、验证格式说明:
1 	验证是否为空 			[requiredValidator,'控件ID','错误信息']
2 	验证一个范围的值 		[rangeValidator,'控件ID','错误信息', 开始值, 结束值]
3 	比较两个值的大小			[compareValidator,'控件ID1','错误信息','控件ID2', '比较符号'] 比较符号={EQ,LA,LE,NEQ,NLA,NLE}
4 	验证是否符合正则表达方式 	[regExpValidator,'控件ID','错误信息', 正则表达方式]
5 	验证长度 				[lengthExactlyValidator,'控件ID','错误信息', 长度值]
6 	验证长度范围 			[lengthIntervalValidator,'控件ID','错误信息',开始长度值, 结束长度值]
7 	比较两个日期的大小		[compareDateValidator,'控件ID1','错误信息','控件ID2', '比较符号', '日期格式'] 比较符号={EQ,LA,LE,NEQ,NLA,NLE}
8 	比较两个日期年数的大小	[compareYearValidator,'控件ID1','错误信息','控件ID2', '比较符号', '日期格式'] 比较符号={EQ,LA,LE,NEQ,NLA,NLE}
9 	年月日分别由3个不同的输入框输入组成日期的合法性验证		[splitDateValidator,'年控件ID','错误信息','月控件ID', '日控件ID']
10	两个年月日分别由3个不同的输入框输入组成日期的大小验证	[splitCompareDateValidator,'年控件ID1','错误信息','月控件ID1', '日控件ID1', '年控件ID2', '月控件ID2', '日控件ID2','比较符号']	比较符号={EQ,LA,LE,NEQ,NLA,NLE}
11 	与指定的值的比较 		[specifyValueValidator,'控件ID','错误信息', 指定值, '比较符号'] 	比较符号={EQ,LA,LE,NEQ,NLA,NLE}
数据数组格式=[[requiredValidator,'控件ID','错误信息'],[rangeValidator,'控件ID','错误信息', 开始值, 结束值],......]

三、比较符号说明:
EQ=相等 LA=大于 LE=小于 NEQ=不等于 NLA = 小于或等于 NLE= 大于或等于 

四、其他说明:
1 若控件ID出现"{num}"的符号,则会在该位置出现控件的序列号
2 若错误信息出现"{num}"的符号,则会在该位置出现控件的序列号
*/

//日期(dd/MM/yyyy)的正则表达方式
var DATE_DMY_PATTERN = /^(((0?[1-9]|[12]\d|3[01])\/(0?[13578]|1[02])\/((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|[12]\d|30)\/(0?[13456789]|1[012])\/((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|1\d|2[0-8])\/0?2\/((1[6-9]|[2-9]\d)\d{2}))|(29\/0?2\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/;
//日期(yyyy-MM-dd)的正则表达方式
var DATE_YMD_PATTERN = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29))$/;
//Email的正则表达方式
//var EMAIL_PATTERN=/^[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
var EMAIL_PATTERN=/^[a-zA-Z0-9][\w\.-]*@[a-zA-Z0-9][\w\.-]*\.[a-zA-Z][a-zA-Z\.]*$/;

var ID_NUM_PALAM='{num}'; //id 的动态号码变量
var row_count=0;	 //计算datatable的行数
var error_count=0;   //检验出错的数量
var error_popup_msg=''; //弹出显示的错误信息 
var idArray = new Array( );// 存储验证失败的 控件ID
var colorArray = new Array( );// 存储控件的底色
var hlColor='yellow';			//hightLight的默认颜色
var reColor='white'				//还原的默认的颜色
var idPrefix;					//id 的前缀
var isPopupMsg=true;					//是否弹出提示信息

//比较符号
var EQ = 'eq';
var LA = 'la';
var LE = 'le';
var NEQ = 'neq';
var NLA = 'nla';
var NLE = 'nle';

//日期格式
var DYM_FORMAT='dd/MM/yyyy';
var YMD_FORMAT='yyyy-MM-dd';

//日期分隔符
var DATE_SPLIT1='/';
var DATE_SPLIT2='-';
var DATE_SPLIT3='.';

//日期年月日格式字符
var YEAR='y';
var MONTH='M';
var DAY='d';

//验证种类
var requiredValidator = 1;
var rangeValidator = 2;
var compareValidator = 3;
var regExpValidator = 4;
var lengthExactlyValidator = 5;
var lengthIntervalValidator = 6;
var compareDateValidator = 7;
var compareYearValidator = 8;
var splitDateValidator = 9;
var splitCompareDateValidator = 10;
var specifyValueValidator = 11;
//验证数组
var mainArray;


/**
验证主函数
*/
function validate(){
	error_popup_msg='';
	idArray = new Array( );
	var isFormValid=true;
	if(mainArray!=null && mainArray.length>0){
		for(var i=0;i<mainArray.length;i++){
			var obj=mainArray[i];
			if(obj.length>=3){
				var typed=obj[0];
				var ids=getFullId(obj[1]);
				var errMsg=obj[2];
				switch(typed){
					case requiredValidator :
						var retVal = validateRequiredField(ids,errMsg);
						isFormValid=isFormValid && retVal;
						break;
					case rangeValidator :	
						var minValue = obj[3];
						var maxValue = obj[4];
						var retVal = validateRangeField(ids, errMsg, minValue, maxValue);	
						isFormValid=isFormValid && retVal;
						break;
					case regExpValidator :
						var pattern = obj[3];
						var retVal = validateRegExp(ids, errMsg, pattern);	
						isFormValid=isFormValid && retVal;
						break;
					case lengthExactlyValidator :
						var exactValue = obj[3];
						var retVal = validateLengthExactly(ids, errMsg, exactValue);	
						isFormValid=isFormValid && retVal;
						break;	
					case lengthIntervalValidator :
						var min = obj[3];
						var max = obj[4];
						var retVal = validateLengthInterval(ids, errMsg, min, max);	
						isFormValid=isFormValid && retVal;
						break;	
					case compareValidator :
						var ids2 =getFullId(obj[3]);
						var operator = obj[4];
						var retVal = validateCompareFields(ids, ids2, errMsg, operator);	
						isFormValid=isFormValid && retVal;
						break;
					case compareDateValidator :
						var ids2 =getFullId(obj[3]);
						var operator = obj[4];
						var pattern = obj[5];
						var retVal = validateCompareDateFields(ids, ids2, errMsg, pattern, operator);	
						isFormValid=isFormValid && retVal;
						break;
					case compareYearValidator :
						var ids2 =getFullId(obj[3]);
						var operator = obj[4];
						var pattern = obj[5];
						var retVal = validateCompareYearFields(ids, ids2, errMsg, pattern, operator);	
						isFormValid=isFormValid && retVal;
						break;		
					case splitDateValidator :
						var ids2 =getFullId(obj[3]);
						var ids3 =getFullId(obj[4]);
						var retVal = validatesplitDateFields(ids, ids2, ids3, errMsg);	
						isFormValid=isFormValid && retVal;
						break;		
					case splitCompareDateValidator :
						var ids2 =getFullId(obj[3]);
						var ids3 =getFullId(obj[4]);
						var ids4 =getFullId(obj[5]);
						var ids5 =getFullId(obj[6]);
						var ids6 =getFullId(obj[7]);
						var operator =obj[8];
						var retVal = validatesplitCompareDateFields(ids, ids2, ids3, ids4, ids5, ids6, errMsg, operator);
						isFormValid=isFormValid && retVal;
						break;			
					case specifyValueValidator :
						var specValue = obj[3];
						var operator = obj[4];
						var retVal = validateSpecValues(ids, specValue, errMsg, operator)	
						isFormValid=isFormValid && retVal;
						break;	
					default:
						
				}
				
			}
		}
		showPopupIfNecessary();
		
	}
	return isFormValid;

}


/**
弹出错误信息
*/
function showPopupIfNecessary() {
	if(error_popup_msg != '' && isPopupMsg){
		window.alert(error_popup_msg);
	}
}

/**
获取错误信息
*/
function getValidErrMsg(){
	return error_popup_msg;
}

/**
组合完整的函数
*/
function getFullId(ids){
	var fullid='';
	if(idPrefix && idPrefix!=''){
		fullid=idPrefix+ids;
	}else{
		fullid=ids;
	}
	return fullid;
}

/**
设置是否弹出提示信息(true=弹出 false=不弹)
*/
function setPopupMsg(isPopup){
	isPopupMsg=isPopup;
}

/**
设置id前缀
*/
function setIdPrefix(prefix){
	idPrefix=prefix;
}

/**
设置验证数组
*/
function setValidate(array){
	mainArray=array;
}


/**
验证一个控件的初始化,若几个控件使用相同的ID则检验这几个控件只初试化一次
*/
function clearErrorMsg(){
     row_count=0;
	 error_count=0;
}

/**
功能:根据operator 比较value1 和 value2  
return: true 符合 false 不符合
*/
function commonCompare(value1, value2, operator){
		if(operator==EQ){ 
			if(value1 == value2) {
				return true;
			}else{
				return false;
			}
		}
		if(operator==NEQ){ 
			if(value1 != value2) {
				return true;
			}else{
				return false;
			}
		}
		if(operator==LA){ 
			if(value1 > value2) {
				return true;
			}else{
				return false;
			}
		}
		if(operator==LE){ 
			if(value1 < value2) {
				return true;
			}else{
				return false;
			}
		}
		if(operator==NLA){ 
			if(value1 <= value2) {
				return true;
			}else{
				return false;
			}
		}
		if(operator==NLE){ 
			if(value1 >= value2) {
				return true;
			}else{
				return false;
			}
		}	
		return false;
}


/**
将日期字符根据pattern 转换为日期对象
*/
function converStrToDate(dateStr, pattern){
	if(pattern && dateStr){
		var splitCode;
		if(pattern.indexOf(DATE_SPLIT1)!=-1){
			splitCode=DATE_SPLIT1;
		}else if(pattern.indexOf(DATE_SPLIT2)!=-1){
			splitCode=DATE_SPLIT2;
		}else if(pattern.indexOf(DATE_SPLIT3)!=-1){
			splitCode=DATE_SPLIT3;
		}
		if(splitCode){
			var patternArray=pattern.split(splitCode);
			var dateArray=dateStr.split(splitCode);
			if(patternArray && dateArray && patternArray.length==dateArray.length){
				var yearStr='0';
				var monthStr='1';
				var dayStr='1';
				
				for(var i=0;i<patternArray.length;i++){
					var str=patternArray[i];
					
					if(str.indexOf(YEAR)!=-1){
						yearStr=dateArray[i];
						
					}else if(str.indexOf(MONTH)!=-1){
						monthStr=dateArray[i];
						
					}else if(str.indexOf(DAY)!=-1){
						dayStr=dateArray[i];
						
					}
					
				}
				if(yearStr && monthStr && dayStr){
					var date=new Date(yearStr,(monthStr-1),dayStr);
					if(date){
						return date;
					}
				}
			
			}
		}
		
	}
	return null;
}

//---------------------specifyValueValidator------------------------------------------
/**
功能:页面ID为field的所在控件的value的值与指定的值比较
*/


function validateSpecValues(field1, specValue, errMsg, operator) {
	clearErrorMsg();
	validateSpecValue(field1, specValue, errMsg, operator);
	if(error_count>0){
	   return false;
	}else{
	   return true;
	}
}

function validateSpecValue (field1, specValue, errMsg ,operator) {
	var note1=document.getElementById(field1);
	if(note1){
		var value1=note1.value;
		if(value1==null || value1==''){
			hideValidationErrorObject(note1);
		}else{
			if(commonCompare(value1, specValue, operator)){
				hideValidationErrorObject(note1);
			}else{
				showValidationErrorObject(note1, errMsg);	
			}
		}
		
	}else{
		var row=0;
		if(field1.indexOf(ID_NUM_PALAM)!=-1){
			while(true){
				var field_row1=field1.replace(ID_NUM_PALAM,row);
				var note_row1=document.getElementById(field_row1);
				if(note_row1){
					var value1=note_row1.value;
					row_count=row+1;
					if(value1==null || value1==''){
						hideValidationErrorObject(note_row1);
					}else{
						if(commonCompare(value1, specValue, operator)){
							hideValidationErrorObject(note_row1);
						}else{
							showValidationErrorObject(note_row1, errMsg);	
						}
					}
					
				}else{
					break;
				}
				row++;
			}
		}
	}
}


//--------------------- splitCompareDateValidator-----------------------------------

/**
功能:验证两个年月日分别由3个不同的输入框输入组成日期的大小验证
*/
function validatesplitCompareDateFields(yfield, mfield, dfield, yfield2, mfield2, dfield2, errMsg, operator){
	clearErrorMsg();
	validatesplitCompareDateField(yfield, mfield, dfield, yfield2, mfield2, dfield2, errMsg, operator);
	if(error_count>0){
	   return false;
	}else{
	   return true;
	}

}

function validatesplitCompareDateField(yfield, mfield, dfield, yfield2, mfield2, dfield2, errMsg, operator){
	var yNote=document.getElementById(yfield);
	var mNote=document.getElementById(mfield);
	var dNote=document.getElementById(dfield);
	var yNote2=document.getElementById(yfield2);
	var mNote2=document.getElementById(mfield2);
	var dNote2=document.getElementById(dfield2);
	
	if(yNote && mNote && dNote && yNote2 && mNote2 && dNote2){
		var yValue=yNote.value;
		var mValue=mNote.value;
		var dValue=dNote.value;
		var yValue2=yNote2.value;
		var mValue2=mNote2.value;
		var dValue2=dNote2.value;
		if((yValue == null || yValue == '') && (mValue == null || mValue == '') && (dValue == null || dValue == '') && (yValue2 == null || yValue2 == '') && (mValue2 == null || mValue2 == '') && (dValue2 == null || dValue2 == '')) {
			hideAutoValidationErrorObject(yNote, mNote, dNote,yNote2, mNote2, dNote2);	
		}else {
			var date1=new Date(yValue, mValue-1, dValue);
			var date2=new Date(yValue2, mValue2-1, dValue2);
			if(date1 && date2 && commonCompare(date1.getTime(), date2.getTime(), operator)){
				hideAutoValidationErrorObject(yNote, mNote, dNote,yNote2, mNote2, dNote2);	
			}else{
				showAutoValidationErrorObject(errMsg, yNote, mNote, dNote,yNote2, mNote2, dNote2);	
			}
			
		}
	
	}else{
		var row=0;
		if(yfield.indexOf(ID_NUM_PALAM)!=-1 && mfield.indexOf(ID_NUM_PALAM)!=-1 && dfield.indexOf(ID_NUM_PALAM)!=-1 && yfield2.indexOf(ID_NUM_PALAM)!=-1 && mfield2.indexOf(ID_NUM_PALAM)!=-1 && dfield2.indexOf(ID_NUM_PALAM)!=-1){
			while(true){
				var yfield_row = yfield.replace(ID_NUM_PALAM,row);
				var mfield_row = mfield.replace(ID_NUM_PALAM,row);
				var dfield_row = dfield.replace(ID_NUM_PALAM,row);
				var yfield_row2 = yfield2.replace(ID_NUM_PALAM,row);
				var mfield_row2 = mfield2.replace(ID_NUM_PALAM,row);
				var dfield_row2 = dfield2.replace(ID_NUM_PALAM,row);
				
				var yNote_row = document.getElementById(yfield_row);
				var mNote_row = document.getElementById(mfield_row);
				var dNote_row = document.getElementById(dfield_row);
				var yNote_row2 = document.getElementById(yfield_row2);
				var mNote_row2 = document.getElementById(mfield_row2);
				var dNote_row2 = document.getElementById(dfield_row2);
			
				if(yNote_row && mNote_row && dNote_row && yNote_row2 && mNote_row2 && dNote_row2){
					var yValue_row = yNote_row.value;
					var mValue_row = mNote_row.value;
					var dValue_row = dNote_row.value;
					var yValue_row2 = yNote_row2.value;
					var mValue_row2 = mNote_row2.value;
					var dValue_row2 = dNote_row2.value;
					row_count=row+1;
					if((yValue_row == null || yValue_row == '') && (mValue_row == null || mValue_row == '') && (dValue_row == null || dValue_row == '') && (yValue_row2 == null || yValue_row2 == '') && (mValue_row2 == null || mValue_row2 == '') && (dValue_row2 == null || dValue_row2 == '')) {
						hideAutoValidationErrorObject(yNote_row, mNote_row, dNote_row, yNote_row2, mNote_row2, dNote_row2);		
					}else {
						var date1_row=new Date(yValue_row, mValue_row-1, dValue_row);
						var date2_row=new Date(yValue_row2, mValue_row2-1, dValue_row2);
						if(date1_row && date2_row && commonCompare(date1_row.getTime(), date2_row.getTime(), operator)){
							hideAutoValidationErrorObject(yNote_row, mNote_row, dNote_row, yNote_row2, mNote_row2, dNote_row2);
						}else{
							showAutoValidationErrorObject(errMsg, yNote_row, mNote_row, dNote_row, yNote_row2, mNote_row2, dNote_row2);	
						}
					}
				}else{
					break;
				}
				row++;
			}
		}
	}

}


//--------------------- splitDateValidator------------------------------------------
/**
功能:验证年月日分别由3个不同的输入框输入然后组成日期的合法性验证	
*/
function validatesplitDateFields(yfield, mfield, dfield, errMsg){
	clearErrorMsg();
	validatesplitDateField(yfield, mfield, dfield, errMsg);
	if(error_count>0){
	   return false;
	}else{
	   return true;
	}

}

function validatesplitDateField(yfield, mfield, dfield, errMsg){
	var yNote=document.getElementById(yfield);
	var mNote=document.getElementById(mfield);
	var dNote=document.getElementById(dfield);
	
	if(yNote && mNote && dNote){
		var yValue=yNote.value;
		var mValue=mNote.value;
		var dValue=dNote.value;
		if((yValue == null || yValue == '') && (mValue == null || mValue == '') && (dValue == null || dValue == '')) {
			hideThreeValidationErrorObject(yNote, mNote, dNote);	
		}else {
			var dateValue=yValue+DATE_SPLIT2+mValue+DATE_SPLIT2+dValue;
			if(dateValue.match(DATE_YMD_PATTERN) == null) {
				showThreeValidationErrorObject(yNote, mNote, dNote, errMsg);		
			}
			else {
				hideThreeValidationErrorObject(yNote, mNote, dNote);	
			}
		}
	
	}else{
		var row=0;
		if(yfield.indexOf(ID_NUM_PALAM)!=-1 && mfield.indexOf(ID_NUM_PALAM)!=-1 && dfield.indexOf(ID_NUM_PALAM)!=-1){
			while(true){
				var yfield_row = yfield.replace(ID_NUM_PALAM,row);
				var mfield_row = mfield.replace(ID_NUM_PALAM,row);
				var dfield_row = dfield.replace(ID_NUM_PALAM,row);
				
				var yNote_row = document.getElementById(yfield_row);
				var mNote_row = document.getElementById(mfield_row);
				var dNote_row = document.getElementById(dfield_row);
			
				if(yNote_row && mNote_row && dNote_row){
					var yValue_row = yNote_row.value;
					var mValue_row = mNote_row.value;
					var dValue_row = dNote_row.value;
					row_count=row+1;
					if((yValue_row == null || yValue_row == '') && (mValue_row == null || mValue_row == '') && (dValue_row == null || dValue_row == '')) {
						hideThreeValidationErrorObject(yNote_row, mNote_row, dNote_row);	
					}else {
						var dateValue_row=yValue_row+DATE_SPLIT2+mValue_row+DATE_SPLIT2+dValue_row;
						if(dateValue_row.match(DATE_YMD_PATTERN) == null) {
							showThreeValidationErrorObject(yNote_row, mNote_row, dNote_row, errMsg);		
						}
						else {
							hideThreeValidationErrorObject(yNote_row, mNote_row, dNote_row);
						}
					}
				}else{
					break;
				}
				row++;
			}
		}
	}

}

//--------------------- compareYearValidator------------------------------------------

/**
功能:比较检验页面ID为field和field2的日期年份大小
*/
function validateCompareYearFields(field1, field2, errMsg, pattern, operator) {
	clearErrorMsg();
	validateCompareYearField(field1, field2, errMsg, pattern, operator);
	if(error_count>0){
	   return false;
	}else{
	   return true;
	}
}

/**
功能:比较检验页面ID为field和field2的日期年份大小
*/
function validateCompareYearField(field1, field2, errMsg, pattern, operator) {
	var note1=document.getElementById(field1);
	var note2=document.getElementById(field2);
	if(note1 && note2){
		var date1=converStrToDate(note1.value,pattern);
		
		var date2=converStrToDate(note2.value,pattern);
		
		if(date1 && date2 && commonCompare(date1.getFullYear(), date2.getFullYear(), operator)){
			hideCompareValidationErrorObject(note1, note2);
		}else{
			showCompareValidationErrorObject(note1, note2, errMsg);	
		}
	}else{
		var row=0;
		if(field1.indexOf(ID_NUM_PALAM)!=-1 && field2.indexOf(ID_NUM_PALAM)!=-1){
			while(true){
				var field_row1=field1.replace(ID_NUM_PALAM,row);
				var field_row2=field2.replace(ID_NUM_PALAM,row);
				
				var note_row1=document.getElementById(field_row1);
				var note_row2=document.getElementById(field_row2);
			
				if(note_row1 && note_row2){
					var date1=converStrToDate(note_row1.value,pattern);
					var date2=converStrToDate(note_row2.value,pattern);
					row_count=row+1;
					
					if(date1 && date2 && commonCompare(date1.getFullYear(), date2.getFullYear(), operator)){
						hideCompareValidationErrorObject(note_row1, note_row2);
					}else{
						showCompareValidationErrorObject(note_row1, note_row2, errMsg);	
					}
				}else{
					break;
				}
				row++;
			}
		}
	}
}

//--------------------- CompareDateValidator------------------------------------------

/**
功能:比较检验页面ID为field和field2的日期大小
*/
function validateCompareDateFields(field1, field2, errMsg, pattern, operator) {
	clearErrorMsg();
	validateCompareDateField(field1, field2, errMsg, pattern, operator);
	if(error_count>0){
	   return false;
	}else{
	   return true;
	}
}

/**
功能:比较检验页面ID为field和field2的日期大小
*/
function validateCompareDateField(field1, field2, errMsg, pattern, operator) {
	var note1=document.getElementById(field1);
	var note2=document.getElementById(field2);
	if(note1 && note2){
		if(note1.value=='' && note2.value==''){
			hideCompareValidationErrorObject(note1, note2);
		}else{
			var date1=converStrToDate(note1.value,pattern);
			var date2=converStrToDate(note2.value,pattern);
			if(date1 && date2 && commonCompare(date1.getTime(), date2.getTime(), operator)){
				hideCompareValidationErrorObject(note1, note2);
			}else{
				showCompareValidationErrorObject(note1, note2, errMsg);	
			}
		}
		
	}else{
		var row=0;
		if(field1.indexOf(ID_NUM_PALAM)!=-1 && field2.indexOf(ID_NUM_PALAM)!=-1){
			while(true){
				var field_row1=field1.replace(ID_NUM_PALAM,row);
				var field_row2=field2.replace(ID_NUM_PALAM,row);
				
				var note_row1=document.getElementById(field_row1);
				var note_row2=document.getElementById(field_row2);
			
				if(note_row1 && note_row2){
					if(note_row1.value=='' && note_row2.value==''){
						hideCompareValidationErrorObject(note_row1, note_row2);
					}else{
						var date1=converStrToDate(note_row1.value,pattern);
						var date2=converStrToDate(note_row2.value,pattern);
						
						if(date1 && date2 && commonCompare(date1.getTime(), date2.getTime(), operator)){
							hideCompareValidationErrorObject(note_row1, note_row2);
						}else{
							showCompareValidationErrorObject(note_row1, note_row2, errMsg);	
						}
					}
					row_count=row+1;
					
				}else{
					break;
				}
				row++;
			}
		}
	}
}

//--------------------- compareValidator------------------------------------------

/**
功能:比较检验页面ID为field和field2的value
*/
function validateCompareFields(field1, field2, errMsg, operator) {
	clearErrorMsg();
	validateRowCompareField(field1, field2, errMsg, operator);
	if(error_count>0){
	   return false;
	}else{
	   return true;
	}
}




/**
功能:比较检验页面ID为field和field2的value
*/
function validateRowCompareField (field1, field2, errMsg ,operator) {
	var note1=document.getElementById(field1);
	var note2=document.getElementById(field2);
	if(note1 && note2){
		var value1=note1.value;
		var value2=note2.value;
		
		if(commonCompare(value1, value2, operator)){
			hideCompareValidationErrorObject(note1, note2);
		}else{
			showCompareValidationErrorObject(note1, note2, errMsg);	
		}
	}else{
		var row=0;
		if(field1.indexOf(ID_NUM_PALAM)!=-1 && field2.indexOf(ID_NUM_PALAM)!=-1){
			while(true){
				var field_row1=field1.replace(ID_NUM_PALAM,row);
				var field_row2=field2.replace(ID_NUM_PALAM,row);
				
				var note_row1=document.getElementById(field_row1);
				var note_row2=document.getElementById(field_row2);
			
				if(note_row1 && note_row2){
					var value1=note_row1.value;
					var value2=note_row2.value;
					row_count=row+1;
					
					if(commonCompare(value1, value2, operator)){
						hideCompareValidationErrorObject(note_row1, note_row2);
					}else{
						showCompareValidationErrorObject(note_row1, note_row2, errMsg);	
					}
				}else{
					break;
				}
				row++;
			}
		}
	}
}




//--------------------- validateRequired------------------------------------------

/**
  功能:检验页面ID为field的所有控件是否为空,当错误数量大于0就阻止页面提交
*/
function validateRequiredField(field,errMsg) {  
	clearErrorMsg();
	validateRowRequireField(field,errMsg);
	if(error_count>0){
	   return false;
	}else{
	   return true;
	}
}


/**
  功能:检验页面ID为field的所有控件是否为空,是则出现提示信息
*/
function validateRowRequireField(field,errMsg) {
	var note=document.getElementById(field);
	if(note){
		var value=note.value;
		if(value == null || value == '') {
			showValidationErrorObject(note, errMsg);		
		}else {
			hideValidationErrorObject(note);
		}
	}else{
		var row=0;
		if(field.indexOf(ID_NUM_PALAM)!=-1){
			while(true){
				var field_row=field.replace(ID_NUM_PALAM,row);
				var note_row=document.getElementById(field_row);
				if(note_row){
					var value=note_row.value;
					row_count=row+1;
					if(value == null || value == '') {
						showValidationErrorObject(note_row, errMsg);		
					}else {
						hideValidationErrorObject(note_row);
					}
				}else{
					break;
				}
				row++;
			}
		}
	}
}

//---------------------validateRange------------------------------------------
/**
  功能:检验页面ID为field的所有控件是否在minValue到maxValue之间,当错误数量大于0就阻止页面提交
*/
function validateRangeField(field,errMsg,minValue,maxValue) {
	clearErrorMsg();
	validateRowRangeField(field,errMsg,minValue,maxValue);
	if(error_count>0){
	   return false;
	}else{
	   return true;
	}
}

/**
 validateRowRangeField
功能:检验页面ID为field的所有控件的value是否在minValue到maxValue之间,否则出现提示信息
*/
function validateRowRangeField(field, errMsg, minValue, maxValue) {
	var note=document.getElementById(field);
	if(note){
		var valueText=note.value;
		if(valueText == null || valueText == '') {
			hideValidationErrorObject(note);
		}else{
			var value = parseInt(valueText,10);
			if(minValue != null && maxValue !=null ) {
				if(value > maxValue || value < minValue ) {
					showValidationErrorObject(note, errMsg);		
				}
				else {
					hideValidationErrorObject(note);
				}	
			} else if(minValue == null && maxValue !=null) {
				if(value > maxValue) {
					showValidationErrorObject(note, errMsg);			
				}
				else {
					hideValidationErrorObject(note);
				}
			} else if(minValue != null && maxValue ==null) {
				if(value <minValue) {
					showValidationErrorObject(note, errMsg);			
				}
				else {
					hideValidationErrorObject(note);
				}
			}		
		}
	}else{
		var row=0;
		if(field.indexOf(ID_NUM_PALAM)!=-1){
			while(true){
				var field_row=field.replace(ID_NUM_PALAM,row);
				var note_row=document.getElementById(field_row);
				if(note_row){
					var valueText=note_row.value;
					row_count=row+1;
					if(valueText == null || valueText == '') {
						hideValidationErrorObject(note_row);
					}else{
						var value = parseInt(valueText,10);
						if(minValue != null && maxValue !=null ) {
							if(value > maxValue || value < minValue ) {
								showValidationErrorObject(note_row, errMsg);		
							}
							else {
								hideValidationErrorObject(note_row);
							}	
						} else if(minValue == null && maxValue !=null) {
							if(value > maxValue) {
								showValidationErrorObject(note_row, errMsg);			
							}
							else {
								hideValidationErrorObject(note_row);
							}
						} else if(minValue != null && maxValue ==null) {
							if(value <minValue) {
								showValidationErrorObject(note_row, errMsg);			
							}
							else {
								hideValidationErrorObject(note_row);
							}
						}
					
					}
					
				}else{
					break;
				}
				row++;
			}
		}
	}
			    
}

//---------------------RegExp------------------------------------------
/**
功能:检验页面ID为field的所有控件的value是否以pattern的准则存在
*/
function validateRegExp(field,errMsg,pattern) {
	clearErrorMsg();
	//validateMultiRegExp(document,field,error,pattern,highlight,display);
	validateRowRegExp(field,errMsg,pattern);
	if(error_count>0){
	   return false;
	}else{
	   return true;
	}
}

/**
功能:检验页面ID为field的所有控件的value是否以pattern的准则存在,否则出现提示信息
*/
function validateRowRegExp(field,errMsg,pattern) {
	
	var note=document.getElementById(field);
	if(note){
		var value=note.value;
		if(value == null || value == '') {
			hideValidationErrorObject(note);	
		}else {
			if(value.match(pattern) == null) {
				showValidationErrorObject(note, errMsg);		
			}
			else {
				hideValidationErrorObject(note);
			}
		}
	}else{
		var row=0;
		if(field.indexOf(ID_NUM_PALAM)!=-1){
			while(true){
				var field_row=field.replace(ID_NUM_PALAM,row);
				var note_row=document.getElementById(field_row);
				if(note_row){
					var value=note_row.value;
					row_count=row+1;
					if(value == null || value == '') {
						hideValidationErrorObject(note_row);	
					}else {
						if(value.match(pattern) == null) {
							showValidationErrorObject(note_row, errMsg);		
						}
						else {
							hideValidationErrorObject(note_row);
						}
					}
				}else{
					break;
				}
				row++;
			}
		}
	}
}

//---------------------LengthExactly------------------------------------------
/**
功能:检验页面ID为field的所在控件的value的长度是否等于exactValue
*/
function validateLengthExactly(field, errMsg, exactValue) {
	clearErrorMsg();
	validateRowLengthExactly(field, errMsg, exactValue);
	if(error_count>0){
	   return false;
	}else{
	   return true;
	}
}

/**
功能:检验页面ID为field的所在控件的value的长度是否等于exactValue,否则出现提示信息
*/
function validateRowLengthExactly(field, errMsg, exactValue) {
	var note=document.getElementById(field);
	if(note){
		var value=note.value;
		if(value.length != exactValue) {
			showValidationErrorObject(note, errMsg);		
		}
		else {
			hideValidationErrorObject(note);
		}
	}else{
		var row=0;
		if(field.indexOf(ID_NUM_PALAM)!=-1){
			while(true){
				var field_row=field.replace(ID_NUM_PALAM,row);
				var note_row=document.getElementById(field_row);
				if(note_row){
					var value=note_row.value;
					row_count=row+1;
					if(value.length != exactValue) {
						showValidationErrorObject(note_row, errMsg);			
					}
					else {
						hideValidationErrorObject(note_row);
					}
				}else{
					break;
				}
				row++;
			}
		}
	}


}

//---------------------LengthInterval------------------------------------------
//rewrite validateLengthInterval function
function validateLengthInterval(field, errMsg, min, max) {
	clearErrorMsg();
	validateRowLengthInterval(field, errMsg, min, max);
	if(error_count>0){
	   return false;
	}else{
	   return true;
	}
}

/**
Multi-RangeField mode
功能:检验页面ID为field的所有控件的value的长度是否在min到max之间,否则出现提示信息
*/
function validateRowLengthInterval (field, errMsg, min, max) {
	var note=document.getElementById(field);
	if(note){
		var value=note.value;
		var len = value.length;
		if(min != null && max !=null ) {
			if(len > max || len < min ) {
				showValidationErrorObject(note, errMsg);				
			}
			else {
				hideValidationErrorObject(note);
			}	
		} else if(min == null && max !=null) {
			if(len > max) {
				showValidationErrorObject(note, errMsg);		
			}
			else {
				hideValidationErrorObject(note);
			}
		} else if(min != null && max ==null) {
			if(len < min) {
				showValidationErrorObject(note, errMsg);		
			}
			else {
				hideValidationErrorObject(note);
				if(highlight==true){
					resetFieldColorObject(note);
				}				
			}
		}
		
		
	}else{
		var row=0;
		if(field.indexOf(ID_NUM_PALAM)!=-1){
			while(true){
				var field_row=field.replace(ID_NUM_PALAM,row);
				var note_row=document.getElementById(field_row);		
				if(note_row){
					var value=note_row.value;
					row_count=row+1;
					var len = value.length;
					if(min != null && max !=null ) {
						if(len > max || len < min ) {
							showValidationErrorObject(note_row, errMsg);				
						}
						else {
							hideValidationErrorObject(note_row);
						}	
					} else if(min == null && max !=null) {
						if(len > max) {
							showValidationErrorObject(note_row, errMsg);		
						}
						else {
							hideValidationErrorObject(note_row);
						}
					} else if(min != null && max ==null) {
						if(len < min) {
							showValidationErrorObject(note_row, errMsg);		
						}
						else {
							hideValidationErrorObject(note_row);
							if(highlight==true){
								resetFieldColorObject(note_row);
							}				
						}
					}
					
					
				}else{
					break;
				}
				row++;
			}
		}
	}


}


//----------------------show and hide------------------------------------------

function setColorObject(obj){
	if(obj){
		if(typeof colorArray[obj.id] == "undefined"){
			var color=obj.style.backgroundColor;
			if(color!=null && color!=""){
				colorArray[obj.id]=color;
			}else{
				colorArray[obj.id] = reColor;
			}
		}
	}
}

/**
 *功能:10个控件之内同时验证错误时的控制
 */
function showAutoValidationErrorObject(errMsg, field0, field1, field2, field3, field4, field5,field6, field7, field8, field9) {
	showValidationDivObject(errMsg);
	if(field0){
		idArray[field0.id] = false;
		setColorObject(field0);
		highlightFieldObject(field0);
	}
	if(field1){
		idArray[field1.id] = false;
		setColorObject(field1);
		highlightFieldObject(field1);
	}
	if(field2){
		idArray[field2.id] = false;
		setColorObject(field2);
		highlightFieldObject(field2);
	}
	if(field3){
		idArray[field3.id] = false;
		setColorObject(field3);
		highlightFieldObject(field3);
	}
	if(field4){
		idArray[field4.id] = false;
		setColorObject(field4);
		highlightFieldObject(field4);
	}
	if(field5){
		idArray[field5.id] = false;
		setColorObject(field5);
		highlightFieldObject(field5);
	}
	if(field6){
		idArray[field6.id] = false;
		setColorObject(field6);
		highlightFieldObject(field6);
	}
	if(field7){
		idArray[field7.id] = false;
		setColorObject(field7);
		highlightFieldObject(field7);
	}
	if(field8){
		idArray[field8.id] = false;
		setColorObject(field8);
		highlightFieldObject(field8);
	}
	if(field9){
		idArray[field9.id] = false;
		setColorObject(field9);
		highlightFieldObject(field9);
	}
	
	
}

/**
 *功能:3个控件同时验证错误时的控制
 */
function showThreeValidationErrorObject(field1, field2, field3, errMsg) {
	showValidationDivObject(errMsg);
	
	idArray[field1.id] = false;
	setColorObject(field1);
	highlightFieldObject(field1);
	
	idArray[field2.id] = false;
	setColorObject(field2);
	highlightFieldObject(field2);
	
	idArray[field3.id] = false;
	setColorObject(field3);
	highlightFieldObject(field3);
	
}


/**
 *功能:2个控件同时验证错误时的控制
 */
function showCompareValidationErrorObject(field1, field2, errMsg) {
	showValidationDivObject(errMsg);
	
	idArray[field1.id] = false;
	setColorObject(field1);
	highlightFieldObject(field1);
	
	idArray[field2.id] = false;
	setColorObject(field2);
	highlightFieldObject(field2);
	
}

/**
 *功能:3个控件同时验证无错误时的控制
 */
function hideThreeValidationErrorObject(field1, field2, field3) {
	hideValidationErrorObject(field1);
	hideValidationErrorObject(field2);
	hideValidationErrorObject(field3);
	
}


/**
 *功能:10个控件之内同时验证无错误时的控制
 */
function hideAutoValidationErrorObject(field0, field1, field2, field3, field4, field5, field6, field7, field8, field9) {
	if(field0){
		hideValidationErrorObject(field0);
	}
	if(field1){
		hideValidationErrorObject(field1);
	}
	if(field2){
		hideValidationErrorObject(field2);
	}
	if(field3){
		hideValidationErrorObject(field3);
	}
	if(field4){
		hideValidationErrorObject(field4);
	}
	if(field5){
		hideValidationErrorObject(field5);
	}
	if(field6){
		hideValidationErrorObject(field6);
	}
	if(field7){
		hideValidationErrorObject(field7);
	}
	if(field8){
		hideValidationErrorObject(field8);
	}
	if(field9){
		hideValidationErrorObject(field9);
	}
	
	
}




/**
 *功能:2个控件同时验证无错误时的控制
 */
function hideCompareValidationErrorObject(field1, field2) {
	hideValidationErrorObject(field1);
	hideValidationErrorObject(field2);
	
	
}


/**
 *功能:错误时提示信息的控制
 */
function showValidationErrorObject(field, error_msg) {
	showValidationDivObject(error_msg);
	idArray[field.id] = false;
	setColorObject(field);
	highlightFieldObject(field);	
	
		
}

/**
 *功能:无错误时的控制
 */
function hideValidationErrorObject(field) {
		if(typeof idArray[field.id] == "undefined"){
			idArray[field.id] = true;
		}else{
			idArray[field.id] = idArray[field.id] && true;
		}
		
		if(typeof colorArray[field.id] == "undefined"){
			var color=field.style.backgroundColor;
			if(color!=null && color!=""){
				colorArray[field.id]=color;
			}else{
				colorArray[field.id] = reColor;
			}
		}
		
		
		if(idArray[field.id]==true){
			resetFieldColorObject(field);
		}
		
	
		
}


/**
  功能:处理错误信息,若错误信息中有'{}'则会在'{}'的位置显示相同ID控件的序列 	
*/
function showValidationDivObject(error_msg) {
	if(error_msg){
		error_count++;
   	 	var pos=error_msg.indexOf(ID_NUM_PALAM);
    	if(pos!=-1){
    		error_msg=error_msg.replace(ID_NUM_PALAM,row_count);
    	}
		error_popup_msg+= ('* ' +error_msg+'\n');
	
	}
	
}


/**
  功能:改变控件背景色为yellow
*/
function highlightFieldObject(obj) {
	if(obj != null){
		obj.style.backgroundColor=hlColor;
	}
		
}


/**
  功能:改变控件背景色为white
*/
function resetFieldColorObject(obj) {
	if(obj != null){
		//obj.style.backgroundColor="white";
		//alert(colorArray[obj.id]);
		if(typeof colorArray[obj.id] == "undefined" || colorArray[obj.id]==null || colorArray[obj.id]==""){
			obj.style.backgroundColor= reColor ;
		}else{
			obj.style.backgroundColor=colorArray[obj.id];
		}
	}
}


//----------------------------------------------------------------------------


/**
功能:只能输入数字
*/
function keyPressNumber(decimal) {
  var kc = window.event.keyCode;
  var t = window.event.srcElement.value ;

      if (decimal) {
            if (t.indexOf(',') != -1) {
                  if( (kc >= 48 && kc <= 57) == false) {
                        window.event.keyCode = 0;
                  }
            }
            else {
                  if ((kc >= 48 && kc <= 57 || kc == 44) == false) {
                        window.event.keyCode = 0;
                  }
            }
      }
      else {
            if ((kc >= 48 && kc <= 57) == false) {
                  window.event.keyCode = 0;
            }
      }
}
