/* 时间：2002/08/27
 * 功能：验证表单函数
 * 程序：
 * 修改人：  祝卫华
 * 修改日期：2003/09/09
 * 修改内容：增加了对正负数的判定内容
 * 主要验证项目：
 * CharType,表单数据类型 "C" 为字符串，"N" 为数字,"D"为日期类型。
 * MaxLength(最大长度) 整型数字 0表示不限制最大长度
 * Precision(精度) 整型数字 表示保留小数位的长度,0表示是整数
 * DefiniteLengthMark(定长标志) 整型数字   0（定长不允许空允许负）/1（不定长不可空允许负）/2（不定长允许空允许负）/3（定长允许空允许负）
 *                                         4（定长不允许空不允许负）/5（不定长不可空不允许负）/6（不定长允许空不允许负）/7（定长允许空不允许负）
 * Describe(表单描述) 比如：电话号码，用户姓名等等,必须写
 */
function checkFormItem(FormItemName,CharType,MaxLength,Precision,DefiniteLengthMark,Describe){
  try {
    var TValue;
    TValue=FormItemName.value;
    //得到文本框去掉头尾空格的值
    TValue=TValue.replace(/(^\s*)|(\s*$)/g, "");
    //改造单撇文本框内容
    TValue=TValue.replace(/'/g, "''");
    FormItemName.value=TValue;
    //允许空，只要文本框为空返回true
    if((DefiniteLengthMark==2||DefiniteLengthMark==3||DefiniteLengthMark==6||DefiniteLengthMark==7)&&(TValue.length==0)) {
      return(true);
    }
    //不允许空，只要文本框为空返回false
    if((DefiniteLengthMark==0||DefiniteLengthMark==1||DefiniteLengthMark==4||DefiniteLengthMark==5)&&(TValue.length==0)) {
      alert(Describe+"不允许为空！");
      if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
      return(false);
    }
    //不允许负，只要文本框为负数返回false
    if(DefiniteLengthMark==4||DefiniteLengthMark==5||DefiniteLengthMark==6||DefiniteLengthMark==7) {
      if (TValue.indexOf("-") == 0) {
        alert(Describe+"不允许为负数！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
    }
    //检查字符串(长度和定长)。
    if(CharType=="C") {
      if((DefiniteLengthMark==0||DefiniteLengthMark==3) && getStrLength(TValue)!=MaxLength) {
        alert(Describe+"规定长度是"+MaxLength+"，请检查！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
      if(MaxLength!=0&&getStrLength(TValue)>MaxLength && (DefiniteLengthMark==1||DefiniteLengthMark==2)) {
        alert(Describe+"超过最大长度，允许的最大长度是"+MaxLength+"！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
	  //2007-04-09 新增，li_x;
	  if(MaxLength!=0&&getStrLength(TValue)>MaxLength && (DefiniteLengthMark==5||DefiniteLengthMark==6)) {
        alert(Describe+"超过最大长度，允许的最大长度是"+MaxLength+"！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
    }
    //检查数字类型(长度，精度，定长)
    if(CharType=="N") {
      //检查整型数字
      if(Precision==0&&!isInteger(TValue)) {
        alert(Describe+"项填写必须输入数字，请检查！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
      if(Precision==0&&isInteger(TValue)&&MaxLength!=0&&(DefiniteLengthMark==0||DefiniteLengthMark==3)&&getStrLength(TValue)!=MaxLength) {
        alert(Describe+"项长度必须是"+MaxLength+"，请检查！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
      if(Precision==0&&isInteger(TValue)&&MaxLength!=0&&(DefiniteLengthMark==1||DefiniteLengthMark==2)&&getStrLength(TValue)>MaxLength) {

        alert(Describe+"项输入数字长度不能超过"+MaxLength+"，请检查！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
	  //2007-04-09， 新增，li_x;
	  if(Precision==0&&isInteger(TValue)&&MaxLength!=0&&(DefiniteLengthMark==5||DefiniteLengthMark==6)&&getStrLength(TValue)>MaxLength) {

        alert(Describe+"项输入数字长度不能超过"+MaxLength+"，请检查！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
      //检查整型数字结束
	
		//检查实数
      if(Precision!=0&&!isFloat(TValue)) {
        alert(Describe+"项必须输入数字，请检查！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
      if(Precision!=0&&isFloat(TValue)&&MaxLength!=0&&(DefiniteLengthMark==0||DefiniteLengthMark==3)&&getStrLength(TValue.replace("." , ""))!=MaxLength) {

        alert(Describe+"项输入数字长度必须是"+MaxLength+"，请检查！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
      if(Precision!=0&&isFloat(TValue)&&MaxLength!=0&&(DefiniteLengthMark==1||DefiniteLengthMark==2)&&getStrLength(TValue.replace("." , "")) > MaxLength) {

        alert(Describe+"项输入数字长度不能超过"+MaxLength+"，请检查！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
      if(Precision!=0&&isFloat(TValue)&&!checkPrecision(TValue,Precision)) {

        alert(Describe+"项输入数字应该保留"+Precision+"位小数，请检查！");
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        return(false);
      }
		if (Precision!=0&&isFloat(TValue)&&MaxLength!=0&&(MaxLength>Precision)&&!checkPrecision2(TValue,MaxLength,Precision)) {
			alert(Describe+"项小数点前数字长度不能超过"+ (MaxLength-Precision) + ",请检查！");
			if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
			return(false);
		}
    }
    /*验证日期类型张显达书写于2003年1月5日*/
    if(CharType=="D") {
      //首先整理日期的格式
      var i;
      var strYear;
      var strMonth;
      var strDate;
      i=((TValue.indexOf("/")==-1) ? (TValue.indexOf("-")==-1 ? TValue.indexOf(".") : TValue.indexOf("-") ) : TValue.indexOf("/"));
      //年
      if( i != -1 ) {
        strYear=TValue.substring(0,i);
        if ( strYear.length != 4 ) {
          if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
          alert(Describe+"格式不合法,请用4位数字表示年！");
          return false;
        }
        TValue=TValue.substring(i+1,TValue.length);
        i=((TValue.indexOf("/")==-1) ? (TValue.indexOf("-")==-1 ? TValue.indexOf(".") : TValue.indexOf("-") ) : TValue.indexOf("/"));
        //月
        if( i != -1 ) {
          strMonth=TValue.substring(0,i);
          if( strMonth.length>2 ){
            if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
            alert(Describe+"格式不合法,请用2位数字表示月！");
            return false;
          } else if ( strMonth.length > 0 ) {
            strMonth=("0" + strMonth ).substring( strMonth.length - 1 , strMonth.length + 1 );
          } else {
            if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
            alert(Describe+"格式不合法");
            return false;
          }
          TValue=TValue.substring( i + 1 , TValue.length );
          //日
          strDate=TValue;
          if( strDate.length>2 ){
            if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
            alert(Describe+"格式不合法,请用2位数字表示日！");
            return false;
          } else if ( strDate.length > 0 ) {
            strDay=("0" + strDate ).substring( strDate.length -1 , strDate.length + 1 );
          } else {
            if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
            alert(Describe+"格式不合法");
            return false;
          }
          TValue = strYear + strMonth + strDay;

        } else {
          if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
          alert(Describe+"格式不合法");
          return false;
        }

      }else{
        if( TValue.length != 8 ) {
          if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
          alert(Describe+"格式不合法");
          return false;
        }
      }

      //得到年月日的值
      strYear =  TValue.substr(0 , 4);
      strMonth = TValue.substr(4 , 2);
      strDate = TValue.substr(6 , 2);
      //给页面元素正确显示
      FormItemName.value = strYear + "/" + strMonth + "/" + strDate;
      //判断年
      var intYear;
      intYear=parseInt(getDelLeftZeroStr(strYear));
      if(intYear!=NaN&&intYear>1900&&intYear<2100){
        //return true;
      }else{
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        alert(Describe+" 日期格式年不合法");
        return false;
      }
      //判断月
      var intMonth;
      intMonth=parseInt(getDelLeftZeroStr(strMonth));
      if(intMonth!=NaN&&intMonth>=1&&intMonth<=12){
        //return true;
      }else{
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        alert(Describe+" 日期格式月不合法");
        return false;
      }
      var intDate=parseInt(getDelLeftZeroStr(strDate));
      var intMaxDateValue;
      switch(intMonth){
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
      case 12:
        intMaxDateValue=31;
        break;
      case 4:
      case 6:
      case 9:
      case 11:
        intMaxDateValue=30;
        break;
      case 2:
        //润年的情况
        if(intYear%4==0||intYear%400==0){
          intMaxDateValue=29;
          break;
        }else{
          intMaxDateValue=28;
          break;
        }
      default:
        break;
      }
      if(intDate!=NaN&&intDate>=1&&intDate<=intMaxDateValue){
      //return true;
      }else{
        if(!FormItemName.readOnly&&!FormItemName.disabled)FormItemName.focus();
        alert(Describe+" 日期格式日不合法");
        return false;
      }
    }
    return(true);
  } catch( e ) {
  	alert(e);
    alert(Describe+"发生异常错误，请检查！");
    var blFlag=confirm("忽略" + Describe + "的错误吗？可能会造成数据不完整或者错误！" );
    if ( blFlag == true ) {
      return ( true );
    } else {
      return(false);
    }
  }
}

/* 得到字符串的长度  */
/*
function getStrLength(str)
{
 var sLength,i;
 sLength=0;
 for(i=0;i<str.length;i++)
 {
  if(Math.abs(str.charCodeAt(i))<=255)
   sLength=sLength+1;
  else
   sLength=sLength+2;
 }
 return(sLength);

}*/

/* 得到字符串的长度
* 修改：
* 时间：2002/08/27
*/
function getStrLength(str)
{
  var winnt_chinese,sLength,i;
  var TestString="信源";
  if  (TestString.length==2){
    winnt_chinese =true;
  }else{
    winnt_chinese =false;
  }
  if (winnt_chinese){
    var l, t, c,kk;
    l = str.length;
    t = l;
    for (kk=0;kk<l;kk++)
    {
      c = str.charCodeAt(kk);
      if (c < 0){
        c = c + 65536;
      }
      if (c > 255){
        t = t + 1;
      }
    }
    sLength = t;
  }else{
    sLength = str.length;
  }
  return(sLength);
}


/* 验证整数  */
function isInteger(str)
{
  if(isNaN(str))
  {
    return(false);
  }
  else
  {
    if(str.search("[.*]")!=-1)
    {
      return(false);
    }
  }
  return(true);
}
/* 验证实型数字  */
function isFloat(str)
{
  //alert(isNaN(parseFloat(str)));
//  return(!isNaN(parseFloat(str)));
  return(!isNaN(str));
}
/* 验证精度  */
function checkPrecision(str,n) {
  try{
    var tureorfalse,i,PrecisionLength;
    PrecisionLength=0;
    if(!isNaN(parseFloat(str))) {
      for(i=0;i<str.length;i++) {
        if(str.charAt(i)==".")  {
        PrecisionLength=str.length-i-1;
        break;
      }
    }
    } else {
      return(false);
    }
    if(PrecisionLength<=n) {
      return(true);
    } else {
      return(false);
    }
  } catch( e ){
    return (false);
  }
}

/*
 *编写：高俊溪
 *功能：检查带小数点数值型表单域小数点前精度
 *输入：strInput，表单域输入值
 *      intMaxLength，表单域的最大长度
 *      intPrecision,表单域值的精度
 */
 function checkPrecision2(strInput,intMaxLength,intPrecision){
	 	try{
			var intExPrecisionLength,intExPrecisionLengthTmp,i;
			intExPrecisionLengthTmp = 0;
			//除小数点外数值的最大长度
			intExPrecisionLength = intMaxLength - intPrecision;
			if (strInput.lastIndexOf(".")<0 && strInput.length >intExPrecisionLength)
			{
				return (false);
			}
				for(i=0;i<strInput.length;i++)
				 {
					if (strInput.charAt(i) == ".") 
						{
							intExPrecisionLengthTmp = i;
							break;
						}
				 }
		  if (intExPrecisionLengthTmp<=intExPrecisionLength)
		  {
		  	  return(true);
			}else
			{
				return(false);
			}	
		} catch (e) {
			return(false);
		}
 	
 	}
 
 
 
/* 增加：
* 时间：2002/09/16
*/

/* 检查两文本框不能同时为空
* 不同时为空为true 反之为false并提示
*/
function checkNotEmptySameTime(text1Name,text2Name,text1Describe,text2Describe){
  if (text1Name.value==""&&text2Name.value==""){
    alert(text1Describe+"和"+text2Describe+"不能同时为空！");
    return false;
  }
  else{return true;}
}
/* 检查两文本框同时只能填写一个*/
function checkWriteOneSameTime(text1Name,text2Name,text1Describe,text2Describe){
  if (text1Name.value!=""&&text2Name.value!=""){
    alert(text1Describe+"和"+text2Describe+"不能同时填写！");
    return false;
  }
  else{
    return true;
  }
}

/*得去掉开头所有的0的字符串，返回值为字符串*/
/*王琳 2003/4/10*/
function getDelLeftZeroStr(str){
  var strReturnvalue="";
  var i=0;
  var strTempvalue="";
  var blHaveCheckNotZero=false;

  if(isNaN(str)) {
    return("");
  }else{
    for (i=0;i<str.length;i++){
      //逐位取值
      strTempvalue=str.substring(i,i+1);
      if (strTempvalue!="0"){
            strReturnvalue=strReturnvalue+strTempvalue;
                blHaveCheckNotZero=true;
          }
          //只要检测到不是0的字符就切断判断，返回字符串
          if (blHaveCheckNotZero){
            strReturnvalue=strReturnvalue+str.substring(i+1,str.length);
            break;
          }
    }
  }
  return(strReturnvalue);
}
/*
 *编写：乔爱国
 *功能：校验文本输入域(textarea)的长度
 *输入：textarea，文本输入域的id
 *      length，文本输入域的最大长度,小于一时,不限制文本长度
 *      msg,提示信息中的文本域名称
 *      hint,用于在页面显示可输入字符个数的input句柄
 */

function CheckTextarea(textarea,length,msg,hint) { //v2.0
  if(length<=0)
  {
    return;
  }
  try
  {
    if(getStrLength(textarea.value)>length*1)
    {
      alert("字符数超过限制（"+msg+"的最大长度为"+length+"）！");
          var i=0;
	  do
	  {
	    textarea.value=textarea.value.substring(0,length-i);
	    i++;
	  }while(getStrLength(textarea.value)>length*1);

	  if(hint!=null)
	    hint.value=length-getStrLength(textarea.value);
	  return false;
    }
    else
    {
      if(hint!=null)
        hint.value=length-getStrLength(textarea.value);
      return true;
    }
  }
  catch(E)
  {
    alert(E);
  }
}



function CheckTextLength(textarea,length,msg) { //v2.0
  if(length<=0)
  {
    return;
  }
  try
  {
    if(getStrLength(textarea.value)>length*1)
    {
      alert("字符数超过限制（"+msg+"的最大长度为"+length+"）！");
	  return false;
    }
     return true;
  }
  catch(E)
  {
    alert(E);
  }
}

function checkStringLength(value,length,message)
{
	if(getStrLength(value)>=length)
	{
		alert(message+"的长度不能超过"+length+"个字节");
		return false;
	}
	return true
}