define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var _layersByHostId = {};
    var _defaultHostSelector;
    /**
     * Register a layer for a given host id
     * @param hostId Id of the layer host
     * @param layer Layer instance
     */
    function registerLayer(hostId, callback) {
        if (!_layersByHostId[hostId]) {
            _layersByHostId[hostId] = [];
        }
        _layersByHostId[hostId].push(callback);
    }
    exports.registerLayer = registerLayer;
    /**
     * Unregister a layer for a given host id
     * @param hostId Id of the layer host
     * @param layer Layer instance
     */
    function unregisterLayer(hostId, callback) {
        if (_layersByHostId[hostId]) {
            var idx = _layersByHostId[hostId].indexOf(callback);
            if (idx >= 0) {
                _layersByHostId[hostId].splice(idx, 1);
                if (_layersByHostId[hostId].length === 0) {
                    delete _layersByHostId[hostId];
                }
            }
        }
    }
    exports.unregisterLayer = unregisterLayer;
    /**
     * Used for notifying applicable Layers that a host is available/unavailable and to re-evaluate Layers that
     * care about the specific host.
     */
    function notifyHostChanged(id) {
        if (_layersByHostId[id]) {
            _layersByHostId[id].forEach(function (callback) { return callback(); });
        }
    }
    exports.notifyHostChanged = notifyHostChanged;
    /**
     * Sets the default target selector to use when determining the host in which
     * Layered content will be injected into. If not provided, an element will be
     * created at the end of the document body.
     *
     * Passing in a falsey value will clear the default target and reset back to
     * using a created element at the end of document body.
     */
    function setDefaultTarget(selector) {
        _defaultHostSelector = selector;
    }
    exports.setDefaultTarget = setDefaultTarget;
    /**
     * Get the default target selector when determining a host
     */
    function getDefaultTarget() {
        return _defaultHostSelector;
    }
    exports.getDefaultTarget = getDefaultTarget;
});
//# sourceMappingURL=Layer.notification.js.map