var g_requests = [];
var g_reqCounter = 0;

// die an callback übergebene funktion muss ein argument für den response-text bieten.
// beispiel:  function callback_function(responseDoc) {}
function AjaxRequest(url, callback, bGetXml, postParam) 
{
	this._xmlReq = null;
	this._callback = callback;
	url = (url.indexOf('?')>0) ? url + '&AjaxSeitenAufrufDomain=true' : url + '?AjaxSeitenAufrufDomain=true';
	var responseMethod = (bGetXml != undefined && bGetXml == true) ? 'responseXML' : 'responseText';
	var sendMethod = (typeof(postParam) == 'undefined' || postParam == '') ? 'GET' : postParam;
	var sendParam = (typeof(postParam) != 'undefined' && postParam != '') ? postParam : null;
	var params = url.substr(url.indexOf('?')+1)
	if (postParam == 'POST') url = url.substr(0, url.indexOf('?'))
	
	var f = new Function
	(
	' \
		    var r = g_requests[' + g_reqCounter + ']; \
		    if (r._xmlReq.readyState == 4) { \
			    if (r._xmlReq.status == 200) { \
				    if (r._callback) { r._callback(r._xmlReq.' + responseMethod + '); } \
			    } \
			    document.getElementsByTagName("body")[0].style.cursor = "auto"; \
		    } \
	'
	);
	
	g_requests[g_reqCounter] = this;
	g_reqCounter++;

	if (window.XMLHttpRequest){
		this._xmlReq = new XMLHttpRequest();
		this._xmlReq.onreadystatechange = f;
		this._xmlReq.open(sendMethod, url, true);

	    if (postParam != 'POST')
            this._xmlReq.send(null);
        else{
            this._xmlReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		    //this._xmlReq.setRequestHeader("Content-type", "multipart/form-data");
            this._xmlReq.setRequestHeader("Content-length", params.length);
            this._xmlReq.setRequestHeader("Connection", "close");
            this._xmlReq.send(params);
        }
	}
	else if (window.ActiveXObject){
		 try 
			{
				this._xmlReq  = new ActiveXObject("Microsoft.XMLHTTP");
		        
		    } 
			catch(e) 
			{
				this._xmlReq  = new ActiveXObject("Msxml2.XMLHTTP");
		    }
		this._xmlReq.onreadystatechange = f;
		this._xmlReq.open(sendMethod, url, true);
		if (postParam != 'POST')
            this._xmlReq.send(null);
        else
		{
			this._xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			this._xmlReq.setRequestHeader("Content-length", params.length);
			//this._xmlReq.setRequestHeader("Connection", "close");
			
			this._xmlReq.send(params);
        }
	}
	else
		alert("Das XMLHttpRequest-Objekt ist nicht aktiv!");
}

function AjaxRequestPara(url,sPara, callback, bGetXml) 
{
	this._xmlReq = null;
	this._callback = callback;
	this._Para = sPara;
    url = (url.indexOf('?')>0) ? url + '&AjaxSeitenAufrufDomain=true' : url + '?AjaxSeitenAufrufDomain=true';
	var responseMethod = (bGetXml != undefined && bGetXml == true) ? 'responseXML' : 'responseText';
	var f = new Function
	(
	' \
	    try { \
		    var r = g_requests[' + g_reqCounter + ']; \
		    if (r._xmlReq.readyState == 4) { \
			    if (r._xmlReq.status == 200) { \
				    if (r._callback) { r._callback(r._Para,r._xmlReq.' + responseMethod + '); } \
			    } else { \
				    alert("Es ist ein Fehler aufgetreten:\\n" + r._xmlReq.statusText); \
			    } \
			    document.getElementsByTagName("body")[0].style.cursor = "auto"; \
		    } \
		} catch(e) { \
		} \
	'
	);
	
	g_requests[g_reqCounter] = this;
	g_reqCounter++;

	if (window.XMLHttpRequest){
		this._xmlReq = new XMLHttpRequest();
		this._xmlReq.onreadystatechange = f;
		this._xmlReq.open("GET", url, true);
		this._xmlReq.send(null);
	}
	else if (window.ActiveXObject){
		this._xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
		this._xmlReq.onreadystatechange = f;
		this._xmlReq.open("GET", url, true);
		this._xmlReq.send();
	}
	else
		alert("Das XMLHttpRequest-Objekt ist nicht aktiv!");
	
}



function AjaxRequestSync(url, bGetXml, postParam) 
{
	var responseMethod = (bGetXml != undefined && bGetXml == true) ? 'responseXML' : 'responseText';
	//var sendMethod = (typeof(postParam) != 'undefined' && postParam != '') ? 'POST' : 'GET';
	var sendMethod = (typeof(postParam) == 'undefined' || postParam == '') ? 'GET' : postParam;
	url = (url.indexOf('?')>0) ? url + '&AjaxSeitenAufrufDomain=true' : url + '?AjaxSeitenAufrufDomain=true';
	var params = url.substr(url.indexOf('?')+1)
	if (postParam == 'POST') url = url.substr(0, url.indexOf('?'))

	if (window.XMLHttpRequest){
		this._xmlReq = new XMLHttpRequest();
		this._xmlReq.open(sendMethod, url, false);
		if (postParam != 'POST')
            this._xmlReq.send(null);
        else{
            this._xmlReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            this._xmlReq.setRequestHeader("Content-length", params.length);
            this._xmlReq.setRequestHeader("Connection", "close");
            this._xmlReq.send(params);
        }
        if (bGetXml != undefined && bGetXml == true)
            return this._xmlReq.responseXML.documentElement;
        else {
            return this._xmlReq.responseText;
		}
	}
	else if (window.ActiveXObject){
		this._xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
		this._xmlReq.open(sendMethod, url, false);
		
		if (postParam != 'POST')
            this._xmlReq.send(null);
        else{
            this._xmlReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            this._xmlReq.setRequestHeader("Content-length", params.length);
            this._xmlReq.setRequestHeader("Connection", "close");
            this._xmlReq.send(params);
        }
        if (bGetXml != undefined && bGetXml == true)
            return this._xmlReq.responseXML.documentElement;
        else
            return this._xmlReq.responseText;
	}
	else
		alert("Das XMLHttpRequest-Objekt ist nicht aktiv!");
	
}

