﻿
function getStringLength(str){
  var endvalue=0;
  var sourcestr=new String(str);
  var tempstr;
  for (var strposition = 0; strposition < sourcestr.length; strposition ++) {
    tempstr=sourcestr.charAt(strposition);
    if (tempstr.charCodeAt(0)>255 || tempstr.charCodeAt(0)<0) {
      endvalue=endvalue+2;
    } else {
      endvalue=endvalue+1;
    }
  }
  return(endvalue);
}
function trim(str){
  if(str==null) return "";
  if(str.length==0) return "";
  var i=0,j=str.length-1,c;
  for(;i<str.length;i++){
    c=str.charAt(i);
    if(c!=' ') break;
  }
  for(;j>-1;j--){
    c=str.charAt(j);
    if(c!=' ') break;
  }
  if(i>j) return "";
  return str.substring(i,j+1); 
}




//检查日期是否有效   2005-3-21
function validateDate(date1,format,alt){
	var DateString;
	var Dilimeter;
	DateString = date1.value;
  if (DateString==null)
    return false; 
  if (Dilimeter==' ' || Dilimeter==null) 
    Dilimeter = '-'; 
  var tempy=' '; 
  var tempm=' '; 
  var tempd=' '; 
  var tempArray; 
  if (DateString.length<8 && DateString.length>10) 
    return false;  
  tempArray = DateString.split(Dilimeter); 
  if (tempArray.length!=3) 
    return false; 
  if (tempArray[0].length==4) 
  { 
     tempy = tempArray[0]; 
     tempd = tempArray[2]; 
  } 
  else 
  { 
     tempy = tempArray[2]; 
     tempd = tempArray[1]; 
   } 
  tempm = tempArray[1]; 
  var tDateString = tempy + ' /'+tempm + ' /'+tempd+' 8:0:0';//加八小时是因为我们处于东八区 
  var tempDate = new Date(tDateString); 
  if (isNaN(tempDate)) 
    return false; 
  if (((tempDate.getUTCFullYear()).toString()==tempy) && (tempDate.getMonth()==parseInt(tempm)-1) && (tempDate.getDate()==parseInt(tempd))) 
  { 
    return true; 
  } 
  else 
 { 
  return false; 
  } 
  
} 


//去掉空格
function Trim(str){
 if(str.charAt(0) == " "){
  str = str.slice(1);
  str = Trim(str); 
 }
 return str;
}





function validateDate1(date1,format,alt){
  var time=trim(date1.value);
  //alert(date1.value);
  if(time=="") return true;
  var reg=format;
  var reg=reg.replace(/yyyy/,"[0-9]{4}");
  var reg=reg.replace(/yy/,"[0-9]{2}");
  var reg=reg.replace(/MM/,"((0[1-9])|1[0-2])");
  var reg=reg.replace(/M/,"(([1-9])|1[0-2])");
  var reg=reg.replace(/dd/,"((0[1-9])|([1-2][0-9])|30|31)");
  var reg=reg.replace(/d/,"([1-9]|[1-2][0-9]|30|31))");
  var reg=reg.replace(/HH/,"(([0-1][0-9])|20|21|22|23)");
  var reg=reg.replace(/H/,"([0-9]|1[0-9]|20|21|22|23)");
  var reg=reg.replace(/mm/,"([0-5][0-9])");
  var reg=reg.replace(/m/,"([0-9]|([1-5][0-9]))");
  var reg=reg.replace(/ss/,"([0-5][0-9])");
  var reg=reg.replace(/s/,"([0-9]|([1-5][0-9]))");
  reg=new RegExp("^"+reg+"$");
  if(reg.test(time)==false){//验证格式是否合法
    alert(alt);
    date.focus();
    return false;
  }
  return true;
}
function validateDateGroup(year,month,day,alt){
  var array=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  var y=parseInt(year.value);
  var m=parseInt(month.value);
  var d=parseInt(day.value);
  var maxday=array[m-1];
  if(m==2){
    if((y%4==0&&y%100!=0)||y%400==0){
      maxday=29;
    }
  }
  if(d>maxday){
    alert(alt);
    return false;
  }
  return true;
}
function validateCheckbox(obj,alt){
  var rs=false;
  if(obj!=null){
    if(obj.length==null){
      return obj.checked;
    }
    for(i=0;i<obj.length;i++){
      if(obj[i].checked==true){
        return true;
      }
    }
  }
  alert(alt);
  return rs;
}
function validateRadio(obj,alt){
	//alert(alt);
	//alert(obj.value);
  var rs=false;
  if(obj!=null){
    if(obj.length==null){
      return obj.checked;
    }
    for(i=0;i<obj.length;i++){
      if(obj[i].checked==true){
        return true;
      }
    }
  }
  alert(alt);
  return rs;
}
function validateSelect(obj,alt){
  var rs=false;
  if(obj!=null){
    for(i=0;i<obj.options.length;i++){
      if ((obj.options[i].selected==true) && (obj.options[i].value!="")&& (obj.options[i].value!="all")){
        return true;
      }
    }
  }
  alert(alt);
  return rs;
}
function validateEmail(email,alt,separator){
  var mail=trim(email.value);
  if(mail=="") return;
  var em;
  var myReg = /^[_a-z0-9A-Z]+@([_a-z0-9A-Z]+\.)+[a-z0-9A-Z]{2,3}$/;
  if(separator==null){
    if(myReg.test(email.value)==false){
      alert(alt);
      email.focus();
      return false;
    }
  }
  else{
    em=email.value.split(separator);
    for(i=0;i<em.length;i++){
      em[i]=em[i].trim();
      if(em[i].length>0&&myReg.test(em[i])==false){
        alert(alt);
        email.focus();
        return false;
      }
    }
  }
  return true;
}


