var EventDispatcher = (function () {
  var undefined,
      _listeners = {};

  return {
    connect: function(name, listener) {
      if (undefined === _listeners[name]) {
        _listeners[name] = [];
      }

      _listeners[name].push(listener);
    },

    disconnect: function(name, listener) {
      if (undefined === _listeners[name]) {
        return false;
      }

      for (var i = 0, length = _listeners[name].length; i < length; i++) {
        if (listener === _listeners[name][i]) {
          _listeners[name].splice(i, 1);
        }
      }
    },

    notify: function(name, arg) {
      if (undefined === _listeners[name]) {
        return;
      }

      for (var i = 0, length = _listeners[name].length; i < length; i++) {
        _listeners[name][i].call(this, arg);
      }
    }
  };
})();

