//Function：公用函数：判断非空，判断日期，判断数值，判断字符串长度，身份证号码校验
//FileName: common_check.js
//Example://在提交按钮中加 onclick="return checkNoNull()"
          //在录入框中加 onBlur="return checkDate(this)"
          //在录入框中加 onBlur="return checkNum(this,10,2)"
          //在录入框中加 onBlur="return checkStrLen(this,10,0)"
//Return:   true|false
//Note:  1.判断非空在按钮触发，判断日期和判断数值在输入框触发,
           //判断数值中的第一个参数this表示触发控件本身,第二个参数为数值总长度(不包括小数点),第三个参数为小数点位数,
           //当第三个参数为0时,只能输入最长为第二个参数的整数
         //判断字符串长度，第三个参数为0表该值为第二个参数指定的定长，否则表该值不能超过第二个参数指定的长度
//Author： 曾小平

//判断非空
var checkNumArray=new Array();
function checkNoNull(){
checkNumArray.length=0;
var str="";
var j=100;
var ob=window.document.forms[0];
for (var i=0;i<ob.elements.length;i++){
   var k=ob.elements[i].type;
    if(k=="text" || k=="select-one" || k=="textarea" || k=="password"){//当类型为输入框或下拉框时
    var eachvalue=RTrim(LTrim(ob.elements[i].value));
      if(eachvalue=="" && ob.elements[i].id!="") {//当id不为空时并且值为空
          str=str+ob.elements[i].id+"，";
          if(j>i) j=i;
      }
    }

    if((k=="checkbox" || k=="radio") && ob.elements[i].name.substring(0,11) !="specialNum_")//specialNum为特殊身份证号录入标志
    {//当类型为输入框或下拉框时
	    //alert(ob.elements[i].name)
        var checkFlag=false;
        var checkFlag2=false;
        var elename=ob.elements[i].name;
        for(var m=0;m<checkNumArray.length;m++)
        {
            if(checkNumArray[m]==elename)
            {
                checkFlag2=true;
                break;
            }
        }
        //当前的控件以前没有检测过
        if(checkFlag2==false)
        {
            checkNumArray[m]=elename;
            if(document.all[elename].length==null)
            {
                if(document.all[elename].id=="" || document.all[elename].checked==true)
                {
                    checkFlag=true;
                }
            }else{
                for(var l=0;l<document.all[elename].length;l++)
                {
                    var eachvalue2=document.all[elename][l].checked;
                    //alert(document.all[elename][l].id);
                    if(eachvalue2==true || document.all[elename][l].id=="")
                     {
                        //alert("true!");
                        checkFlag=true;
                        break;
                     }
                }
            }
            if(checkFlag==false)
            {
                //alert("here");
                if(document.all[elename].length==null)
					str=str+document.all[elename].id+"，";
                else
                    str=str+document.all[elename][0].id+"，";
                if(j>i) j=i;
            }
        }
        }

   }
if (str!="")//当所求字符串不为空时证明有必填字段为空
{
    ob.elements[j].focus();
	if(str.indexOf("，")==0){
		return true;
	}
    alert(str+"不能为空！");
    return false;
  }else{
      return true;
  }
}

//判断数值
function checkNum(Obj,s,f)
{

    var thisnum=Obj.value;
    if(thisnum=="") return true;
    var n=s-f;//整数位数
    var i;
    if(isNaN(thisnum)!=true)//当输入为数值
    {
        if(f>0)
        {
            i=thisnum.indexOf(".");
            if(i==-1)//当找不到小数,可以输入整数
            {
                if(thisnum.length>n)
                {
                    Obj.select();
                    alert("输入的 整数位 应小于"+n+"位，请重输！");
                    return false;
                }
                else return true;
            }

            if(i==0 || i==thisnum.length-1)
            {
                Obj.select();
                alert("输入错误,请重输!");
                return false;
            }

            if(i>0)
            {
                var floatnum=thisnum.substr(i+1);//小数部分
                var plusnum=thisnum.length-floatnum.length-1;//整数部分
                if(plusnum>n)
                {
                    Obj.select();
                    alert("输入的整数位应小于或等于"+n+"位，请重输！");
                    return false;
                }
                if (floatnum.length>f)
                {
                    Obj.select();
                    alert("输入的小数位应小于或等于"+f+"位，请重输！");
                    return false;
                }
            }

        }

        if(f==0)
        {
            i=thisnum.indexOf(".");
            if(i!=-1)
            {
                Obj.select();
                alert("只能输入整数，且小于或等于"+n+"位，请重输！");
                return false;
            }

            if(thisnum.length>n)
            {
                Obj.select();
                alert("只能输入整数，且小于或等于"+n+"位，请重输！");
                return false;
            }
        }

        return true;
    }
    else
    {
        Obj.select();
        alert("请输入一个数值！");
        return false;
    }

}

