var isSubmited = false;     //for document.readyState non-supported browsers.

var dsHandler = null;

ecDsHandlerContainer = function() {
    this.clickEventHandlerList = null;
    this.submitHandler = null;
}
var dsHandlerContainer = new ecDsHandlerContainer();

ecDsHandler = function(formName) {
    $("#" + formName).submit(function() { isSubmited = true; return true; });
    this.initialize();
}

ecDsHandler.prototype = {
    initialize: function() {
        this.hookOnClickEventHandlers();
    },
    hookOnClickEventHandlers: function() {
        if (null == dsHandlerContainer.submitHandler) {
            dsHandlerContainer.submitHandler = this.invokeSubmit;
        }

        dsHandlerContainer.clickEventHandlerList = new Array();

        for (var i = 0; i < document.links.length; i++) {
            if (null != document.links[i].onclick) {
                dsHandlerContainer.clickEventHandlerList[document.links[i].id] = document.links[i].onclick;
            }
            document.links[i].onclick = dsHandlerContainer.submitHandler;
        }

        var inputElmlist = document.getElementsByTagName("input");
        if (inputElmlist != null) {
            for (var i = 0; i < inputElmlist.length; i++) {
                var elm = inputElmlist[i];
                if (elm.type == "button" ||
                    elm.type == "submit" ||
                    elm.type == "reset" ||
                    elm.type == "file" ||
                    elm.type == "image") {
                    if (null != elm.onclick) {
                        dsHandlerContainer.clickEventHandlerList[elm.id] = elm.onclick;
                    }
                    elm.onclick = dsHandlerContainer.submitHandler;
                }
            }
        }
    },
    invokeSubmit: function(e) {
        if (dsHandler.isLoading()) {
            //cancel second submit action.
            return false;
        }

        var id = null;
        try {
            id = e.target.id;
        } catch (err) {
            id = event.srcElement.id;
        }

        if (null != dsHandlerContainer.clickEventHandlerList) {
            var func = dsHandlerContainer.clickEventHandlerList[id];
            if (null != func && typeof (func) != "undefined") {
                var result = func();
                if (result != null) {
                    return result;
                }
            }
        }

        return true;
    },
    isLoading: function() {
        if (document.readyState != null && document.readyState != "complete") {
            return true;
        }
        else {
            return isSubmited;
        }
    }
}

