var EventService = Namespace.declare("tla.EAM.layer1.OnceServices",
    class EventService extends Thing {

        constructor() {
            super();
            this.registry = {};
        }

        addEventListener(eventName, eventTarget, handlerFunction) {

            if  (this.registry[eventName] == null)
                this.registry[eventName] = new MyEvent().init(eventName);

            var event = this.registry[eventName];
            event.addHandler(handlerFunction);
            event.target = eventTarget;
        }

        getEvent(eventName) {
            return this.registry[eventName];
        }

    }
);

var MyEvent = Namespace.declare("tla.EAM.layer1.OnceServices",
    class Event {
        constructor() {
            this.name = "";
            this.handlers = [];
        }

        init(name) {
            this.name = name;
            return this;
        }

        addHandler(handlerFunction) {
            this.handlers.push(handlerFunction);
        }

        fire(eventSource, item) {
            this.source = eventSource;

            if (eventSource.duringFire == true)
                return;

            eventSource.duringFire = true;
            for (var i in this.handlers) {
                this.handlers[i](this, item);
            }
            eventSource.duringFire = null;
        }

    }
);

var EventSupport = Namespace.declare("tla.EAM.layer1.OnceServices",
    class EventSupport extends Interface {
        get eventSupport() {

        }
    }
);


// support legacy 0.1.0
var MyEventSupport = EventService;