if (window['PB'] == undefined) {
    PB = {};
}
PB.EventDispatcher = {
    eventHandlers: {},
    addEventListener: function(type, handler, scope) {
        if (this.eventHandlers.hasOwnProperty(type) == false) {
            this.eventHandlers[type] = [];
        }
        this.eventHandlers[type].push({handler:handler, scope:scope})
    },
    removeEventListener: function(type, handler) {
        if (this.eventHandlers.hasOwnProperty(type)) {
            for (var i = 0; i < handlers[event.type].length; i++) {
                if (this.eventHandlers[type].handler == handler) {
                    this.eventHandlers[type].splice(i, 1);
                    return;
                }
            }
        }
    },
    dispatchEvent: function(event) {
        event.target = this;
        if (this.eventHandlers.hasOwnProperty(event.type)) {
            for (var i = 0; i < this.eventHandlers[event.type].length; i++) {
                var handle = this.eventHandlers[event.type][i];
                handle.handler.call(handle.scope, event);
                if (event.stop == true) {
                    return;
                }
            }
        }
    },
    hasEventListner: function(type) {
       return this.eventHandlers.hasOwnProperty(type);
    }
};

PB.Event = function(type, data) {
    var obj = {};
    obj.type = type;
    obj.target = null;
    obj.data = data;
    obj.memo = data;
    obj.stop = false;
    obj.stopPropigation = function () {
        this.stop = true;
    }
    obj.stopImmediatePropigation = function () {
        this.stop = true;
    }
    return obj;
}

PB.Event.CHANGE = "pbevent:change";
PB.Event.COMPLETE = "pbevent:complete";
PB.Event.ERROR = "pbevent:error";
PB.Event.SELECT= "pbevent:select";
PB.Event.CLICK = "pbevent:click";
