var xmlHttp = new createRequestObject();

//Zum Suchen von Elementen im Array
Array.prototype.contains = function (file, queryString, div) {
  var i;
  for (i = 0; i < this.length; i++) {
    if (this[i][0]==file && this[i][1]==queryString && this[i][2]==div) {
      return true;
    }
  }
  return false;
};

queue = new Array();
/** Verarbeitet einen Request zur Zeit. Wenn weiter folgen, werden sie in eine Warteschlange eingeordnet und bei gelegenheit verarbeitet.
 * @param file        - Die zu verarbeitende Datei
 * @param queryString - POST String
 * @param div         - DIV Bereich, der die Ausgabe erhält
 */

function sendRequest(file, queryString, div)
{
	if(xmlHttp)
	{
		// Request Daten in die Warteschlange setzen, falls der vorherige noch nicht abgeschlossen ist
		if(xmlHttp.readyState == 1 || xmlHttp.readyState == 2 || xmlHttp.readyState == 3)
		{
			queueLength = queue.length;
			if(queueLength < 15)
			{
				if( !( queue.contains(file, queryString, div) ) )
				{
					queue[queueLength] = new Array();
					queue[queueLength][0] = file;
					queue[queueLength][1] = queryString;
					queue[queueLength][2] = div;
					if(document.getElementById(div))
					{
						//document.getElementById(div).innerHTML = 'Loading1...';
					}
				}
				else
				{
					//alert('Diese Anfrage wäre doppelt abgeschickt worden.');
				}
			}
			else
			{
				//document.getElementById(div).innerHTML = 'Loading2...';
			}
		}
		else
		{
			if(queryString == "")
			{
				xmlHttp.open('GET', file, true);//changed to false
			}
			else
			{
				xmlHttp.open('POST', file, true);
				xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				xmlHttp.setRequestHeader("Content-Length",queryString.length)
				xmlHttp.send(queryString);
			}
			xmlHttp.onreadystatechange = function ()
											{
												if(xmlHttp.readyState == 2)
												{
													//document.getElementById(div).innerHTML = 'Loading...';
												}
												if(xmlHttp.readyState == 4)
												{
													if(xmlHttp.status == 200)
													{
														document.getElementById(div).innerHTML = xmlHttp.responseText;
													}
													else if(xmlHttp.status == 404)
													{
														//document.getElementById(div).innerHTML = 'Error!';
													}
													// Warteschlange abarbeiten
													queueLength = queue.length;
													if(queueLength != 0) {
														sendRequest(queue[0][0], queue[0][1], queue[0][2]);
														queue.shift(); //Erstes Element entfernen, den Rest eine Position nach vorne rücken
													}
												}
										   };
										   
										   
		}
	}
	return false;
}
//AJAX Browserweiche
function createRequestObject()
{
	var rs;
	if (window.XMLHttpRequest) 		// Mozilla, Safari,...
	{
		rs = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) 	// IE
	{
		try
		{
	     	rs = new ActiveXObject("Msxml2.XMLHTTP"); //Microsoft.XMLHTTP
	    }
	    catch (e)
	    {
	       	try
	       	{
	        	rs = new ActiveXObject("Microsoft.XMLHTTP");
	        }
	        catch (e) {}
	    }
	}
	return rs;
}

execJS = function (div_id)
{
	var div_id = div_id;
	var j=0;
	clearInterval(schleife);	
	var schleife = setInterval(
					function()
					{
						var node = document.getElementById(div_id);	
						if(node  &&  node != null)
						{
							// Element auf Javascript überprüfen, und falls nötig ausführen 
							var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
							var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
							var bMoz = (navigator.appName == 'Netscape');
							var st = node.getElementsByTagName('script');//hier muss die getInnerDiv funktion rein!!!
							var strExec;
						
							for(var i=0;i<st.length; i++)
							{
							  if (bSaf) {
								strExec = st[i].innerHTML;
							  } else if (bOpera) {
								strExec = st[i].text;
							  } else if (bMoz) {
								strExec = st[i].textContent;
							  } else {
								strExec = st[i].text;
							  }
							  try
							  {
								eval(strExec);
							  }
							  catch(e)
							  {
								alert(e);
								alert(strExec);
							  }
							}
							clearInterval(schleife);
						}else{
							j++;
							if(j>=30){clearInterval(schleife);}
							//if(j>=0 && j<5){		alert(j); }
						}
					}
				, 100);
}

