//**身份证号码校验
	function IDCheckChar(StrID)	//检查是否含有非法字符
	{
		if(StrID.length != 15 && StrID.length != 18)return 1;
		var i,ch;
    	for(i=0;i<StrID.length;i++)
    	{
    		ch = StrID[0].charAt(i);
    		if(StrID.length == 15)
    		{
	    		if(ch != '0' && ch != '1' && ch != '2' && ch != '3' && ch != '4' &&
	    			ch != '5' && ch != '6' && ch != '7' && ch != '8' && ch != '9')
	    			return 2;
    		}
    		else
    		{
	    		if(ch != '0' && ch != '1' && ch != '2' && ch != '3' && ch != '4' && ch != '5' &&
	    			ch != '6' && ch != '7' && ch != '8' && ch != '9' && ch != 'x' && ch != 'X')
	    			return 2;
    		}
    	}
    	return 0;
	}
	function ID15To18(ID15,century)//将15位的身份证号码转换为18位
	{
	    if(ID15.length != 15)return "";

	    var id18 = "";
	    var W = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
	    var A = new Array('1','0','X','9','8','7','6','5','4','3','2');
	    var i,j=0,s = 0;
	    var id17 = ID15.substring(0,6)+century+ID15.substring(6,15);
	    for(i=0;i<17;i++)
	    {
	        j = (id17.charCodeAt(i) - 48 ) * W[i];
	        s += j;
	    }
	    s %= 11;
	    return id17 + A[s];
	}

	function ID18To15(ID18)//将18位的身份证号码转换为15位
	{
	    var substr;
	    if(ID18.length != 18)return "";
   		substr = ID18.substring(0,6)+ID18.substring(8,17);
	    return substr;
	}

	//检查身份证是否合法
	//StrID:身份证号码 CheckBit:是否对校验位校验 true:不校验 false:不校验
	//返回结果0:正确 1：长度错 2非法字符错: 3：年份错 4：月份错 5：日期错 6：校验位错
	function IDCheck1518(StrID,CheckBit)	
	{
    	var i,year,mon,day;
    	if(StrID.length != 15 && StrID.length != 18)return 1;

    	var ret = IDCheckChar(StrID);
    	if(ret != 0)return ret;

    	if(StrID.length == 15)	//15位身份证
    	{
    		year = "19" + StrID.substring(6,8);
    		mon = StrID.substring(8,10);
    		day = StrID.substring(10,12);
    		if(mon < 01 || mon > 12)return 4;
    		if(day < 01 || day > 31)return 5;
	    	if(mon == 2)
	    	{
   		    	if(((year %= 4)==0) && (day>29))return 5;
   		    	if(((year %= 4)!=0) && (day>28))return 5;
   		    }
    	}
    	else					//18位身份证
    	{
    		StrID = StrID.toUpperCase();
    		year = StrID.substring(6,10);
    		mon = StrID.substring(10,12);
    		day = StrID.substring(12,14);
    		if(year < 1900 || year > 2050)return 3;
    		if(mon < 01 || mon > 12)return 4;
    		if(day < 01 || day > 31)return 5;
	    	if(mon == 2)
	    	{
   		    	if(((year %= 4)==0) && (day>29))return 5;
   		    	if(((year %= 4)!=0) && (day>28))return 5;
   		    }
    		if(CheckBit == null || CheckBit == true)
    		{
	    		var id18 = ID15To18(ID18To15(StrID),StrID.substring(6,8));
	    		if(id18 != StrID)return 6;
    		}
    	}
		return 0;
	}
//**身份证号码校验
//检查文件名中的非法字符
   function checkFileName(str){
	var chr=new Array('\\','\/','\:','\*','\?','\"','\<','\>','\|');
	for(var i=0;i<str.length;i++)
		for(var j=0;j<chr.length;j++)
			if(str.charAt(i)==chr[j])
				return false;
   }


// 获取给定字符串的长度，处理一个汉字为2个字符
// 如果不是字符串对象返回-1
function fun_GetStrLen( str )
{
	var iOk = -1;
	if( typeof( str )=="string" ){
		iOk = 0;
		for( var i=0; i<str.length; i++ ){
			if( str.charCodeAt(i) > 255 ) iOk += 2; else iOk++;
		}
	}
	return iOk;
}

// 返回去处左右空格的字符串长度
function fun_GetTrimStrLen( s )
{
	var str = trim( s );
	return fun_GetStrLen( str );
}

function TrimRight( s )
{
	var str = s;
	if( typeof( str )=="string" ){
		var j = str.length - 1;
		while (str.charAt(j) == " ")
		    j--;
		if( j < str.length - 1 )
		    str = str.substring(0, j + 1);
	}
	return str;
}

function TrimLeft( s )
{
	var str = s;
	if( typeof( str )=="string" ){
		var i = 0;
		while (s.charAt(i) == " ")
		    i++;
		if( i > 0 )
		    str = str.substring(i);
	}
	return str;
}

// 清除字符串前后的空格
function trim(s)
{
	return TrimRight( TrimLeft( s ) );
}

