﻿<!--
/*JS Validator */
/*Author : ChenReal
  Email  : chenreal@21cn.com
  Date   : 2008-1-21  
*/

/*Common:公共方法*/
function Id(v){
    var Obj = document.getElementById(v);
    if(Obj) return Obj;
}

function Tags(Obj,v){
    if(Obj){return Obj.getElementsByTagName(v)}
}

function Obj(str){
    return eval('('+str+')');
}
function Trim(str)
{
    return str.replace(/(^\s*)|(\s*$)/g, "");
}
function lTrim(str)
{
    return str.replace(/(^\s*)/g, "");
}

function rTrim(str)
{
    return str.replace(/(\s*$)/g, "");
}

function funcSetTableColor(e){  
    if(!e) return;
    var oTr = Tags(e,"tr");
    for(var i=0;i<oTr.length;i++){
        if(i % 2 == 1){
            oTr[i].className="trdark";
        }
    }
}
/*Validator主体函数
  参数说明：
  name:表单的ID
  m:消息提示的显示方式，1为文本方式，其他为系统弹出窗口
  strNull:空值时的错误信息的模板
*/
function funcValiate(name,m,strNull){
    if(!strNull) strNull= "{0}不能为空";
    var obj = Id(name)
    var str = obj.value;    
    objVal = Obj(obj.attributes["validate"].value);            
    result = true;
    if(!objVal){return result;}
    if(objVal.Null == 0){//必填项验证
        result = result && (Trim(str) != "");
        if(!result){
            funcShowError(strNull.replace("{0}",objVal.Name),obj,m);
            return result;
        }
    }
    else{
        if(Trim(str) == "") return result;
    }
    if(objVal.MinLen){//最小长度
        result = result &&objVal.MinLen<=Trim(str).length;
        if(!result){
            funcShowError(objVal.Name+"长度不能小于"+objVal.MinLen+"个字符",obj,m);
            return result;
        }
    }
    if(objVal.MaxLen){//最大长度
        result = result &&objVal.MaxLen>=Trim(str).length;
        if(!result){
            funcShowError(objVal.Name+"长度不能大于"+objVal.MinLen+"个字符",obj,m);
            return result;
        }
    }
    if(objVal.Max){//最大值
        result = result &&objVal.Max>=eval(str);
        if(!result){
            funcShowError(objVal.Name+"的值必须小于"+objVal.Max,obj,m);
            return result;
        }
    }
    if(objVal.Min){//最小值
        result = result &&objVal.Min<=eval(str);
        if(!result){
            funcShowError(objVal.Name+"的值必须大于"+objVal.Min,obj,m);
            return result;
        }
    }
    switch(objVal.Type){//类型验证
        case "Email" :
            result = result && funcChkEmail(str);
            break;
        case "Number" :
            result = result && funcChkNumber(str);
            break;
        case "Phone" :
            result = result && funcChkPhone(str);
            break;
        case "Mobile" :
            result = result && funcChkMobile(str);
            break;
        case "Url" :
            result = result && funcChkUrl(str);
            break;
        case "QQ" :
            result = result && funcChkQQ(str);
            break;
        case "Date" :
            result = result && funcChkDate(str);
            break;
        case "Chinese" :
            result = result && funcChkChinese(str);
            break;
        case "English" :
            result = result && funcChkEnglish(str);
            break;  
    }
    if(!result){
        funcShowError(objVal.Name+"格式不正确",obj,m);
    }
    return result;       
}
function funcChkEmail(str)
{
    var pattern = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
    return pattern.test(str);
}
function funcChkNumber(str){
    var pattern = /^\d+$/;
    return pattern.test(str);
}
function funcChkPhone(str){
    var pattern = /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/;
    return pattern.test(str);
}
function funcChkMobile(str){
    var pattern = /^((\(\d{2,3}\))|(\d{3}\-))?(13\d{9})|(15\d{9})$/;
    return pattern.test(str);
}
function funcChkUrl(str){
    var pattern = /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
    return pattern.test(str);
}
function funcChkChinese(str){
    var pattern = /^[\u0391-\uFFE5\s]+$/;
    return pattern.test(str);
}
function funcChkEnglish(str){
    var pattern = /^[A-Za-z\s]+$/;
    return pattern.test(str);
}
function funcChkQQ(str){
    var pattern = /^[1-9]\d{4,11}$/;
    return pattern.test(str);
}

function funcChkDate(str){ 
    var pattern = /^[1-9]\d{3}-[\d]{1,2}-[\d]{1,2}$/;
    if(pattern.test(str)){
        arr = str.split("-");
        return (parseInt(arr[1])>0 && parseInt(arr[1])<13 && parseInt(arr[2])>0 && parseInt(arr[2])<32)
    }
    return false;
}

function funcRexReplace(e,regx){
    e.value = e.value.replace(regx,"");
}

function funcCheckForm(name,m){
    Inputs = Tags(Id(name),"input");
    Selects = Tags(Id(name),"select");
    Texts = Tags(Id(name),"textarea");
    if(m==1)funcClearErrMsg(name);
    for(var i =0;i<Inputs.length;i++){
        if(Inputs[i].type != "text" && Inputs[i].type != "password"　&& Inputs[i].type != "file") continue;        
        if(Inputs[i].attributes["validate"] && Inputs[i].attributes["validate"].value){
            if(!funcValiate(Inputs[i].id,m)) return false;
        }
    }
    for(var i =0;i<Selects.length;i++){        
        if(Selects[i].validate){
            if(!funcValiate(Selects[i].id,m,"请选择:{0}")) return false;
        }
    }
    for(var i =0;i<Texts.length;i++){        
        if(Texts[i].validate){
            if(!funcValiate(Texts[i].id,m)) return false;
        }
    }    
    return true;
}

function funcShowError(msg,obj,m){
    if(m==1){                
        var oSpan = document.createElement("span");
        oSpan.className = "error";
        oSpan.innerHTML = "　错误：" + msg; 
        obj.parentNode.appendChild(oSpan);
    }
    else{
        alert(msg);
    }
    obj.focus();
}

function funcClearErrMsg(name){
    Errs = Tags(Id(name),"span");
    for(var i =0;i<Errs.length;i++){        
        if(Errs[i].className=="error"){
            Errs[i].parentNode.removeChild(Errs[i]);
        }
    }
}
-->

