DRHorton.events = DRHorton.events || {};

DRHorton.events.EventDispatcher = function(){
    this._eventListeners = [];
};

DRHorton.events.EventDispatcher.methods({    
    hasEventListener : function(type, listener){
        for(var i = 0; i < this._eventListeners.length; i++)
            if(this._eventListeners[i].type === type && this._eventListeners[i].listener === listener)
                return true;
        return false;
    },
    
    addEventListener : function(type, listener){
        if(!this.hasEventListener(type, listener))
            this._eventListeners.push({type:type, listener:listener});
    },
    
    removeEventListener : function(type, listener){
        for(var i = 0; i < this._eventListeners.length; i++)
            if(this._eventListeners[i].type === type && this._eventListeners[i].listener === listener)
                this._eventListeners.splice(i--, 1);     
    },
    
    dispatchEvent : function(event){
        event.setTarget(this);
        for(var i = 0; i < this._eventListeners.length; i++)
            if(this._eventListeners[i].type === event.type)
                this._eventListeners[i].listener(event);
    }
});

