EventCenter = function(){
    var listeners = {};

    return {
        addEventListener: function(strEventType, fnListener) {
            if(listeners[strEventType] == undefined) {
                listeners[strEventType] = new Array();
            }

            var c = listeners[strEventType].length;
            for(var i = 0; i < c; i++) {
                if(listeners[strEventType][i] == fnListener) return false;
            }

            listeners[strEventType].push(fnListener);

            return true;
        },

        removeEventListener: function(strEventType, fnListener) {
            if(listeners[strEventType] == undefined) return false;

            var fnArr = listeners[strEventType].slice(0);
            var c = fnArr.length;
            for(var i=0; i < c; i++) {
                if(fnArr[i] == fnListener) listeners[strEventType].slice(i,1);
            }

            // cleanup
            if(listeners[strEventType].length == 0) delete listeners[strEventType];

            return true;
        },

        dispatchEvent: function(strEventType/*, ...params*/) {
            if(listeners[strEventType] == undefined) return false;

            var fnArr = listeners[strEventType].slice(0);
            var c = fnArr.length;
            for(var i=0; i < c; i++) {
                var listener = fnArr[i];
                var args = Array.prototype.slice.call(arguments);
                listener.apply(this, args.slice(1));
            }

            return true;
        }
    };
}();
