#PubShlub
do ($) ->
a = {}
$.publish = (d, c) ->
a[d] and $.each(a[d], ->
if @apply
@apply $, c or []
)
$.subscribe = (c, d) ->
a[c] = [] unless a[c]
a[c].push d
[c, d]
$.unsubscribe = (event_name, handler) ->
if a[event_name]
counter = 0
for registered_handler in a[event_name]
if registered_handler is handler then a[event_name].splice counter, 1
counter++
$.subscriptions = a