(function(global) { var subs = {}, slice = Array.prototype.slice; global.pubsub = { sub: function(topic, fn, ctx) { var sub = subs[topic] || (subs[topic] = []); sub.push({ fn: fn, ctx: ctx }); }, pub: function(topic) { var topicSubs = subs[topic] || [], args = slice.call(arguments, 1); for (var i = 0; i < topicSubs.length; i++) { var sub = topicSubs[i]; sub.fn.apply(sub.ctx, args); } } }; })(window.lib = window.lib || {});