/* getAXAH('http://www.url.com', 'DivElementWosHineinsoll') */
function getAXAH(url, elementContainer, nofade)
{
 /* Optionen festlegen */
 var showPlatzhalterWhileLoading = true;
 var changeStatusbar = true;

 /* Statuszeile anpassen. */
 if (changeStatusbar == true) { window.status = 'Ajax:' + url; }

 /* Anzeigen eines Blindtextes während des Ladevorganges, aber nur wenn noch kein Inhalt im Element vorhanden ist... */
 /* Diese Zeilen können bei bedarf entfernt werden */
  try
  {
    e = document.getElementById(elementContainer);
    if (e)
    {
      if (showPlatzhalterWhileLoading == true)
      {
        if (e.innerHTML == '')
          e.innerHTML = "Lade von " + url + " ...";
      }
    }
  }
  catch(e)
  {
    alert("getAXAH(): element not found: " + elementContainer);
  }

  // Überprüfen ob eine Zufallszahl hinzugefügt werden soll, um den Inhalt nicht zu cachen. */
  // Das hinzufügen der Zufallszahl ist deswegen notwendig, da die Inhalte sonst im Browser gecached werden, und nicht neu geladen werden. */

  /* Überprüfen ob bereits Parameter bei der Abfrage verwendet werden oder nicht */
  if (url.indexOf('?') == -1)
  {
    /* Wenn keine Parameter vorhanden sind wird ein komplett neuer Parameter-Satz deklariert */
    url = url + '?RANDOM' + Math.floor(Math.random()*1024*1024) + "=" + Math.floor(Math.random()*1024*1024) + Math.floor(Math.random()*1024*1024);
  }
  else
  {
    /* Wenn bereits Parameter angegeben wurden, wird hinten noch ein weiterer angehängt */
    url = url + '&RANDOM' + Math.floor(Math.random()*1024*1024) + "=" + Math.floor(Math.random()*1024*1024) + Math.floor(Math.random()*1024*1024);
  }

  if (!nofade)
  {
    var id2 = insert_loading_div(elementContainer);
    fade_in(id2, 3, 0);
  }
  else
    id2 = false;

  var theHttpRequest = GetXmlHttp();
  var f = function() { processAXAH(theHttpRequest, elementContainer, id2); };
  SendHttpGet(theHttpRequest, url, f);

  if (changeStatusbar == true)
    window.status = '';
}

function postAXAH(url, formname, elementContainer)
{
 /* Optionen festlegen */
 var showPlatzhalterWhileLoading = true;
 var changeStatusbar = true;

 /* Statuszeile anpassen. */
 if (changeStatusbar == true) { window.status = 'Ajax:' + url; }


  var idx = url.indexOf('?');
  var param = "";
  if (idx != -1)
    param = url.substr(idx+1) + "&";

 /* Anzeigen eines Blindtextes während des Ladevorganges, aber nur wenn noch kein Inhalt im Element vorhanden ist... */
 /* Diese Zeilen können bei bedarf entfernt werden */
  param = param + 'RANDOM' + Math.floor(Math.random()*1024*1024) + "=" + Math.floor(Math.random()*1024*1024) + Math.floor(Math.random()*1024*1024);

  try
  {
    anz = document.forms[formname].elements.length;
    for (i=0; i < anz; i++)
    {
      t = document.forms[formname].elements[i].type;
      n = document.forms[formname].elements[i].name;
      v = document.forms[formname].elements[i].value;
      param+='&' + n + '=' + v;
      //alert("(" + i + ") [" + t + "] " + n + " = " + v);
    }
    e = document.getElementById(elementContainer);
    if (e)
    {
      if (showPlatzhalterWhileLoading == true)
      {
          if (e.innerHTML == '')
            e.innerHTML = "Lade von " + url + " ...";
      }
    }
  }
  catch(ex)
  {
    alert("postAXAH(): element not found: " + elementContainer);
  }

  var id2 = insert_loading_div(elementContainer);
  fade_in(id2, 3, 0);

  var theHttpRequest = GetXmlHttp();
  var f = function() { processAXAH(theHttpRequest, elementContainer, id2); };
  SendHttpPost(theHttpRequest, url, param, f);

  if (changeStatusbar == true)
    window.status = '';
}

function processAXAH(theHttpRequest, elementContainer, loadingContainer)
{
  var execJavaScriptAfterTransfer = true;
  if (theHttpRequest.readyState == 4)
  {
    if (theHttpRequest.status == 200)
    {
      e = document.getElementById(elementContainer);
      e.innerHTML = theHttpRequest.responseText;

      launchJavascript(theHttpRequest.responseText);
      init_jsComponents(e);

      var f = function() { delete_loading_div(loadingContainer); };
      fade_out_cb(loadingContainer, 5, 100, f);
    }
    else
      document.getElementById(elementContainer).innerHTML="Error! Fehler: " + theHttpRequest.statusText;
  }
}

function launchJavascript(responseText) {
  // RegExp from prototype.sonio.net
  var ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:</script>)';

  var match    = new RegExp(ScriptFragment, 'img');
  var scripts  = responseText.match(match);

    if(scripts) {
        var js = '';
        for(var s = 0; s < scripts.length; s++) {
            var match = new RegExp(ScriptFragment, 'im');
            js += scripts[s].match(match)[1];
        }
        eval(js);
    }
}

function execJS(node)
{
  /* 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');
  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("try eval exeption" + strExec);
    }
  }
}

/*function GetXmlHttp()
{
    var xmlHttp = null;
    try
    {
       xmlHttp = new XMLHttpRequest();
    }
    catch (e)
    {
      try
      {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
        try
        {
           xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
          xmlHttp = false;
        }
      }
    }

    if (!xmlHttp && typeof XMLHttpRequest!='undefined')
      xmlHttp = new XMLHttpRequest();

    return xmlHttp;
}*/
function GetXmlHttp()
{
  //return false;
    var try_these = [
        function () { return new XMLHttpRequest(); },
        function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
        function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
        function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); },
        function () { throw "Browser does not support XMLHttpRequest"; }
    ];
    for (var i = 0; i < try_these.length; i++) {
        var func = try_these[i];
        try {
            return func();
        } catch (e) {
        }
    }
/*
  var xmlhttp = false;
  if (window.XMLHttpRequest)
  {
    xmlhttp = new XMLHttpRequest()
  }
  else if (window.ActiveXObject)// code for IE

  {
    try
    {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP")
    } catch (e) {
      try
      {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
      } catch (e) {
        xmlhttp=false
      }
    }
  }
  return xmlhttp;
  */
}

function SendHttpPost(xmlHttp, url, args, callback, container)
{
    xmlHttp.open("POST", url, /* async */ true);

    //Send the proper header information along with the request
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttp.setRequestHeader("Content-length", args.length);
    xmlHttp.setRequestHeader("Connection", "close");
    xmlHttp.onreadystatechange = callback;
    xmlHttp.send(args);
}

function SendHttpGet(xmlHttp, url, callback)
{
    xmlHttp.open("GET", url, true); // true = async
    xmlHttp.onreadystatechange = callback;
    xmlHttp.send(null);
    //xmlHttp.onreadystatechange = function() { callback(xmlHttp); }
    //xmlHttp.send("FOO");
}
