//Function：五个函数：判断非空(tab层）,判断非空，判断日期，判断时间 ，判断数值，判断页数
//FileName: check.js
//Example:  onclick="return isNoNull('Ply_add_ef')" onclick="return checkNoNull()"
          //onBlur="return checkDate(this)"  onBlur="return checkTime(this)"
          //onBlur="return checkNum(this,10,2)"  onBlur="return checkPage(this,10)"
//Return:   true|false
//Note:  1.判断非空在按钮触发，判断日期、判断时间和判断数值在输入框触发,
           //其中判断非空(tab层）中的参数为要发送的值,
           //判断数值中的第一个参数this表示触发控件本身,第二个参数为数值总长度(不包括小数点),第三个参数为小数点位数,
                //当第三个参数为0时,只能输入最长为第二个参数的整数
          //判断页数后面一个参数为可以输入的最大页数

//判断非空
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"){//当类型为输入框或下拉框时
            var eachvalue=jsTrim(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"){
            //当类型为输入框或下拉框时
            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;
                        if(eachvalue2==true || document.all[elename][l].id=="")
                        {
                            checkFlag=true;
                        	break;
                        }
                    }
                }
                if(checkFlag==false)
                {
                    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();
        alert(str+"不能为空！");
        return false;
    }else{
        return true;
    }
}

//判断日期
function checkDate(Obj)
{
    var thisdate=jsTrim(Obj.value);
    var str="格式错误!\n正确的格式如：\n2002-8-4";
    var reg = /^(\d{4})-(\d{1,2})-(\d{1,2})$/;//正则表达式
    var arr = reg.exec(thisdate);
    if(thisdate=="") return true;
    if(reg.test(thisdate)&&RegExp.$2<=12&&RegExp.$3<=31)
        return true;
    else
    {
        alert(str);
        Obj.select();
        return false;
    }
}

//判断日期是不是月的第一天
function checkDateFirst(Obj)
{
    var thisdate=jsTrim(Obj.value);
    var str="格式错误!\n正确的格式如：\n2002-8-1\n且为每月的第一天";
    var reg = /^(\d{4})-(\d{1,2})-1$/;//正则表达式
    var arr = reg.exec(thisdate);
    if(thisdate=="") return true;
    if(reg.test(thisdate)&&RegExp.$2<=12)
        return true;
    else
    {
        alert(str);
        Obj.value="";
        return false;
    }
}

function checkNotCnText(Obj)
{
 var reg=/[\u4E00-\u9FA5]/g
 if (reg.test(Obj.value))
 {
	 alert("不允许输入汉字");
	 Obj.value="";
	 Obj.select();
	 return false;
  }
 else{return true;}
}



var sDate=new Date()
var year=sDate.getYear()
var month=sDate.getMonth()
var day=sDate.getDay()
//判断日期并应小于当前日期
function checkDateEx(Obj)
{
    var thisdate=jsTrim(Obj.value);
    var str="格式错误!\n正确的格式如：\n2002-8-4";
    var str2="输入日期应小于当前日期,请重输!"
    var reg = /^(\d{4})-(\d{1,2})-(\d{1,2})$/;//正则表达式
    var arr = reg.exec(thisdate);
    if(thisdate=="") return true;
    if(reg.test(thisdate)&&RegExp.$2<=12&&RegExp.$3<=31){
        if(RegExp.$1<year || RegExp.$2<month ||(RegExp.$1==year && RegExp.$2==month && RegExp.$3<day)){
            return true;
        }else{
            alert(str2);
            Obj.select();
            return false;
        }
    }else{
        alert(str);
        Obj.select();
        return false;
    }
}

//判断日期并应不大于指定日期
function checkReferDate(Obj,referDate)
{
    if(referDate != ""){
    var referYear = referDate.substring(0,referDate.indexOf("-"));
    var referMonth = referDate.substring(referDate.indexOf("-")+1,referDate.lastIndexOf("-"));
    var referDay = referDate.substring(referDate.lastIndexOf("-")+1,referDate.length);
    var thisdate=jsTrim(Obj.value);
    var str="格式错误!\n正确的格式如：\n2002-8-4";
    var str2="输入日期应不大于"+referDate+",请重输!"
    var reg = /^(\d{4})-(\d{1,2})-(\d{1,2})$/;//正则表达式
    var arr = reg.exec(thisdate);
    if(thisdate=="") return true;
    if(reg.test(thisdate)&&RegExp.$2<=12&&RegExp.$3<=31){
        if(RegExp.$1<referYear || (RegExp.$1==referYear && RegExp.$2<referMonth) ||(RegExp.$1==referYear && RegExp.$2==referMonth && RegExp.$3<=referDay)){
            return true;
        }else{
            alert(str2);
            Obj.select();
            return false;
        }
    }else{
        alert(str);
        Obj.select();
        return false;
    }
    }else{
    return true;
    }
}

