﻿// logga det exception som fångades
function logError(exception) {
    try {
        $.ajax({
            url: "JScriptLog.aspx",
            data: { exception: encodeURIComponent($.toJSON(exception)) }
        });
    }
    catch (ex) {
        // felhanteringen får inte kasta exception
    }
}

$(document).ready(function() {
    try {
        // fungerar endast i IE och FF
        window.onerror = function(msg, url, linenumber) {
            logError({ message: msg, fileName: url, lineNumber: linenumber });
            return true; // visa inte meddelande och hindra på så viss javascript (SessionKeepAlive) från att sluta fungera.
        };
    }
    catch (ex) {
    }
});

// override jQuery.fn.bind to wrap every provided function in try/catch
// work-arround för bugg i FF där events bundna med addEventListener inte fångas i window.onerror
var jQueryBind = jQuery.fn.bind;
jQuery.fn.bind = function(type, data, fn) {
    if (!fn && data && typeof data == 'function') {
        fn = data;
        data = null;
    }
    if (fn) {
        var origFn = fn;
        var wrappedFn = function() {
            try {
                var result = origFn.apply(this, arguments);
                return result;
            }
            catch (ex) {
                logError(ex);
            }
        };
        fn = wrappedFn;
    }
    return jQueryBind.call(this, type, data, fn);
};

// override jQuery.fn.one to wrap every provided function in try/catch
// work-arround för bugg i FF där events bundna med addEventListener inte fångas i window.onerror
var jQueryOne = jQuery.fn.one;
jQuery.fn.one = function(type, data, fn) {
    if (!fn && data && typeof data == 'function') {
        fn = data;
        data = null;
    }
    if (fn) {
        var origFn = fn;
        var wrappedFn = function() {
            try {
                var result = origFn.apply(this, arguments);
                return result;
            }
            catch (ex) {
                logError(ex);
            }
        };
        fn = wrappedFn;
    }
    return jQueryOne.call(this, type, data, fn);
};

