/*----------------------------------------------------------------------------------------\
| 对象描述：JS检查函数
| 版权：浦东中软
| 开发人：范大谦
| 版本：1.0
| 完成时间：2009-4-14
| 参考技术：
\----------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------\
| 版本：
| 修改人：	修改时间：
| 修改内容：
\----------------------------------------------------------------------------------------*/
//对整数的合法性检查
function integerCheck(aStr,aName,aLen){
    var retFlag=true;
	var len=parseInt(aLen,10);
	var srcLen=getStrLength(aStr); 
	if(srcLen>aLen){
	    alert(aName+"的长度超过规定的限制("+len+"位)...");
		retFlag=false;
	}else if (!isInteger(aStr)){
		alert("请输入正确的"+aName+"(整数)...");
	    retFlag=false;
	}
	return retFlag;
}
//对字符串的长度合法性检查
function strLenCheck(aStr,aName,aLen){
    var retFlag=true;
	var len=parseInt(aLen,10);
	var srcLen=getStrLength(aStr); 
	if(srcLen>len){
	  alert(aName+"的长度超过规定的限制("+len+"个字符或"+len/2+"个汉字,)...");
	  retFlag=false;
	}
	return retFlag;
}
//对实数的合法性检查（参数： aPre 未用）
function isReal(aStr,aName,aLen,aDot,aPre){
    var retFlag=true;
	var len=parseInt(aLen,10);
	var srcLen=getStrLength(aStr); 
	if(isNaN(trim(aStr))){
	  alert(aName+"不是合法的实数...");
	  retFlag=false;
	  return retFlag;
	}else{
		  if (srcLen>len){
			alert(aName+"的精度有误(整数部分"+aDot+"位,小数部分2位)...");
			retFlag=false;
			return retFlag;
		  }
	      //检验精度
	      if(!fetchPotPostfix(aStr,"2")){
	        alert(aName+"的精度有误(整数部分"+aDot+"位,小数部分2位)...");
		    retFlag=false;
			return retFlag;
	      }
	      var newDot=fetchPotPre(aStr);
	      if(newDot>parseInt(aDot,10)){
		    alert(aName+"的精度有误(整数部分"+aDot+"位,小数部分2位)...");
		    retFlag=false;
			return retFlag;
		  }else{
			  if(isNumeric(trim(aStr)) && !chineseCheck(trim(aStr))){		   
				   if (srcLen>len){
					  alert(aName+"的精度有误(整数部分"+aDot+"位,小数部分2位)...");
					  retFlag=false;
					  return retFlag;
				   }
			  }else{
				alert(aName+"不是合法的实数...");
				retFlag=false;
				return retFlag;
			  }
		 }
    }
	return retFlag;
}
//对实数的合法性检查（参数： aPre 未用）
function isRealOne(aStr,aName,aLen,aDot,aPre){
    var retFlag=true;
	var len=parseInt(aLen,10);
	var srcLen=getStrLength(aStr); 
	if(isNaN(trim(aStr))){
	  alert(aName+"不是合法的实数...");
	  retFlag=false;
	  return retFlag;
	}else{
		  if (srcLen>len){
			alert(aName+"的精度有误(整数部分"+aDot+"位,小数部分1位)...");
			retFlag=false;
			return retFlag;
		  }
	      //检验精度
	      if(!fetchPotPostfix(aStr,"1")){
	        alert(aName+"的精度有误(整数部分"+aDot+"位,小数部分1位)...");
		    retFlag=false;
			return retFlag;
	      }
	      var newDot=fetchPotPre(aStr);
	      if(newDot>parseInt(aDot,10)){
		    alert(aName+"的精度有误(整数部分"+aDot+"位,小数部分1位)...");
		    retFlag=false;
			return retFlag;
		  }else{
			  if(isNumeric(trim(aStr)) && !chineseCheck(trim(aStr))){		   
				   if (srcLen>len){
					  alert(aName+"的精度有误(整数部分"+aDot+"位,小数部分1位)...");
					  retFlag=false;
					  return retFlag;
				   }
			  }else{
				alert(aName+"不是合法的实数...");
				retFlag=false;
				return retFlag;
			  }
		 }
    }
	return retFlag;
}
//对中文的合法性检查
function chineseCheck(aStr){
    var retFlag=true;	
	var j=0;
	var ch="";
	for (var i=0;i<aStr.length;i++){
	  ch=aStr.charAt(i);
	  if (!isChinese(ch)){
		  j++;
	  }
	}
	if(j>0){
	  retFlag=false;
	}
	return retFlag;
}
//是否是整数        
function isInteger(str){    
    reg = /^\d*$/;
    if(reg.test(str))
        return true;
    else     
        return false;
}