// 检查str是否有checkStr中的字符组成
// 例如：checkStrInStr( "asdf23r.asd3", "1234567890." )等于false
function checkStrInStr( str, checkStr )
{
	var bOk = false;
	if( typeof( checkStr ) == "string" && typeof( str ) == "string" ){
		bOk = true;
		for ( var i = 0;  i < str.length;  i++ ){
			var ch = str.charAt(i);
			var j = 0;
			for ( ;  j < checkStr.length;  j++){
				if (ch == checkStr.charAt(j))
					break;
			}
			if (j == checkStr.length){ // 表示不符合
				bOk = false;
				break;
			}
		}
	}
	return bOk;
}

// 统计ch字符在str中出现的次数
function countChInStr( ch, str )
{
	var count = 0;
	if( typeof( ch ) == "string" && typeof( str ) == "string" && ch.length > 0 ){
		var i = 0;
		while( true ){
			i = str.indexOf( ch, i );
			if( i >= 0 ){
				i += ch.length;
				count++;
			}else break;
		}
	}
	return count;
}

// 功能：测试一个值是否是制定的数据类型
// 输入：val 要测试的值
//       valtype 要测试的数据类型，字符串类型
//            可取："int","number","char","date","time","datetime"
//       nul 表示是否可以为空，取值true可以为空 or false不可以为空
//       valmin 对于int,number,date是val的最小值，对于char是最短长度，对于日期不考虑
//       valmax 对于int,number,date是val的最大值，对于char是最大长度，对于日期不考虑
//		 ndec 对于number类型，表示小数点后位数
// 输出：逻辑值 true表示yes，false表示no
// 说明：日期只允许yyyy.mm.dd或者yyyy.m.d
// 调用格式： if( fun_isDataType( val, "int", true, 0, 10 )==false ) 不符合
function fun_isDataType( val, valtype, nul, valmin, valmax, ndec )
{
	var debug = true;  // 控制显示对话框信息
	
	if( val == null ){
		if( debug ) alert( "被测试对象是null对象" );
		return false;
	}
	if( typeof( val )!="string" ) val = val + "";  // 转化val为字符串对象

	if( typeof(valtype) != "string" ){
		if( debug ) alert("数据类型参数不是字符串格式");
		return false;
	}else valtype = valtype.toLowerCase();

	if( typeof(nul)=="string" ){
		if( nul.toLowerCase()=="true" ) nul = true;
		else if( nul.toLowerCase()=="false" ) nul = false;
	}
	if( typeof(nul)!="boolean" ){
		if( debug ) alert( "是否允许为空参数的类型不是boolean类型" );
		return false;
	}
	
	// 到此，val,valtype,nul三个参数已经给出，都是非空对象，val只做了空对象判别

	if( val.length==0 ) return nul; //如果被测字符串长度为0直接返回nul的值即可
	
	var i, j, ch;
	var checkOK;
	var allValid = true;
	var allNum = "";
	var decPoints = 0;
	switch( valtype.toLowerCase() )
	{
		case "time":
                      	val = trim( val ); // 去处两端空格
			allValid = checkStrInStr( val, "0123456789:" );
			if (!allValid)	return false;

			var hms = val.split(":");
			if( hms.length == 2 || hms.length == 3 ){
				if( hms[0].length==0 || hms[0].length>2 ) return false;
				if( Number(hms[0])<0 || Number(hms[0])>23 ) return false;
				if( hms[1].length==0 || hms[1].length>2 ) return false;
				if( Number(hms[1])<0 || Number(hms[1])>59 ) return false;
			}else return false;

			if( hms.length==3 ){
				if( hms[2].length==0 || hms[2].length>2 ) return false;
				if( Number(hms[2])<0 || Number(hms[2])>59 ) return false;
			}
			return true;
			break;
		case "int":
                	val = trim( val ); // 去处两端空格
			allValid = checkStrInStr( val, "0123456789-," );
			if (!allValid)	return false;

			if( isNaN(Number(val)) ) return false;

			if( valmin != null ){
				if( isNaN(Number(valmin)) ){
					if( debug ) alert("在int类型测试中，valmin转化Number类型出现异常，详细：valmin=" + valmin );
					return false;
				}
				if( Number(val) < Number(valmin) ) return false;
			}
			if( valmax != null ){
				if( isNaN(Number(valmax)) ){
					if( debug ) alert("在int类型测试中，valmax转化Number类型出现异常，详细：valmax=" + valmax );
					return false;
				}
				if( Number(val) > Number(valmax) ) return false;
			}
			return (true);
  			break;
		case "number":
            val = trim( val ); // 去处两端空格
			allValid = checkStrInStr( val, "0123456789-,." );
			if (!allValid)	return false;

			if( isNaN(Number(val)) ) return false;

			if( ndec != null ){
				if( typeof( ndec )!="number" ) ndec = Number(ndec);
				if( isNaN(ndec) ){
					if( debug ) alert( "在number类型测试中，ndec参数格式不是number类型" );
					return false;
				}
				var i = val.indexOf(".");
				if( i>=0 ){
					if( val.length - i - 1 > ndec ) return false;
				}
			}

			if( valmin != null ){
				if( isNaN(Number(valmin)) ){
					if( debug ) alert("在int类型测试中，valmin转化Number类型出现异常，详细：valmin=" + valmin );
					return false;
				}
				if( Number(val) < Number(valmin) ) return false;
			}
			if( valmax != null ){
				if( isNaN(Number(valmax)) ){
					if( debug ) alert("在int类型测试中，valmax转化Number类型出现异常，详细：valmax=" + valmax );
					return false;
				}
				if( Number(val) > Number(valmax) ) return false;
			}
			return (true);
			break;
		case "char":
			if( valmin != null ){
				if( isNaN(Number(valmin)) ){
					if( debug ) alert("在int类型测试中，valmin转化Number类型出现异常，详细：valmin=" + valmin );
					return false;
				}
				if( fun_GetStrLen(val) < Number(valmin) ) return false;
			}
			if( valmax != null ){
				if( isNaN(Number(valmax)) ){
					if( debug ) alert("在int类型测试中，valmax转化Number类型出现异常，详细：valmax=" + valmax );
					return false;
				}
				if( fun_GetStrLen(val) > Number(valmax) ) return false;
			}
			return true;
			break;
		case "date":
                	val = trim( val ); // 去处两端空格
			allValid = checkStrInStr( val, "0123456789." );
			if (!allValid)	return false;

			var ymn = val.split(".");
			if( ymn.length != 3 ) return false;

			var year = ymn[0], mon = ymn[1], day = ymn[2];
			// 对年月日进行判别
			if( year.length!=4 || Number(year)>2199 || Number(year) < 1900){
				alert("年份输入限制在1900到2199之间");
				return false;
			}
			if( Number(mon)<=0 || Number(mon)>12 || mon.length>2 || mon.length < 1 ) return false;
			if( Number(day)<=0 || Number(day)>31 || day.length>2 || day.length < 1 ) return false;

			try
			{
				var Date1=new Date(Number(year),Number(mon)-1,Number(day));
				if( (Date1.getYear()==Number(year)||Date1.getYear()==(Number(year)%100))&&Date1.getMonth()+1==Number(mon)&&Date1.getDate()==Number(day))
				{
					return true;
				}
				else
				{
					return (false);
				}
			}catch(e)
			{
				return false;
			}
			break;
		case "onlynumber":
			val = trim( val ); // 去处两端空格
			allValid = checkStrInStr( val, "0123456789" );
			if (!allValid)	return false;
			return (true);
			break;
		default:	return false;
	}
	return false;
}

