// JavaScript Document
/**
 * Klasse für AJAX-Request
 *
 * @author Falk Oehmigen, barrierefrei-im-web.de
 * @copyright Falk Oehmigen, barrierefrei-im-web.de
 */
ajaxRequest = function(u, f, m, b, h, s) {
	//Standart-Werte
	this.url		= u;					//Zieladresse fr den Request
	this.wState		= f || function() { };	//Funktion fr Daten-Weiterverarbeitung und Stausberwachung
	this.method 	= m || "GET";			//Methode, die fr den Request verwendet wird
	this.body		= b || null;			//Inhalt, der bei einem Request gesendet wird
	this.headers	= h || false;			//zustzliche Header-Angaben als Array(key/val)
	this.sync		= s || true;			//Art der bertragung, Standart asynchrone bertragung
	this.abortReq	= false;
	
	//XMLHttpRequest initialisieren
	this.req = (window.XMLHttpRequest) ? new XMLHttpRequest() : ((window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : false);
	
	//Verarbeitung der Serveranfrage
	this.doRequest = function() {
		this.req.open(this.method,this.url,this.sync);
		//zusätzlich HeaderInformationen anfügen
		if(this.headers) {
			for(var i=0; i<this.headers.length; i+=2)
			{
				this.req.setRequestHeader(this.headers[i],this.headers[i+1]);
			}
		}
		
		//Anfrage senden
		this.req.onreadystatechange = this.wState;
		(!this.abortReq) ? this.req.send(this.body) : this.req.abort();
	}
}

var ajaxSend = function(u, m, f) {
	//u = Zieladresse für den Request
	//m = Methode, die für den Request verwendet wird
	var fworks = f || function() { };
	
	//Neues Object definieren und URL und Methode übergeben
	xmlhttp = new ajaxRequest(u, null, m);
	
	//Status prüfen und Daten zu Weiterverarbeitung übergeben
	xmlhttp.wState = function () {
		//Div Box für Ladezustand einbleden
		var elm = document.getElementById("load");
		elm.style.display = "block";
		//Status prüfen, ob abgeschloßen
		if(xmlhttp.req.readyState == 4) {
			//prüfen ob angeforderte Daten enthalten sind
			if(xmlhttp.req.status == 200) {
				//prüfen welche Document-Art zurück geliefert wurde
				var r = xmlhttp.req;
				var c = xmlhttp.req.getResponseHeader("Content-Type");
				if(c.indexOf("xml") >-1) var xml =r.responseXML;
				else var xml = r.responseText;
				//Daten an Funktion übergeben
				fworks(xml);
			}
			else {
				//Header-Status auslesen
				c = xmlhttp.req.status;
				//Fehlermeldung ausgeben
				err = new errAusg(c);
				err.eInfo();
			}
			//Ladezustand ausblenden
			elm.style.display = "none";
		}
	}
	xmlhttp.doRequest();
}

var errAusg = function(c) {
	this.err = c || 204;
	this.error = "Es ist ein Fehler aufgetreten!\nWiederholen Sie bitte Ihre Auswahl.";
	if(this.err == 404) this.error = "Seite nicht erreichbar.";
	if(this.err == 205) this.error = "Keine Inhalte gefunden.";
	this.eInfo = function() { alert(this.error); }
}