//格式：ValidateData('fCaption','标题','r<50');
//或：	ValidateData('ParentClientID', '', '<%=ParentClientID%>', 'fNumber', '数量', 'r_num');
//规则：
//		r:		不能为空
//		int:	输入整数
//		num:	输入数字
//		date:	
//		email
//		<n:	长度小于n>
function ValidateData()
{ 
	var values;
	var params = ValidateData.arguments;
	var alertMessage = "";
	var parentClientID = "";
	var errControl = null;
	if (params.length < 3 || params.length % 3 != 0)
		return true;
			
	var i = 0;
	while (i < params.length)
	{
		var controlName = params[i++];
		var controlCaption = params[i++];
		var checkType = params[i++];

		if (controlName == "" || controlName == null)
			continue;

		if (controlName == "ParentClientID")
		{
			if (checkType == "")
				parentClientID = checkType;
			else
				parentClientID = checkType + "_";
			continue;
		}

		var control = eval("document.forms[0]." + parentClientID + controlName);

		if (control == null)
			control = eval("document.forms[1]." + parentClientID + controlName);

		if (control == null)
		{
			continue;
			//不提示了，因为有时可能隐藏了：
			//alert("不能找到控件：" + "document.forms[0]." + parentClientID + controlName);
			//return false;
		}
			
		var controlValue = control.value;
        
		var message = "";
		
		//先验证长度：
		//注意：这里要求长度必须为最后一项验证码，如 r_int<9，而不能 r<9_int。
		var pos = checkType.indexOf("<");
        if (pos != -1)
        {
			var length = checkType.substring(pos + 1, checkType.length);        
            if(controlValue.length >= length)
				message += controlCaption + "输入长度过大：您输入了 " + controlValue.length + " 字，请控制在 " + (length-1) + " 字以内！";
	        checkType = checkType.substring(0, pos);
	    }
	    
	    if (checkType != "")
	    {
			var types = checkType.split("_");
			for (var j = 0; j < types.length; j++)
			{
				switch(types[j].toLowerCase())
				{
					case "r":
						var len = controlValue.replace(/[　\s]+$/gi,"").length;	
						if (controlValue == "" || len < 1)
							message += controlCaption + "不能为空！";
						break;
					case "int":
						if (controlValue != "" && controlValue.search(/^[0-9]+$/) == -1)
							message += controlCaption + "请输入整数！";
						break;
					case "num":
						if (controlValue != "" && controlValue.search(/^(-|\+)?\d+(\.\d+)?$/) == -1)
							message += controlCaption + "请输入数字！";
						break;
					//case "s":
    				//	if(isNaN(controlValue) & controlValue != "" && len > 0)
					//		message += controlCaption + "不能输入NaN值！";
					//	break;
					case "date":
						//if (controlValue.search(/^(\d{2}|\d{4})(\/|-)(\d{1,2})(\2)(\d{1,2})$/) == -1)
						if (controlValue != "" && !fnCheckDate(controlValue, 0))
							message += controlCaption + "请输入正确的日期格式！";
						break;
					case "email":
						if (controlValue != "" && controlValue.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) == -1)
												//^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$
							message += controlCaption + "请输入正确的邮箱！";
						break;
							
						//以下代码亦可：
						//var regu = "^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT)$"
						//var re = new RegExp(regu);
						//if (controlValue.search(re) == -1)
						//	message += controlCaption + "请输入正确的邮箱！";
						//break;

					default:
						alert("不认识的CheckData命令！type=" + checkType);
						return false;
				}
			}
		}
		if (message != "")
		{
			if (errControl == null)
				errControl = control;
			alertMessage += message + "\n";
		}
	}
	if (alertMessage != "")
	{
		try
		{
			errControl.focus();
			errControl.select();
		}
		catch(ex){}
		finally
		{
			alert(alertMessage);
			return false;
		}
	}
	return true;
}