//检查数字(可带小数点)是否有效 2005-3-21
function validateNum(Num,alt)   
	{   
  var str = Num;

  if(str=="") return;		
		var cnt3;   
		var len3;  
		var point3; 
   	
		cnt3=0;   
		point3=0;
		len3 = str.length;   
		for(var i=0; i<len3; i++) {   
			if(str.charAt(i)>='0' && str.charAt(i)<='9' )    
			{   
				cnt3++;   
			}else
			if  (str.charAt(i)=='-')
			{
			  point3++;
			}
			  
		}   
		if (point3<2)
		{
	    if  ( cnt3+point3==len3)
	      return true; 
	    else
	    {
        alert(alt);	 
	  		return false;   	    	
	     }
	   }else{		   
      alert(alt);	 
			return false;   
	   
	   }

	} 

function validateForm(theForm){// 若验证通过则返回true

  var disableList=new Array();
  var field = theForm.elements; // 将表单中的所有元素放入数组
  for(var i = 0; i < field.length; i++)
  {
     var vali=theForm.validate;
     if(vali!=null){
        if(vali.value=="0"){
          var fun=vali.functionName;
          if(fun!=null){
            return eval(fun+"()");
          }
          else{
            return true;
          }
        }
     }


    var empty=false;
    var value=trim(field[i].value);
    if(value.length==0){//是否空值
       empty=true;
    }
   
    var emptyInfo=field[i].emptyInfo;//空值验证
  

    if(emptyInfo!=null&&empty==true){
      alert(emptyInfo);   
      field[i].focus();
      return false;
    }
    
    var minlength=field[i].minlength;//最小长度验证
	 if(minlength!=null&&getStringLength(value)<minlength){
      alert("号码长度不能少于:"+minlength+"位");
      field[i].focus();
      return false;
    }
        
    var lengthInfo=field[i].lengthInfo;//最大长度验证
    if(lengthInfo!=null&&getStringLength(value)>field[i].maxLength){
      alert(lengthInfo);
      field[i].focus();
      return false;
    }

    var validatorType=field[i].validatorType;
    if(validatorType!=null){//其它javascript
      var rs=true;
      if(validatorType=="javascript"){
        eval("rs="+field[i].functionName+"()");
        if(rs==false){
          return false;
        }
        else{
           continue;
        }
      }
      else if(validatorType=="disable"){//提交表单前disable的按钮
        disableList.length++;
        disableList[disableList.length-1]=field[i];
        continue;
      }
      else if(validatorType=="Date"){
        rs=validateDate((field[i]),field[i].format,field[i].errorInfo);
        if (rs==false )
          alert("日期无效!");
      }
      else if(validatorType=="DateGroup"){
        //rs=validateDateGroup(theForm.elements(field[i].year),theForm.elements(field[i].month),theForm.elements(field[i].day),field[i].errorInfo);
        rs=validateDateGroup(field[i].year,field[i].month,theForm.elements(field[i].day),field[i].errorInfo);
      }
      else if(validatorType=="Checkbox"){
        //rs=validateCheckbox(theForm.elements(field[i].fieldName),field[i].errorInfo);
        rs=validateCheckbox(field[i],field[i].errorInfo);
      }
      else if(validatorType=="Radio"){
        //rs=validateRadio(theForm.elements(field[i].fieldName),field[i].errorInfo);
        rs=validateRadio(field[i],field[i].errorInfo);
      }
      else if(validatorType=="Select"){
      	
        rs=validateSelect(field[i],field[i].errorInfo);
      }
      else if(validatorType=="Email"){
        //rs=validateEmail(theForm.elements(field[i].fieldName),field[i].errorInfo);
        rs=validateEmail(field[i],field[i].errorInfo);
      }
      else if(validatorType=="Num"){
        rs=validateNum(field[i].value,field[i].errorInfo);
      }      
      else{
        alert("验证类型不被支持, fieldName: "+field[i].name);
        field[i].focus();
        return false;
      }
      if(rs==false){
      	field[i].focus();
        return false;
      }
    }
    else{//一般验证
    
      if(empty==false){
        var v = field[i].validator; // 获取其validator属性
        if(!v) continue;            // 如果该属性不存在,忽略当前元素
        var reg=new RegExp(v);
        
        if(reg.test(field[i].value)==false){
          alert(field[i].errorInfo);
          field[i].focus();
          return false;
        }
        
      }
    }
  
  }
  
  
  for(i=0;i<disableList.length;i++){
    disableList[i].disabled=true;
  }
  
  
  return true;
  
}




function validateField(FieldNameStr,FieldTypeStr,alertInfo){// 若验证通过则返回true

   var empty=false;
    var value=trim(FieldNameStr.value);
    if(value.length==0){//是否空值
       empty=true;
    }

   if (empty==true)
   {
      alert(alertInfo);   
      FieldNameStr.focus();
      return false;
   }

   var rs=true;

   if (FieldTypeStr=="email")
   {
      rs=validateEmail(FieldNameStr,alertInfo); 
   }

    if(rs==false){
      	FieldNameStr.focus();
        return false;
      }

   
  
  return true;
  
}

