/*

 Date    |  Author       |  Project   | Change Description
 20031023| corlin chen   | 天津大客户 |  添加多个电话号码输入框的验证.


********************基本格式*******************************
例<input name="f1" v_type=string v_maxlength=32， v_minlength=20>字符类型，最大长度为32，最小为20
例<input name="f1" v_type=money v_maxvalue=1000>货币类型，金额最大为1000


类型：（必填）
      string       字符型
      zip          邮政编码型
	  money        货币型
	  0-9          0-9型
	  int          整型     可以为负数
	  float        浮点型   可以为负数
	  email        电子邮件型
	  date         日期型   （属性由month，day，输入表单元素的名称name）
	  pwd          密码型   (属性有pwd2，输入校验密码的域名）
	  phone        电话型
          phones	多个电话号码型
	  idcard       身份证型



属性：v_minlength   最小长度（最大长度可以用size）(如果等于0，表示此项可以为空，如果等于null，或一个数字说明不能为空)
      v_maxvalue    最小值
	  v_minivalue   最大值
	  v_name       报错时显示的名称
	  v_must        必填项(1,必填 0非必填)
	  v_maxlength   最大长度
	  v_type        类型(必填)


××××××××××××入口函数×××××××××××××××××××
function check(formname)

××××××××××××基本函数列表×××××××××××××××××××
function boolean isMadeOf(value,str)   //判断value中的字符是否由str中的字符组成
function boolean isSizeOf(value,max,min)//判断value的大小是否由符合标准
function boolean isLengthOf(value,max,min)//判断value的长度是否由符合标准
function boolean isNotNull(value)//判断value是否空或null
function trimSubStr(ATrimStr,ASubStr,AWhere)//去掉符合条件的字符，用于去空格


××××××××××××扩充函数列表×××××××××××××××××××
function void packUp(obj)//整理域的属性值，校验v_×域的值是否符合标准

××××××××××××××××××接口函数列表××××××××××××××××××××
function void forString(obj)//判断一般字符串的长度
function void forZip(obj)//判断邮政编码
function void forMoney(obj)//判断金额
function void for0-9(obj)//判断字符是否由0－9个数字组成
function void forInt(obj)//判断字符是否是整数组成，可以为负数
function void forFloat(obj)//判断字符是否是数字，可以有小数点，负数
function void forEmail(obj)//判断字符是合法的电子邮件
function void forDate(obj1,obj2,obj2)//判断字符是合法的日期
function void forPwd(obj1,obj2)//判断字符密码，两次输入密码是否相等
function void forPhone(obj)//判断字符是否是合法的电话021-55555555,(021)2222222,
function void forPhones(obj)//判断字符是否是合法的多个电话021-55555555;(021)2222222,
function void forMadeOf(obj,str)//判断字符是否是由str里的字符组成
function void forIdCard(obj1)//判断字符是否是合法的身份证号




*/

//*****************全局变量****************************
var numStr="0123456789";
var moneyStr = numStr + ".";//金额的组成,浮点数的组成
var intStr = numStr+"-";
var floatStr = moneyStr+"-";
var phoneStr = "()-#" + numStr;//电话号码
var phonesStr = ";；" + numStr;//多个电话号码
var flag = 0;


//*********************入口函数***************************

function check(form)
{    var obj = null;
     var t = null;
	 var i;

     for (i=0;i<form.length;i++)
    {
		 obj = form.elements[i];
		 packUp(obj);
	     if(obj.v_type == "string") forString(obj);
         else if(obj.v_type == "zip") forZip(obj);
         else if(obj.v_type == "money") forMoney(obj);
         else if(obj.v_type == "0_9") for0_9(obj);
		 else if(obj.v_type == "int") forInt(obj);
		 else if(obj.v_type == "float") forFloat(obj);
		 else if(obj.v_type == "email") forEmail(obj);
		 else if(obj.v_type == "date") forDate(obj);
		 else if(obj.v_type == "pwd") forPwd(obj);
		 else if(obj.v_type == "phone") forPhone(obj);
                 else if(obj.v_type == "phones") forPhones(obj);
		 else if(obj.v_type == "idcard") forIdCard(obj);
		 else alert("程序错误：'" + obj.name + "的’v_type =" + obj.v_type + "'不是一个合法的类型！");

		if(flag == 1) {
	      flag = 0;
		  return false;
		}

     }

     return true;
}

//*********************基本函数***************************


function isMadeOf(val,str)
{

	var jj;
	var chr;
	for (jj=0;jj<val.length;++jj){
		chr=val.charAt(jj);
		if (str.indexOf(chr,0)==-1)
			return false;
	}

	return true;
}