//判断日期
function checkDate(Obj)
{
    var thisdate=RTrim(LTrim(Obj.value));
    var str="格式错误!\n正确的格式如：20030908或者2003-09-08";
    var reg = /^(\d{4})-(\d{2})-(\d{2})$/;//正则表达式
    var reg2 = /^(\d{4})(\d{2})(\d{2})$/;//正则表达式
    var arr = reg.exec(thisdate);
    var arr2 = reg2.exec(thisdate);
    if(thisdate=="") return true;
    if((reg.test(thisdate) || reg2.test(thisdate) ) && RegExp.$2<=12 && RegExp.$3<=31)
        return true;
    else
    {
        alert(str);
        Obj.select();
        return false;
    }
}

//判断字符串长度
function checkStrLen(Obj,strLen,flag)
{
    var str = new String(Obj.value);
    if(str==""){
        return true;
    }
    if (flag==0 && getByte(str) != strLen){
        alert("只能输入"+strLen+"位字符(一个汉字为两位长度)。");
        Obj.select();
        return false;
    }
    if (getByte(str) > strLen)
    {
        alert("输入值长度不能超过"+strLen+"位(一个汉字为两位长度)。");
        Obj.select();
        return false;
    }
}

//检查是否包含中文字符，如果有则提示
function checkChinese(Obj){
  var theStr = new String(Obj.value) ;
  if(theStr==""){
     return true;
  }
  for(var i=0;i<theStr.length;i++){
    if(theStr.substring(i,i+1).charCodeAt(0)>122){
       alert("不能输入汉字！") ;
	   Obj.select();
       return false ;
    }
  }
  return true;
}

//checkNoNull()函数调用，本函数用于对sString字符串进行后空格截除
function RTrim(sString)
{
    var sStr,i,sResult = "",sTemp = "" ;

    // if (sString.length == 0) { return "" ;} // 参数sString是空串

    sStr = sString.split("");
    for (i = sStr.length - 1 ; i >= 0 ; i --)  // 将字符串进行倒序
    {
        sResult = sResult + sStr[i];
    }
    sTemp = LTrim(sResult) ; // 进行字符串前空格截除

    if (sTemp == "") { return "" ; }

    sStr = sTemp.split("");
    sResult = "" ;
    for (i = sStr.length - 1 ; i >= 0 ; i--) // 将经处理后的字符串再进行倒序
    {
        sResult = sResult + sStr[i];
    }
    return sResult ;
}

//checkNoNull()函数调用，本函数用于对sString字符串进行前空格截除
function LTrim(sString)
{
    var sStr,i,iStart,sResult = "";

    sStr = sString.split("");
    iStart = -1 ;
    for (i = 0 ; i < sStr.length ; i++)
    {
        if (sStr[i] != " ")
        {
            iStart = i;
            break;
        }
    }
    if (iStart == -1) { return "" ;}    //表示sString中的所有字符均是空格,则返回空串
    else { return sString.substring(iStart) ;}
}

//得到字符串的字节数，如：getByte("test测试")返回8
function getByte(s)
{
    var intCount = 0;
    for(var i = 0;i < s.length;i ++)
    {
        // Ascii码大于255是双字节的字符
        if(s.charCodeAt(i) > 255)intCount += 2;
        else intCount += 1;
    }
    return intCount;
}

//身份证检查公共方法
function checkCardNo(Obj){
	var objName = "specialNum_"+Obj.name ;
	try{
		if (!(eval("document.form1."+objName).checked==true))
		{
			return checkCardNo2(Obj) ;
		}
	}catch(e){
		return checkCardNo2(Obj) ;
	}
	return true;
}

