/*
本程序摘自网络
EYES作修改
最后修改时间 2005.11.9

History:
2005.11.9
	1、更改函数调用方式checkForm('FormName')为checkForm(this)
	2、修正viladBox()中的提示不包含objectName的bug

特别说明：
以下说明中的属性名均作更改：
valueType	改为	vt
objectName	改为	on
mustInput	改为	r
mustSelect	改为	r
minSelect	改为	min
maxSelect	改为	max
stringLen	改为	最小(min:minLen)长度和最大(max:maxLen)长度两个属性
decimalLen	改为	declen(小数位数）

一、用法简介：
表单验证函数放在了functions.js文件里了，在你所需要做验证的网页文件里，包含该脚本文件。一般语法为:
<script type="text/javascript" src="./functions.js">
对于焦点失去验证，为表单控件的onBlur事件绑定相应的验证函数，用法如下：
整型   checkNumber()
浮点型 checkNumber()
字符串 checkString()
日期   checkDate()
邮箱   checkEmail()
示例 onBlur="checkNumber()"

方法一：
对于表单提交验证，在表单提交前进行判断，用法如下：
if(checkForm(表单名称))
{
表单名称.submit();
return true;
}
else
{
return false;
}

方法二：
也可以绑定表单onSubmit事件，用法如下：
onSubmit="return checkForm(this)"


二、类型定义：

1、整型(int)
定义:
valueType="int"
属性:
objName   对象名称(字符串)
mustInput 必输项(true/false)
minInput  最小值(数字)
maxInput  最大值(数字)
举例:
<input type="text" name="test" valueType="int" objName="总载重吨" mustInput="true" maxInput="10000">

2、浮点型(float)
定义:
valueType="float"
属性:
objName   对象名称(字符串)
mustInput 必输项(true/false)
minInput  最小值(数字)
maxInput  最大值(数字)
decimalLen小数位数(数字)
举例:
<input type="text" name="test" valueType="float" objName="运价" mustInput="true" maxInput="10000.50" decimalLen="2">

3、字符串(string)
定义:
valueType="string"
属性:
objName   对象名称(字符串)
mustInput 必输项(true/false)
stringLen 字符串长度(数字)
举例:
<input type="text" name="test" valueType="string" objName="英文船名" mustInput="true" stringLen="100">

4、日期(date)
定义:
valueType="date"
属性:
objName   对象名称(字符串)
mustInput 必输项(true/false)
举例:
<input type="text" name="test" valueType="date" objName="开始日期" mustInput="true">
备注:
日期现在只能校验的格式为(yyyy-mm-dd)

5、邮箱(email)
定义:
valueType="email"
属性:
objName   对象名称(字符串)
mustInput 必输项(true/false)
举例:
<input type="text" name="test" valueType="email" objName="邮箱" mustInput="true">

6、单选(radio)  由EYES修改成功
定义:
valueType="radio"
属性:
objName   对象名称(字符串)
mustSelect 必输项(true/false)
举例:
<input type="radio" name="test" valueType="radio" objName="租船方式" mustSelect="true">
备注:
对于同一组单选按钮，只需要定义第一个即可。

7、复选(checkbox) 由EYES修改成功
定义:
valueType="checkbox"
属性:
objName   对象名称(字符串)
minSelect 最小选择数(数字)
maxSelect 最大选择数(数字)
举例:
<input type="checkbox" name="test" valueType="checkbox" objName="爱好" minSelect="2" maxSelect="5">
备注:
对于同一组复选按钮，只需要定义第一个即可。

8、下拉列表框(select)
定义:
valueType="select"
属性:
objName   对象名称(字符串)
mustSelect 必输项(true/false)
举例1:
<select name="test" valueType="select" objName="租船方式" mustSelect="true">
举例2:
<select name="test" valueType="select" objName="租船方式" mustSelect="true">
<option type="checkbox" name="test2" >请选择<option>
<option type="checkbox" name="test2" >3 <option>
<option type="checkbox" name="test2" >4 <option>
</select>
9、列表框(list)
定义:
valueType="list"
属性:
objName   对象名称(字符串)
minSelect 最小选择数(数字)
maxSelect 最大选择数(数字)
举例:
<select name="test" valueType="list" objName="爱好" size =5 minSelect="2" maxSelect="5">

/////////////以下由EYES添加//////////
10、比较（compare)	一般用作两次密码对比
vt="compare"
to="要比较的表单名"
11、数字字符串(number)
vt="number"
min最小长度
max最大长度

11、用户名（username)
只检测是否只包含字母、数字、下划线，并以字母开关
要检测长度请用 min属性
min
max
r

*/

