/**
 * Ajax.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.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 pcm
 * @version 1.0
 * @author	Stefan Jacomeit <info@pc-mallorca.com>
 * @copyright 2006 PC-Mallorca/pCMS
 */
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;
}