﻿////////////////////////////////////////////////////////////////////////////////
/*
*--------------- 客户端表单通用验证CheckForm(oForm) -----------------
* 功能:通用验证所有的表单元素.
* 使用:
*    <form name="form1" onsubmit="return CheckForm(this)">
*    <input type="text" name="id" check="^S+$" warning="id不能为空,且不能含有空格">
*    </form>
* 对text,password,hidden,file,textarea,select,radio,checkbox进行合法性验证
*--------------- 客户端表单通用验证CheckForm(oForm) -----------------
*/
//主函数
function CheckForm(oForm){
	var els = oForm.elements;
	var eCheck,eLink;
	//遍历所有表元素
	for(var i=0;i<els.length;i++){
		if(els[i].disabled==false && els[i].style.display!='none'){
			if(CheckLink(els[i],"OR")==false){
				GoBack(els[i]);return false;
			}else{
				if(els[i].getAttributeNode("check")!=null){
					//是否需要验证
					eCheck = els[i].getAttributeNode("check").value;
					if(eCheck!=""){
						var sReg = eCheck;//取得正则字符
						var sVal = GetValue(els[i]);//取得表单的值
						var reg = new RegExp(sReg,"i");//正则表达式
						if(!reg.test(sVal)){
							Alert(els[i].getAttributeNode("warning").value);//弹出提示Warning
							GoBack(els[i])//该表单元素取得焦点
							return false;
						}
						//与判断开始
						else{
							if(CheckLink(els[i],"AND")==false){
								GoBack(els[i]);return false;
							}
						}
						//与判断结束
					}
				}
			}
		}
	}
}
function CheckLink(oId,oType){
	var eId=oId;
	var eLink;
	if(eId.getAttributeNode("link")!=null){
		eLink = (eId.getAttributeNode("link").value).split("$");
		if(eLink[0].toUpperCase()==oType){
			var eLinkName=document.getElementById(eLink[1]).value
			switch(eLink[0].toUpperCase()){
				case "AND":
					if (oId.value!=eLinkName){
						Alert(eLink[2]);
						return false;
					}
				case "OR":
					if((eLinkName=="" && eId.value=="")  || (eLinkName==eLink[3] && (eId.value==eLink[3] ||  eId.value==""))){
						Alert(eLink[2]);
						return false;
					}
			}
		}
	}
		
}
//通用取值函数分三类进行取值
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"来表示选中的个数
	function GetValueChoose(el){
		var sValue = "";
		var tmpels = document.getElementsByName(el.name); //取得第一个元素的name
		for(var i=0;i<tmpels.length;i++){
			if(tmpels[i].checked){sValue += "0";}
		}
		return sValue;
	}
	//取得select的选中数,用"0"来表示选中的个数
	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();
		case "checkbox":
		case "radio": var els = document.getElementsByName(el.name);els[0].focus();
		case "select-one":
		case "select-multiple":el.focus();
	}
}
