/**
 * ajax.class.js Ajax-Class
 *
 * Diese Scriptdatei enthaelt die Ajax-Klasse und verallgemeinert
 * den Ajax-Zugriff.
 *
 * Einsatz:
 * In der Ajax-beinhaltenden html-datei muss zuerst die ajax.js
 * importiert werden.
 * Anschliessend kann ein zweiter <script>-Aufruf die Engine imple-
 * mentieren und entsprechende Methoden ansprechen:
 *
 * <script language="Javascript 1.2" type="text/javascript" src="ajax.class.js"></script>
 * <script language="Javascript 1.2" type="text/javascript">
 * <!--
 * function ajaxFunc() {
 *   with(new Ajax()) {
 *     url='relativeURL von dem Script (ab html-seite)';
 *     onSuccess=erfolgsFunktion;
 *     onError=fehlerFunktion;
 *     doRequest(); // Request ausfuehren
 *   }
 * }
 * function erfolgsFunktion(txt,xml) {
 *   document.getElementById('id').innerHTML=txt;
 * }
 * function fehlerFunktion(msg) {
 *   document.getElementById('id').innerHTML=msg;
 * }
 * //-->
 * </script>
 *
 * Weitere Parameter:
 * - params='Parameter-Uebergabe ohne ? aber mit & (falls mehrere Parameter)'
 * - method='GET' oder method='POST' | Standard-Methode ist GET
 *
 *
 * @package     mbmod
 * @version     1.2
 * @author      Stefan Jacomeit <stefan@momo-net.ch>
 * @copyright   2006-2008 Momo-NET GmbH
 */
function Ajax() {
  // Eigenschaften deklarieren und initialisieren
  this.url = '';
  this.params = '';
  this.method = 'GET';
  this.onSuccess = null;
  this.onError = function(msg) {
    alert(msg);
  }
}

Ajax.prototype.doRequest=function() {
  // Ueberpruefen der Angaben
  if (!this.url) {
    this.onError('URL not given. The Request was failed!');
    return false;
  }
  if (!this.method) { this.method="GET"; }
  else { this.method=this.method.toUpperCase(); }
  // xmlHttpRequest erstellen
  var xmlHttpRequest=getXMLHttpRequest();
  if (!xmlHttpRequest) {
    this.onError("Couldnot create xmlHttpRequest-Object!");
    return false;
  }

  // Zugriff auf Klasse fuer readyStateHandler ermoeglichen
  var _this = this;

  // Fallunterscheidung nach Uebertragungsmethode
  switch (this.method) {
    case "GET":     xmlHttpRequest.open(this.method, this.url+"?"+this.params, true);
              xmlHttpRequest.onreadystatechange = readyStateHandler;
              xmlHttpRequest.send(null);
              break;
    case "POST":    xmlHttpRequest.open(this.method, this.url, true);
              xmlHttpRequest.onreadystatechange = readyStateHandler;
              xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencode');
              xmlHttpRequest.send(this.params);
              break;
  }

  // private Methode zur Verarbeitung der erhaltenen Daten
  function readyStateHandler() {
    if (xmlHttpRequest.readyState < 4) return false;
    if (xmlHttpRequest.status == 200 || xmlHttpRequest.status == 304) {
      if (_this.onSuccess)
        _this.onSuccess(xmlHttpRequest.responseText, xmlHttpRequest.responseXML);
    } else {
      if (_this.onError)
        _this.onError("["+xmlHttpRequest.status+" - "+xmlHttpRequest.statusText+"] onSuccess failed!");
    }
  }
}

// Gibt ein browserunabhaengiges XMLHttpRequest zurueck
function getXMLHttpRequest() {
  if (window.XMLHttpRequest) return new XMLHttpRequest();
  else {
    if (window.ActiveXObject) {
      try {return new ActiveXObject("Msxml2.XMLHTTP");}
      catch (e) {
        try {return new ActiveXObject("Microsoft.XMLHTTP");}
        catch (e) {return null;}
      }
    }
  }
  return null;
}