function checkReferDate2(Obj,referDate)
{
    if(referDate != ""){
    var referYear = referDate.substring(0,referDate.indexOf("-"));
    var referMonth = referDate.substring(referDate.indexOf("-")+1,referDate.lastIndexOf("-"));
    var referDay = referDate.substring(referDate.lastIndexOf("-")+1,referDate.length);
    var thisdate=Obj.value;
    var str="格式错误!\n正确的格式如：\n2002-8-4";
    var str2="输入日期不能小于"+referDate+",请重输!"
    var reg = /^(\d{4})-(\d{1,2})-(\d{1,2})$/;//正则表达式
    var arr = reg.exec(thisdate);
    if(thisdate=="") return true;
    if(reg.test(thisdate)&&RegExp.$2<=12&&RegExp.$3<=31){
        if(RegExp.$1>referYear || (RegExp.$1==referYear && RegExp.$2>referMonth) ||(RegExp.$1==referYear && RegExp.$2==referMonth && RegExp.$3>=referDay)){
            return true;
        }else{
            alert(str2);
            Obj.select();
            return false;
        }
    }else{
        alert(str);
        Obj.select();
        return false;
    }
    }else{
	alert("起始日期不能为空！");
    return false;
    }
}
//将当前月份的第一天赋值给一个控件
function currentFirstDay(obj){
    if(month<8){
        month++;
        month='0'+month;
    }
    document.all[obj].value=year+"-"+month+"-01";
    return true;
}