//是否是实数
function isNumeric(str){    
    reg = /^\d*.?\d*$/;
    if(reg.test(str))
        return true;
    else     
        return false;
}
//获取字符串的长度，半角为1 全角为2
function getStrLength(str){
    str = trim(str);
    var len = 0;
    var tmp;
    if(isNull(str)){
        return len;
    }   
    regA = /^[\u4E00-\u9FA5\uFF00-\uFFFF]$/;
    var aTT=new Array();
    aTT=str.split("\n");//把换行符转换为3个字符
    for(var i=0;i<str.length;i++)
    {
        tmp = str.substring(i,i+1);
        if(regA.test(tmp)){
            len +=2;
        }else
            len +=1;
    }
    if(aTT.length>0){
      len=len+(aTT.length-1)*3;
    }
    return len;
}
//对取小数点前位数
function fetchPotPre(aStr){
    var retFlag=0;	
	var j=0;
	var ch="";
	var haveDot=false;
	aStr=trim(aStr);
	if (aStr.length==0) return 0;
	//如果没有小数点
    for (var i=0;i<aStr.length;i++){
	  ch=aStr.charAt(i);
	  if (ch=="."){
		haveDot=true;
	  }	
    }
    if(!haveDot){
     retFlag=aStr.length;//如果没有小数点返回该串长度
    }else{
	 retFlag=aStr.indexOf(".");//有小数点是返回位置
	}
	//alert(retFlag);
	return retFlag;
}
//检查实数精度是否合法
function fetchPotPostfix(aStr,tailLen){
    aStr=trim(aStr);
    var retFlag=true;
    var aTT=parseInt(fetchPotPre(aStr),10);
    var aLen=aStr.length-aTT-1;
    var aSS=parseInt(tailLen,10);
    if(aLen>aSS){
       retFlag=false;
    }else{
       retFlag=true;
    }
    return retFlag;
}
//检查实数精度是否合法
function checktailNum(aStr,tailNum){

	var j=0;
	var ch="";
	var a=0;
	var str=trim(aStr);
	var aLen=parseInt(tailNum,10);
	if (str.length==0) return false;
    for (var i=0;i<str.length;i++){
  	ch=str.charAt(i);
    if (ch=="."){
    	j++;
    }
	if (j>1){
    	a++;
    }
  }
  if(a>aLen)
  	return false;
  else
  	return true;
}
//删除一字符串前后连续"0"字符
function removePrefixZeroForInt(str){
     var aRET=str+"";
	 if(!isNull(aRET)){
		 aRET=aRET.replace(/^["0"]*/g,"");
	 }
     return aRET;
}
//删除一字符串前后连续的字符
function delPrefixSuffixOfChar(str,prefix,suffix){
	 var aTT="",aRET="";
	 if(!isNull(str) && !isNull(prefix) && isNull(suffix)){
	      var aPP=str.charAt(0);
	      if("0"!=aPP){
	          aRET=str;
	    	  return aRET;
	      }else{
			  for (var i=0;i < str.length;i++){
				  var ch=str.charAt(i);
				  if (ch==prefix){
				     aTT=str.substring(i+1);
				  }else{
				       aRET=aTT;
				       return aRET;
			      }
			  }
		 } 
	 }else if(!isNull(str) && isNull(prefix) && !isNull(suffix)){
          var aPP=str.charAt(0);
          if("0"!=aPP){
             aRET=str;
	         return aRET;
	      }else{
		      for (var i=str.length-1;i >= 0 ;i--){
				  var ch=str.charAt(i);
				  if (ch==suffix){
				     aTT=str.substring(0,i);
				  }else{
				      aRET=aTT;
				      return aRET;
			      }
			  }
		  }
	 }else if(!isNull(str) && !isNull(prefix) && !isNull(suffix)){
          var aPP=str.charAt(0);
          if("0"!=aPP){
             aRET=str;
     	     return aRET;
	      }else{
		      for (var i=0;i < str.length;i++){
				  var ch=str.charAt(i);
				  if (ch==prefix){
				     aTT=str.substring(i+1);
				  }else{
				        var aSS="";
				        for (var i=aTT.length-1;i >= 0 ;i--){
						  var ch=aTT.charAt(i);
						  if (ch==suffix){
						     aSS=aTT.substring(0,i);
						  }else{
						     aRET=aSS;
						     return aRET;
					      }
					  }
			      }
			  }
		 } 
     }
     return aRET;
}
//比较两个日期的大小2006-09-08 12:10:20
function compareDateAndTime(aKS,aJS){
   var aKSRQ=aKS.substring(0,10);
   var aJSRQ=aJS.substring(0,10);
   var retValA=compareTwoForDate(aKSRQ,aJSRQ);
   if("1"==retValA){// 日期不等时,继续比较
      return "1";//小于
   }else if("2"==retValA){
      var aKK=aKS.substring(10,19);
      var aJJ=aJS.substring(10,19);
      var retValB=compareTwoForTime(aKK,aJJ);
      return retValB;//(小于,等于,大于)
   }else if("3"==retValA){ 
      return "3";//大于
   }
}
//比较两个日期的大小2006-09-08
function compareTwoForDate(aKSRQ,aJSRQ)
{
  if(aKSRQ<aJSRQ){
    return "1";//小于
  }else if(aKSRQ==aJSRQ){
    return "2";//等于
  }else if(aKSRQ>aJSRQ){
    return "3";//大于
  }
}
//比较两个时间的大小，格式为hh24:mi:ss,也可只包含其中的一部分
function compareTwoForTime(kssjField,jssjField)
{
	var kssj=trim(kssjField);
	var jssj=trim(jssjField);
	if(isNull(kssj) || isNull(jssj)){
		return "0";
	}
	var kssjArr=kssj.split(":");//放到数组里
	var jssjArr=jssj.split(":");//放到数组里
	if(parseInt(kssjArr[0],10)>parseInt(jssjArr[0],10)){
	   return "3";//大于				
	}else if(parseInt(kssjArr[0],10)==parseInt(jssjArr[0],10)){
          if(parseInt(kssjArr[1],10)>parseInt(jssjArr[1],10)){
				return "3";//大于		
		  }else if(parseInt(kssjArr[1],10)==parseInt(jssjArr[1],10)){
				if(parseInt(kssjArr[2],10)>parseInt(jssjArr[2],10)){
				    return "3";//大于				
				}else if(parseInt(kssjArr[2],10)==parseInt(jssjArr[2],10)){
					return "2";//等于
				}else if(parseInt(kssjArr[2],10)<parseInt(jssjArr[2],10)){	
				 	return "1";//小于
			    }	
		  }else if(parseInt(kssjArr[1],10)<parseInt(jssjArr[1],10)){
				return "1";//大于				
		  }
	
	}else if(parseInt(kssjArr[0],10)<parseInt(jssjArr[0],10)){
          return "1";//大于				
	}
}
//ltrim(str)函数
function ltrim(str){
	var att=str+"";
	if (att.length==0){
    	return att;
	}
	var i=0;
	
	while ((i<att.length)&&(att.substring(i,i+1)==" " )) i++;
	return att.substring(i,att.length);
}
//rtrim(instr)函数
 function rtrim(instr){
    instr=instr+"";
	var last_space;
	var ret;
	last_space = instr.length;
	while ((instr.charAt(last_space - 1 ) == " ")&&(last_space > 0)) {
	  last_space --;
	}

	if (last_space==0){
		return ""
	}else{
		return instr.substring( 0, last_space );
	}
 }
