/****************************************表单检测******************************************
**
**	定义格式：~格式!`表单名称
**
**	其中!为可选，如果不定义!，则允许为空
**
**	格式同样为可选项，格式列表如下：
**	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;//忽略没有名字的元素
		}
		//alert(fm[i].value);
		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地址。\n\n提示：admin@vip.com");
				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;
			}
		}
		else if(format=="card")	//身份证号码
		{
			if(!isCard(value))
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个有效身份证号码。");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="url")	//网址
		{
			var found=value.match(/^[a-zA-z]+\:\/\/(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/);
			if(found==null)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个有效网址。\n\n提示：http://www.175long.cn");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="ip")	//IP地址
		{
			if(!isIP(value))
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个有效IP地址。");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="id1")	//ID类型1,充许英文+数字+下划线(0~30字节) 
		{
			var found=value.match(/\w+@.+\..+/);
			if(found==null)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个有效值。");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="id2")	//ID类型1,充许中文+英文+数字+下划线(0~30字节) 
		{
			var found=value.match(/\w+@.+\..+/);
			if(found==null)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个有效值。");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="en")	//英文 
		{
			var found=value.match(/^[A-Za-z]+$/);
			if(found==null)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个有效英文。");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="cn")	//中文 
		{
			var found=value.match(/^[\u4e00-\u9fa5]+$/);
			if(found==null)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个有效中文。");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="mob")	//手机 
		{
			var found=value.match(/^(((13[0-9]{1})|159|153)+\d{8})$/);
			if(found==null)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个有效手机号码。");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="tel")	//电话
		{
			var found=value.match(/^[0-9]{3,4}-[0-9]{7,8}$/);
			if(found==null)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个有效电话号码。\n\n提示：020-8888888");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="tmb")	//电话
		{
			var found=value.match(/^[0-9]{3,4}-[0-9]{7,8}$/);
			var founds=value.match(/^(((13[0-9]{1})|159|153)+\d{8})$/);
			if(found==null&&founds==null)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个有效的联系电话！");
				fm[i].focus();
				return false; 
			}
		}
		else if(format=="fax")	//传真
		{
			var found=value.match(/^[0-9-]+$/);
			if(found==null)
			{
				alert(form_name+"的格式不正确：\n\n"+value+"不是一个有效传真号码。");
				fm[i].focus();
				return false;
			}
		}
		else if(format=="qxz")	//请选择
		{
			if(value=="请选择")
			{
				alert(info);
				fm[i].focus();
				return false;
			}
		}
		else if(format=="othe")	//传真
		{
			if(value=="请输入搜索关键字")
			{
				alert(info);
				fm[i].focus();
				return false;
			}
		}
		else if(format=="gjz")	//传真
		{
			if(value=="请输入关键字")
			{
				alert(info);
				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;
}

function isCard(obj){  
        /*功能：验证身份证号码是否有效 */  
    var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};     
    
    var iSum = 0;     
    var info = "";     
    var strIDno = obj;     
    var idCardLength = strIDno.length;       
    if(!/^\d{17}(\d|x)$/i.test(strIDno)&&!/^\d{15}$/i.test(strIDno))      
    {     
        //alert("非法身份证号");     
        return false;     
    }     
      
    //在后面的运算中x相当于数字10,所以转换成a     
    strIDno = strIDno.replace(/x$/i,"a");     
    
    if(aCity[parseInt(strIDno.substr(0,2))]==null)     
    {     
        //alert("非法地区");     
        return false;     
    }     
         
    if (idCardLength==18)     
    {     
        sBirthday=strIDno.substr(6,4)+"-"+Number(strIDno.substr(10,2))+"-"+Number(strIDno.substr(12,2));     
        var d = new Date(sBirthday.replace(/-/g,"/"))     
        if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))     
        {            
            //alert("非法生日");     
            return false;     
        }     
    
        for(var i = 17;i>=0;i --)     
            iSum += (Math.pow(2,i) % 11) * parseInt(strIDno.charAt(17 - i),11);     
    
        if(iSum%11!=1)     
        {     
            //alert("非法身份证号");     
            return false;     
        }     
    }     
    else if (idCardLength==15)     
    {     
        sBirthday = "19" + strIDno.substr(6,2) + "-" + Number(strIDno.substr(8,2)) + "-" + Number(strIDno.substr(10,2));     
        var d = new Date(sBirthday.replace(/-/g,"/"))     
        var dd = d.getFullYear().toString() + "-" + (d.getMonth()+1) + "-" + d.getDate();        
        if(sBirthday != dd)     
        {     
           //alert("非法生日");     
            return false;     
        }     
    }     
    return true;      
}   

function isIP(obj)      
{      
    var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; //IP正则     
    if(re.test( obj ))     
    {     
        if( RegExp.$1 <256 && RegExp.$2<256 && RegExp.$3<256 && RegExp.$4<256) return true;     
    }     
    //alert("请输入合法的计算机IP地址");     
    return false;      
}  
function btnclick(btnID) 
{    
    if (event.keyCode == 13) 
    {        
        event.keyCode=9;
        event.returnValue = false;
        document.all[btnID].click(); 
    }
} 
function ResumeError() {return true;}window.onerror = ResumeError;