// 功能：测试一个值是否是制定的数据类型，用于onchange事件
// 输入：val 要测试的对象，在调用的地方使用this代替
//       valtype 要测试的数据类型，字符串类型
//            可取："int","number","char","date","time","datetime"
//       nul 表示是否可以为空，取值true可以为空 or false不可以为空
//       valmin 对于int,number,date是val的最小值，对于char是最短长度，对于日期不考虑
//       valmax 对于int,number,date是val的最大值，对于char是最大长度，对于日期不考虑
// 输出：逻辑值 true表示yes，false表示no
// 说明：日期只允许yyyy.mm.dd或者yyyy.m.d
// 调用格式： if( fun_isDataTypeEx( val, "int", true, 0, 10 )==false ) 不符合

function fun_isDataTypeEx( val, valtype, nul, valmin, valmax )
{
	val = val.value;
	var msg = "未知类型";
	if( valtype == null ) { alert( msg ); return false; }
	else valtype = valtype + "";
	if( val==null ) val = ""; else val = val + "";
	var i, j, ch;
	var checkOK;
	var allValid = true;
	var allNum = "";
	var decPoints = 0;
	switch( valtype.toLowerCase() )
	{
		case "int":
			checkOK = "0123456789-,";
			for (i = 0;  i < val.length;  i++)
			{
				ch = val.charAt(i);
				for (j = 0;  j < checkOK.length;  j++)
					if (ch == checkOK.charAt(j))
						break;
				if (j == checkOK.length){ // 表示不符合
					allValid = false;
					break;
				}
				if (ch != ",")	allNum += ch;
			}
			if (!allValid){ msg = "输入一个整数"; break; }
			if( allNum.length == 0 && nul == false ){ msg = "输入一个整数，不能为空"; break; }
//2001.05.06 下一行表示长度为0且可为空时返回为真
			if( allNum.length == 0 && nul == true ) return true;

			if( valmin != null )	if( Number(allNum) < Number(valmin) ){ msg = "最小值不符合要求"; break; }
			if( valmax != null )	if( Number(allNum) > Number(valmax) ){ msg = "最大值不符合要求"; break; }
			return (true);
  			break;
		case "number":
			checkOK = "0123456789-,.";
			for (i = 0;  i < val.length;  i++)
			{
				ch = val.charAt(i);
				for (j = 0;  j < checkOK.length;  j++)
					if (ch == checkOK.charAt(j))
						break;
				if (j == checkOK.length){ // 表示不符合
					allValid = false;
					break;
				}
				if (ch != ",")	allNum += ch;
				if (ch == ".")	decPoints++;
				if ( decPoints > 1 ){ allValid=false; break; }
			}
			if (!allValid){ msg = "输入一个数字"; break; }
			if( allNum.length == 0 && nul == true ) return true;
			if( allNum.length == 0 && nul == false ){ msg = "输入一个整数，不能为空"; break; }

			if( valmin != null )	if( Number(allNum) < Number(valmin) ){ msg = "最小值不符合要求"; break; }
			if( valmax != null )	if( Number(allNum) > Number(valmax) ){ msg = "最大值不符合要求"; break; }
			return (true);
			break;
		case "char":
			if( val.length == 0 && nul == true ) return true;
			if( val.length == 0 && nul == false ){ msg = "不能为空"; break; }
			if( valmin != null )	if( fun_GetStrLen(val) < Number(valmin) ){ msg = "最小长度不符合要求"; break; }
			if( valmax != null )	if( fun_GetStrLen(val) > Number(valmax) ){ msg = "最大长度不符合要求"; break; }
			return true;
			break;
		case "date":
			checkOK = "0123456789.";
			var year="", mon="", day="";
			if( val.length == 0 && nul == true ) return true;
			for (i = 0;  i < val.length;  i++)
			{
				ch = val.charAt(i);
				for (j = 0;  j < checkOK.length;  j++)
					if (ch == checkOK.charAt(j))
						break;
				if (j == checkOK.length){ // 表示不符合
					allValid = false;
					break;
				}

				if (ch == "."){
					allNum += "/";
					decPoints++;
				}else{
					allNum += ch;
					if( decPoints == 0 ) year += ch;
					else if( decPoints == 1 ) mon += ch;
						else if( decPoints == 2 ) day += ch;
							else{ msg = "日期不符合要求"; allValid=false; break; }
				}
			}
			if ( decPoints != 2 ){ msg = "日期不符合要求"; break; }
			if (!allValid){ msg = "日期不符合要求"; break; }
			// 对年月日进行判别
			if( year.length!=4 ){ msg = "日期不符合要求"; break; }
			if( Number(mon)>12 || mon.length>2 || mon.length < 1 ){ msg = "日期不符合要求"; break; }
			if( Number(day)>31 || day.length>2 || day.length < 1 ){ msg = "日期不符合要求"; break; }
			if( allNum.length == 0 && nul == false ){ msg = "日期不符合要求"; break; }
			try
			{
				var Date1=new Date(Number(year),Number(mon)-1,Number(day));
				if( (Date1.getYear()==Number(year)||Date1.getYear()==Number(year)%100)&&Date1.getMonth()+1==Number(mon)&&Date1.getDate()==Number(day))
				{
					return true;
				}
				else
				{
					alert( msg );
					return (false);
				}
			}catch(Exception)
			{
				return false;
			}
			break;
	    default:	
	    	break;
	}
	alert( msg );
	return false;
}

