/*

                 Ajax Gold-JavaScript-Bibliothek
            ** No warranty is expressed or implied. **

  Die Ajax Gold-JavaScript-Bibliothek wird in einem Webbrowser
  ausgefuehrt und erlaubt die Uebernahme von Daten vom Server
  im Hintergrund. Sie verwendet JavaScript, ohne dass der Browser
  die aktuelle Seite neu laden muss. (Das wuerde dazu fuehren,
  dass der Bildschirm flackert und waehrend des Wartens auf das
  Laden der Seite vom Server geloescht wird, was mit Ajax
  letztlich vermieden werden soll.) Die Bibliothek wurde so
  entwickelt, dass mehrere Threads sicher parallel ausgefuehrt
  werden koennen.

  Um diese JavaScript-Bibliothek in eigene Webseiten einzubinden,
  legen Sie ajaxgold.js im selben Verzeichnis wie Ihre Webseiten
  ab und fuegen diese Zeile in den <head>-Abschnitt Ihrer Seiten
  ein:

  <script type = "text/javascript" src = "ajaxgold.js"></script>

  Die Ajax Gold-Bibliothek unterstuetzt diese Funktionen fuer die
  Arbeit mit Ajax (getDataReturnText und getDataReturnXml werden
  besonders haeufig genutzt):

  getDataReturnText(url, callback)
    ** Uebernimmt mit der Methode GET Text vom Server. **
    Uebernimmt Text von url und ruft mit diesem eine Funktion
    namens callback auf. Verwenden Sie diese Methode, wenn Daten
    von einer URL uebernommen werden sollen oder wenn die Daten,
    die dem Server uebergeben werden sollen, leicht in einer URL
    (z.B. "http://localhost/script.php?a=1&b=2&c=hello+there")
    kodiert werden koennen.
    Beispiel: getDataReturnText("http://localhost/data.txt", doWork);
    Hier ist URL ein String und doWork ist eine Funktion in
    Ihrem eigenen Skript.

  getDataReturnXml(url, callback)
    ** Uebernimmt mit der Methode GET XML-Daten vom Server. **
    Uebernimmt XML-Daten von url und ruft mit diesen die Funktion
    callback auf. Verwenden Sie diese Funktion, wenn Daten von
    einer URL uebernommen werden sollen oder wenn die Daten, die
    dem Server uebergeben werden sollen, leicht in einer URL
    (z.B. "http://localhost/script.php?a=1&b=2&c=hello+there")
    kodiert werden koennen.
    Beispiel: getDataReturnXml("http://localhost/data.txt", doWork);
    Hier ist url ein String und doWork ist eine Funktion in Ihrem
    eigenen Skript. Mit JavaScript-Methoden wie getElementsByTagName
    lassen sich XML-Elemente aus dem der Callback-Funktion
    uebergebenen XML-Objekt extrahieren.

  postDataReturnText(url, data, callback)
    ** Uebertraegt mit POST Daten zum Server und uebernimmt Text. **
    Uebertraegt Daten zu url und ruft die Funktion callback mit
    dem zurueckgegebenen Text auf. Verwendet die Methode POST.
    Nutzen Sie diese Funktion, wenn die zum Server zu uebertragenden
    Daten zu umfangreich sind, um sich leicht in einer URL kodieren
    zu lassen.
    Beispiel: postDataReturnText("http://localhost/data.php",
      "parameter=5", doWork);
    Hier ist url ein String, die zum Server zu uebertragenden Daten
    ("parameter=5") befinden sich in einem String und doWork ist
    eine Funktion in Ihrem eigenen Skript.

  postDataReturnXml(url, data, callback)
    ** Uebertraegt mit POST Daten zum Server und uebernimmt XML. **
    Uebertraegt Daten zu url und ruft die Funktion callback mit
    den zurueckgegebenen XML-Daten auf. Verwendet die Methode POST.
    Nutzen Sie diese Funktion, wenn die zum Server zu uebertragenden
    Daten zu umfangreich sind, um sich leicht in einer URL kodieren
    zu lassen.
    Beispiel: postDataReturnXml("http://localhost/data.php",
      "parameter=5", doWork);
    Hier ist url ein String, die zum Server zu uebertragenden Daten
    ("parameter=5") befinden sich in einem String und doWork ist
    eine Funktion in Ihrem eigenen Skript. Mit JavaScript-Methoden
    wie getElementsByTagName lassen sich XML-Elemente aus dem der
    Callback-Funktion uebergebenen XML-Objekt extrahieren.

  Denken Sie daran, dass sich die URL, von der Daten uebernommen
  werden sollen, in derselben Domaene wie die Webseite befinden muss,
  die die Ajax Gold-Methoden nutzt, da ansonsten - wie bei allen
  Ajax-Anwendungen - eine Sicherheitswarnung angezeigt wird. Wenn
  Sie Daten von einer anderen Domaene uebernehmen wollen, dann muss
  ein Server-seitiges Programm die Daten uebernehmen und sie Ihrer
  Ajax-Anwendung uebergeben.

*/

