Arboreus.Components = function () {
    this.events = [];
}

Arboreus.Components.debug = 0;

jQuery.extend(Arboreus.Components.prototype, {
    addEvent: function(name, fn, scope) {
        var event = {};
        event[name] = {fn: fn, scope: scope};
        this.events.push(event);
    },

    fireEvent: function(name, args) {
        if (Arboreus.Components.debug && typeof console !== 'undefined') {
            console.log('event:', name, args);
        }
        jQuery.each(this.events, function(index, event) {
            if (event[name] && event[name].fn) {
                if (args) {
                    event[name].fn.apply(event[name].scope, args);
                } else {
                    event[name].fn.apply(event[name].scope);
                }

            }
        })
    },

    on: function (name, fn, scope) {
        this.addEvent(name, fn, scope);
    },

    addEvents: function(events) {
        var self = this;
        jQuery.each(events, function(index, el) {
            if (typeof el == 'function') {
                self.addEvent(index, el);
            } else if (typeof el == 'object'){
                if (typeof el.scope !== 'undefined') {
                    self.addEvent(el.name, el.fn, el.scope);
                } else {
                    self.addEvent(el.name, el.fn);
                }
            } else {
                self.addEvent(el);
            }
        })
    }
});
