#

API Docs for: 1.6.0
Show: Inherited Protected Private Deprecated

# File: src/pixi/utils/EventTarget.js

    /**
     * @author Mat Groves http://matgroves.com/ @Doormat23
     */

    /**
     * https://github.com/mrdoob/eventtarget.js/
     * THankS mr DOob!
     */

    /**
     * Adds event emitter functionality to a class
     *
     * @class EventTarget
     * @example
     *      function MyEmitter() {
     *          PIXI.EventTarget.call(this); //mixes in event target stuff
     *      }
     *
     *      var em = new MyEmitter();
     *      em.emit({ type: 'eventName', data: 'some data' });
     */
    PIXI.EventTarget = function () {

        /**
         * Holds all the listeners
         *
         * @property listeners
         * @type Object
         */
        var listeners = {};

        /**
         * Adds a listener for a specific event
         *
         * @method addEventListener
         * @param type {string} A string representing the event type to listen for.
         * @param listener {function} The callback function that will be fired when the event occurs
         */
        this.addEventListener = this.on = function ( type, listener ) {

            if ( listeners[ type ] === undefined ) {

                listeners[ type ] = [];

            }

            if ( listeners[ type ].indexOf( listener ) === - 1 ) {

                listeners[ type ].unshift( listener );
            }

        };

        /**
         * Fires the event, ie pretends that the event has happened
         *
         * @method dispatchEvent
         * @param event {Event} the event object
         */
        this.dispatchEvent = this.emit = function ( event ) {

            if ( !listeners[ event.type ] || !listeners[ event.type ].length ) {

                return;

            }

            for(var i = listeners[ event.type ].length-1; i >= 0; i--) {
    //        for(var i = 0, l=listeners[ event.type ].length; i < l; i++) {

                listeners[ event.type ][ i ]( event );

            }

        };

        /**
         * Removes the specified listener that was assigned to the specified event type
         *
         * @method removeEventListener
         * @param type {string} A string representing the event type which will have its listener removed
         * @param listener {function} The callback function that was be fired when the event occured
         */
        this.removeEventListener = this.off = function ( type, listener ) {

            if ( listeners[ type ] === undefined ) return;

            var index = listeners[ type ].indexOf( listener );

            if ( index !== - 1 ) {

                listeners[ type ].splice( index, 1 );

            }

        };

        /**
         * Removes all the listeners that were active for the specified event type
         *
         * @method removeAllEventListeners
         * @param type {string} A string representing the event type which will have all its listeners removed
         */
    	this.removeAllEventListeners = function( type ) {
    		var a = listeners[type];
    		if (a)
    			a.length = 0;
    	};
    };