var AJAX = new function()
{
    /**
     * @param string url
     * @param Element elmnt
     * @param function callback
     * @param bool callbackOnAllChanges
     */
    this.MakeRequest = function(url, elmnt, callback, callbackOnAllChanges)
    {
        var http_request = false;

        if (window.XMLHttpRequest) // Mozilla, Safari...
        {
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType)
            {
                http_request.overrideMimeType('text/xml');
            }
        }
        else if (window.ActiveXObject) // IE
        {
            try
            {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e)
            {
                try
                {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) {}
            }
        }

        if (!http_request)
        {
            alert('Kan ikke lave XMLHTTP-objekt');
            return false;
        }
        http_request.onreadystatechange = function() { AJAX.StateChanged(http_request, url, elmnt, callback, callbackOnAllChanges); };
        http_request.open('GET', url, true);
        http_request.send(null);
    }

    this.StateChanged = function(http_request, url, elmnt, callback, callbackOnAllChanges)
    {
        if (callbackOnAllChanges && callback)
        {
            callback(http_request, url, elmnt);
        }
        else if (http_request.readyState == 4)
        {
            if (http_request.status == 200)
            {
                if (callback)
                {
                    callback(http_request, url, elmnt);
                }
                else if (elmnt)
                {
                    elmnt.innerHTML = http_request.responseText;
                }
            }
            else
            {
                alert('There was a problem with the request.\n' + url + '\nError: ' + http_request.status);
            }
        }
    }
}
