/****************************************************************
**		说明：  使用前在页面上构造好要检查的页面元素及要求即可
**		作者：	Cloud
**		时间：	2005-03-24 15:30:00
**		版权：  本程序所有权Cloud所有，
**				请自由使用，如果修改，请Copy一份给作者cloudrose@vip.sina.com
**		
**		function IsValueEmpty(objInput)
			判断空值：
				输入：控件对象
				返回：true/false
**		function IsValidReg(objInput,strErrorDesc,rePatten)
			判断值是否有效（正则表达）：
				输入：控件对象[,出错提示],正则表达式
				返回：true/false
**		function IsRadioChecked(strName,strErrorDesc)
			判断是否有单选框被选中：
				输入：控件对象name属性值
				返回：true/false
**		function isValidDate(year,month,day)
			判断日期：
				输入：
				返回：
**		function DateCompare(DateFrom, DateTo)
			比较日期：
				输入：
				返回：
****************************************************************/

var reRequire=/^.*$/;
var reDateYMD=/^\-?[\d]{1,3}([ \/\-\.])(?:[0]?[1-9])|(?:1[0-2])\1(?:(?:[0]?[1-9])|(?:[12]\d)|(?:3[01]))$/;
var reDateMDY=/^(?:[0]?[1-9])|(?:1[0-2])([ \/\-\.])(?:(?:[0]?[1-9])|(?:[12]\d)|(?:3[01]))\1\-?[\d]{1,3}$/;
var reDateMDY=/^(?:(?:[0]?[1-9])|(?:[12]\d)|(?:3[01]))([ \/\-\.])(?:[0]?[1-9])|(?:1[0-2])\1\-?[\d]{1,3}$/;
var reTime=/^[\d]{1,2}:[\d]{1,2}(?:[\d]{1,2})?$/;		//H:M:S
//var reDateYMDTime=/^\-?[\d{1,3}([ \/\-\.])(?:[0]?[1-9])|(?:1[0-2])\1(?:(?:[0]?[1-9])|(?:[12]\d)|(?:3[01]))(?: [\d]{1,2}:[\d]{1,2}(?:[\d]{1,2}))?$/;
var reEmail=/^\w+(?:[-+.]\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*$/;
var rePhone=/^(?:(?:\(\d{3}\))|(?:\d{3}\-))?(?:\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/;
var reMobile=/^(?:(?:\(\d{3}\))|(?:\d{3}\-))?13\d{9}$/;
var reUrl=/^[http|https|ftp]:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*(?:[^<>\"\"])*$/;
//var reUrl2=/^[http|https|ftp]:\/\/(?:[\w-]+\.)+[\w-]+(?:/[\w- ./?%&=]*)?/;
var reIdCard_En=/^\d{15}(?:\d{2}[A-Za-z0-9])?$/;
var reCurrency=/^\d+(?:\.\d+)?$/;
var reNumber=/^\d+$/;
var reZip=/^[1-9]\d{5}$/;
var reQQ=/^[1-9]\d{4,8}$/;
var reEnglish=/^[A-Za-z]+$/;
var reChinese=/^[\u0391-\uFFE5]+$/;
var reChinese2=/^[\u4E00-\u9FA5]+$/;
var reName=/^[\.\w\u0391-\uFFE5]+$/;
var reNameEN=/^[\.\w]+$/;
var reNameCN=/^[\u0391-\uFFE5]+$/;
var reUnSafe=/^(?:(?:[A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/;
var reEngStr=/^[0-9A-Za-z]+$/;
var reString=/^[\._a-zA-Z0-9\u0391-\uFFE5]+$/;
var reDblByte=/^[\x00-\xFF]+$/;
var reBlankLine=/\n[\s| ]*\r/;
var reTagML=/<([^ \"\']+)(?:.*)>(.*)<\/\1>|<([^ \"\']+)(?:.*) \/>/;
var reTrim=/(^\s*)|(\s*$)/;
var reIPv4=/(?:\d+)\.(?:\d+)\.(?:\d+)\.(?:\d+)/;
var rePosiInt=/^[0-9]*[1-9][0-9]*$/;		//匹配正整数
var reNegaInt=/^-[0-9]*[1-9][0-9]*$/;		//匹配负整数
var reUnPosiInt=/^(?:(?:-\d+)|(?:0+))$/;		//匹配非正整数（负整数 + 0）
var reUnNegaInt=/^\d+$/;				//匹配非负整数（正整数 + 0）
var reInteger=/^[-\+]?\d+$/;			//匹配整数
var reUnPosiFloat=/^(?:(?:[0-9]+\.[0-9]*[1-9][0-9]*)|(?:[0-9]*[1-9][0-9]*\.[0-9]+)|(?:[0-9]*[1-9][0-9]*))$/;
var reNegaFloat=/^(?:-(?:(?:[0-9]+\.[0-9]*[1-9][0-9]*)|(?:[0-9]*[1-9][0-9]*\.[0-9]+)|(?:[0-9]*[1-9][0-9]*)))$/;
var reUnPosiFloat=/^(?:(?:-\d+(?:\.\d+)?)|(?:0+(?:\.0+)?))$/;
var reUnNegaFloat=/^\d+(?:\.\d+)?$/	;
var reFloat=/^(?:-?\d+)(?:\.\d+)?$/	;
var reDouble=/^[-\+]?\d+(?:\.\d+)?$/;
var reHex=/^[&H|0x]?[0-9a-fA-F]$/;
var reOct=/^[0-7]$/;
var rebin=/^[01]$/;
var reYear=/^[12]\d{3}$/;
var reMonth=/^(?:[0]?[1-9])|(?:[1][012])$/;
var reDay=/^(?:[0]?[1-9])|(?:[12]\d)|(?:3[01])$/;
var reIdCard_cn_15=/^[1-9]\d{5}\d{2}(?:0[1-9])|(?:1[012])(?:0[1-9])|(?:[12]\d)|(?:3[01])\d{3}$/;
var reIdCard_cn_18=/^[1-9]\d{5}[1-9]\d{3}(?:0[1-9])|(?:1[012])(?:0[1-9])|(?:[12]\d)|(?:3[01])\d{3}[0-9xX]$/;
var reIdCard_cn=/^\d{15}\d{3}?$/;
var reISBN_10=/^[\d][-]?[\d]{4}[-]?[\d]{4}[-]?[\d]$/;
var reISBN_13=/^[\d]{3}[-]?[\d][-]?[\d]{4}[-]?[\d]{4}[-]?[\d]$/;
var reISBN=/^(?:[\d]{3}[-]?)?[\d][-]?[\d]{4}[-]?[\d]{4}[-]?[\d]$/;

function ArraySearch(strString,arrStrings){
	var strS;
	var boolFound=false;
	for (strS in arrStrings) boolFound=(strString==strS);
	return boolFound;
}

function IsValueEmpty(objInput,strErrorDesc) {
	var boolChecked=false;
	boolChecked=(objInput.value=="");
	if (boolChecked&&(strErrorDesc!="")){
		window.alert(strErrorDesc);
		objInput.focus();
	}
	return(boolChecked);
}

function IsValidReg(objInput,strErrorDesc,rePatten) {
	var boolChecked=false;
	boolChecked=!(objInput.value.match(rePatten)==null);
	if (!boolChecked&&(strErrorDesc!="")){
		window.alert(strErrorDesc);
		objInput.focus();
	}
	return(boolChecked);
}

//获取校验位
function GetVerifyCodeIDCard_cn_17(strIDCard_cn_17){
	//checkID
	var strID_Base=strIDCard_cn_18.substr(0,17)
	//加权因子
	var arrIDFactor=new Array([7],[9],[10],[5],[8],[4],[2],[1],[6],[3],[7],[9],[10],[5],[8],[4],[2]);
	var intIDMod=0;
	var intIDCheckSum=0;
	// 校验码对应值
	var arrIDVerifyNumberList=new Array(["1"],["0"],["X"],["9"],["8"],["7"],["6"],["5"],["4"],["3"],["2"]);
	for (var i=0; i<strID_Base.length; i++) intIDCheckSum+=parseInt(strID_Base.substr(i,1))*arrIDFactor[i];
	intIDMod=intIDCheckSum%11;
	return (arrIDVerifyNumberList[intIDMod]);
}

//检验身份证，如果是15位，升为18位。
//15：******-******-***		（行政区划代码-6位出生日期码-顺序码）
//18：******-********-***-*	（行政区划代码-8位出生日期码-顺序码-校验码）
function IsValidIDCard_cn(objInput,strErrorDesc) {
	var boolChecked=false;
	var strID=objInput.value;
	//如果是15位，先升为18位
	if(IsValidReg(objInput,"",reIdCard_cn_15)){
		//此处预留15位校验程序段
		// 如果顺序码是996 997 998 999，代表18**年出生
		strID=strID.substr(0,6)+(ArraySearch(strID.substr(12, 3),Array("996", "997", "998", "999")))?"18":"19"+strID.substr(6,9);
		strID+=GetVerifyCodeIDCard_cn_17(strID.substr(0,17));		//获取校验位
	} else if(IsValidReg(objInput,strErrorDesc,reIdCard_cn_18)){
		boolChecked=(GetVerifyCodeIDCard_cn_17(strID.substr(0,17))!=strID.substr(17,1));
		if (boolChecked&&(strErrorDesc!="")){
			window.alert(strErrorDesc);
			objInput.focus();
		}
	}
	return(boolChecked);
}

function IsChecked(strName,strErrorDesc,minCheckeds,maxCheckeds){
	var objCheck=document.getElementsByName(strName);
	var intChecked=0;
	if((maxCheckeds<=0)||(maxCheckeds>objCheck.length)) maxCheckeds=objCheck.length;
	if((minCheckeds<=0)||(minCheckeds>objCheck.length)) minCheckeds=1;
	if(minCheckeds>maxCheckeds){	//SwopInt(minCheckeds,maxCheckeds);
		minCheckeds+=maxCheckeds;
		maxCheckeds=minCheckeds-maxCheckeds;
		minCheckeds-=maxCheckeds;
	}
	for (var i=0; i<objCheck.length; i++)
		if (objCheck[i].checked) intChecked++;
	if (((intChecked<minCheckeds)||(intChecked>maxCheckeds))&&(strErrorDesc!="")){
		window.alert(strErrorDesc);
		objInput.focus();
	}
	return (boolChecked);
}

function isValidDate(year,month,day) {
	year=parseInt(year,10);
	month=parseInt(month,10);
	day=parseInt(day,10);

	if(((month==4)||(month==6)||(month==9)||(month==11))&&((day>=1)||(day<=30))) {
		return(true);
	}else if((month!=2)&&((day>=1)||(day<=31))) {
		return (true);
	}else if(((year%100)!=0&&(year%4==0)||(year%400)==0)&&((day>=1)||(day<=29))) {	//leap year
		return (true);
	}else if((day>=1)||(day<=28)) {
		return(true);
	}
	return(false);
}

function DateCompare(DateFrom, DateTo) {
/*	DateFrom.replace("")
	DateTo
	YearFrom=parseInt(YearFrom,10);
	MonthFrom=parseInt(MonthFrom,10);
	YearTo=parseInt(YearTo,10);
	MonthTo=parseInt(MonthTo,10);

	if (YearFrom>YearTo) return false;
	else
		if (YearFrom==YearTo)
			if (MonthFrom>MonthTo)
				return false;
	return true;
*/
}
 
