/*
--------------- 客户端表单通用验证CheckForm(oForm) -----------------
功能:通用验证所有的表单元素.
使用:
<form name="form1" onsubmit="return CheckForm(this)">
<input type="text" name="id" canBeNull="true" check="^\S+$" warning="如果有，id不能为空,且不能含有空格">
<input type="text" name="id" check="^[a-zA-Z][a-zA-Z0-9]{2,15}$" warning="字母开头，允许3-16字节，允许字母数字">
<input type="submit">
</form>
canBeNull="true"属性：可以为空，但一旦不为空，就需要验证。慎用。
author:bridgler
email:qiao@yynet.cn
update:2008-05-19
version:2.0
*/
// 主函数
function CheckForm(oForm){
	var els = oForm.elements;
	var is_error;
	for(var i=0;i<els.length;i++){//遍历所有表元素
		if(els[i].getAttribute("check")){//是否需要验证
			//多个文本框必须输入一个
			if($(oForm[i]).attr('mustInputOne') != undefined){
				if(mustInputOne()==false){
					return false;
				}
			}
			//if(els[i].getAttribute("mustInputOne")=="true" && els[i].value ==""){
				//continue;
			//}
			//如果有内容，验证之
			if(els[i].getAttribute("canBeNull")=="true" && els[i].value ==""){
				continue;
			}
			//判断一个input的值跟另外一个相等
			else if (els[i].getAttribute('check') == 'equal'){
				equal_to = els[i].getAttribute('equal_to');
				if (els[i].value != $('input[name='+equal_to+']').val()){
					is_error = true;
				}
				else {
					continue;
				}
			}
			//判断input值是否符合规范
			else{
				var sReg = els[i].getAttribute("check");//取得验证字符串
				//alert(sReg);
				switch(sReg){//定义常用验证正则表达式库，继续扩展中。。。
					case "empty":sReg= "\\S";break;//非空
					case "password":sReg="^\\S{6,}";break;//不少于6位的密码
					case "phone":sReg="^\\d+$";break;//电话号码
					case "select":sReg="^0$";break;//必须选择；用于select和radio
					case "check_1":sReg="^0{1,}$";break;//必须选中至少1项；用于checkbox
					case "check_2":sReg="^0{2,}$";break;//必须选中至少2项；用于checkbox
					case "check_3":sReg="^0{3,}$";break;//必须选中至少3项；用于checkbox
					case "empty_20":sReg="^[\\s|\\S]{20,}$";break;//非空，且不少于20个字
					case "email":sReg="\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";break;//email
					case "http":sReg="^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$";break;//url地址，必须用http开头的url地址http://www.sina.com.cn/
					case "url":sReg="^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*";break;//url地址，必须用http开头的url地址http://www.sina.com.cn/
					case "qq":sReg="[1-9][0-9]{4,}";break;//QQ号
					case "postcode":sReg="[0-9]\\d{5}(?!\\d)";break;//邮政编码
					case "id":sReg="\\d{15}|\\d{18}";break;//身份证，18位或15位
					case "ip":sReg="\\d+\\.\\d+\\.\\d+\\.\\d+";break;//ip地址
					case "user_name":sReg="^[a-zA-Z][a-zA-Z0-9_]{2,15}$";break;//匹配帐号是否合法(字母开头，允许3-16字节，允许字母数字和下划线)
					case "user_id":sReg="^[a-zA-Z][a-zA-Z0-9]{2,15}$";break;//匹配帐号是否合法(字母开头，允许3-16字节，允许字母数字)
					case "chinese":sReg="^[一-龥]";break;//必须是中文
					case "file_img":sReg="(.*)(\\.jpg|\\.gif|\\.jpeg|\\.png|\\.bmp)$";break;//图片验证
					case "file_doc":sReg="(.*)(\\.txt|\\.doc|\\.pdf|\\.xls)$";break;//文本验证
					case "file_safe":sReg="(.*)(\\.txt|\\.doc|\\.pdf|\\.xls|\\.jpg|\\.gif|\\.jpeg|\\.png|\\.bmp)$";break;//文本验证
					default:sReg=sReg;break;
				}
				
				var sVal = GetValue(els[i]);//取得表单的值,用通用取值函数
				var reg = new RegExp(sReg,"i");//字符串->正则表达式,不区分大小写
				if(!reg.test(sVal)){
					is_error = true;
				}
			}
			
			//验证不通过,提示
			if (is_error){
				$(els).css('background-color','');
				if($(els[i]).next().attr('id') == 'auth_code_image'){
					$(els[i]).next().after('<span class="warning" style="color:red;position:absolute;line-height:20px;border:1px solid #f33;background:#fee;padding:3px;font-size:12px;" id="warning">'+els[i].getAttribute("warning")+'</span>');
				}else{
					$(els[i]).after('<span class="warning" style="color:red;position:absolute;line-height:20px;border:1px solid #f33;background:#fee;padding:3px;font-size:12px;" id="warning">'+els[i].getAttribute("warning")+'</span>');
				}
				setTimeout(function(){$('#warning').fadeOut(function(){$('#warning').remove();})},4000);
				//该表单元素取得焦点,用通用返回函数
				$(els[i]).css('background-color','#fee');
				els[i].focus();
				return false;
			}
		}
	}
	return true;
}

//通用取值函数分三类进行取值
//文本输入框,直接取值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=""
		if(el.options[i].selected && el.options[i].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();
	}
}

//必须输入一个文本框内容
function mustInputOne(){
	attr = $(':input[mustInputOne]').eq(0).attr('mustInputOne');
	o = $(':input[mustInputOne='+attr+']');
	_length = o.size();
	tmp = false;
	if(_length > 1){
		o.each(function(i){
			if(o.eq(i).val() != ''){
				o.css('background-color','');
				tmp = true;
			}
		});
		if(tmp == false){
			$('#warning').remove();
			o.css('background-color','');
			o.eq(_length-1).after('<span class="warning" style="color:red;position:absolute;line-height:20px;border:1px solid #f33;background:#fee;padding:3px;font-size:12px;" id="warning">输入一项！</span>');
			setTimeout(function(){$('#warning').fadeOut(function(){$('#warning').remove();})},4000);
			o.css('background-color','#fee');
			o.eq(0).focus();
		}
	}
	return tmp;
}
//基于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 || new_password.length > 20){
		alert("新密码不能少于6位，20位以内！");
		return false;
	}
	if(new_password != confirm_password){
		alert("新密码和验证密码不一致！");
		return false;
	}
	if(original_password == new_password){
		alert("新旧密码一样的噢，不需要修改！");
		return false;
	}
	return true;
}