﻿function logError(message, callback) {
    const domainParts = window.location.hostname.split(".");
    const mainDomain = domainParts[domainParts.length - 2] + "." + domainParts[domainParts.length - 1];

    $.ajax({
        type: "POST",
        dataType: "json",
        contentType: "application/json;charset=utf-8",
        url: `${window.location.protocol}//cmgw.${mainDomain}/api/track/ClientLog`,
        data: JSON.stringify({
            message: message,
            level: "error",
            page: "Header",
            host: window.location.host,
            path: window.location.pathname,
            queryString: window.location.search,
            scheme: window.location.protocol.replace(":", "")
        }),
    }).always(function () {
        typeof callback === 'function' && callback();
    });;
}

(function monitorResourceLoad() {
    if (enabledClientLog) {
        window.addEventListener("error", (e) => {            
            logError("Odin onError " + e.message + ". " + e.error?.stack);
        });       

        function listenForLoadError(node) {
            if (["SCRIPT", "LINK"].indexOf(node.tagName) >= 0) {
                var origOnError = node.onerror;
                node.onerror = function (e) {
                    if (!e || !e.srcElement) { return; }
                    e.path = e.path || [];

                    logError("Failed to load " + e.srcElement.tagName + ": " + (e.srcElement.src || e.srcElement.href));

                    if (origOnError) { origOnError.call(node, e); }
                }
            }
        }
        var Observer = window.MutationObserver || window.WebKitMutationObserver;
        if (!Observer) { return; }
        new Observer((function (mutations) {
            [].forEach.call(mutations, function (mutation) {
                [].forEach.call(mutation.addedNodes, listenForLoadError);
            });
        })).observe(document, { childList: true, subtree: true });
    }
})();