/****************************************表单检测******************************************
**
**	定义格式：~格式!`表单名称
**
**	其中!为可选，如果不定义!，则允许为空
**
**	格式同样为可选项，格式列表如下：
**	1、数字f:		一个数字后加冒号，如：“3:”，表示长度最少需要3位以上。f为可选，如果定义f，则长度只能是3位
**	2、=表单名称	检测当前表单的值是否为“表单名称”的值，通常用于确认密码检测
**	3、email		Email检测
**	4、int			整型检测
**	5、float		浮点型检测
**	6、date			日期检测
**
**	与之前的版本做了些简化，去掉一些很小用的功能，如时间检测、下拉框检测等
**
**	广州联雅网络	http://www.ly200.com
**	Powered by wickerNetro
**	QQ：3095024
**	Email：caiyuzhuan@126.com
**
****************************************表单检测******************************************/

function checkForm(fm)
{
	for(i=0;i<fm.length;i++)
	{
		var check=fm[i].check;
		if(!check)
		{
			continue;	//忽略未定义check的元素
		}
		
		var format_limit=check.lastIndexOf("~");
		if(format_limit<0)
		{
			continue;
		}
		var info=check.substring(0,format_limit);	//提示信息
		var format_str=check.substring(format_limit+1,check.length);	//格式和表单名称字符串
		var form_name_limit=format_str.lastIndexOf("`");
		var format=format_str.substring(0,form_name_limit);		//格式
		var form_name=format_str.substring(form_name_limit+1,format_str.length);	//表单名称
		var name=fm[i].name;
		
		if(name=="")
		{
			continue;//忽略没有名字的元素
		}
		var value=trim(fm[i].value);	//去除空格
		
		var notNull=false;	//是否允许为空
		if(format.charAt(format.length-1)=="!")
		{
			notNull=true;
			format=format.substring(0,format.length-1);		//去掉感叹号
		}
		if(notNull)
		{
			if(value=="")
			{
				alert(info);
				fm[i].focus();
				return false;
			}
		}
		else if(value=="")	//内容可以为空
		{
			continue;
		}
		
		var colonP=format.indexOf(":");		//内容的长度判断
		if(colonP>0)
		{
			if(format.charAt(colonP-1)=='f')	//固定长度
			{
				var lengthLimit=format.substring(0,colonP-1);
				if(!isNaN(lengthLimit))
				{
					var len = getRealLength(value);
					if(len!=lengthLimit)
					{
						alert(form_name+"的长度必须为"+lengthLimit+"位！");
						fm[i].focus();
						return false;
					}
				}
				return false;
			}
			else
			{
				var lengthLimit=format.substring(0,colonP);
				if(!isNaN(lengthLimit))
				{
					var len = getRealLength(value);
					if(len<lengthLimit)
					{
						alert(form_name+"的长度必须为"+lengthLimit+"位以上！");
						fm[i].focus();
						return false;
					}
				}
			}
			format=format.substring(colonP+1,format.length);
		}
		
		
		if(format.substring(0,1)=='=')	//检测是否与某字段的值相等
		{
			obj_c=format.substring(1,format.length);
			if(fm[obj_c].value!=value)
			{
				alert(info);
				fm[i].focus();
				return false;
			}
		}
		else if(format=="email")	//电子邮件格式
		{
			var found=value.match(/\w+@.+\..+/);
			if(found==null)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个Email地址");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="int")	//整数
		{
			var intVal=parseInt(value);
			if(isNaN(intVal)||intVal!=value)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个整数。");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="float")	//浮点数
		{
			var floatVal=parseFloat(value);
			if(isNaN(floatVal)||floatVal!=value)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个浮点数。");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="date")	//日期
		{
			var found=value.match(/(\d{1,5})-(\d{1,2})-(\d{1,2})/);
			if(found==null||found[0]!=value||found[2]>12||found[3]>31)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个日期\n\n提示：[2008-08-08]");
				fm[i].focus();
				return false;
			}
			var year=trim0(found[1]);
			var month=trim0(found[2])-1;
			var date=trim0(found[3]);
			var d=new Date(year,month,date);
			if(d.getFullYear()!=year||d.getMonth()!=month||d.getDate()!=date)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个正确的日期\n\n提示：[2008-08-08]");
				fm[i].focus();
				return false;
			}
		}
	}
	return true;
}

function trim(str)		//除去字符串变量s两端的空格
{
	str=str.replace(/^ */,"");
	str=str.replace(/ *$/,"");
	return str;
}

function trim0(str)	//除去字符串表示的数值变量开头的所有的"0"
{
	if(str.length==0)
		return str;
	
	str=str.replace(/^0*/,"");
	if(str.length==0)
		str="0";
	return str;
}

function getRealLength(str)	//取得字符串的长度
{
	var len=0;
	for(j=0;j<str.length;j++)
	{
		if(str.charCodeAt(j)>255)
			len+=2;
		else
			len++;
	}
	return len;
}