Liferay.Publisher = { publishers: {}, deliver: function(publisher) { var instance = this; var scope = window; var data; if (arguments.length == 2) { data = [arguments[1]]; } else { data = jQuery.map(arguments, function(item, i) { return (i > 0) ? item : null; } ); } jQuery.each(instance.publishers[publisher], function(i, el) { var classScope = el.obj || scope; el.func.apply(classScope, data); } ); }, register: function(publisher) { var instance = this; if (!instance.publishers[publisher]) { instance.publishers[publisher] = []; } }, subscribe: function(publisher, func, obj) { var instance = this; if (instance.publishers[publisher] == null) { instance.register(publisher); } var alreadyExists = false; jQuery.each(instance.publishers[publisher], function(i, el) { if (el === func) { alreadyExists = true; return false; } } ); if (!alreadyExists) { var data = { func: func, obj: obj || null }; instance.publishers[publisher].push(data); } }, unsubscribe: function(publisher, func) { var instance = this; if (!instance.publishers[publisher]) { return; } jQuery.each(instance.publishers[publisher], function(i, el) { if (el.func === func) { instance.publishers[publisher].pop(el); return false; } } ); } };