// 返回大写星期
function fun_GetDay( n )
{
	var str="星期";
	switch( Number(n) )
	{
		case 0: str += "一"; break;
		case 1: str += "二"; break;
		case 2: str += "三"; break;
		case 3: str += "四"; break;
		case 4: str += "五"; break;
		case 5: str += "六"; break;
		case 6: str += "日"; break;
		default: str = ""; break;
	}
	return str;
}

// 获取年.月.日
function fun_GetDate()
{
	var d=new Date();
	return d.getYear() + "." + (d.getMonth()+1) + "." + (d.getDate()+1);
}

// 功能：日期串yyyy.m.d与yyyy/m/d之间的互相转化
// 输入：strDate 日期串，flag 标志，为true表示yyyy.m.d->yyyy-m-d，为false表示yyyy-m-d->yyyy.m.d
// 输出：日期串
// 说明：这里不做错误判别，假设格式正确
function fun_FormatDate( strDate,flag)
{
	var str="", i;
	if( typeof(strDate)!="string" ) strDate+="";

	for( i=0; i<strDate.length; i++ )
	{
		if( flag == null ){
			// yyyy/m/d -> yyyy.m.d
			if( strDate.charAt(i)=="/" ){	str += "."; continue; }
			// yyyy-m-d -> yyyy.m.d
			if( strDate.charAt(i)=="-" ){	str += "."; continue; }
		} else if( flag==true ){
			// yyyy.m.d -> yyyy-m-d
			if( strDate.charAt(i)=="." ){	str += "-"; continue; }
		}else{
			// yyyy-m-d -> yyyy.m.d
			if( strDate.charAt(i)=="-" ){	str += "."; continue; }
		}
		str += strDate.charAt(i);
	}
	return str;
}
/*****************************************************************************
* md5.js
*
* A JavaScript implementation of the RSA Data Security, Inc. MD5
* Message-Digest Algorithm.
*
* Copyright (C) Paul Johnston 1999. Distributed under the LGPL.
*****************************************************************************/

/* convert integer to hex string */
function hex(i)
{
var sHex = "0123456789ABCDEF";
h = "";
for(j = 0; j <= 3; j++)
{
h += sHex.charAt((i >> (j * 8 + 4)) & 0x0F) +
sHex.charAt((i >> (j * 8)) & 0x0F);
}
return h;
}

/* add, handling overflows correctly */
function add(x, y)
{
return ((x&0x7FFFFFFF) + (y&0x7FFFFFFF)) ^ (x&0x80000000) ^ (y&0x80000000);
}

