/**
 * Ajax-Schnittstelle
 *
 * @author Holger Genth <holger.genth@grennis-welt.de>
 * @version 0.2, 2007/04/07
 */
 

function myAJAX() {
	this.ajax         = true;
	this.forbidden    = "_forbidden";
	this.not_found    = "_not_found";
	this.server_error = "_server_error";

	if (window.XMLHttpRequest) { // gecko-browser & opera & IE7

		this.http_request = new XMLHttpRequest();

		if (this.http_request) {
			try {
				this.http_request.overrideMimeType('text/xml');
			} catch(e) {}
		}
	} else if (window.ActiveXObject) { // IE
	    try {
		    this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
	    } catch (e) {
    	    try {
    		    this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
	        } catch (e) { this.ajax = false;}
		}
	} else {
		this.ajax = false;
		return false;
	}

	return true;
}
/**
 * Default Callback-Funktionen
 */
myAJAX.prototype.onforbidden = function () {
	alert("ERROR 403: forbidden!");	
}
myAJAX.prototype.onnot_found = function () {
	alert("ERROR 404: document not found!");	
}
myAJAX.prototype.onserver_error = function () {
	alert("ERROR 500: internal server error!");
}
myAJAX.prototype.onready = function (text,date) {
	alert("Data successfull retrieved!");
}
myAJAX.prototype.onreadyxml = function (text,date) {
	alert("XML-Data successfull retrieved!");
}
myAJAX.prototype.onloadprogress = function(e) {};
/**
 * Sendet eine Anfrage an den Server und ruft bei erfolg eine callback-funktion auf
 *
 * callback:  Callback-Funktion "function callback(response_xml) {}"
 * url:       Url, die abgerufen werden soll
 * post:      Variablen, die an die aufzurufende Seiten bergeben werden
 *
 * gibt true bei erfolg zurck, sonst false;
 */
myAJAX.prototype.fetch_data = function (url,xml) {
	if (this.ajax) {
		var date = new Date();

		var me = this;
		if (this.http_request.onprogress)
			this.http_request.onprogress = me.onloadprogress;
			
		this.http_request.open('GET', url+"?"+date.getTime() , true);
		
		this.http_request.onreadystatechange = function () {
//			alert("state changed: " + me.http_request.readyState +" - "+me.http_request.status);
			switch (me.http_request.readyState) {
				case 4:
					switch (me.http_request.status) {
						case 201:
						case 202:
						case 203:
						case 200:
						  // modifikationsdatum der abgerufenen Datei ermitteln
							//var date = new Date(me.http_request.getResponseHeader("Last-Modified"));
							var date = new Date(me.http_request.getResponseHeader("Date"));
							// geladene Daten zurück geben
							me.onreadyxml(me.http_request.responseXML,date);
							me.onready(me.http_request.responseText,date);
							break;
						case 403:
							me.onforbidden();
							break;
						case 404:
							me.onnot_found();
							break;
						case 500:
							me.onserver_error();
							break;
					}
				default:
					break;
			}
		};
		
		this.http_request.send("");
		return true;
	}
	return false;
}