/*****************functions.js**********************/
/***检查表单所有元素***/
function checkForm(oForm)
{
	//eval("var oForm=document."+formName);
	var eles = oForm.elements;
	//oForm = document.getElementsByName(formName);
	//var eles = oForm[0];

	//遍历所有表元素
	for(var i=0;i<eles.length;i++)
	{
		//是否需要验证
		var sType=eles[i].vt;

		if(sType)
		{
			if(eles[i].r!=null && eles[i].r=="true" )
			{
				//els=eles[i].value;
				//els=trim(els);
				if(trim(eles[i].value)=="")
				{
					if(eles[i].on!=null)
					{
						alert(eles[i].on+" 不可以为空");
					}
					else
					{
						alert("该文本框为必输字段");
					}
					eles[i].focus();
					event.returnValue=false;
					return false;
				}
			}
			switch(sType)
			{
				//整数
				case "int":
					if(!validInt(eles[i]))
					{
						event.returnValue=false;
						return false;
					}
					break;
				//小数
				case "float":
					if(!validFloat(eles[i]))
					{
						event.returnValue=false;
						return false;
					}
					break;
				//字符串
				case "string":
					if(!validString(eles[i]))
					{
						event.returnValue=false;
						return false;
					}
					break;
				//日期
				case "date":
					if(!validDate(eles[i]))
					{
						event.returnValue=false;
						return false;
					}
					break;
				//邮件
				case "email":
					if(!validEmail(eles[i]))
					{
						event.returnValue=false;
						return false;
					}
					break;
				//单选按钮
				case "radio":
					if(!validRadio(eles[i].name))
					{
						event.returnValue=false;
						return false;
					}
					break;
				//复选按钮
				case "checkbox":
					//	alert(eles[i].name);
					if(!validBox(eles[i].name))
					{ 	
						event.returnValue=false;
						return false;
					}
					break;
				//下拉列表框
				case "select":
					if(!validSelect(eles[i]))
					{
						event.returnValue=false;
						return false;
					}
					break;
				//列表框
				case "list":
					if(!validList(eles[i]))
					{
						event.returnValue=false;
						return false;
					}
					break;
				//比较
				case "compare":
					if (!validCompare(eles[i]))
					{
						event.returnValue=false;
						return false;
					}
					break;
				//数字字符串
				case "number":
					if (!validNum(eles[i]))
					{
						event.returnValue=false;
						return false;
					}
					break;
				//用户名
				case "username":
					if (!validUsername(eles[i]))
					{
						event.returnValue=false;
						return false;
					}
					break;				
				//字母 [a-zA-Z]
				case "letter":
					if (!validLetter(eles[i]))
					{
						event.returnValue=false;
						return false;
					}
					break;
			}//end swith
		}
	}
	event.returnValue=true;
	return true;
}
/***验证是否为整数***/
function validInt(ele)
{
	if(!isInt(ele.value))
	{
		alert("请输入有效整数");
		ele.focus();
		return false;
	}
	else
	{
		if(ele.max!=null && !isNaN(ele.max))
			if(parseInt(ele.max)<parseInt(ele.value))
			{
				alert("您输入的 "+ convertNullToSpace(ele.on)+" 值应该小于"+ele.max);
				ele.focus();
				return false;
			}
		if(ele.min!=null && !isNaN(ele.min))
			if(parseInt(ele.min)>parseInt(ele.value))
			{
				alert("您输入的 "+ convertNullToSpace(ele.on)+" 值应该大于"+ele.min);
				ele.focus();
				return false;
			}
	}
	return true;
}
/***判断是否为整数***/
function isInt(s)
{
	var patrn=/^0|^[1-9]\d*/;
	if (!patrn.exec(s))
	{
		return false;
	}
	else
	{
		return true;
	}
}
/***判断是否为数字字符串***/
function isNumber(s)
{
	var patrn=/^[0-9]+$/;
	if (!patrn.exec(s))
	{
		return false;
	}
	else
	{
		return true;
	}
}
/***验证是否为小数***/
function validFloat(ele)
{
	if(isNaN(ele.value))
	{
		alert("请输入有效数字");
		ele.focus();
		return false;
	}
	else
	{
		if(ele.declen!=null && !checkDecimal(ele.value,ele.declen))
		{
			alert("您输入的 "+convertNullToSpace(ele.on)+" 值小数位最多为"+ele.declen+"个小数位");
			ele.focus();
			return false;
		}
		if(ele.max!=null && !isNaN(ele.max))
			if(parseInt(ele.max)<parseInt(ele.value))
			{
				alert("您输入的 "+ convertNullToSpace(ele.on)+" 值应该小于"+ele.max);
				ele.focus();
				return false;
			}
		if(ele.min!=null && !isNaN(ele.min))
			if(parseInt(ele.min)>parseInt(ele.value))
			{
				alert("您输入的 "+ convertNullToSpace(ele.on)+" 值应该大于"+ele.min);
				ele.focus();
				return false;
			}
	}
	return true;
}
/***验证是否为字符串***/
function validString(ele)
{
	//最小长度
	if(ele.min!=null && !isNaN(ele.min))
	{
		var value=new String(ele.value);
		if(value.length<parseInt(ele.min))
		{
			alert("您输入的 "+convertNullToSpace(ele.on)+" 字数最小长度为"+ele.min);
			ele.focus();
			return false;
		}
	}
	//最大长度
	if(ele.max!=null && !isNaN(ele.max))
	{
		var value=new String(ele.value);
		if(value.length>parseInt(ele.max))
		{
			alert("您输入的 "+convertNullToSpace(ele.on)+" 字数最大长度为"+ele.max);
			ele.focus();
			return false;
		}
	}
	return true;
}
/***验证是否为数字字符串***/
function validNum(ele)
{
	//alert(ele.value);////////////////////////////////
	if (!isNumber(ele.value))
	{
		alert(ele.on+" 必须是数字");
		ele.focus();
		return false;
	}
	//最小长度
	if(ele.min!=null && !isNaN(ele.min))
	{
		var value=new String(ele.value);
		if(value.length<parseInt(ele.min))
		{
			alert("您输入的 "+convertNullToSpace(ele.on)+" 字数最小长度为"+ele.min);
			ele.focus();
			return false;
		}
	}
	//最大长度
	if(ele.max!=null && !isNaN(ele.max))
	{
		var value=new String(ele.value);
		if(value.length>parseInt(ele.max))
		{
			alert("您输入的 "+convertNullToSpace(ele.on)+" 字数最大长度为"+ele.max);
			ele.focus();
			return false;
		}
	}
	return true;
}
/***验证是否为日期格式***/
function validDate(ele)
{
	if(!isDate(ele.value)&&ele.value!="")
	{
		alert("请输入有效日期(yyyy-mm-dd)");
		ele.focus();
		return false;
	}
	return true;
}
/***判断是否为日期***/
function isDate(str)
{
	var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})/);
	if(r==null)
	{
		return false;
	}
	var d= new Date(r[1], r[3]-1, r[4]);
	if(!(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]))
	{
		return false;
	}
	return true;
}
/***验证是否为电子邮箱***/
function validEmail(ele)
{
	if(!isEmail(ele.value))
	{
		alert("请输入有效邮箱");
		ele.focus();
		return false;
	}
	return true;
}
/***判断是否为邮箱***/
function isEmail(str)
{
	if(str.match(/[\w-.]+@{1}[\w-]+\.{1}\w{2,4}(\.{0,1}\w{2}){0,1}/ig)!=str)
		return false;
	else
		return true;
}
/***验证单选按钮是否需要选择***/
function validRadio(eleName)
{
	var ele = document.getElementsByName(eleName);
	//eval("var rads="+name+"."+ele.name);
	var selectCount=0;
	for(var i=0;i<ele.length;i++)
	{
		if(ele[i].checked)
		{
			selectCount++;
		}
	}

	if(ele[0].r!=null)
	{
		if(selectCount==0)
		{
			alert("请选择"+convertNullToSpace(ele[0].on));
			ele[0].focus();
			return false;
		}
	}
	return true;
}
/***验证复选按钮是否需要选择***/
function validBox(eleName)
{
	var ele = document.getElementsByName(eleName); //add by eyes
	//alert(ele[2].mis);
	//alert("ele length:"+ele.length);
	//   eval("var chks="+name+"."+ele.name);
	var selectCount=0;
	for(var i=0;i<ele.length;i++)
	{
		if(ele[i].checked)
		{
			selectCount++;
		}
	}

	if(ele[0].min!=null && !isNaN(ele[0].min))//注意这里用ele[0]，而不是ele.minsel
	{
		//alert("有mis");
		if(selectCount<parseInt(ele[0].min))
		{
			alert(convertNullToSpace(ele[0].on)+" 至少选择"+ele[0].min+"项");
			ele[0].focus();
			return false;
		}
	}
	if(ele[0].max!=null && !isNaN(ele[0].max))
	{
		if(selectCount>parseInt(ele[0].max))
		{
			alert(convertNullToSpace(ele[0].on)+" 至多选择"+ele[0].max+"项");
			ele[0].focus();
			return false;
		}
	}
	return true;
}
/***验证下拉列表框是否需要选择***/
function validSelect(ele)
{
	//var rads = document.getElementsByName(ele.name);
	if(ele.r!=null && ele.r)
	{
		if(ele.selectedIndex==0)
		{
			alert("请选择"+convertNullToSpace(ele.on));
			ele.focus();
			return false;
		}
	}
	return true;
}
/***验证列表框的选择项数***/
function validList(ele)
{
	//var rads = document.getElementsByName(ele.name);
	var selectCount=0;
	for(var i=0;i<ele.options.length;i++)
	{
		if(ele.options[i].selected)
		{
			selectCount++;
		}
	}

	if(ele.mis!=null && !isNaN(ele.mis))
	{
		if(selectCount<parseInt(ele.mis))
		{
			alert(convertNullToSpace(ele.on)+"至少选择"+ele.mis+"项");
			ele.focus();
			return false;
		}
	}
	if(ele.mas!=null && !isNaN(ele.mas))
	{
		if(selectCount>parseInt(ele.mas))
		{
			alert(convertNullToSpace(ele.on)+"至多选择"+ele.mas+"项");
			ele.focus();
			return false;
		}
	}
	return true;
}
/***将NULL转化为空格，用于显示对象名称***/
function convertNullToSpace(paramValue)
{
	if(paramValue==null)
		return "";
	else
		return paramValue;
}
/***检查小数位数***/
function checkDecimal(num,declen)
{
	var len = declen*1+1;
	if(num.indexOf('.')>0)
	{
		num=num.substr(num.indexOf('.')+1,num.length-1);
		if ((num.length)<len)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	return true;
}
/***去除空格***/
function trim(str)
{
	if (str.length > 0)
	{
		while ((str.substring(0,1) == " ") && (str.length > 0))
		{
			str = str.substring(1,str.length);
		}
		while (str.substring(str.length-1,str.length) == " ")
		{
			str = str.substring(0,str.length-1); }
		}
	return str;
}

///////////////////////add by eyes/////////////////////
//比较
function validCompare(ele)
{
	var to = document.getElementsByName(ele.to);
	if (ele.value!=to[0].value)
	{
		alert("两次"+to[0].on+"不一样");
		ele.focus();
		return false;
	}
	return true;
}

//数字字符串
function validNumber(ele)
{
	
}

/***验证是否为有效的用户名***/
function validUsername(ele)
{
	var p=/^[a-z]\w*$/i;
	if (!p.exec(ele.value))
	{
		alert(convertNullToSpace(ele.on)+" 格式不正确");
		ele.focus();
		return false;
	}

	//最小长度
	if(ele.min!=null && !isNaN(ele.min))
	{
		var value=new String(ele.value);
		if(value.length<parseInt(ele.min))
		{
			alert("您输入的 "+convertNullToSpace(ele.on)+" 字数最小长度为"+ele.min);
			ele.focus();
			return false;
		}
	}
	//最大长度
	if(ele.max!=null && !isNaN(ele.max))
	{
		var value=new String(ele.value);
		if(value.length>parseInt(ele.max))
		{
			alert("您输入的 "+convertNullToSpace(ele.on)+" 字数最大长度为"+ele.max);
			ele.focus();
			return false;
		}
	}
	return true;
}


/***验证是否为英文字母***/
function validLetter(ele)
{
	if (trim(ele.value)=='' && (ele.r==null || ele.r=='false'))
	{
		return true;
	}
	var p=/^[a-zA-Z]+$/i;
	if (!p.exec(ele.value))
	{
		alert(convertNullToSpace(ele.on)+" 只能为英文字母");
		ele.focus();
		return false;
	}

	//最小长度
	if(ele.min!=null && !isNaN(ele.min))
	{
		var value=new String(ele.value);
		if(value.length<parseInt(ele.min))
		{
			alert("您输入的 "+convertNullToSpace(ele.on)+" 字数最小长度为"+ele.min);
			ele.focus();
			return false;
		}
	}
	//最大长度
	if(ele.max!=null && !isNaN(ele.max))
	{
		var value=new String(ele.value);
		if(value.length>parseInt(ele.max))
		{
			alert("您输入的 "+convertNullToSpace(ele.on)+" 字数最大长度为"+ele.max);
			ele.focus();
			return false;
		}
	}
	return true;
}