﻿window.onerror = function(msg, url, linenumber) {
    var xhr = XHR();

    if (window.hasOwnProperty("jsPage")) {
        msg = "Page: " + window.jsPage + "|" + window.jsPageId + " - " + msg;
    }

    if (window.hasOwnProperty("jsFunc")) {
        msg = "Func: " + window.jsFunc + " " + msg;
    }

    if (xhr) {

        var url = "/problem.aspx";
        var params = "message=" + escape(msg) + "&url=" + escape(url) + "&line=" + escape(linenumber);
        xhr.open("POST", url, true);

        //Send the proper header information along with the request
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.setRequestHeader("Content-length", params.length);
        xhr.setRequestHeader("Connection", "close");

        xhr.onreadystatechange = function() {//Call a function when the state changes.
            if (xhr.readyState == 4 && xhr.status == 200) {
                //alert(http.responseText);
            }
        }
        xhr.send(params);
    }
    else post_to_url({ message: msg, url: url, line: linenumber });

    return true;
}

function post_to_url(params) {
    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", "/problem.aspx");

    for (var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);

        form.appendChild(hiddenField);
    }

    document.body.appendChild(form);
    form.submit();
}

function XHR() {
    var retval = false;
    if (window.XMLHttpRequest) {
        retval = new XMLHttpRequest();
        if (retval.overrideMimeType) {
            retval.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) {
        try {
            retval = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e) {
            try {
                retval = new ActiveXObject('Microsoft.XMLHTTP');
            } catch (e) {
            retval = false;
            }
        }
    }
    return retval;
}
