﻿/// <reference path="mootools-1.2.4.js" />
/*  
    表单验证控件 注：必须继承自 mootools
    引用该脚本之后，所有的form在submit事件里面将会加入验证事件
    用法： 在要验证的控件上加入 class = "{ minLength : 0,maxLength : 1,msg : '出错时要提示的信息' , regExp : '验证的数据表达式' , type : 'compare' }"
    验证不通过的控件将会加入样式 error，请注意样式不要出现命名冲突。
    属性不必全部填写，可以根据需要填写。
*/
window.addEvent("domready", function () {
    $$("form").each(function (item, index) {
        item.addEvent("submit", Validator);
        item.getElements("input").each(function (item1, index1) {
            item1.addEvent("blur", function () { this.removeClass("error"); });
        });
    });

    Validator.types = new Hash({
        "email": /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/,
        "int" : /^\d+$/,
        "money" : /^[0-9\.\-]+$/
    });
});

var Validator = function (event) {
    var isCheck = Validator.check(this);
    if (!isCheck) {
        event.stop();
        return;
    }
    var submit = this.getElement("input[type=submit]");
    if (submit != null) {
        (function () {
            submit.set({
                value: "正在提交...",
                disabled: "disabled"
            });
        }).delay(500);
    }
}

// 错误信息的提示方式
Validator.error = function (msg) {
    alert(msg);
    try {
        parent.Voice(msg);
    } catch (e) {
        //alert(e);
    }
};

// 验证
Validator.check = function (form) {
    var valiReg = new RegExp("([^\{]*)\{(.*)\}(.*)");
    var list = new Array();
    var stop = false;
    form.getElements("*").each(function (item) {
        try {
            var tag = item.get("tag");
            if (tag == "input" || tag == "textarea" || tag == "select") {
                list.push(item);
            }
        } catch (e) {
            // alert(e);
        }
    });
    for (var i = 0; i < list.length; i++) {
        var item = list[i];
        var css = item.get("class");
        if (valiReg.test(css) && css != "") {
            var vali = eval("(" + css.replace(valiReg, "{$2}") + ")");
            var value = item.get("value");
            if (item.get("type") == "checkbox" && !item.get("checked")) value = "";
            var msg = vali.msg;
            if (msg == undefined) {
                var nextObj = item.getNext();
                if (nextObj == null) {
                    msg = "请输入符合规则的数据！";
                } else {
                    msg = nextObj.get("text");
                }
            } else if (msg.substring(0, 1) == "$") {
                msg = msg.substring(1);
                var msgObj = $(msg);
                if (msgObj != null) msg = msgObj.get("value");
            }
            var error = false;
            if (Validator.types.has(vali.type)) { vali.regExp = Validator.types.get(vali.type); }
            if (!error && vali.minLength != undefined && value.length < vali.minLength) error = true;
            if (!error && vali.maxLength != undefined && value.length > vali.maxLength) error = true;
            if (!error && vali.regExp != undefined && !vali.regExp.test(value)) error = true;
            if (!error && vali.type == "compare" && i > 0 && list[i - 1].get("value") != value) error = true;
            if (error) {
                Validator.error(msg);
                item.addClass("error");
                if (item.get("tag") == "select" || item.get("type") == "checkbox") {
                    item.focus();
                } else {
                    item.select();
                }
                stop = true;
                break;
            }
        }
    }
    return !stop;
}; 

 


