/*///////////////////////////////////////////////////////////////////////////////
　　/*
　　 *--------------- 客户端表单通用验证CheckForm(oForm) -----------------
　　 * 功能:通用验证所有的表单元素.
　　 * 使用:
　　 *　　<form name="form1" onsubmit="return CheckForm(this)">
　　 *　　<input type="text" name="id" checkempty="true" check="^\S+$" warning="id不能为空,且不能含有空格">
　　 *　　<input type="submit">
　　 *　　</form>
*    checkempty="true"属性：可以为空，但一旦不为空，就需要验证。慎用。
　　 * author:wanghr100(灰豆宝宝.net)
　　 * email:wanghr100@126.com
　　 * update:19:28 2004-8-23
　　 * 注意:写正则表达式时一定要小心.不要让"有心人"有空子钻.
　　 * 已实现功能:
　　 * 对text,password,hidden,file,textarea,select,radio,checkbox进行合法性验证
　　 * 待实现功能:把正则表式写成个库.
　　 *--------------- 客户端表单通用验证CheckForm(oForm) -----------------
　　 */
　　/*//////////////////////////////////////////////////////////////////////////////
/*

				常见的16种表达式已经做成了库，调用时可以直接写关键字：
				例如：
				<input type="text" name="id" check="empty" warning="不能为空">
				关键字		说明
				empty       //非空
				password;   //不少于6位的密码
				phone     	//电话号码
				select		//必须选择；用于select和radio
				check_1		//必须选中至少1项；用于checkbox
				check_2		//必须选中至少2项；用于checkbox
				check_3		//必须选中至少3项；用于checkbox
				empty_20	//非空，且不少于20个字
				email		//email
				http_url	//url地址，必须用http开头的url地址http://www.sina.com.cn/
				qq			//QQ号
				postcode	//邮政编码
				id			//身份证，18位或15位
				ip			//ip地址
				user_name	//匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)
				chinese 	//必须是中文
				file_img	//匹配上传图片类型：验证jpeg,jpg,gif。
				file_doc 	//匹配上传文档类型：验证doc,txt,pdf,xls*/
　　//主函数
　　function CheckForm(oForm)
　　{
	
		//alert(document.form_login.user.getAttribute("check"));
　　　　var els = oForm.elements;
　　　　//遍历所有表元素
　　　　for(var i=0;i<els.length;i++)
　　　　{
　　　　　　//是否需要验证
	　　　　　　if(els[i].getAttribute("check"))
	　　　　　　{
					if(els[i].getAttribute("checkempty")=="true" && els[i].value =="")
					{
						continue;
					}
					else
					{
			　　　　　　　　//取得验证的正则字符串
			　　　　　　　　var sReg = els[i].getAttribute("check");
							//alert(sReg);
							switch(sReg)
						{
							//定义常用验证正则表达式库，继续扩展中。。。
							case "empty":sReg= "^\\S";//非空
								break;
							case "password":sReg="^\\S{6,}";//不少于6位的密码
								break;
							case "phone":sReg="^\\d+$";//电话号码
								break;
							case "select":sReg="^0$";//必须选择；用于select和radio
								break;
							case "check_1":sReg="^0{1,}$";//必须选中至少1项；用于checkbox
								break;
							case "check_2":sReg="^0{2,}$";//必须选中至少2项；用于checkbox
								break;
							case "check_3":sReg="^0{3,}$";//必须选中至少3项；用于checkbox
								break;
							case "empty_20":sReg="^[\\s|\\S]{20,}$";//非空，且不少于20个字
								break;
							case "email":sReg="\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";//email
								break;
							case "http_url":sReg="^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$";//url地址，必须用http开头的url地址http://www.sina.com.cn/
								break;
							case "qq":sReg="[1-9][0-9]{4,}";//QQ号
								break;
							case "postcode":sReg="[0-9]\\d{5}(?!\\d)";//邮政编码
								break;
							case "id":sReg="\\d{15}|\\d{18}";//身份证，18位或15位
								break;
							case "ip":sReg="\\d+\\.\\d+\\.\\d+\\.\\d+";//ip地址
								break;
							case "user_name":sReg="^[a-zA-Z][a-zA-Z0-9_]{4,15}$";//匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)
								break;
							case "chinese":sReg="[\\u4e00-\\u9fa5]";//必须是中文
								break;
							case "file_img":sReg="(.*)(\\.jpg|\\.gif|\\.jpeg|\\.png|\\.bmp)$";//图片验证
								break;
							case "file_doc":sReg="(.*)(\\.txt|\\.doc|\\.pdf|\\.xls)$";//文本验证
								break;					
								
							default:
								sReg=sReg;
								break;
						}
						//alert(sReg);
		
		　　　　　　　　///取得表单的值,用通用取值函数
		　　　　　　　　var sVal = GetValue(els[i]);
						
		　　　　　　　　//字符串->正则表达式,不区分大小写
		　　　　　　　　var reg = new RegExp(sReg,"i");
		　　　　　　　　if(!reg.test(sVal))
		　　　　　　　　{
		　　　　　　　　　　//验证不通过,弹出提示warning
		　　　　　　　　　　alert(els[i].getAttribute("warning"));
		　　　　　　　　　　//该表单元素取得焦点,用通用返回函数
		　　　　　　　　　　//GoBack(els[i]);//这里还有点问题,等待我解决.
							els[i].focus();
		　　　　　　　　　　return false;
		　　　　　　　　}
		　　　　　　}
			}
　　　　}
　　}