function getDataReturnText(url, callback)
{
  var XMLHttpRequestObject = false;

  if (window.XMLHttpRequest) {
    XMLHttpRequestObject = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    XMLHttpRequestObject = new
     ActiveXObject("Microsoft.XMLHTTP");
  }

  if(XMLHttpRequestObject) {
    XMLHttpRequestObject.open("GET", url);

    XMLHttpRequestObject.onreadystatechange = function()
    {
      if (XMLHttpRequestObject.readyState == 4 &&
        XMLHttpRequestObject.status == 200) {
          callback(XMLHttpRequestObject.responseText);
          delete XMLHttpRequestObject;
          XMLHttpRequestObject = null;
      }
    }

    XMLHttpRequestObject.send(null);
  }
}

function getDataReturnXml(url, callback)
{
  var XMLHttpRequestObject = false;

  if (window.XMLHttpRequest) {
    XMLHttpRequestObject = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    XMLHttpRequestObject = new
     ActiveXObject("Microsoft.XMLHTTP");
  }

  if(XMLHttpRequestObject) {
    XMLHttpRequestObject.open("GET", url);

    XMLHttpRequestObject.onreadystatechange = function()
    {
      if (XMLHttpRequestObject.readyState == 4 &&
        XMLHttpRequestObject.status == 200) {
          callback(XMLHttpRequestObject.responseXML);
          delete XMLHttpRequestObject;
          XMLHttpRequestObject = null;
      }
    }

    XMLHttpRequestObject.send(null);
  }
}

function postDataReturnText(url, data, callback)
{
  var XMLHttpRequestObject = false;

  if (window.XMLHttpRequest) {
    XMLHttpRequestObject = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    XMLHttpRequestObject = new
     ActiveXObject("Microsoft.XMLHTTP");
  }

  if(XMLHttpRequestObject) {
    XMLHttpRequestObject.open("POST", url);
    XMLHttpRequestObject.setRequestHeader('Content-Type',
      'application/x-www-form-urlencoded');

    XMLHttpRequestObject.onreadystatechange = function()
    {
      if (XMLHttpRequestObject.readyState == 4 &&
        XMLHttpRequestObject.status == 200) {
          callback(XMLHttpRequestObject.responseText);
          delete XMLHttpRequestObject;
          XMLHttpRequestObject = null;
      }
    }

    XMLHttpRequestObject.send(data);
  }
}

function postDataReturnXml(url, data, callback)
{
  var XMLHttpRequestObject = false;

  if (window.XMLHttpRequest) {
    XMLHttpRequestObject = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    XMLHttpRequestObject = new
     ActiveXObject("Microsoft.XMLHTTP");
  }

  if(XMLHttpRequestObject) {
    XMLHttpRequestObject.open("POST", url);
    XMLHttpRequestObject.setRequestHeader('Content-Type',
      'application/x-www-form-urlencoded');

    XMLHttpRequestObject.onreadystatechange = function()
    {
      if (XMLHttpRequestObject.readyState == 4 &&
        XMLHttpRequestObject.status == 200) {
          callback(XMLHttpRequestObject.responseXML);
          delete XMLHttpRequestObject;
          XMLHttpRequestObject = null;
      }
    }

    XMLHttpRequestObject.send(data);
  }
}

function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (Object.isString(element))
    element = document.getElementById(element);
  return Element.extend(element);
}