/* MD5 rounds functions */
function R1(A, B, C, D, X, S, T)
{
q = add(add(A, (B & C) | (~B & D)), add(X, T));
return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R2(A, B, C, D, X, S, T)
{
q = add(add(A, (B & D) | (C & ~D)), add(X, T));
return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R3(A, B, C, D, X, S, T)
{
q = add(add(A, B ^ C ^ D), add(X, T));
return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R4(A, B, C, D, X, S, T)
{
q = add(add(A, C ^ (B | ~D)), add(X, T));
return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

/* main entry point */
function calcMD5(sInp) {

/* Calculate length in machine words, including padding */
wLen = (((sInp.length + 8) >> 6) + 1) << 4;
var X = new Array(wLen);
var sAscii = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var sAscii = sAscii + "[]^_`abcdefghijklmnopqrstuvwxyz{|}~";

/* Convert string to array of words */
j = 4;
for (i = 0; (i * 4) < sInp.length; i++)
{
X[i] = 0;
for (j = 0; (j < 4) && ((j + i * 4) < sInp.length); j++)
{
X[i] += (sAscii.indexOf(sInp.charAt((i * 4) + j)) + 32) << (j * 8);
}
}

/* Append padding bits and length */
if (j == 4)
{
X[i++] = 0x80;
}
else
{
X[i - 1] += 0x80 << (j * 8);
}
for(; i < wLen; i++) { X[i] = 0; }
X[wLen - 2] = sInp.length * 8;
//document.write( wLen );
//document.write("<br>");
//for( var aaaa=0; aaaa<wLen; aaaa++ )
//	X[aaaa]=1;// ); document.write("<br>"); }



/* hard-coded initial values */
a = 0x67452301;
b = 0xefcdab89;
c = 0x98badcfe;
d = 0x10325476;

/* Process each 16-word block in turn */
for (i = 0; i < wLen; i += 16) {
aO = a;
bO = b;
cO = c;
dO = d;

a = R1(a, b, c, d, X[i+ 0], 7 , 0xd76aa478);
d = R1(d, a, b, c, X[i+ 1], 12, 0xe8c7b756);
c = R1(c, d, a, b, X[i+ 2], 17, 0x242070db);
b = R1(b, c, d, a, X[i+ 3], 22, 0xc1bdceee);
a = R1(a, b, c, d, X[i+ 4], 7 , 0xf57c0faf);
d = R1(d, a, b, c, X[i+ 5], 12, 0x4787c62a);
c = R1(c, d, a, b, X[i+ 6], 17, 0xa8304613);
b = R1(b, c, d, a, X[i+ 7], 22, 0xfd469501);
a = R1(a, b, c, d, X[i+ 8], 7 , 0x698098d8);
d = R1(d, a, b, c, X[i+ 9], 12, 0x8b44f7af);
c = R1(c, d, a, b, X[i+10], 17, 0xffff5bb1);
b = R1(b, c, d, a, X[i+11], 22, 0x895cd7be);
a = R1(a, b, c, d, X[i+12], 7 , 0x6b901122);
d = R1(d, a, b, c, X[i+13], 12, 0xfd987193);
c = R1(c, d, a, b, X[i+14], 17, 0xa679438e);
b = R1(b, c, d, a, X[i+15], 22, 0x49b40821);

a = R2(a, b, c, d, X[i+ 1], 5 , 0xf61e2562);
d = R2(d, a, b, c, X[i+ 6], 9 , 0xc040b340);
c = R2(c, d, a, b, X[i+11], 14, 0x265e5a51);
b = R2(b, c, d, a, X[i+ 0], 20, 0xe9b6c7aa);
a = R2(a, b, c, d, X[i+ 5], 5 , 0xd62f105d);
d = R2(d, a, b, c, X[i+10], 9 , 0x2441453);
c = R2(c, d, a, b, X[i+15], 14, 0xd8a1e681);
b = R2(b, c, d, a, X[i+ 4], 20, 0xe7d3fbc8);
a = R2(a, b, c, d, X[i+ 9], 5 , 0x21e1cde6);
d = R2(d, a, b, c, X[i+14], 9 , 0xc33707d6);
c = R2(c, d, a, b, X[i+ 3], 14, 0xf4d50d87);
b = R2(b, c, d, a, X[i+ 8], 20, 0x455a14ed);
a = R2(a, b, c, d, X[i+13], 5 , 0xa9e3e905);
d = R2(d, a, b, c, X[i+ 2], 9 , 0xfcefa3f8);
c = R2(c, d, a, b, X[i+ 7], 14, 0x676f02d9);
b = R2(b, c, d, a, X[i+12], 20, 0x8d2a4c8a);

a = R3(a, b, c, d, X[i+ 5], 4 , 0xfffa3942);
d = R3(d, a, b, c, X[i+ 8], 11, 0x8771f681);
c = R3(c, d, a, b, X[i+11], 16, 0x6d9d6122);
b = R3(b, c, d, a, X[i+14], 23, 0xfde5380c);
a = R3(a, b, c, d, X[i+ 1], 4 , 0xa4beea44);
d = R3(d, a, b, c, X[i+ 4], 11, 0x4bdecfa9);
c = R3(c, d, a, b, X[i+ 7], 16, 0xf6bb4b60);
b = R3(b, c, d, a, X[i+10], 23, 0xbebfbc70);
a = R3(a, b, c, d, X[i+13], 4 , 0x289b7ec6);
d = R3(d, a, b, c, X[i+ 0], 11, 0xeaa127fa);
c = R3(c, d, a, b, X[i+ 3], 16, 0xd4ef3085);
b = R3(b, c, d, a, X[i+ 6], 23, 0x4881d05);
a = R3(a, b, c, d, X[i+ 9], 4 , 0xd9d4d039);
d = R3(d, a, b, c, X[i+12], 11, 0xe6db99e5);
c = R3(c, d, a, b, X[i+15], 16, 0x1fa27cf8);
b = R3(b, c, d, a, X[i+ 2], 23, 0xc4ac5665);

a = R4(a, b, c, d, X[i+ 0], 6 , 0xf4292244);
d = R4(d, a, b, c, X[i+ 7], 10, 0x432aff97);
c = R4(c, d, a, b, X[i+14], 15, 0xab9423a7);
b = R4(b, c, d, a, X[i+ 5], 21, 0xfc93a039);
a = R4(a, b, c, d, X[i+12], 6 , 0x655b59c3);
d = R4(d, a, b, c, X[i+ 3], 10, 0x8f0ccc92);
c = R4(c, d, a, b, X[i+10], 15, 0xffeff47d);
b = R4(b, c, d, a, X[i+ 1], 21, 0x85845dd1);
a = R4(a, b, c, d, X[i+ 8], 6 , 0x6fa87e4f);
d = R4(d, a, b, c, X[i+15], 10, 0xfe2ce6e0);
c = R4(c, d, a, b, X[i+ 6], 15, 0xa3014314);
b = R4(b, c, d, a, X[i+13], 21, 0x4e0811a1);
a = R4(a, b, c, d, X[i+ 4], 6 , 0xf7537e82);
d = R4(d, a, b, c, X[i+11], 10, 0xbd3af235);
c = R4(c, d, a, b, X[i+ 2], 15, 0x2ad7d2bb);
b = R4(b, c, d, a, X[i+ 9], 21, 0xeb86d391);

a = add(a, aO);
b = add(b, bO);
c = add(c, cO);
d = add(d, dO);
}
return hex(a) + hex(b) + hex(c) + hex(d);
}

function GoPidWindow(varnamestr)
{
  var url = "/cmis20/teachermanage/t_idlist.jsp?varnamestr="+varnamestr;
     var hWnd = window.open(url,"GoPidWindow","top=0,left=0,width=300,height=400,resizable=yes,scrollbars=yes");
  if ((document.window != null) && (!hWnd.opener))
   hWnd.opener = document.window;
  hWnd.focus();
}

// 判断字符串是否是数字串
function isNumber(s)
{
  for (i = 0; i < s.length; i++)
    if ((s.charAt(i) < '0') || (s.charAt(i) > '9'))
      return false;
  return true;
}

function checkNumber(input)
{
  num = input.value;
  if (!isNumber(num))
  {
//    alert (num + "中有非数字字符。");
    alert("请输入合法的正整数字符，如：10、999");
    input.focus();
    input.select();

    return false;
  }
  else
    return true;
}

// 判断字符串是否是正整数
function isInteger(s)
{
  for (i = 0; i < s.length; i++)
    if ((s.charAt(i) < '0') || (s.charAt(i) > '9'))
    {
      if (!((i == 0) && (s.charAt(i) == "-")))
        return false;
    }
  return true;
}

function checkInteger(input)
{
  num = input.value;
  if (!isInteger(num))
  {
//    alert (num + "中有非法字符。");
    alert("请输入合法的整数字符，如：10、-999");
    input.focus();
    input.select();

    return false;
  }
  else
    return true;
}

// 判断字符串是否是浮点数串
function isFloat(s)
{
  var periodCount = 0;
  for (i = 0; i < s.length; i++)
  {
    if (((s.charAt(i) < '0') || (s.charAt(i) > '9')) && (s.charAt(i) != "."))
      return false;
    else
    {
      if (s.charAt(i) == ".")
      {
        periodCount++;
        if (periodCount > 1)
          return false;
      }
    }
  }
  return true;
}

function checkFloat(input)
{
  num = input.value;
  if (!isFloat(num))
  {
//    alert (num + " 数据格式不正确! ");
    alert("请输入合法的浮点数字符，如：10.08");
    input.focus();
    input.select();

    return false;
  }
  else
    return true;
}

// 判断字符串是否是数字串或数字查询串
// 注: '%'和'_'是通配符, 其中: '%': 匹配0-多个字符; '_': 匹配单个字符.
function isNumberQueryString(input)
{
  var s = input.value;
  for (i = 0; i < s.length; i++)
    if (((s.charAt(i) < '0') || (s.charAt(i) > '9')) && (s.charAt(i) != '%') && (s.charAt(i) != '_'))
    {
      alert (s + " 中有非'0'-'9'、'%'(匹配0-多个字符)和'_'(匹配单个字符)的字符！");
      input.focus();
      return false;
    }
  return true;
}

// 判断输入是否是规定的日期格式：YYYY.MM.DD
function checkDate(input)
{
	var b = fun_isDataType( input.value, "date", true );
	if( !b ) alert("请输入正确的日期，如2003.01.01");
	return b;
	// 下面的代码不要了
  var dateStr = trim(input.value);
  if (dateStr == "")
  {
    alert("请输入日期！");
    input.focus();
    return false;
  }
  else
  {
    var dateFormatError = false;
    var year, month, day;
    var indexNo = dateStr.indexOf(".");
    if (indexNo == 4)
    {
      yearStr = dateStr.substring(0, indexNo);
      dateStr = dateStr.substring(indexNo + 1);
      if (!isNumber(yearStr))
        dateFormatError = true;
      else
      {
        year = parseFloat(yearStr);
        if ((year < 1970) || (year > 2050))
          dateFormatError = true;
      }

      indexNo = dateStr.indexOf(".");
      if (indexNo == 2)
      {
        monthStr = dateStr.substring(0, indexNo);
        dayStr = dateStr.substring(indexNo + 1);
        if (!isNumber(monthStr))
          dateFormatError = true;
        else
        {
          month = parseFloat(monthStr);
          if ((month < 1) || (month > 12))
            dateFormatError = true;
        }

        if ((dayStr.length < 2) || (!isNumber(dayStr)))
          dateFormatError = true;
        else
        {
          day = parseFloat(dayStr);
          if ((day < 1) || (day > 31))
            dateFormatError = true;
          else
          {
            switch (month)
            {
            case 2:
              if ((day > 28) && (year % 4 != 0))
                dateFormatError = true;
              break;
            case 4:
            case 6:
            case 9:
            case 11:
              if (day == 31)
                dateFormatError = true;
              break;
            }// switch
          }
        }
      }
      else
        dateFormatError = true;
    }
    else
      dateFormatError = true;

    if (dateFormatError)
    {
//    alert("日期格式错误！正确格式：年-月-日，如：2001-08-01");
      alert("请输入合法的日期型字符，如：2003.08.08");
      input.focus();
    }
    return !dateFormatError;
  }
}

// 判断字符串是否是规定的日期格式：YYYY.MM.DD
// 返回值：
//     1:正确
//     0:字符串为空
//    -1:输入格式不正确
/*
function isDate(dateStr)
{
  dateStr = trim(dateStr);
  if (dateStr == "")
  {
    return 0;
  }
  else
  {
    var dateFormatError = false;
    var year, month, day;
    var indexNo = dateStr.indexOf(".");
    if (indexNo == 4)
    {
      yearStr = dateStr.substring(0, indexNo);
      dateStr = dateStr.substring(indexNo + 1);
      if (!isNumber(yearStr))
        dateFormatError = true;
      else
      {
        year = parseFloat(yearStr);
        if ((year < 1970) || (year > 2050))
          dateFormatError = true;
      }

      indexNo = dateStr.indexOf(".");
      if (indexNo == 2)
      {
        monthStr = dateStr.substring(0, indexNo);
        dayStr = dateStr.substring(indexNo + 1);
        if (!isNumber(monthStr))
          dateFormatError = true;
        else
        {
          month = parseFloat(monthStr);
          if ((month < 1) || (month > 12))
            dateFormatError = true;
        }

        if ((dayStr.length < 2) || (!isNumber(dayStr)))
          dateFormatError = true;
        else
        {
          day = parseFloat(dayStr);
          if ((day < 1) || (day > 31))
            dateFormatError = true;
          else
          {
            switch (month)
            {
            case 2:
              if ((day > 28) && (year % 4 != 0))
                dateFormatError = true;
              break;
            case 4:
            case 6:
            case 9:
            case 11:
              if (day == 31)
                dateFormatError = true;
              break;
            }// switch
          }
        }
      }
      else
        dateFormatError = true;
    }
    else
      dateFormatError = true;

    if (dateFormatError)
    {
      return -1;
    }
  }

  return 1;
}
*/
// 判断输入是否是规定的日期格式：MM-DD
function checkMMDD(input)
{
  var dateStr = trim(input.value);
  if (dateStr == "")
  {
    alert("请输入日期！");
    input.focus();
    return false;
  }
  else
  {
    var dateFormatError = false;
    var year, month, day;
    var indexNo = dateStr.indexOf("-");
    if (indexNo == 2)
    {
      monthStr = dateStr.substring(0, indexNo);
      dayStr = dateStr.substring(indexNo + 1);
      if (!isNumber(monthStr))
        dateFormatError = true;
      else
      {
        month = parseFloat(monthStr);
        if ((month < 1) || (month > 12))
          dateFormatError = true;
      }

      if (!isNumber(dayStr))
        dateFormatError = true;
      else
      {
        day = parseFloat(dayStr);
        if ((day < 1) || (day > 31))
          dateFormatError = true;
        else
        {
          switch (month)
          {
          case 2:
            if ((day > 28) && (year % 4 != 0))
              dateFormatError = true;
            break;
          case 4:
          case 6:
          case 9:
          case 11:
            if (day == 31)
              dateFormatError = true;
            break;
          }// switch
        }
      }
    }
    else
      dateFormatError = true;

    if (dateFormatError)
    {
//      alert("日期格式错误！正确格式：月-日，如：08-01");
      alert("请输入合法的日期型字符，如：08-01");
      input.focus();
    }

    return !dateFormatError;
  }
}

// 判断输入是否是规定的时间格式：HH:MI:SS
//SS可以不输入，输入会检查有效性
function checkTime(input)
{
  var timeStr = trim(input.value);
  if (timeStr == "")
  {
    alert("请输入时间！");
    input.focus();
    return false;
  }
  else
  {
    var timeFormatError = false;
    var indexNo = timeStr.indexOf(":");
    if (indexNo > 0)
    {
      hourStr = timeStr.substring(0, indexNo);
      timeStr = timeStr.substring(indexNo + 1);
      if (!isNumber(hourStr))
        timeFormatError = true;
      else
      {
        var hour = parseFloat(hourStr);
        if ((hour < 0) || (hour > 23))
          timeFormatError = true;
      }

      indexNo = timeStr.indexOf(":");
      if (indexNo > 0)
      {
        minuteStr = timeStr.substring(0, indexNo);
        secondStr = timeStr.substring(indexNo + 1);
        if (!isNumber(minuteStr))
          timeFormatError = true;
        else
        {
          var minute = parseFloat(minuteStr);
          if ((minute < 0) || (minute > 59))
            timeFormatError = true;
        }

        if (!isNumber(secondStr))
          timeFormatError = true;
        else
        {
          var second = parseFloat(secondStr);
          if ((second < 0) || (second > 59))
            timeFormatError = true;
        }
      }
      //else
      //  timeFormatError = true;
    }
    else
      timeFormatError = true;

    if (timeFormatError)
    {
//      alert("时间格式错误！正确格式：时:分:秒，如：22:00:00");
      alert("请输入合法的时间型字符，如：22:02:18");
      input.focus();
    }

    return !timeFormatError;
  }
}
/// 检查端口号输入是否合法
function checkPortNo(input)
{
  portNo = trim(input.value);
  if (portNo == "")
    return true;

  if (!isNumber(portNo))
  {
//    alert (portNo + "中有非数字字符！");
    alert("请输入合法的端口号，取值范围为1-65535!");
    input.focus();
    input.select();

    return false;
  }
  if ((parseInt(portNo) <= 0) || (parseInt(portNo) > 65535))
  {
    alert("请输入合法的端口号，取值范围为1-65535!");
    input.focus();
    input.select();

    return false;
  }

  return true;
}

// 检查IP地址输入是否合法
function checkIPAddr(input)
{
  fieldNum = 1;
  formatError = false;
  IPAddr = trim(input.value);
  if (IPAddr == "")
    return true;

  while ((IPAddr.length > 0) && !formatError)
  {
    indexNo = IPAddr.indexOf(".");
    if (indexNo > 0)
    {
      fieldNum++;
      if (fieldNum > 4)
        formatError = true;

      field = IPAddr.substring(0, indexNo);
      IPAddr = IPAddr.substring(indexNo + 1);
      if (!isNumber(field))
        formatError = true;
      if ((parseInt(field) < 0) || (parseInt(field) >= 255))
        formatError = true;
    }
    else
    {
      if (fieldNum < 4)
        formatError = true;
      else
      {
        if (!isNumber(IPAddr))
          formatError = true;
      if ((parseInt(IPAddr) < 0) || (parseInt(IPAddr) >= 255))
        formatError = true;
      }
      IPAddr = "";
    }
  }// while
  if (fieldNum != 4)
    formatError = true;

  if (formatError)
  {
//    alert ("IP地址格式应为：xxx.xxx.xxx.xxx，其中xxx为0-254的数。");
    alert("请输入合法的IP地址，如 202.11.156.233");
    input.focus();
    input.select();

    return false;
  }
  else
    return true;
}

// 检查email地址输入是否合法
function checkEmailAddrInput(input)
{
  var emailAddr = trim(input.value);
  if (emailAddr == "")
    return false;

  var pos, formatError = false;
  pos = emailAddr.indexOf("@");
  if (pos > 0)
  {
    emailAddr = emailAddr.substring(pos + 1);
    pos = emailAddr.indexOf("@");
    if (pos >= 0)
      formatError = true;
    else
    {
      pos = emailAddr.indexOf(".");
      if (pos < 0)
        formatError = true;
      if (emailAddr.charAt(emailAddr.length - 1) == '.')
        formatError = true;
    }
  }
  else
    formatError = true;

  if (formatError)
  {
//    alert("email地址格式错误! \n格式示例：yourname@schoolname.edu.cn。");
   // alert("请输入合法的email地址，如：yourname@sina.com.cn");
    input.focus();
    return false;
  }
  else
    return true;
}
function emailCheck (emailStr)
{
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);
	if (matchArray==null) {
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			return false;
		}
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			return false;
		}
	}
	if (user.match(userPat)==null) {
		return false;
	}
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				return false;
			}
		}
		return true;
	}
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			return false;
		}
	}
	if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) {
		return false;
	}
	if (len<2) {
		return false;
	}
	return true;
}

function checkURL(input)
{
  // resolves 'thisURL' against this.preHREF depending on whetherit's an absolute
  // or relative URL.  if 'testLocal' is set it'll return truefor local (relative) URLs.
  var absoluteArray = new Array("http://", "https://", "mailto:","ftp://", "telnet:", "news:", "gopher:", "nntp:", "javascript:","file:");
  var tempString = "", i;
  for(i = 0; i < absoluteArray.length; i++)
  {
    if(input.indexOf(absoluteArray[i]) == 0)
    {
       tempString = input;
       break;
    }
  }
  if(tempString=="")
  {
//    alert("链接地址格式错误！正确的格式如：http://www.sina.com.cn");
    alert("请输入合法的链接地址，如：http://www.sina.com.cn");
    return false;
  }
  else
  {
    return true;
  }
}