function isNotNull(val)
{
	if (val =="")
		return (false);
	if (val == null)
		return (false);

		return (true);
}

function isSizeOf(val,min,max)
{
    var maxval = parseFloat(max);
	var minval = parseFloat(min);
	var selval = parseFloat(val);

	if (isNaN(selval)){
	  return false;
	}

	if (!isNaN(maxval)){
	  if (selval > maxval){
	    return false;
	  }
	}
	if (!isNaN(minval)){
	  if (selval < minval){
	    return false;
	  }
	}

    /*
	if (val < min || val > max){
	  return false;
	}
	*/

	return (true);
}


function isLengthOf(val,min,max)
{

	var minlen = parseInt(min);
	var maxlen = parseInt(max);

	if (!isNaN(maxlen)){
	  if (val.length > maxlen){
	    return false;
	  }
	}
	if (!isNaN(minlen)){
	  if (val.length < minlen){
	    return false;
	  }
	}

	/*
	if (val.length < minlen || val.lengh > maxlen ){
	  return false;
	}
	*/
	return true;
}

//判断小数点
function isValid_dot(val)
{

    var subvalue;

    if (val.indexOf(".",0) != -1){

	   subvalue = val.substring(val.indexOf(".",0)+1);

	  if (subvalue.indexOf(".",0) != -1){
	    return false;
	  }

	}

	return true;

}

//判断负号
function isValid_negative(val)
{

    var subvalue;

    if (val.indexOf("-",0) != -1){

	   if (val.indexOf("-",0) > 0){
	     return false;
	   }

	   subvalue = val.substring(val.indexOf("-",0)+1);

	  if (subvalue.indexOf("-",0) != -1){
	    return false;
	  }

	}

	return true;


}

//判断合适长度
function isRight_length(val,num)
{
     var len = parseInt(num);

	 if (isNaN(len)){ return true;}

	 if (val.length != len){
	   return false;
	 }

     return true;

}

//***************************************************************************************************
//--- 从ATrimStr中去掉符合条件的字符串ASubStr
//--- 参数：
//---    ATrimStr：要去掉符合条件字符串的字符串
//---    ASubStr：要去掉的子字符串
//---    AWhere 0：去掉所有的, 1:去掉左边相连的,2:去掉右面的相连的
//--- 返回: 处理完的字符串
//---	创建日期:       2001-07-27		最近更新日期:   2001-07-27
//--- 	创建程序员:	xg_delayth		最近更新程序员: xg_delayth
//--- 	维护程序员:     xg_delayth
//--- 举例： trimSubStr(" usj  29 "," ",0) 返回 "usj29"
  function trimSubStr(ATrimStr,ASubStr,AWhere){
    var tTrLength,tSbLength,tempLength;
    var tempString;
    var i;

    tTrLength = ATrimStr.length;
    tSbLength = ASubStr.length;

    if (tSbLength == 0){return ATrimStr;}
    if (tSbLength > tTrLength){return ATrimStr;}

    tempString = ATrimStr;
    switch(AWhere){
      case 0://所有
        do{
          tempLength = tempString.length;
          tempString = tempString.replace(ASubStr,"");
        } while(tempLength != tempString.length);
        break;
      case 1://左
        while (true){
          if (tempString.length < tSbLength) break;
          for (i = 0;i < tSbLength;i++)
            if (ASubStr.charAt(i) != tempString.charAt(i))
              return tempString;
          tempString = tempString.replace(ASubStr,"");
        };
      case 2://右
        while(true){
          tempLength = tempString.length;
          if (tempLength < tSbLength){return tempString;}
          for (i = 0;i < tSbLength;i ++){
            if (ASubStr.charAt(i) != tempString.charAt(tempLength - tSbLength+i)){
              return tempString;
            }
          }
          tempString = tempString.substr(0,tempLength-tSbLength);
        };
      default:
        return tempString;
    }
    return tempString;
  }
//***************************************************************************************************


