function Ajax() {
	var self = this;
	var request = null;
	var method = 'GET';
	var url = null;
   	var async = true;
   	var readyState = null;
   	var status = null;
  	var statusText = '';
  	var handleResponse = null;
  	var responseFormat = 'text'; //text, xml, object
   	var responseText = null;
  	var responseXML = null;
  	var responseContainer = 'ajaxResponse';
   	var postData = null;
  	var mimeType = null;
  	var requestProcessingImage = relBasePath + '/system/images/default/loading.gif';

	var handleError = function() {
		var errorWindow;
  		try {
    		errorWindow = window.open('', '_blank');
    		errorWindow.document.body.innerHTML = responseText; 
    	}
  		catch(e) {
  			alert('Fehler beim Verarbeiten des AJAX-Requests.\n\n'
  			+ request.status + ' - ' + request.statusText);
		}
	}

	this.setMimeType = function(_mimeType) {
		mimeType = _mimeType;
	}
	
	this.getResponseContainer = function() {
		return responseContainer;
	}
	
	this.abortRequest = function() {
		if(request) {
			request.onreadystatechange = function() {};
  			request.abort();
  			request = null;
  		} 
  	}
  	
  	this.clearResponseContainer = function(_responseContainer) {
  		responseContainer = _responseContainer || 'ajaxResponse'; 
  		var responseDiv = document.getElementById(responseContainer);
  		  		
  		while(responseDiv.firstChild) {
 			responseDiv.removeChild(responseDiv.firstChild);
 		}		
  	}
	
	this.doGetRequest = function(_url, _responseHandler, _responseContainer, _responseFormat) {
		var concat = "&";
		if(_url.indexOf("?") < 0) {
			concat = "?";
		}
		url = _url + concat + "cached=" + new Date().getTime();
		handleResponse = _responseHandler;
  		responseFormat = _responseFormat || 'text';
  		responseContainer = _responseContainer || 'ajaxResponse';  		
  		doRequest();
  	}
  	
  	this.doPostRequest = function(_url, _postData, _responseHandler, _responseContainer, _responseFormat) {
  		method = 'POST';
  		url = _url;
  		postData = _postData;
  		handleResponse = _responseHandler;
  		responseFormat = _responseFormat || 'text';
  		responseContainer = _responseContainer || 'ajaxResponse';
  		doRequest();	
 	}
  	
   	function doRequest() {
  		if(!init()) {
			alert('XMLHttpRequest-Objekt konnte nicht angelegt werden.');
    		return;
  		}
  		request.open(method, url, async);
  		if(method == "POST") {
  			request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  		}
  		if(mimeType) {
  			try {
				request.overrideMimeType(mimeType);
  			}
  			catch(e) {} //IE6, Opera8
		}
		request.onreadystatechange = function() {
			var response = null;
 			if(request.readyState == 4) {
				switch(responseFormat) {
					case 'text':
       					response = request.responseText;
       					break;
     				case 'xml':
     					response = request.responseXML;
     				  	break;
      				case 'object':
        				response = request;
        				break;
    			}
    			if(request.status >= 200 && request.status <= 299) {
					handleResponse(response);
    			}
    			else {
      				handleError(response);
    			}
  			}
  			else {
				processRequest();
  			}
		}
		request.send(postData);
    }
    
    function init() {
  		if(!request) {
			try	{ 
				request = new XMLHttpRequest(); //FF, IE7, Safari...
			}
    		catch(e) {
				try	{
					request = new ActiveXObject('MSXML2.XMLHTTP'); //neuere IE
				}
      			catch(e) {
        			try {
          				request = new ActiveXObject('Microsoft.XMLHTTP'); //ältere IE
        			}
        			catch(e) {
          				return false;
        			}
      			}
    		}
  		}
  		return request;
  	}
  	
  	function processRequest()
	{
		self.clearResponseContainer(responseContainer);
		
		var responseDiv = document.getElementById(responseContainer);
  		var procImg = null;
  			
 		procImg = document.createElement('img');
 		procImg.src = requestProcessingImage;
 		responseDiv.appendChild(procImg); 				
	}
}	