　　//通用取值函数分三类进行取值
　　//文本输入框,直接取值el.value
　　//单多选,遍历所有选项取得被选中的个数返回结果"00"表示选中两个
　　//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个
　　function GetValue(el)
　　{
　　　　//取得表单元素的类型
　　　　var sType = el.type;
　　　　switch(sType)
　　　　{
　　　　　　case "text":
　　　　　　case "hidden":
　　　　　　case "password":
　　　　　　case "file":
　　　　　　case "textarea": return el.value;
　　　　　　case "checkbox":
　　　　　　case "radio": return GetValueChoose(el);
　　　　　　case "select-one":
　　　　　　case "select-multiple": return GetValueSel(el);
　　　　}
　　　　//取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
　　　　function GetValueChoose(el)
　　　　{
　　　　　　var sValue = "";
　　　　　　//取得第一个元素的name,搜索这个元素组
　　　　　　var tmpels = document.getElementsByName(el.name);
　　　　　　for(var i=0;i<tmpels.length;i++)
　　　　　　{
　　　　　　　　if(tmpels[i].checked)
　　　　　　　　{
　　　　　　　　　　sValue += "0";
　　　　　　　　}
　　　　　　}
　　　　　　return sValue;
　　　　}
　　　　//取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
　　　　function GetValueSel(el)
　　　　{
　　　　　　var sValue = "";
　　　　　　for(var i=0;i<el.options.length;i++)
　　　　　　{
　　　　　　　　//单选下拉框提示选项设置为value=""
			 var tmp_value = el.options[i].value;
			 var trim_tmp_value = tmp_value.trim();
　　　　　　　　if(el.options[i].selected && trim_tmp_value!="")
　　　　　　　　{
　　　　　　　　　　sValue += "0";
　　　　　　　　}
　　　　　　}
　　　　　　return sValue;
　　　　}
　　}

　　//通用返回函数,验证没通过返回的效果.分三类进行取值
　　//文本输入框,光标定位在文本输入框的末尾
　　//单多选,第一选项取得焦点
　　//单多下拉菜单,取得焦点
　　function GoBack(el)
　　{
　　　　//取得表单元素的类型
　　　　var sType = el.type;
　　　　switch(sType)
　　　　{
　　　　　　case "text":
　　　　　　case "hidden":
　　　　　　case "password":
　　　　　　case "file":
　　　　　　case "textarea": el.focus();var rng = el.createTextRange(); rng.collapse(false); rng.select();
　　　　　　case "checkbox":
　　　　　　case "radio": var els = document.getElementsByName(el.name);els[0].focus();
　　　　　　case "select-one":
　　　　　　case "select-multiple":el.focus();
　　　　}
　　}
//基于jquery的密码修改验证
function checkModifyPassword()
{
	original_password = $("#original_password").val();//旧密码
	new_password = $("#new_password").val();//新密码
	confirm_password = $("#confirm_password").val();//密码确认
	if(original_password.length == "" )
	{
		alert("请输入旧密码！");
		return false;
	}
	if(new_password.length == "" )
	{
		alert("新密码不能为空！");
		return false;
	}
	if(new_password.length < 6)
	{
		alert("新密码不能少于6位！");
		return false;
	}
	if(new_password != confirm_password)
	{
		alert("新密码和验证密码不一致！");
		return false;
	}
	if(original_password == new_password)
	{
		alert("新旧密码一样的噢，不需要修改！");
		return false;
	}
	return true;
}

function switchCheckBox(box_id,eve){
    if(document.all){
        if(window.event.srcElement.tagName != 'TD'){//判断当前生成事件的对象是否是当前节点，换句话说，就是看事件是否是传播或者冒泡过来的
            return; 
        }
    }else{
        if(eve.eventPhase != eve.AT_TARGET){//判断事件的阶段，是否是目标事件发生的阶段
            return; 
        }

    }
    var box = document.getElementById(box_id);
    if(!box.checked){
        box.checked = true; 
    }else{
        box.checked = false; 
    }
}