/**
 * Diese globale Ajax-Instanz sollte in Zukunft nicht mehr verwendet werden, 
 * da damit keine parallelen Ajax-Aufrufe möglich sind!
 */
var ajaxObj =
{
	htmlRequest: null
}

/**
 * Hiermit wird die Anfrage an den Server durchgeführt.
 * @param url Der url der aufzurufenden Server-Anwendung/Modul-Methode
 * @param objId Die Id des DOM-Objektes, in das das Ergebnis des Aufrufs gesteckt werden soll.
 *              Die Id darf null sein, dann wird das Ergebnis nirgendwo eingebaut.
 * @param JSCodePath der Pfad inkl. Name der JS-Datei, die zusätzlich geladen werden soll
 *                   embedded JS-Code in der zu ladenden Seite wird nämlich nicht vom IE verarbeitet
 */
function sendRequest(url, objId, JSCodePath)
{
	var htmlRequest = createAjaxObj();
	// XMLHttpRequest-Objekt initialisieren
	if (htmlRequest != null)
	{
		//onreadystatechange wird nach dem Ende des Aufrufs (unten) aufgerufen.
		//Dann sollen, falls alles ok war, die Daten angezeigt werden.
		htmlRequest.onreadystatechange = function ()
			{
				if (htmlRequest.readyState == 4)
				{
					if (htmlRequest.status != 200 && htmlRequest.status != 0)
					{
//						alert("Error: " + htmlRequest.statusText + " Status: " + htmlRequest.status);
						return false;
					}
					//Das Ergebnis wird ins DOM gesteckt
					if (objId != null)
                        updateDom(objId, htmlRequest);
					//JS-Code ausführen, falls erwünscht
					if (JSCodePath != null && JSCodePath != "")
					{
						//Sript-Element erstellen
						var oScript = document.createElement("script");
						oScript.src = JSCodePath;
						//alert(oScript.src);
						//Script laden
						document.body.appendChild(oScript);						
					}
				}
			}
			
		
		//Aufruf
		//alert (url);
		
		//htmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		htmlRequest.open('POST', url, true);
		htmlRequest.send(null);
		//alert("send");
	}
}



/**
 * Hiermit wird die Anfrage an den Server durchgeführt.
 * @param {String} url Der url der aufzurufenden Server-Anwendung/Modul-Methode
 * @param {String} objId Die Id des DOM-Objektes, in das das Ergebnis des Aufrufs gesteckt werden soll.
 *              Die Id darf null sein, dann wird das Ergebnis nirgendwo eingebaut.
 * @param {function} callBackFunction Die Funktion die nach dem Aufruf ausgeführt werden soll.
 * @param {boolean} executeJavaScript Wenn true ist werden alle JavaScript-Tags aus dem Element der 
 *                          übergebenen ID gesucht und der JavaScriptCode aus geführt. 
 */
function sendRequestAndCallBack(url, objId, callBackFunction, executeJavaScript)
{
	var htmlRequest = createAjaxObj();
	if (htmlRequest != null)
	{
      //onreadystatechange wird nach dem Ende des Aufrufs (unten) aufgerufen.
      htmlRequest.onreadystatechange = function ()
         {
            if (htmlRequest.readyState == 4)
            {
               if (htmlRequest.status != 200 && htmlRequest.status != 0)
               {
//                  alert("Error: " + htmlRequest.statusText + " Status: " + htmlRequest.status);
                  return false;
               }
               //Das Ergebnis wird ins DOM gesteckt
               if (objId != null)
					{
                  updateDom(objId, htmlRequest);
						
                  if (executeJavaScript == true)
						   execJS(objId);
						
					}
               //JS-Code ausführen, falls erwünscht
               if (callBackFunction != null && callBackFunction != "")
               {
                  callBackFunction();
               }
            }
         }
         
      
      //Aufruf
      //alert (url);
      
      //ajaxObj.htmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      htmlRequest.open('POST', url, true);
      htmlRequest.send(null);
      //alert("send");
   }
}