//**********************************************************************************************************
//功能：日期检查函数，支持3种年、月、日之间的分隔符 "-"、"."和"/"可以选择年、月、日是否应该完整。
//  正确的日期格式为：2001-2-13 2001 2001-2 2001.2.13  2001.2 2001/2/3，日期范围为 1-1-1 到 9999-12-31 
//  同时，对当前年当前月的天数也做了判断，如：2001-2-29 2001-4-31 都是非法的日期
//参数：strDate ---- 需要判断的日期字符串
//  intFlag: 1 ---- 可以没有日  2 ---- 可以没有日和月 0 ---- 年月日必须齐全
//返回值：true ---- 日期合法 false ---- 日期不合法
function fnCheckDate(strDate,intFlag)
{
	var strCheckDate = strDate + "";     //进一步确认哪来判断的肯定是一串字符串

	if(strCheckDate == "")        //空字符串,不是合法的日期字符串，返回false
	{
		return false;
	} 

	//判断传进来的数据是那种格式写成日期
	var intIndex = -1;         //利用正则表达式，查找字符串中是否包含某个字符，没找到为-1,否则为 （0 - String.length - 1）
	var arrDate;          //分别存储年月日
	var regExpInfo = /\./;        //正则表达式，匹配第一个出现 "."的位置

	//在这里，我之所以不使用replace函数把所有的"."和"/"换成"-",然后分别存储年月日，是因为用户有可能输入 2001/3-2,就判断不出它是不合法日期了
	intIndex = strCheckDate.search(regExpInfo);   //查找是否含有 "."
	if(intIndex == - 1)         //不包含  
	{
		regExpInfo = /-/;
		intIndex = strCheckDate.search(regExpInfo);

		if(intIndex == -1)
		{
			regExpInfo = /\//;       //查找是否含有 "/"
								intIndex = strCheckDate.search(regExpInfo); 

			if(intIndex == -1)
			{
				arrDate = new Array(strCheckDate);  //只包含年
			}
			else
			{
				arrDate = strCheckDate.split("/");  //2001/3/7 型
			}
		}
		else
		{
			arrDate = strCheckDate.split("-");   //2001-3-7 型
		}
	}
	else
	{
		arrDate = strCheckDate.split(".");    //2001.3.7 型
	}

	if(arrDate.length > 3)        //如果分离出来的项超过3，除了年月日还有其它的，不合法日期，返回false
	{
		return false;
	}
	else if(arrDate.length > 0) 
	{
		//判断年是否合法
		if(fnIsIntNum(arrDate[0]))   //是正整数
		{
			if(parseFloat(arrDate[0]) < 1 || parseFloat(arrDate[0]) > 9999)  //年范围为1 - 9999
			{
				return false;
			} 
		}
		else
		{
			return false;     //年不是正整数，错误
		}

		//判断月是否合法
		if(arrDate.length > 1)
		{
			if(fnIsIntNum(arrDate[1]))  //是正整数
			{
				if(parseFloat(arrDate[1]) < 1 || parseFloat(arrDate[1]) > 12)
				{
					return false;
				} 
			}
			else
			{
				return false;
			}
		}
		else //没有月
		{
			if(intFlag != 2)    //必须得有月
			{
				return false;
			}
		}

		//判断日是否合法
		if(arrDate.length > 2)
		{
			if(fnIsIntNum(arrDate[2]))  //是正整数
			{
				var intDayCount = fnComputerDay(parseFloat(arrDate[0]),parseFloat(arrDate[1]));
				if(intDayCount < parseFloat(arrDate[2]))
				{
					return false;
				}   
			}
			else
			{
				return false;
			}
		}
		else
		{
			if(intFlag == 0)    //必须得有日
			{
				return false;
			}
		}
	}
	return true;
}

//**********************************************************************************
//判断一个数是否为正整数
//参数：strNum ---- 需要判断的字符串
//返回值：true ---- 整数 false ---- 非整数
function fnIsIntNum(strNum)
{
	var strCheckNum = strNum + "";
	if(strCheckNum.length < 1)         //空字符串
		return false;
	strCheckNum = parseFloat(strCheckNum)
	if(isNaN(strCheckNum))         //不是数值
		return false;
	else if(parseInt(strCheckNum) < 1)       //不是正数
		return false; 
	else if(parseFloat(strCheckNum) > parseInt(strCheckNum)) //不是整数 
		return false;

	return true;
}

//**********************************************************************************
//功能：判断intYear年intMonth月的天数
//返回值：intYear年intMonth月的天数
function fnComputerDay(intYear,intMonth)
{
	var dtmDate = new Date(intYear,intMonth,-1);
	var intDay = dtmDate.getDate() + 1;

	return intDay;    
}

//**********************************************************************************
//功能：去掉字符串前后空格
//返回值：去掉空格后的字符串
function fnRemoveBrank(strSource)
{
	return strSource.replace(/^\s*/,'').replace(/\s*$/,'');
}

/* -- 计算两个字符(YYYY-MM-DD)的日期相隔天数 -- */
function Date_Compare(asStartDate,asEndDate)
{
	var miStart = Date.parse(asStartDate.replace(/\-/g, '/'));
	var miEnd   = Date.parse(asEndDate.replace(/\-/g, '/'));
	return (miEnd-miStart)/(1000*24*3600);
}

//********************************************************************************************************** 
///以下是另一种方法：
/*-- 判断一个字符串(YYYY-MM-DD)的日期是否正确 -- */
function Date_istrue(asDate)
{
	var lsDate  = asDate + "";
	var loDate  = lsDate.split("-");
	if (loDate.length!=3) return false; 
	var liYear  = parseInt(loDate[0]);
	var liMonth = parseInt(loDate[1]);
	var liDay   = parseInt(loDate[2]);
	if ((loDate[0].length>4)||(loDate[1].length>2)||(loDate[2].length>2)) return false;
	if (isNaN(liYear)||isNaN(liMonth)||isNaN(liDay)) return false;
	if ((liYear<1900)||(liYear>3000)) return false;
	if ((liMonth>12)||(liMonth<=0))   return false;
	if (Date_getDay(liYear,liMonth)<liDay) return false;
	return !isNaN(Date.UTC(liYear,liMonth,liDay));
}

/*-- 返回某年某月的天数-- */
function Date_getDay(aiYear,aiMonth)
{
	var loDay = [0,31,28,31,30,31,30,31,31,30,31,30,31];
	if (aiYear%4==0) loDay[2] = 29;
	return loDay[aiMonth];
}
