//*--------------- 客户端表单通用验证CheckForm(theForm) -----------------
// * 功能:通用验证所有的表单元素.
// 
// * 更新时间:05-03-02
////////////////////////////////////////////////////////////////////////////////

function checkform(theForm)
{
    var els = theForm.elements;
    //遍历所有表元素
    for(var i=0;i<els.length;i++)
    {
        //是否需要验证
        if(els[i].check)
        {
            
            var sVal = GetValue(els[i]); //取得表单的需验值
			var sCheckName = els[i].check //取得表单的需验值的类型
            if(GetTFWarn(sVal,sCheckName) != true){ //是否警告语为空
                alert(GetTFWarn(sVal,sCheckName)); //验证不通过,弹出提示warning
                GoBack(els[i])  //该表单元素取得焦点,用通用返回函数
                return false;
            }
        }
    }
}
//根据表单中的check的值,分别给出不同的正则表达式和警告语
function GetTFWarn(cVal,cType)
{
switch(cType)
    {		
//--------------------
	case "user": {
		var patrn=/^[a-z]{1}([a-z0-9]|[._]){4,19}$/;
		if (!patrn.exec(cVal))	return "用户名或密码必须是以字母开头\r由5-20个字母和数字组成!"; else return true;}
//--------------------
	case "blank": {
		var patrn=/\S/;
		if (!patrn.exec(cVal))	return "这个项目必须填!"; else return true;}
//--------------------
	case "tel": {
    	var patrn=/(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{5,8}$)/;; 
		if(!patrn.exec(cVal)) return "电话号码不正确！"; 	else return true;}
//--------------------
	case "mob": {
    	var patrn=/^0{0,1}13[0-9]{9}$/;
		if(!patrn.exec(cVal)) return "手机号码不正确！"; 	else return true;}
//--------------------
	case "email": {
    	var patrn=/(^((\w)|[-]|[.])+@(((\w)|[-])+[.])+[a-z]{2,4}$)/; 
		if(!patrn.exec(cVal)) return "电子邮件不正确！"; 	else return true;}
//--------------------
	case "int": {
    	var patrn=/^[0-9]{1,20}$/;
		if(!patrn.exec(cVal)) return "有些项目必须为整数！"; 	else return true;}
//--------------------
	case "money": {
    	var patrn=/^\d+(\.)?\d{0,2}$/;
		if(!patrn.exec(cVal)) return "有些项目必须为金额格式！"; 	else return true;}
//--------------------
	case "name": {
    	var patrn=/^[A-Za-z0-9_-]+$/;
		if(!patrn.exec(cVal)) return "名称必须是字母和数字，以及一些常用的连字符！"; 	else return true;}
//--------------------
	case "zfd": {
    	var patrn=/^\d+(\.)?\d{0,3}$/;
		if(!patrn.exec(cVal)) return "有些项目必须为正浮点数(三位小数)！"; 	else return true;}
//--------------------
	case "img": {
    	var patrn=/(.*)(.jpg|.gif)$/;
		if(!patrn.exec(cVal)) return "对不起，只能上传JPG和GIF的图形文件！"; 	else 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();
    }
}