//是否是合格的数字金额,小数点后两位
function isMoney(str){
    reg = /^\d{1,3}(?:((,\d{3})*)|(\d*))(.\d{0,2})?$/;
    if(reg.test(str)){
        return true;
    }
    else
        return false;
}
  
//是否是字母
function isLetter(str){    
    reg = /^[a-zA-Z]*$/;
    if(reg.test(str))
        return true;
    else     
        return false;
}
//是否是年
function isYear(str){
    var alen=getStrLength(str);
    if(alen!=4){
      return false;
    }  
    if(isInteger(str)){
	  var aStr=parseInt(str,10);
      if(aStr<9000 && aStr>=1000){
	   return true
	  }else{
	    return false;
	  }
	}else{
	   return false;
	}
}
//是否是小时
function isHour(str){ 
    if(isInteger(str)){
	  var aStr=parseInt(str,10);
      if(aStr<24 && aStr>=0){
	   return true
	  }else{
	    return false;
	  }
	}else{
	   return false;
	}
}
//是否是分钟
function isMinute(str){ 
    if(isInteger(str)){
	  var aStr=parseInt(str,10);
      if(aStr<60 && aStr>=0){
	   return true
	  }else{
	    return false;
	  }
	}else{
	   return false;
	}
}
//是否是秒钟
function isSecond(str){ 
    if(isInteger(str)){
	  var aStr=parseInt(str,10);
      if(aStr<60 && aStr>=0){
	   return true
	  }else{
	    return false;
	  }
	}else{
	   return false;
	}
}
//是否是日期
function isDate(str) {
    
    var rc = true;
    var year,month,day;
    //判断长度是否为10个字符
    var aLen=getStrLength(str);
    if(aLen!=10){
      return false;
    }
    //先判断是否是如下格式的日期：YYYY-MM-DD
    var aTT = str.substring(4,5);
	var aSS = str.substring(7,8);
    if(aTT != "-" || aSS != "-"){
	  return false;
	} 
	//************************************
    reg = /^(\d{4})[-/](\d{2})[-/](\d{2})$/;
    if(!reg.test(str)){
       return false;
    }
    year  = eval(RegExp.$1);
    month = eval(RegExp.$2);
    day   = eval(RegExp.$3);
    
    if(year<1900 || year>2099) 
        rc = false;
    if( (month < 1) || (month > 12) || (day < 1) || (day > 31) )
        return false;

    switch (month) {
    case 1 :
    case 3 :
    case 5 :
    case 7 :
    case 8 :
    case 10:
    case 12:
    	if (day >31)
    		rc = false;
    	break;    
    case 4 :
    case 6 :
    case 9 :
    case 11:
    	if (day >30)
    		rc = false;
    	break;
    case 2 :
	    if ( (year%4 == 0) && (year%100 != 0) || (year%400 == 0) ) {
    		if( day > 29)
        		rc = false;
    	}else {
    		if( day >28)
        		rc = false;
    	}
    	break; 
    default :
        rc = false;
    }
    return rc;
}

