/**
*	Asynchronous Javascript and XML handler
*
*	@author 	prioserve internetdiensten - piet <piet.b@prioserve.net>
*	@last-revis	2006-06
*	@tab-str	8
*
*	todo: getResponseHeader() && setRequestHeader()
*/

// obj.prototype - HTTP request handler
function xml_request_handler()
{
	this.req = null;
	this.url = null;
	this.method = 'GET';
	this.asynch = true;
	this.status = null;
	this.statusText = '';
	this.postData = null;
	this.readyState = null;
	this.responseText = null;
	this.responseXML = null;
	this.responseFormat = 'text' // 'xml'
	this.mimeType = null; // 'text/xml'
	
	// funcs
	this.handle_readystate = null;
	this.handle_response = null;
	
	
	// instantiate the XMLHTTP object
	this.init = function() 
	{
		if (window.XMLHttpRequest)
			this.req = new XMLHttpRequest();
		else 
			if(window.ActiveXObject)
				this.req = new ActiveXObject("Microsoft.XMLHTTP");

		return this.req;
	}

	// send request + event handling
	this.start_request = function()
	{
		if (!this.init()) {
			return alert('Your browser has no advanced XML support. (XML HTTP Request object)');
		}

		this.req.open(this.method, this.url, (this.asynch == true ? true : false));
		
		if (this.mimeType != null)
			this.req.overrideMimeType(this.mimeType);

		var self = this;
		this.req.onreadystatechange = function()
		{
			if (self.handle_readystate != null) {
				self.handle_readystate(self.req.readyState);
			}
			if (self.req.readyState == 4) {
				var resource = null;
				switch (self.responseFormat) {
					case 'text':
						resource = self.req.responseText;
					break;
					case 'xml':
						resource = self.req.responseXML;
					break;
				}
				if (self.req.status >= 200 && self.req.status <= 299) {
					self.handle_response(resource);
				}
				else {
					alert('code: '+self.req.status+'\n'
						+'status: '+self.req.statusText+'\n'
						+'url: '+self.url
						);
				}
			}
		}
		this.req.send(this.postData);
	}

	this.set_mimetype = function(type)
	{
		this.mimeType = type;	
	}

	this.abort = function()
	{
		if (this.req) {
			this.req.onreadystatechange = function() {}
			this.req.abort();
			this.req = null;
		}
	}

	this.get = function(url, hand, format)
	{
		this.url = url;
		this.handle_response = hand;
		this.responseFormat = format || 'text';
		this.start_request();
	}
}
