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;
}
}
);
}
};