//判断时间
function checkTime(Obj)
{
    var thistime=jsTrim(Obj.value);
    var str="格式错误!\n正确的格式如：\n2002-8-4 23:4:21";
    var reg = /^(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;//正则表达式
    var arr = reg.exec(thistime);
    if(thistime=="") return true;
    if(reg.test(thistime)&&RegExp.$2<=12&&RegExp.$3<=31&&RegExp.$4<24&&RegExp.$5<60&&RegExp.$6<60)
        return true;
    else
    {
        alert(str);
        Obj.select();
        return false;
    }
}


//判断年月
function checkYm(Obj){
    var thistime=jsTrim(Obj.value);
    var str="格式错误!\n正确的格式如：\n2002-8";
    var reg = /^(\d{4})-(\d{1,2})$/;//正则表达式
    var arr = reg.exec(thistime);
    if(thistime=="") return true;
    if(reg.test(thistime)&&RegExp.$2<=12)
        return true;
    else
    {
        alert(str);
        Obj.select();
        return false;
    }
}

//判断年月并应小于当前月份
function checkYmAndLessCurrMonth(Obj){
    var thistime=jsTrim(Obj.value);
    var str="格式错误!\n正确的格式如：\n2002-8";
    var str2="输入时间月份应小于当前月份,请重输!"
    var reg = /^(\d{4})-(\d{1,2})$/;//正则表达式
    var arr = reg.exec(thistime);
    if(thistime=="") return true;
    if(reg.test(thistime)&&RegExp.$2<=12){
        if(RegExp.$1<year||(RegExp.$1==year && RegExp.$2<month)){
            return true;
        }else{
            alert(str2);
            Obj.select();
            return false;
        }
    }else{
        alert(str);
        Obj.select();
        return false;
    }
}

//判断年份
function checkYear(Obj){
    var thistime=jsTrim(Obj.value);
    var str="只能输入年份!\n正确的格式如：\n2002";
    var reg = /^(\d{4})$/;//正则表达式
    var arr = reg.exec(thistime);
    if(thistime=="") return true;
    if(reg.test(thistime))
        return true;
    else
    {
        alert(str);
        Obj.select();
        return false;
    }
}

//判断年份并应小于当前年份
function checkYearAndLessCurrYear(Obj){
    var thistime=jsTrim(Obj.value);
    var str="只能输入年份!\n正确的格式如：\n2002";
    var str2="输入年份应小于当前年份,请重输!"
    var reg = /^(\d{4})$/;//正则表达式
    var arr = reg.exec(thistime);
    if(thistime=="") return true;
    if(reg.test(thistime)){
        if(RegExp.$1<year){
            return true;
        }else{
            alert(str2);
            Obj.select();
            return false;
        }
    }else{
        alert(str);
        Obj.select();
        return false;
    }
}

//判断是否是一个有效EMAIL地址
function checkEmail(obj)
{
	var i=1;
	var s = obj.value;
	var sLength=s.length;
	
	while((i<sLength)&&(s.charAt(i) != "@")) i++;
	if ((i >= sLength) || (s.charAt(i) != "@")) 
	{
        alert("输入正确的电子邮件格式!");
		obj.select();
		return false;
	}
	else i += 2;
	
	while((i<sLength)&&(s.charAt(i) != ".")) i++;
	if ((i >= sLength-1) || (s.charAt(i) != ".")) 
	{

        alert("输入正确的电子邮件格式!");
		obj.select();
		return false;
	}
	else return true;
}

function isAlt_email( alt_email ){
    return ( /^[^@]+@[^@]+\.[^@]+$/.test( alt_email ) && alt_email.length<128 );
}
function checkAltEmail( me ){
	if( ! isAlt_email( me.value ) ) 
      alert("请输入正确的电子邮件格式!"); 
}

//判断数值
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 checkPage(obj,inputNum)
{
	var thisNum=jsTrim(obj.value);
	var str="输入数值不能大于页数或小于1，请重输！";
	if(thisNum=="") return true;
	if(!isNaN(thisNum))
	{
		if(thisNum>inputNum ||thisNum<1)
		{
            obj.value="";
			obj.select();
			alert(str);
			return false;
		}
		else return true;
	}
	else
	{
		obj.value="";
		obj.select();
		alert("输入数值不正确,请重输！");
		return false;
	}
}


//当输入回车键时判断输入页数是否在参数范围内
function enterCheckPage(obj,inputNum,url){
    if (event.keyCode==13) {
        var thisNum=jsTrim(obj.value);
        var str="输入数值不能大于页数或小于1，请重输！";
        if(thisNum=="") return true;
        if(!isNaN(thisNum))
        {
            if(thisNum>inputNum ||thisNum<1)
            {
                obj.value="";
                obj.select();
                alert(str);
                return false;
            }
            else
            {
                document.forms[0].action=url;
                document.forms[0].submit();
            };
        }
        else
        {
            obj.value="";
            obj.select();
            alert("输入数值不正确,请重输！");
            return false;
        }
    }
}

//本函数用于对sString字符串进行后空格截除
function jsTrim(str){
	str = str.replace(/^\s*/g,"");
	str = str.replace(/\s*$/g,"");
	return str;
}


//实现四舍五入函数
function Number.prototype.Fixed(n){
with(Math){var tmp=pow(10,n);return round(this*tmp)/tmp;}
}




function isNumber(pObj,errMsg){
 var obj = eval(pObj);
 strRef = "1234567890";
 if(!isEmpty(pObj,errMsg))return false;
 for (i=0;i<obj.value.length;i++) {
  tempChar= obj.value.substring(i,i+1);
  if (strRef.indexOf(tempChar,0)==-1) {
   if (errMsg == null || errMsg =="")
    alert("数据不符合要求,请检查");
   else
    alert(errMsg);
   if(obj.type=="text") 
    obj.focus(); 
   return false; 
  }
 }
 return true;
}

//判断是否是空
function isEmpty(pObj,errMsg){
 var obj = eval(pObj);
 if( obj == null || Trim(obj.value) == ""){
  if (errMsg == null || errMsg =="")
   alert("输入为空!");
  else
   alert(errMsg); 
  obj.focus(); 
  return false;
 }
 return true;
}

//去掉空格
function Trim(str){
 if(str.charAt(0) == " "){
  str = str.slice(1);
  str = Trim(str); 
 }
 return str;
}

//判断是否是数字,数字可以为负数
function isNegative(pObj,errMsg){
 var obj = eval(pObj);
 strRef = "1234567890-";
 if(!isEmpty(pObj,errMsg))return false;
 for (i=0;i<obj.value.length;i++) {
  tempChar= obj.value.substring(i,i+1);
  if (strRef.indexOf(tempChar,0)==-1) {
   if (errMsg == null || errMsg =="")
    alert("数据不符合要求,请检查");
   else
    alert(errMsg);
   if(obj.type=="text") 
    obj.focus(); 
   return false; 
  }else{
   if(i>0){
    if(obj.value.substring(i,i+1)=="-"){
     if (errMsg == null || errMsg =="")
      alert("数据不符合要求,请检查");
     else
      alert(errMsg);   
     if(obj.type=="text") 
     obj.focus(); 
     return false; 
    }
   }
  }
 }
 return true;
}

function isLeapYear(year) 
{ 
 if((year%4==0&&year%100!=0)||(year%400==0)) 
 { 
 return true; 
 }  
 return false; 
} 

//判断时间是否正确

function isDate(checktext){
var datetime;
var year,month,day;
var gone,gtwo;
if(Trim(checktext.value)!=""){
 datetime=Trim(checktext.value);
 if(datetime.length==10){
  year=datetime.substring(0,4);
  if(isNaN(year)==true){
   alert("请输入日期!格式为(yyyy-mm-dd) \n例(2001-01-01)！");
   checktext.focus();
   return false;
  }
  gone=datetime.substring(4,5);
  month=datetime.substring(5,7);
  if(isNaN(month)==true){
   alert("请输入日期!格式为(yyyy-mm-dd) \n例(2001-01-01)！");
   checktext.focus();
   return false;
  }
  gtwo=datetime.substring(7,8);
  day=datetime.substring(8,10);
  if(isNaN(day)==true){
   alert("请输入日期!格式为(yyyy-mm-dd) \n例(2001-01-01)！");
   checktext.focus();
   return false;
  }
  if((gone=="-")&&(gtwo=="-")){
   if(month<1||month>12) { 
    alert("月份必须在01和12之间!"); 
    checktext.focus();
    return false; 
    } 
   if(day<1||day>31){ 
    alert("日期必须在01和31之间!");
    checktext.focus(); 
    return false; 
   }else{
    if(month==2){  
     if(isLeapYear(year)&&day>29){ 
       alert("二月份日期必须在01到29之间!"); 
       checktext.focus();
       return false; 
     }       
     if(!isLeapYear(year)&&day>28){ 
       alert("二月份日期必须在01到28之间!");
       checktext.focus(); 
       return false; 
     } 
    } 
    if((month==4||month==6||month==9||month==11)&&(day>30)){ 
     alert("在四，六，九，十一月份 \n日期必须在01到30之间!");
     checktext.focus(); 
     return false; 
    } 
   }
  }else{
   alert("请输入日期!格式为(yyyy-mm-dd) \n例(2001-01-01)");
   checktext.focus();
   return false;
  }
 }else{
  alert("请输入日期!格式为(yyyy-mm-dd) \n例(2001-01-01)");
  checktext.focus();
  return false;
 }
}else{
 return true;
}
return true;
}

//判断是否是钱的形式
function isMoney(pObj,errMsg){
 var obj = eval(pObj);
 strRef = "1234567890.";
 if(!isEmpty(pObj,errMsg)) return false;
 for (i=0;i<obj.value.length;i++) {
  tempChar= obj.value.substring(i,i+1);
  if (strRef.indexOf(tempChar,0)==-1) {
   if (errMsg == null || errMsg =="")
    alert("数据不符合要求,请检查");
   else
    alert(errMsg);   
   if(obj.type=="text") 
    obj.focus(); 
   return false; 
  }else{
   tempLen=obj.value.indexOf(".");
   if(tempLen!=-1){
    strLen=obj.value.substring(tempLen+1,obj.value.length);
    if(strLen.length>2){
     if (errMsg == null || errMsg =="")
      alert("数据不符合要求,请检查");
     else
      alert(errMsg);   
     if(obj.type=="text") 
     obj.focus(); 
     return false; 
    }
   }
  }
 }
 return true;
}

//判断是否是电话号码
 function isTel(pObj,errMsg){
 var obj = eval(pObj);
 strRef = "1234567890()-－";
 if(!isEmpty(pObj,errMsg)) return false;
 for (i=0;i<obj.value.length;i++) {
  tempChar= obj.value.substring(i,i+1);
  if (strRef.indexOf(tempChar,0)==-1) {
   if (errMsg == null || errMsg =="")
    alert("数据不符合要求,请检查");
   else
    alert(errMsg);   
   if(obj.type=="text") 
    obj.focus(); 
   return false; 
  }else{
   tempLen=obj.value.indexOf(".");
   if(tempLen!=-1){
    strLen=obj.value.substring(tempLen+1,obj.value.length);
    if(strLen.length>2){
     if (errMsg == null || errMsg =="")
      alert("数据不符合要求,请检查");
     else
      alert(errMsg);   
     if(obj.type=="text") 
     obj.focus(); 
     return false; 
    }
   }
  }
 }
 return true;
}

/**
   *@param srcStr表示要格式化的数
   *@param nAfterDot 要保留的位数
 */ 
function FormatNumber(srcStr,nAfterDot){
    var srcStr,nAfterDot;
    var resultStr,nTen;
    srcStr = ""+srcStr+"";
    strLen = srcStr.length;
    dotPos = srcStr.indexOf(".",0);
    if (dotPos == -1){
        resultStr = srcStr+".";
        for (i=0;i<nAfterDot;i++){
            resultStr = resultStr+"0";
        }
        return resultStr;
    } else{
        if ((strLen - dotPos - 1) >= nAfterDot){
            nAfter = dotPos + nAfterDot + 1;
            nTen =1;
            for(j=0;j<nAfterDot;j++){
            nTen = nTen*10;
        }
        resultStr = Math.round(parseFloat(srcStr)*nTen)/nTen;
        return resultStr;
        } else{
            resultStr = srcStr;
            for (i=0;i<(nAfterDot - strLen + dotPos + 1);i++){
                resultStr = resultStr+"0";
            }
            return resultStr;
        }
    }
}


