// js/event/Dispatcher.js
//
// Created: 30.03.2011 (pj)
///////////////////////////////////////////////////////////////////////////////


pj.event.Dispatcher = function(eventName)
{
    this.constructor = pj.core.Object;
    this.constructor("pj.event.Dispatcher[" + eventName + "]");


    /**
     * Register the specified listener.
     *
     * @param listener
     *     The function which should be called when this event is being dispatched.
     *
     * @return true if listener was successfully registered; false otherwise.
     */
    this.addListener = function(listener)
    {
        if (!listener || typeof listener !== "function") return false;

        // verify if specified listener was not already added:
        for (var idx = 0, len = listeners.length; idx < len; idx++) {
            var myListener = listeners[idx];
            if (myListener && myListener === listener) return true;
        }

        listeners.push(listener);
        return true;
    };

    /**
     * Unregister the specified listener.
     *
     * @param listener
     *     The functiion which should be unregistered for this event.
     *
     * @return true if listener was successfully unregistered; false otherwise.
     */
    this.removeListener = function(listener)
    {
        for (var idx = 0, len = listeners.length; idx < len; idx++) {
            var myListener = listeners[idx];
            if (!myListener || myListener !== listener) continue;

            // listener was found; remove it now from array:
            listeners.splice(idx, 1);
            return true;
        }
        return false;
    };

    /**
     * Get the number of registered listeners.
     */
    this.getCount = function()
    {
    	return listeners.length;
    };

    /**
     * Call all registered listeners for this event.
     *
     * @param evt
     *     The event object which will be passed to every registered listener.
     */
    this.dispatch = function(evt)
    {
        for (var idx = 0, len = listeners.length; idx < len; idx++) {
            var listener = listeners[idx];
            if (!listener || typeof listener !== "function") continue;

            try {
            	listener(evt);
            } catch (e) { }
        }
    };


    var listeners = [ ];
};

