/*
	AJAX ENGINE
*/

// gibt ein browserunabhängiges XMLHttpRequest Objekt zurück
function getXMLHttpRequest(){

	if(window.XMLHttpRequest){
		// firefox, opera, safari ..
		return new XMLHttpRequest();
	} else {
		if(window.ActiveXObject){
			try {
				// neuer IE
				return new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e){
				try {
					// alter IE
					return new ActiveXObject("Microsoft.XMLHTTP");
				} catch(e){
					return null;
				}
			}
		}
		
	}
	return null;
}

// die ajax engine 'klasse'
function Ajax(){

	this.url = "";
	this.params = "";
	this.method = "GET";
	this.onSuccess = null;
	this.onError = function(msg){
		alert(msg);
	}
	
}

Ajax.prototype.doRequest = function(){
	
	if(!this.url){
		this.OnError("keine url !");
		return false;
	}
		
	if(!this.method){
		this.method = "GET";
	} else {
		this.method.toUpperCase();
	}
	
	var xmlHttpRequest = getXMLHttpRequest();
	if(!xmlHttpRequest){
		this.onError("Es konnte kein xmlHttpRequest erstellt werden");
		return false;
	}
	
	// this pointer merken
	var _this = this;
	
	// request durchführen
	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 zum daten empfangen
	function readyStateHandler(){
		if(xmlHttpRequest.readyState < 4){
			return false;
		}
		if( xmlHttpRequest.status == 200 || xmlHttpRequest.state == 304){
			if(_this.onSuccess){
				_this.onSuccess( xmlHttpRequest.responseText,xmlHttpRequest.responseXML);
			}
		} else {
			_this.onError("[" + xmlHttpRequest.status + xmlHttpRequest.statusText + "]" + " \nFehler bei der datenübertragung");
		}
	}
	
}

