(function () {
    "use strict";

    var loaderScript = document.currentScript;

    function supportsModuleScripts() {
        var script = document.createElement("script");
        return "noModule" in script;
    }

    function supportsImportMaps() {
        return !!(window.HTMLScriptElement && HTMLScriptElement.supports && HTMLScriptElement.supports("importmap"));
    }

    function supportsWebGL() {
        try {
            var canvas = document.createElement("canvas");
            return !!(window.WebGLRenderingContext && (canvas.getContext("webgl") || canvas.getContext("experimental-webgl")));
        } catch (err) {
            return false;
        }
    }

    function bootstrapMapModule() {
        var map = document.getElementById("map");
        var script;

        if (!map || map.getAttribute("data-map-module-loaded") === "true") {
            return;
        }

        if (!supportsModuleScripts() || !supportsImportMaps() || !supportsWebGL() || typeof Promise === "undefined" || typeof fetch === "undefined") {
            return;
        }

        map.setAttribute("data-map-module-loaded", "true");

        script = document.createElement("script");
        script.type = "module";
        script.src = loaderScript ? new URL("map3d.js", loaderScript.src).toString() : "assets/js/map3d.js";
        script.onerror = function () {
            map.removeAttribute("data-map-module-loaded");
        };

        document.body.appendChild(script);
    }

    if (document.readyState === "loading") {
        document.addEventListener("DOMContentLoaded", bootstrapMapModule);
    } else {
        bootstrapMapModule();
    }
}());
