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() {
  //Üeberpruefen der Angaben
  if (!this.url) {
    this.onError("Es wurde kein URL angegeben. Der Request wird abgebrochen.");
    return false;
  }

  if (!this.method) {
    this.method="GET";
  } else {
    this.method=this.method.toUpperCase();
  }

  //Zugriff auf Klasse für readyStateHandler ermöglichen  
  var _this = this;
  
  //XMLHttpRequest-Objekt erstellen
  var xmlHttpRequest=getXMLHttpRequest();
  if (!xmlHttpRequest) {
    this.onError("Es konnte kein XMLHttpRequest-Objekt erstellt werden.");
    return false;
  }
  
  //Fallunterscheidung nach Übertragungsmethode
  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-urlencoded');
                 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+"] Es trat ein Fehler bei der Datenbertragung auf.");
      }
    }
  }
}

//Gibt browserunabhängig ein XMLHttpRequest-Objekt zurück
function getXMLHttpRequest() 
{
  if (window.XMLHttpRequest) {
    //XMLHttpRequest für Firefox, Opera, Safari, ...
    return new XMLHttpRequest();
  } else 
  if (window.ActiveXObject) {
    try {   
      //XMLHTTP (neu) für Internet Explorer 
      return new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {        
        //XMLHTTP (alt) für Internet Explorer
        return new ActiveXObject("Microsoft.XMLHTTP");  
      } catch (e) {
        return null;
      }
    }
  }
  return false;
}

/*********************
 *	Hilfsfunktionen 
 *********************/

// liest die Werte aus Eingabefeldern eines Formulars
function getFormValues( f , tag ){
	var anzahl = f.getElementsByTagName( tag ).length;
	var param_array = new Array();
	for ( i=0 ; i < anzahl ; i++ ){
		var name = f.getElementsByTagName( tag )[i].name;
		var value = f.getElementsByTagName( tag )[i].value;
		param_array.push( name + "=" + encodeURIComponent( value ) );
	}
	return param_array;
}

//Überprüft Rückgabe eines PHP-Skripts, ob es eine Fehlermeldung ist
function HasError(msg)
{
  //Hat msg einen Inhalt?
  if (!msg) return false; 
  
  //Befindet sich Zeichenkette AOERROR: am Anfang von msg?
  if (msg.indexOf("ERROR:") == 0) {
    return true;
  } else {
    return false;
  }
}

function GetError(msg)
{
  //ERROR: aus Fehlermeldung entfernen
  return msg.replace(/ERROR:/, ""); 
}

//Allgemeine Funktion für alle Fehlerfälle
function ErrorHandler(msg)
{
  //Fehler als Meldungsfenster anzeigen
  alert(msg);
}


function hideChilds( elem ){
	var e = document.getElementById( elem ).firstChild ;
	while (e != null) {
	  //e.getAttributeNode( 'style' ,  "visibility: hidden;" );
	  if (e.nodeType == 1) e.setAttribute( "style" , "visibility: hidden;" );
	  e = e.nextSibling;
	}
}

function showChilds( elem ){
	var e = document.getElementById( elem ).firstChild ;
	while (e != null) {
	  if (e.nodeType == 1) e.setAttribute( "style" , "visibility: visible;" );
	  e = e.nextSibling;
	}
}