//××××××××××××扩充函数列表×××××××××××××××××××
//整理域的属性值，校验v_×域的值是否符合标准
function  packUp(obj)
{

     if (obj == null){
	   alert("非法对象");
	   return false;
	 }

	 if (obj.value != null){
	   obj.value = trimSubStr(trimSubStr(obj.value," ",1)," ",2);
	 }
	     //创建v_name属性
		 try{
		   if (obj.v_name == null){
			 //alert("创建v_name属性");
			 obj.v_name = new String(obj.name);
		    }
		 }catch(exception){}

		 //创建v_type属性
		 try{
	       if (obj.v_type == null){
			 //alert("创建v_type属性");
			 obj.v_type = new String("string");
		   }
	     }catch(exception){}

		 //创建v_minlength属性
		 try{
		   if (obj.v_minlength == null){
			 //alert("创建v_minlength属性");
			 obj.v_minlength = new String("0");
		    }
		 }catch(exception){}

		 //创建v_maxlength属性
		 try{
		   if (obj.v_maxlength == null){
			 //alert("创建v_maxlength属性");
			 obj.v_maxlength = new String("");
		    }
		 }catch(exception){}

		 //创建v_maxvalue属性
		 try{
		   if (obj.v_maxvalue == null){
			 //alert("创建v_maxvalue属性");
			 obj.v_maxvalue = new String("");
		    }
		 }catch(exception){}

		 //创建v_minvalue属性
		 try{
		   if (obj.v_minvalue == null){
			 //alert("创建v_minvalue属性");
			 obj.v_minvalue = new String("");
		    }
		 }catch(exception){}

		//创建v_must属性
		 try{
		   if (obj.v_must == null){
			 //alert("创建v_must属性");
			 obj.v_must = new String("0");
		    }
		 }catch(exception){}


	return true;

}



//*********************扩充函数***************************



function forDate(useryear,usermonth,userday)
{
	var myyear;
	var mymonth;
	var myday;
	//myyear=parseInt(useryear);
	//mymonth=parseInt(usermonth);
	//myday=parseInt(userday);
	myyear=useryear;
	mymonth=usermonth;
	myday=userday;
	if (myyear < 1950 || myyear > 2050 ||mymonth < 1 ||mymonth > 12 || myday < 1 || myday > 31)
		return (false);
        if(mymonth==4 || mymonth==6 || mymonth==9 || mymonth==11)
        {
        	if(myday>30)
            		return (false);
        }
	if(myyear%4==0)
	{
	 	if((myyear%100==0 && myyear%400==0) || myyear%100!=0)
          	{
            		if(mymonth==2 && myday>29)
             			return (false);
            		else
	     			return (true);
          	}
        }
	else
	{
          	if(mymonth==2 && myday>28)
             		return (false);
             	else
             		return (true);
	}
}



function  forString(obj)//判断一般字符串的长度
{
      //必填项判断
	  if (obj.v_must!="0"){

	    if (obj.value.length == 0){
		   alert("'" + obj.v_name + "'为必填项，请务必填写");
		   flag = 1;
		   obj.focus();
		   return false;
		}

	  }

	  if (!isLengthOf(obj.value,obj.v_minlength,obj.v_maxlength)){
	    flag = 1;
		alert("'"+obj.v_name+"'的值不正确！长度有错误！");
		obj.focus();
		return false;

	  }

	  return true;

}

function forZip(obj)//判断邮政编码
{
    if (!forString(obj)){
	  flag = 1;
	  obj.focus();
	  return false;
	}else{
	  if (obj.value.length == 0){
	    return true;
	  }
	}

    if (!isMadeOf(obj.value,numStr)){
        flag = 1;
        alert("'" + obj.v_name + "'的值不正确！请输入数字！");
	    obj.focus();
	    return false;
      }

    if (!isRight_length(obj.value,"6")){
      flag = 1;
      alert("'"+obj.v_name+"'的值不正确！长度有错误！(6位数字)");
	  obj.focus();
	  return false;
    }

    return true;
}

function forMoney(obj)//判断金额
{
    if (!forString(obj)){
	  flag = 1;
	  obj.focus();
	  return false;
	}else{
	  if (obj.value.length == 0){
	    return true;
	  }
	}

    if (!isMadeOf(obj.value,moneyStr)){
      flag = 1;
      alert("'" + obj.v_name + "'的值不正确！请输入数字！");
	  obj.focus();
	  return false;
    }

	if (!isValid_dot(obj.value)){
	    flag = 1;
	    alert("'" + obj.v_name + "'的值不正确！小数点有错误！");
	    obj.focus();
	    return false;
	}

	if (!isSizeOf(obj.value,obj.v_minvalue,obj.v_maxvalue)){
	  flag = 1;
	  alert("'" + obj.v_name + "'的值不正确！超出规定范围！");
	  obj.focus();
	  return false;
	}

	return true;

}


function for0_9(obj) //判断字符是否由0－9个数字组成
{
    if (!forString(obj)){
	  flag = 1;
	  obj.focus();
	  return false;
	}else{
	  if (obj.value.length == 0){
	    return true;
	  }
	}

	if (!isMadeOf(obj.value,numStr)){
      flag = 1;
      alert("'" + obj.v_name + "'的值不正确！请输入数字！");
	  obj.focus();
	  return false;
    }

	return true;

}


