function ajaxRequest()
{
	this.url = null;
	this.async = true;
	this.method = 'GET';
	this.body = null;

	var a = this;

	if (window.XMLHttpRequest)
	{	// Mozilla, Safari, IE7, ...
		this.request = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{	// IE6
		try
		{
			this.request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				this.request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				this.dropError('XML-Instanz konnte nicht erzeugt werden!');
				return false;
			}
		}
	}

	this.open = function(url, met, async)
	{
		// Übergabewerte überprüfen
		this.url = url;
		this.method = met || 'GET';
		if (this.method.toUpperCase() != 'POST' || this.method.toUpperCase() != 'GET')
		{
			this.method = 'GET';
		}
		this.async = (async === false) ? false : true;
			
		// Anfrage vorbereiten
		this.request.open(this.method.toUpperCase(), this.url, this.async);
		if (this.request.overrideMimeType) { this.request.overrideMimeType("text/xml; charset=ISO-8859-1"); }

		this.request.onreadystatechange = this.onready;

		if (this.method == 'POST')
		{
			this.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		}
	}

	this.send = function(req)
	{
		try
		{
			if (req == '')
			{
				this.request.send(this.body);
			}
			else
			{
				this.request.send(req);
			}
		}
		catch(e)
		{ 
			this.dropError('Datei nicht gefunden, oder anderer Fehler (' + this.url + ')');
			return false;
		}
	}

	this.dropError = function(msg)
	{
		alert('Fehler: ' + msg);
	}

	this.onready = function()
	{
		if (a.request.readyState == 4)
		{
			// Übertragung komplett
			if (a.request.status == 200)
			{
				// Anfrage erfolgreich
				if (a.request.responseXML.documentElement)
				{
					a.onsuccess(a.request.responseText, a.request.responseXML.documentElement);
				}
				else
				{
					var xmlElem = document.createElement('xml');
					xmlElem.setAttribute('innerHTML', a.request.responseText);
					xmlElem.setAttribute('id', 'returnedXML');
					document.body.appendChild(xmlElem);
					a.onsuccess(a.request.responseText, document.getElementById('returnedXML'));
				}
				return true;
			}
		}
		return false;
	}

	this.onsuccess = function(txt, xml)
	{
		this.dropError('Anfrage erfolgreich, doch das Ergebnis wurde verworfen!');
	}
		
	this.abort = function()
	{
		this.request.abort();
		return true;
	}

	return true;
}