//是否是email
function isEmail(str){    
    reg = /^[^@.]*@([^@.]*.){1,2}[^@.]*$/;
    if(reg.test(str))
        return true;
    else     
        return false;
}

//是否是身份证
//其中15位只检查中间日期
function isIdcard(str)
{
    if(str.length !=15 && str.length !=18){return false;}

	var is15=(str.length==15?true:false) ;
	if(!(isDate(formateDate((is15?"19":"")+str.substring(6,(is15?12:14))))))
	{ 
		return false;
	}
	var newID=(is15?str.substring(0,6)+"19"+str.substring(6)+"0":str);
	var court = 0;
	var modStr = -1 ;
	var tempStr = new Array(18);
	for(i=0;i<=17;i++)
	{
		tempStr[i]=newID.substring(i,i+1);
	}	
	
	var strPower = new Array(17);
	strPower[0] = "7";strPower[1] = "9";strPower[2] = "10";strPower[3] = "5";strPower[4] = "8";strPower[5] = "4";
	strPower[6] = "2";strPower[7] = "1";strPower[8] = "6";strPower[9] = "3";strPower[10] = "7";strPower[11] = "9";
	strPower[12] = "10";strPower[13] = "5";strPower[14] = "8";strPower[15] = "4";strPower[16] = "2";
	var verCode = new Array(17);
	verCode[0] = "1";verCode[1] = "0";verCode[2] = "X";verCode[3] = "9";verCode[4] = "8";verCode[5] = "7";
	verCode[6] = "6";verCode[7] = "5";verCode[8] = "4";verCode[9] = "3";verCode[10] = "2";
	var i = 0;
	for(i=0;i<17;i++)
	{
		court += tempStr[i] * strPower[i];
	}
	modStr = court % 11;
	if(is15==true || tempStr[17] == verCode[modStr]) 
	{
		return true;
	}
	else
	{
		return false;
	}

}
//根据年份和月份判断该月有多少天，返回值：该月天数
function aMonthDays(year,month){
    if(!isNull(month)){
	    if(month.length==2){
		    var aTT=month.substring(0,1);
		    if("0"==aTT){//主要处理8月份（因为“08”转化为整型是变为0）
		       month=month.substring(1,2);
		    }
	    } 
    }else{
      return 0;
    }
    var year=parseInt(year,10);
    var month=parseInt(month,10);
    var day=30;
  switch (month) {
    case 1 :
    case 3 :
    case 5 :
    case 7 :
    case 8 :
    case 10:
    case 12:
    	day=31;
    	break;    
    case 4 :
    case 6 :
    case 9 :
    case 11:
    	day = 30;
    	break;
    case 2 :
	    if ( (year%4 == 0) && (year%100 != 0) || (year%400 == 0) ) {
    	   day = 29;
    	}else {
    	   day = 28;
    	}
    	break; 
    default :
        day = 30;
        break; 
    }
    return day;
}

