	
	// XMLHttpRequest-Variable global in Seite definieren und erzeugen
	var oXMLHttpRequest=createXMLHttpRequestObject();
	var aQueue=Array();
	var gQueueInternall=null;
	var gQueueInited=false;

	/* XMLHttpRequest-Objekt erzeugen
		erzeugt Objekt für den verwendeten Browser
	*/
	function createXMLHttpRequestObject()
	{
		var lObject=false;
	    // Unterstützt der Browser das XMLHttpRequest-Objekt von Apple
	    if(window.XMLHttpRequest) {
	    	try { lObject = new XMLHttpRequest(); } 
			catch(error) { lObject = false; }
	    } // Unterstützt der Browser die MS Windows Internet Explorer ActiveX-Version
 		else if(window.ActiveXObject) {
	       	try { 
				lObject = new ActiveXObject("Msxml2.XMLHTTP"); 
			} 
			catch(error) {  
				try { lObject = new ActiveXObject("Microsoft.XMLHTTP"); } 
				catch(error) { lObject = false; }
			}
	    }
		if (!lObject) alert("ACHTUNG Browser-Update erforderlich!\n\nIhr Browser unterstützt keine XMLHttp-Objekte.\nBitte verwenden Sie einen der folgenden Browser:\n\n - Internet Explorer ab Version 5.0\n - Mozilla ab Version 1.7.8\n - Firefox ab Version 1.0.2\n - Opera ab Version 8.0\n - Safari ab Version 1.2\n - Netscape ab Version 6.0\n\nVielen Dank für Ihr Verständnis!");
		
		// Rückgabe
		return lObject;		
	}

	/* Absetzen eines Request
		pMethod=POST oder GET
		pDataFile=Name der Datei die Daten liefert
		pCallBack=Funktion die Daten verarbeitet
		pQueueIndex= >=0 wenn Aufruf aus Queue kommt
	*/
	function sendXMLHttpRequest(pMethod,pDataFile,pCallBack,pQueueIndex) 
	{
		// Ist bereits ein Request in Arbeit dann abbrechen
		if (oXMLHttpRequest.readyState>0 && oXMLHttpRequest.readyState<4) 
		{
			// In Queue zwischenspeichern wenn Aufruf nicht von der Queue kommt
			if (!(pQueueIndex>=0)) {	
				// Neuen Eintrag in der Queue erzeugen
				lQueueIndex=addQueueEntry(pMethod,pDataFile,pCallBack);
				// Queue starten
				runQueue();
			}	
			return false;
		}
		
		// Request kommt von Queue -> Eintrag löschen weil erledigt
		if (pQueueIndex>=0)	updateQueueStatus(pQueueIndex);
		
		var lFile=pDataFile;
		var lParams=null;
		
		// Request als GET senden 
		if (pMethod=="GET") 
		{
			// Verbindung herstellen
			oXMLHttpRequest.open("get",pDataFile);
		}
		else if (pMethod=="POST") // Request als POST senden 
		{
			// Wurde im Dateinamen ein ? gefunden dann gibt es Parameter die beim POST seperat behandelt werden müssen
			if (pDataFile.indexOf("?")>0)
			{
				aTmp=pDataFile.split("?");
				lFile=aTmp[0];
				lParams=aTmp[1];
			}	
			// Verbindung herstellen
			oXMLHttpRequest.open("post",lFile);
			// Header definieren
			oXMLHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		}
		// Callback-Funktion aufrufen
		oXMLHttpRequest.onreadystatechange=pCallBack;
		// Request absetzen
		oXMLHttpRequest.send(lParams);
	}
	
	/* Eintrag in Queue erzeugen */
	function addQueueEntry(pMethod,pDataFile,pCallBack)
	{
		// Anfrage in Array Speichern
		aQueue[aQueue.length]=Array(pMethod,pDataFile,pCallBack);
		// Index in Queue zurückgeben
		return aQueue.length-1;
	}
	
	/* Queue starten */
	function runQueue()
	{
		if (!gQueueInited) {
			// Queue ist initialisiert
			gQueueInited=true;
			// Intervall setzen
			gQueueInternall = window.setInterval("tryQueueCall()", 1000);
		}	
	}
	
	/* Versuchen Request abzusetzen aus Queue */
	function tryQueueCall()
	{
		for (i=0;i<aQueue.length;i++) {
			if (aQueue[i]!="request sent") {
				// Anfrage erneut absetzen
				sendXMLHttpRequest(aQueue[i][0],aQueue[i][1],aQueue[i][2],i);
				// Schleife beenden
				i=aQueue.length;
			}	
		}	
	}
	
	// Eintrag aus Queue löschen und Queue stoppen wenn sie leer ist
	function updateQueueStatus(pQueueIndex)
	{
		var lAnzLeftInQueue=0;
		// Eintrag in Queue als erledigt markieren
		aQueue[pQueueIndex]="request sent";
		// Queue durchlaufen und schauen ob alle Einträge schon erledigt sind
		for (i=0;i<aQueue.length;i++) {
			if (aQueue[i]!="request sent") lAnzLeftInQueue++;
		}
		// Wenn alle Einträge erledigt sind dann Queue löschen
		if (lAnzLeftInQueue==0) resetQueue();
	}

    // Queue löschen
	function resetQueue()
	{
		// Intervall stoppen
		window.clearInterval(gQueueInternall);
		// Queue löschen
		aQueue=Array();
		// Initialisierung zurücksetzten
		gQueueInited=false;
	}

	/* Empfangen der Daten (Callback) DUMMY*/
	function onXMLHttpRequestDataReceive()
	{
		var lData = null;
		/* Eigenschaft "readyState" von XMLHttpRequest-Objekt abfragen:
			0: Initialisiert, 1: Wird geladen, 2: Fertig geladen, 3: Interaktiv, 4: Fertig
		*/
		if (oXMLHttpRequest.readyState == 4)
		{
			/* Eigenschaft "status" von XMLHttpRequest-Objekt abfragen:
				200: OK, 404: Seite nicht gefunden
			*/
			// Ist alles OK dann Daten holen
			if (oXMLHttpRequest.status == 200) lData = oXMLHttpRequest.responseText;
			else alert("Es ist ein interner Fehler aufgetreten:\n" + oXMLHttpRequest.statusText);
			// Ausgeben der Daten
			alert(lData);
		}	
	}	
	
	function trim(pString) 
	{
	     return pString.replace(/^\s+/,'').replace(/\s+$/,'').replace(/\r+$/,'').replace(/\n+$/,'');
	}