//身份证效验
function checkCardNo2(obj){

	  var strSID = obj.value;
      var strBirthday;
      var intYear=0;
      var intMonth=0;
      var intDay=0;
      var intCurYear=0;
      var intVerify=0;
      var intYearLimit=0;
      var strVerify;

      if (trim(strSID).length>0) {

		 if (isInt(trim(strSID))==false){
				alert("身份证号码错误！");
				obj.select();
				return false;
		  }

		 if (trim(strSID).length!=15) {
		   if (trim(strSID).length!=18){
				alert("身份证号码错误！");
				obj.select();
				return false;
		  }}

		if (trim(strSID).length==18) {
		   strBirthday=strSID.substring(6,14);
		}else{
		   strBirthday = "19" + strSID.substring(6,12);
		}
		intYear = strBirthday.substring(0,4);
		intMonth = strBirthday.substring(4, 6);
		intDay =strBirthday.substring(6,8);
		var today=new Date();
		intCurYear =today.getFullYear();

		intYearLimit = intCurYear - 16;
		if (intCurYear <= 1990) {
		   intCurYear = 1990;
		}

		if (intYear > intYearLimit | intYear < 1900 | intMonth > 12 | intDay > 31) {
		    alert("身份证号码错误！");
			obj.select();
			return false;
		}

		if ((intMonth == 4 | intMonth == 6 | intMonth == 9 | intMonth == 11) & intDay > 30 ){
		    alert("身份证号码错误！");
			obj.select();
			return false;
		}

		if (intMonth == 2){
			if (intYear % 100 == 0){
				if (intYear % 400 == 0){
					if (intDay > 29){
						alert("身份证号码错误！");
						obj.select();
						return false;
				  }
				  else{
					if ( intDay > 28 ){
					    alert("身份证号码错误！");
						obj.select();
						return false;
					}
				  }
				}
			  }
			else{
				if (intYear % 4 == 0 & intDay > 29){
				  alert("身份证号码错误！");
				  obj.select();
				  return false;
				}
				else{
					if (intDay > 28){
						alert("身份证号码错误！");
						obj.select();
						return false;
					}
				}
			  }
		  }

      }

	 if (trim(strSID).length==18) {
		  intVerify = trim(strSID).substring(0,1) * 7 + trim(strSID).substring(1,2) * 9 ;
		  intVerify = intVerify + trim(strSID).substring(2,3) * 10 + trim(strSID).substring(3,4) * 5 ;
		  intVerify = intVerify + trim(strSID).substring(4,5) * 8 + trim(strSID).substring(5,6) * 4 ;
		  intVerify = intVerify + trim(strSID).substring(6, 7) * 2 + trim(strSID).substring(7,8) * 1 ;
		  intVerify = intVerify + trim(strSID).substring(8, 9) * 6 + trim(strSID).substring(9,10) * 3 ;
		  intVerify = intVerify + trim(strSID).substring(10,11) * 7 + trim(strSID).substring(11,12) * 9 ;
		  intVerify = intVerify + trim(strSID).substring(12,13) * 10 + trim(strSID).substring(13,14) * 5 ;
		  intVerify = intVerify + trim(strSID).substring(14,15) * 8 + trim(strSID).substring(15,16) * 4 ;
		  intVerify = intVerify + trim(strSID).substring(16,17) * 2 ;
		  intVerify = intVerify % 11;

		 switch (intVerify){
				case 0:           {strVerify = "1";break;}
				case 1:           {strVerify = "0";break;}
				case 2:           {strVerify = "x";break;}
				case 3:           {strVerify = "9";break;}
				case 4:           {strVerify = "8";break;}
				case 5:           {strVerify = "7";break;}
				case 6:           {strVerify = "6";break;}
				case 7:           {strVerify = "5";break;}
				case 8:           {strVerify = "4";break;}
				case 9:           {strVerify = "3";break;}
				case 10:          {strVerify = "2";break;}
		   }
		  if (strVerify!= trim(strSID).substring(17,18)){
			 alert("身份证号码错误！");
			 obj.select();
			 return false;
		  }
	  }
	  return true;
}


//检查输入是否为整数
function isInt(theStr){
  if(isEmpty(theStr)){
    return false;
  }
  else{
    for(var i=0;i<theStr.length;i++){
      if(isDigit(theStr.substring(i,i+1))==false){
        return false;
      }
    }
  }
  return true;
}

//去除头尾空格
function trim(fagstring){
  var scrstring=fagstring;
  while(scrstring.substring(0,1)==" " || scrstring.substring(scrstring.length-1,scrstring.length)==" "){
    if (scrstring.substring(0,1)==" " ){
      scrstring=scrstring.substring(1,scrstring.length);
    }
    if (scrstring.substring(scrstring.length-1,scrstring.length)==" "){
      scrstring=scrstring.substring(0,scrstring.length-1);
    }
  }
  return scrstring;
}
//检查输入是否为空
function isEmpty(str){
	if((str==null) || (str.length==0)) return true;
	else return false;
}
//检查数据的正确性
function isDigit(theNum){
  var theMask='0123456789';
  if(isEmpty(theNum)) return(false);
  else if (theMask.indexOf(theNum)==-1) return(false);
  return(true);
}

//
function evalFunc(str,str1)
{
   var flag = eval(str);
   var flag1 = eval(str1);
   if(flag && flag1)
   {
     return true;
   }
   else
   {
      return false;
   }
}

//判断是否是大于compValue的数字
function checkNumMore(Obj,compValue)
{

    var thisnum=Obj.value;
    if(thisnum=="") return true;

    if(thisnum<compValue)
    {
        Obj.select();
            alert("请输入一个大于等于"+compValue+"的数字！");
            return false;
        }

        return true;


}

//判断是否是compValue1=< and <=compValue2的数字
function checkNumMore2(Obj,compValue1,compValue2)
{

    var thisnum=Obj.value;
    if(thisnum=="") return true;

    if(thisnum>compValue2 || thisnum<compValue1)
    {
        Obj.select();
            alert("请输入一个大于等于"+compValue1+"并且小于等于"+compValue2+"的数字！");
            return false;
        }

        return true;


}