//检查是否为空
function isNull(str){
    //先除去首尾空格
    str=str.replace(/(^\s*)|(\s*$)/g, "");
    /*两种方法:空或长度为零*/
    if(str == null || str.length == 0)
        return true;
    else
        return false;
}
//获取数值的精度
function getPrecision(str){   
    reg = /^\d*.?(\d*)$/;
    if(!reg.test(str))
        return 0;
    var presion = RegExp.$1;
    return presion.length;
}
//除去字符串空格
function trimAll(str){
    return str.replace(/[" "|"　"]+/g, "");
}

//除去字符串左右空格
function trim(str){
    return str.replace(/(^\s*)|(\s*$)/g, "");
}
<!-- --------------------------------------------------------------------------- -->
//格式化日期20040401-->2004-04-01
function formateDate(str)
{
    str = trim(str);
    var year,month,day;
    
    reg = /^(\d{4})[-/]?(\d{2})[-/]?(\d{2})$/;
    if(!reg.test(str))
       return str;
    
    year  = RegExp.$1;
    month = RegExp.$2;
    day   = RegExp.$3;
    
    return year+"-"+month+"-"+day;
}

//去掉日期格式化20040401<--2004-04-01
function unformateDate(str){
	var year,month,day;
	
	reg = /^(\d{4})[-/]?(\d{2})[-/]?(\d{2})$/;
    if(!reg.test(str))
       return str;
    
    year  = RegExp.$1;
    month = RegExp.$2;
    day   = RegExp.$3;
    
    return year+month+day;
}

//对数值形字符增加千分符
function formateKiloNumber(str)
{
    str = trim(str);
    if(isNull(str))
        return "";     						//如果不是为空则返回提示信息
    reg = /^(-?\d*).?(\d*)$/;
    if(!reg.test(str))
       return str + ": error formate";		//如果不是正确格式则返回提示信息
    var str1 = (RegExp.$1 != "") ? (RegExp.$1):"0";
    var str2 = (RegExp.$2 != "") ? (RegExp.$2):"";
   
    var ss = "",tmp = "";
    
    for(var i=str1.length;i>=3;){
       tmp = str1.substring(i-3,i);
       if(tmp != null && i-3>0){
           ss = "," + tmp + ss;
       }else{
           ss = tmp + ss;
       }
       i = i-3;   
    }
    
    ss = str1.substring(0,i)+ss;
    ss = ss + (str2==""?"":".") + str2;   
    return ss;   
}

//去千分符
function unFormateKiloNumber(str)
{
    return str.replace(/[,]/g,"");
}


//字符串或数字比较
function compObj(theFrom,theTo)
{
  //数字
  if (!isNaN(parseFloat(theFrom)) && !isNaN(parseFloat(theTo)))
  {
    if (parseFloat(theFrom) < parseFloat(theTo))
      return -1;
    else
      return 1;
  }
  else
  {
    //字符串
    if (theFrom < theTo)
      return -1;
    else
      return 1;
  }
}

//判断是否中文函数
function isChinese(str){
	var ret=true;
	for(var i=0;i<str.length;i++)
	ret=ret && (str.charCodeAt(i)>=10000);
	return ret;
}

//根据标签明取对象 
function MM_findObj(n, d) 
{
  var p,i,x;  
  if(!d) d=document; 
  if((p=n.indexOf("?"))>0&&parent.frames.length) 
  {
    d=parent.frames[n.substring(p+1)].document; 
    n=n.substring(0,p);
  }
  if(!(x=d[n])&&d.all) x=d.all[n]; 
  for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) 
  	x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) 
  	x=document.getElementById(n); 
  return x;
}
 
 
 