﻿var JValidator =
{
    cssOK: "color:Green;font-size:12px;font-weight: bold ",
    cssErro: "color:Red;font-size:12px;font-weight: bold ",
    cssMsg: "validator_msg",

    msgErro: "输入错误",
    msgOK: "输入正确",

    numberEr: "请输入整数",
    numberOK: "",
    numberRegex: /^\d+$/,

    enEr: "只能输入字母、数字、下划线",
    enOK: "输入正确",
    enRegex: /^[\w\s]+/i,

    emailEr: "请输入正确的邮箱格式",
    emailOK: "邮箱输入正确",
    emailRegex: /^\s*([A-Za-z0-9_-]+(\.\w+)*@(\w+\.)+\w{2,3})\s*$/,


    zipEr: "请输入正确的邮编",
    zipOK: "",
    zipRegex: /[1-9]{1}(\d+){5}/,

    telEr: "请输入正确的手机号码",
    telOK: "",
    telRegex: /^1[3-5]{1}[0-9]{1}[0-9]{8}$/,

    phoneEr: "请输入正确的电话号码",
    phoneOK: "",
    phoneRegex: /^((0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/,

    ipEr: "请输入正确的ip地址",
    ipOK: "ip地址输入正确",
    ipRegex: /(\d+)\.(\d+)\.(\d+)\.(\d+)$/g,

    yearEr:"请输入正确的年份",
    yearOK:"",
    yearRegex:/^(19|20)\d{2}/,
    
    monthEr:"请输入正确的月份",
    monthOK:"",
    monthRegex:/^(0[1-9]|1[0-2])/,
    
    dayEr:"请输入正确的日期",
    dayOK:"",
    dayRegex:/^(0[1-9]|1[0-9])|2(0-9)|3(0-1)/,
    
    cnEr: "请输入汉字",
    cnOK: "输入正确",
    cnRegex: /^([\u4E00-\u9FA5]|[\uFE30-\uFFA0])*$/i,

    ckEr: "您还没有选择",

    pwdEr: "请输入6-15位字母或数字下划线组成的密码",
    pwdOK: "",
    pwdRegex: /^\s*[.A-Za-z0-9_-]{6,15}\s*$/,

    repwdEr: "两次密码输入不一致",

    nuEr: "输入不能为空",

    prEr: "请输入正确的价格，如12.34",
    prRegex: /\d{1,10}\.*\d{0,2}/,
    /*
    载入页面并绑定验证控件，所有添加了val属性的控件将被绑定验证（val={"Event:Rule:TID"}）  
    */
    init: function() {
        $("input").each(function(i) {
            var vobj = $(this);
            var j = new JValidatorCore();
            j.initObjCheck(vobj);
        });
    },
    submitCheck:function(){
        var res=JValidator.checkAll();
        if(res==false)
        {
            alert("部分填写数据错误，请根据界面提示信息进行修改！");
        }
        return res; 
    },
    checkAll: function() {
        var res = true;
        $("input").each(function(i) {
            var vobj = $(this);
            var val = vobj.attr("val");
            if (val != null) {
                var vArr = val.split(":");
                var oid = vobj.attr("id");
                var ru = vArr[1];
                var tid = vArr[2];
                if (JValidator.checkObj2(oid, ru, tid) == false) {
                    res = false;
                }
            }

        });
        return res;
    },
    checkNum: function(ru, v) {
        if (isNaN(v)) {
            return false;
        }
        rArr = ru.split(",");
        r = rArr[0];
        min = rArr[1];
        max = rArr[2];

        if (min != null) {
            if (v.length < min) { return false; }
        }

        if (max != null) {
            if (v.length > max) { return false; }
        }

        return true;
    },
    /*
    {待验证控件ID，提示信息ID，验证规则，错误信息内容，正确信息内容，错误信息样式，正确信息样式}
    */
    checkObj2: function(oid, ru, tid) {
        return JValidator.checkObj3(oid, tid, ru);
    },
    checkObj3: function(oid, tid, ru) {
        var result = true;
        var v = $("#" + oid).attr("value");
        var tipObj = $("#" + tid);
        rArr = ru.split(",");
        ruType = rArr[0];
        switch (ruType) {
            case "num":
                if (JValidator.checkNum(ru, v)) {

                    tipObj.html("√");
                    tipObj.attr("style", JValidator.cssOK);

                }
                else {
                    tipObj.html("×");
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                break;
            case "en":
                if (!v.match(JValidator.enRegex)) {
                    tipObj.html(JValidator.enEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                else {
                    tipObj.html(JValidator.enOK);
                    tipObj.attr("style", JValidator.cssOK);
                }
                break;
            case "number":
                if (!v.match(JValidator.numberRegex)) {
                    tipObj.html(JValidator.numberEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                else {
                    tipObj.html(JValidator.numberOK);
                    tipObj.attr("style", JValidator.cssOK);
                }
                break;


            case "email":
                if (!v.match(JValidator.emailRegex)) {
                    tipObj.html(JValidator.emailEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                else {
                    tipObj.html(JValidator.emailOK);
                    tipObj.attr("style", JValidator.cssOK);
                }
                break;
            case "zip":

                if (!v.match(JValidator.zipRegex)) {
                    tipObj.html(JValidator.zipEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                else {
                    tipObj.html(JValidator.zipOK);
                    tipObj.attr("style", JValidator.cssOK);
                }
                break;
            case "pwd":
                if (!v.match(JValidator.pwdRegex)) {
                    tipObj.html(JValidator.pwdEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                else {
                    tipObj.html(JValidator.pwdOK);
                    tipObj.attr("style", JValidator.cssOK);
                }
                break;
            case "tel":
                if (!v.match(JValidator.telRegex)) {
                    tipObj.html(JValidator.telEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                else {
                    tipObj.html(JValidator.telOK);
                    tipObj.attr("style", JValidator.cssOK);
                }
                break;
            case "phone":
                if (!v.match(JValidator.phoneRegex)) {
                    tipObj.html(JValidator.phoneEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                else {
                    tipObj.html(JValidator.phoneOK);
                    tipObj.attr("style", JValidator.cssOK);
                }
                break;
            case "ip":
                if (!v.match(JValidator.ipRegex)) {
                    tipObj.html(JValidator.ipEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                else {
                    tipObj.html(JValidator.ipOK);
                    tipObj.attr("style", JValidator.cssOK);
                }
                break;
            case "cn":
                if (!v.match(JValidator.cnRegex)) {
                    tipObj.html(JValidator.cnEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                else {
                    tipObj.html(JValidator.cnOK);
                    tipObj.attr("style", JValidator.cssOK);
                }
                break;

            case "nu":

                if ($("#" + oid).val() == "") {
                    tipObj.html(JValidator.nuEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                else {
                    tipObj.html("");
                }
                break;
            case "pr":
                if (!v.match(JValidator.prRegex)) {
                    tipObj.html(JValidator.prEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
                else {
                    tipObj.html("");
                }
                break;
            case "year":
                if(!v.match(JValidator.yearRegex))
                {
                    tipObj.html(JValidator.yearEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
            case "month":
                if(!v.match(JValidator.monthRegex))
                {
                    tipObj.html(JValidator.monthEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
            case "day":
                if(!v.match(JValidator.dayRegex))
                {
                    tipObj.html(JValidator.dayEr);
                    tipObj.attr("style", JValidator.cssErro);
                    result = false;
                }
        }
       
        return result;
    }
}
function JValidatorCore() {
   
    this.vobj = null;
    this.val = null;
    this.oid = null;
    this.tid = null;
    this.ev = null;
    this.ru = null;
    /*
    将指定控件绑定验证
    */
    this.initObjCheck = function(vobj) {
        this.vobj = vobj;
        if (this.vobj != null) {
            this.val = this.vobj.attr("val");
            if (this.val != null) {
                this.vArr = this.val.split(":");
                this.oid = this.vobj.attr("id");
                this.ev = this.vArr[0];
                this.ru = this.vArr[1];
                $("#" + this.oid).bind(this.ev, { obj: this.vobj }, this.bind);
            }
            return 1;
        }
        return 0;
    };
    this.bind = function(events) {
        this.vobj = events.data.obj;
        this.val = this.vobj.attr("val");
        if (this.val != null) {
            this.vArr = this.val.split(":");
            this.oid = this.vobj.attr("id");
            this.ev = this.vArr[0];
            this.ru = this.vArr[1];
            this.tid = this.vArr[2];
            JValidator.checkObj2(this.oid, this.ru, this.tid);
        }
    };
}