/*	Klasse ajaxRequest (AJAX-Aufruf)
	Eigenschaften (werden beim Aufruf als Parameter übergeben):
	-	url (PHP-Methode, die durch AJAX aufgerufen werden soll)
	-	handler (Funktion, die Antwort auf AJAX-Aufruf handhabt, siehe unten);
	-	params (Array mit den Parametern für den Aufruf, Schlüsselworter
		und Werte müssen mit einem Doppelpunkt getrennt sein)
	Methoden:
	-	doRequest (AJAX-Aufruf auslösen)
*/


function ajaxRequest(url, method, handler, params) {
	this.url = url;
	this.method = method || 'GET';
	this.handler = handler || function() {};
	
	// Das in params übergebene Array in der Form ["key1:value1", "key2:value2"]
	// wird in einen String "key1=value1&key2=value2" umgewandelt.
	if ((params) && (params.length > 0 )) {
		var key_value_array = Array();
		for (var i=0; i < params.length; i++) {
			var key_value = params[i].split(":");
			key_value_array = key_value_array.concat(escape(key_value[0]) + '=' + escape(key_value[1]));
		};
		var query = key_value_array.join('&');
		if (this.method == 'GET') {
			this.url = this.url + '?' + query;
			this.body = null;
		} else if (this.method == 'POST') {
			this.body = query;
		} else if (this.method == 'HEAD') {
			this.body = null;
		}
	} else {
		this.body = null;
	}
		
	// Request einrichten
	if (window.XMLHttpRequest) { 
		this.request = new XMLHttpRequest(); 
	} else if (window.ActiveXObject) { 
		this.request = new ActiveXObject("Microsoft.XMLHTTP"); 
	}
	
	this.doRequest = function() {
		this.request.open(this.method, this.url, true);
		this.request.onreadystatechange = this.handler;
		if ((this.method == 'POST') && (this.body)) {
			this.request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			this.request.setRequestHeader('Content-Length', this.body.length);
		}
		this.request.send(this.body);
	}
}


/*	Funktion handleGetRequest
	Handhabt den AJAX-Aufruf mittelsl GET und setzt die Antwort -
	es wird HTML-Code erwartet als Antwort erwartet - in den DOM ein.
	Parameter:
	-	url (URL der PHP-Methode, die durch AJAX aufgerufen werden soll)
	-	result (ID des HTML-Element des DOM, in das das HTML-Resultat eingesetzt wird)
		Wenn ein Element mit der id und dem Zusatz "-loading" existiert, wird dieses
		Element als Ladezustand eingeblendet. Es muss mit der CSS Anweisung
		'style="display: none;"' am Anfang ausgeblendet sein.
	-	params (Array mit den Parametern für den Aufruf, Schlüsselworter
		und Werte müssen mit einem Doppelpunkt getrennt sein)
*/

function handleGetRequest(url, result, params) {
	// Handler anlegen (für GET und POST identisch)
	var handler = function() {
		resultElement = document.getElementById(result);
		loadingElement = document.getElementById(result + '-loading');
		if (httpRequest.request.readyState < 4) {
			if (loadingElement) {
				loadingElement.style.display = 'block';
			}
		} else if (httpRequest.request.readyState == 4) {
			if (loadingElement) {
				loadingElement.style.display = 'none';
			}
			resultElement.innerHTML = httpRequest.request.responseText;
		}
	}
	// Request einrichten und aufrufen
	var httpRequest = new ajaxRequest(url, 'GET', handler, params);
	httpRequest.doRequest();
}


/*	Funktion handlePostRequest
	Handhabt den AJAX-Aufruf mittelsl POST und setzt die Antwort -
	es wird HTML-Code erwartet als Antwort erwartet - in den DOM ein.
	Parameter:
	-	url (URL der PHP-Methode, die durch AJAX aufgerufen werden soll)
	-	result (ID des HTML-Element des DOM, in das das HTML-Resultat eingesetzt wird)
		Wenn ein Element mit der id und dem Zusatz "-loading" existiert, wird dieses
		Element als Ladezustand eingeblendet. Es muss mit der CSS Anweisung
		'style="display: none;"' am Anfang ausgeblendet sein.
	-	form (ID des Formulars, dessen Eingabefelder an den AJAX-Aufruf
		übergeben werden)
*/

function handlePostRequest(url, result, form) {
	// Handler anlegen (für GET und POST identisch)
	var handler = function() {
		resultElement = document.getElementById(result);
		loadingElement = document.getElementById(result + '-loading');
		if (httpRequest.request.readyState < 4) {
			if (loadingElement) {
				loadingElement.style.display = 'block';
			}
		} else if (httpRequest.request.readyState == 4) {
			if (loadingElement) {
				loadingElement.style.display = 'none';
			}
			resultElement.innerHTML = httpRequest.request.responseText;
		}
	}
	// Parameter ermitteln
	var formElement = document.forms[form];
	var params = Array();
	for (var i=0; i < formElement.length; i++) {
		var inputElement = formElement.elements[i];
		if ((inputElement.type == 'text') || (inputElement.type == 'hidden')) {
			params = params.concat(inputElement.name + ':' + inputElement.value);
		} else if (((inputElement.type == 'radio') || (inputElement.type == 'checkbox')) && (inputElement.checked)) {
			params = params.concat(inputElement.name + ':' + inputElement.value);
		} else if (inputElement.type == 'textarea') {
			params = params.concat(inputElement.name + ':' + inputElement.value);
		}
	}
	// Request einrichten und aufrufen
	var httpRequest = new ajaxRequest(url, 'POST', handler, params);
	httpRequest.doRequest();
}


/*	Funktion handleHeadRequest
	Führt einen HEAD-Aufruf zur URL durch und zeigt den Response-Header
	in einer Dialogbox an.
	Parameter:
	-	url (URL der PHP-Methode, die durch AJAX aufgerufen werden soll)
*/

function handleHeadRequest(url) {
	// Handler anlegen
	var handler = function() {
		if (httpRequest.request.readyState == 4) {
			alert(httpRequest.request.getAllResponseHeaders());
		}
	}
	// Request einrichten und aufrufen
	var httpRequest = new ajaxRequest(url, 'HEAD', handler);
	httpRequest.doRequest();
}