function forInt(obj)//判断字符是否是整数组成，可以为负数
{
    if (!forString(obj)){
	  flag = 1;
	  obj.focus();
	  return false;
	}else{
	  if (obj.value.length == 0){
	    return true;
	  }
	}

    if (!isMadeOf(obj.value,intStr)){
      flag = 1;
      alert("'" + obj.v_name + "'的值不正确！请输入数字！");
	  obj.focus();
	  return false;
    }

	if (!isValid_negative(obj.value)){
      flag = 1;
      alert("'" + obj.v_name + "'的值不正确！'-'符号有错误！");
	  obj.focus();
	  return false;
    }

	if (!isSizeOf(obj.value,obj.v_minvalue,obj.v_maxvalue)){
	  flag = 1;
	  alert("'" + obj.v_name + "'的值不正确！超出规定范围！");
	  obj.focus();
	  return false;
	}

   return true;

}


function forFloat(obj)//判断字符是否是数字，可以有小数点，负数
{
    if (!forString(obj)){
	  flag = 1;
	  obj.focus();
	  return false;
	}else{
	  if (obj.value.length == 0){
	    return true;
	  }
	}

    if (!isMadeOf(obj.value,floatStr)){
      flag = 1;
      alert("'" + obj.v_name + "'的值不正确！请输入数字！");
	  obj.focus();
	  return false;
    }

	if (!isValid_dot(obj.value)){
	    flag = 1;
	    alert("'" + obj.v_name + "'的值不正确！小数点有错误！");
	    obj.focus();
	    return false;
	}

	if (!isValid_negative(obj.value)){
      flag = 1;
      alert("'" + obj.v_name + "'的值不正确！'-'符号有错误！");
	  obj.focus();
	  return false;
    }

	if (!isSizeOf(obj.value,obj.v_minvalue,obj.v_maxvalue)){
	  flag = 1;
	  alert("'" + obj.v_name + "'的值不正确！超出规定范围！");
	  obj.focus();
	  return false;
	}

   return true;

}

function forPhone(obj)//判断字符是否是合法的电话021-55555555,(021)2222222,
{
    if (!forString(obj)){
	  flag = 1;
	  obj.focus();
	  return false;
	}else{
	  if (obj.value.length == 0){
	    return true;
	  }
	}

	if (!isMadeOf(obj.value,phoneStr)){
	  flag = 1;
	  alert("'" + obj.v_name + "'的值不正确！请填写数字,可以包含(,),－,#符号");
	  obj.focus();
	  return false;
	}

}

function forPhones(obj)//判断字符是否是合法的电话021-55555555;(021)2222222,
{
    if (!forString(obj)){
	  flag = 1;
	  obj.focus();
	  return false;
	}else{
	  if (obj.value.length == 0){
	    return true;
	  }
	}

	if (!isMadeOf(obj.value,phonesStr)){
	  flag = 1;
	  alert("'" + obj.v_name + "'的值不正确！请填写数字,可以包含;；等分隔符号");
	  obj.focus();
	  return false;
	}

}

function forEmail(obj)//判断字符是合法的电子邮件
{
    if (!forString(obj)){
	  flag = 1;
	  obj.focus();
	  return false;
	}else{
	  if (obj.value.length == 0){
	    return true;
	  }
	}

    var myReg = /^[_a-z0-9-]+@([_a-z0-9-]+\.)+[a-z0-9]{2,3}$/;
    if(myReg.test(obj.value)){
	  return true;
	}
	alert("'" + obj.v_name + "'的值不正确！请确信填写正确的电子邮箱！");
	flag = 1;
	obj.focus();
    return false;

}

function forIdCard(obj)//判断字符是否是合法的身份证
{
    if (!forString(obj)){
	  flag = 1;
	  obj.focus();
	  return false;
	}else{
	  if (obj.value.length == 0){
	    return true;
	  }
	}

	if (!isMadeOf(obj.value,numStr)){
	  flag = 1;
	  alert("'" + obj.v_name + "'的值不正确！身份证必须填写数字！");
	  obj.focus();
	  return false;
	}

	if (!isRight_length(obj.value,"15") && !isRight_length(obj.value,"18")){
	  flag = 1;
	  alert("'" + obj.v_name + "'的值不正确！身份证长度不正确(15或18位数字)！");
	  obj.focus();
	  return false;
	}

	return true;

}

/*
function void forDate(obj1,obj2,obj2)//判断字符是合法的日期
function void forPwd(obj1,obj2)//判断字符密码，两次输入密码是否相等
function void forMadeOf(obj,str)//判断字符是否是由str里的字符组成
*/




