/// <reference path="./Container.ts" />
/// <reference path="./tag/ITagDefinition.ts" />
/// <reference path="./macro/IMacroDefinition.ts" />
/// <reference path="../util/DomHelper.ts" />
var econda;
(function (econda) {
    var tagmanager;
    (function (tagmanager) {
        var Container = econda.tagmanager.Container;
        var DomHelper = econda.util.DomHelper;
        /**
         * Tag Manager
         *
         * The following example shows a minimal browser implementation of the Tag Manager, with an empty data layer.
         *
         *     <script type="text/javascript">
         *     var econdaData = {};
         *     </script>
         *
         *     <div id="econdaTMC" style="display:none;visibility:hidden"></div>
         *     <script id="econdaTM">econdaTMD=econdaData;econdatm={stored:[],
         *     events:function(p){this.stored.push(p);}};
         *     (function(d,s){var f=d.getElementById(s),j=d.createElement('script');
         *     j.async=true;j.src='econda-tagmanager.js';f.parentNode.insertBefore(j,f);})
         *     (document,'econdaTM');</script>
         *
         *
         * @class econda.tagmanager.Runtime
         */
        var Runtime = (function () {
            function Runtime() {
            }
            /**
             * Setup {@link econda.tagmanager.Container} with given configuration.
             * @static
             */
            Runtime.start = function (dataLayer, tagDefinitions, macroDefinitions) {
                if (dataLayer instanceof Object) {
                    if (!dataLayer['events']) {
                        dataLayer['events'] = [];
                    }
                }
                else {
                    throw new Error('data layer is not of type object!');
                }
                var container = new Container({
                    containerVarName: this.INSTANCE_NAME,
                    dataLayer: dataLayer,
                    events: dataLayer['events'],
                    tagDefinitions: tagDefinitions,
                    macroDefinitions: macroDefinitions
                });
                DomHelper.documentReady(function () {
                    container.executeDocumentReady();
                    container.init();
                });
            };
            Runtime.INSTANCE_NAME = 'ecTagManager';
            return Runtime;
        }());
        tagmanager.Runtime = Runtime;
    })(tagmanager = econda.tagmanager || (econda.tagmanager = {}));
})(econda || (econda = {}));