/**
 * Hiermit wird eine synchrone Anfrage an den Server durchgeführt.
 * @param url Der url der aufzurufenden Server-Anwendung/Modul-Methode
 * @param objId Die Id des DOM-Objektes, in das das Ergebnis des Aufrufs gesteckt werden soll.
 *              Die Id darf null sein, dann wird das Ergebnis nirgendwo eingebaut.
 */
function sendRequestSynchron(url, objId)
{
	var htmlRequest = createAjaxObj();
	if (htmlRequest != null)
	{
//      if (ajaxObj.htmlRequest.status != 200 && ajaxObj.htmlRequest.status != 0)
//      {
//         alert("Error: " + ajaxObj.htmlRequest.statusText + " Status: " + ajaxObj.htmlRequest.status);
//         return false;
//      }
		htmlRequest.open('POST', url, false);
		htmlRequest.send(null);
		if (htmlRequest.readyState == 4) {
			if (objId != null)
            updateDom(objId, htmlRequest);
	   }
	}
}

/**
 * Fügt die vom Server gelieferten Daten im Objekt mit der Id objID ein.
 */
function updateDom(objId, htmlRequestParam)
{
//	var result = ajaxObj.htmlRequest.responseXML.getElementsByTagName("test");
//	alert(ajaxObj.htmlRequest.responseXML);
//	alert(result[0].firstChild.nodeValue);

	var result = null;
	var htmlRequest = ajaxObj.htmlRequest;
	if (htmlRequestParam)
		htmlRequest = htmlRequestParam;
	try
	{
		result = htmlRequest.responseText;
		//alert (result);
		obj = document.getElementById(objId);
		//alert (obj);
		obj.innerHTML = result;
	}
	catch(e)
	{
		//	alert(e);
		//document.getElementById("AjaxTest").innerHTML = "httpRequest error:\n" + ajaxObj.htmlRequest.statusText + ".  Error: " + e;
	}
}

/**
 * Initialisiert ein globales HTTPRequest-Objekt je nach Browser.
 * !Vorsicht! Parallele Aufrufe sind damit nicht möglich!
 */
function initAjaxObj()
{
	try
	{
		ajaxObj.htmlRequest = new XMLHttpRequest();
	}
	catch(w3c)
	{
		try
		{
			ajaxObj.htmlRequest = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(msie)
		{
			try
			{
				ajaxObj.htmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(msie_old)
			{
				return false;
			}
		}
	}
	
	return true;
}

/**
 * Erzeugt ein neues HTTPRequest-Objekt je nach Browser
 * und gibt es zurück. Schlägt die Erzeugung irgendwie fehl,
 * wird null zurückgegeben.
 */
function createAjaxObj()
{
	var htmlRequest = null;
	try
	{
		htmlRequest = new XMLHttpRequest();
	}
	catch(w3c)
	{
		try
		{
			htmlRequest = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(msie)
		{
			try
			{
				htmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(msie_old)
			{
				return null;
			}
		}
	}
	
	return htmlRequest;
}

/**
 * Ausführen von über ajax nachgeladenem JS-Code
 * @param {String} objId Ab hier soll die Suche nach JS-Code beginnen
*/

function execJS(objId)
{
   // Element auf Javascript überprüfen, und falls nötig ausführen
   var obj = document.getElementById(objId);

   var st = obj.getElementsByTagName('script');
   var strExec = "";
			    
   for (var i=0; i<st.length; i++)
   { 
      try
      {
		 	
         if(st[i].innerHTML)
			
            strExec = st[i].innerHTML;
				
         else if(st[i].textContent)
			
            strExec = st[i].textContent;
				
         else if(st[i].text)
			
            strExec = st[i].text;
				
         eval(strExec);
      }
      catch(e)
      { 
         // alert(e);
      }
   }
}

