﻿function ClientErrorLogger(callbackUrl) {

    var m_callbackUrl = callbackUrl;
    
    // initialise the error logger
    function initialize() {
        var errorEventHandler = function(message, url, line) {
            var stacktrace = printStackTrace();
            errorLogger.log(message, url, line, stacktrace);
        };

        if (window.attachEvent) {
            window.attachEvent("onerror", errorEventHandler);
        }
        else if (window.onerror != null) {
            var originalOnError = window.onerror;
            window.onerror = function(message, url, line) {
                errorEventHandler(message, url, line);
                originalOnError(message, url, line);
            };
        }
        else {
            window.onerror = errorEventHandler;
        }
    }
    
    // send a log message to the HttpHandler
    function log(message, url, line, stacktrace) {
       var data = {
            jsmessage: message,
            jsurl: url,
            jsline: line,
            jsstacktrace: stacktrace.join('\n'),
            pageurl: location.href,
            useragent: navigator.userAgent
        };

        jQuery.post(m_callbackUrl, data);
    }

    // declare public methods
    this.log = log;
    this.initialize = initialize;

    return this;
}
	