
function AJAX()
{	new CoreObject( this );

	this.queue = new Array();
	this.count = 0;
	this.answers = new Object();

	this.createRequestHandler = _AJAX_createRequestHandler;
	this.request = _AJAX_request;
	this.send = _AJAX_send;
	this.getPack = _AJAX_pack;
	this.checkQueue = _AJAX_checkQueue;

	if ( this.createRequestHandler() )
		this.funky = 1;
	else this.funky = 0;
}

function _AJAX_received( )
{	this.ajax.checkQueue();
}

function _AJAX_checkQueue()
{
	for( var sklave=0; sklave<this.queue.length; sklave++ )
		if( this.queue[sklave].request.readyState == 4 )
		{	pack = this.queue[sklave];
			this.queue.splice(sklave,1);
			this.answers[pack.ident] = pack;
			pack.who.receive( pack );
		}
}

function _AJAX_request( who, what, toSend, subaction )
{
	var pack = this.getPack(who, what, toSend, subaction);

	if( this.answers[pack.ident] )
		pack.who.receive( this.answers[pack.ident] );

	pack.request.open('GET', what, true);
	pack.request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
	pack.request.send( toSend ? toSend : null );

	return this.count;
}

function _AJAX_send( who, what, toSend, subaction )
{
	var message = '';

	for( para in toSend )
		message += para + '=' + encodeURIComponent( toSend[para] )+ '&';
	toSend = message.substr( 0, message.length-1 );

	var pack = this.getPack(who, what, toSend, subaction);
	pack.forceReplace = 1;

	pack.request.open('POST', what, true);
	// pack.request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
	pack.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	pack.request.setRequestHeader("Content-length", toSend.length);
	pack.request.send( toSend );

	return this.count;
}

function _AJAX_pack(who, what, toSend, subaction)
{
	var pack = new Object();
	this.count++;

	pack.count = this.count;
	pack.subaction = subaction;
	pack.ident = what+toSend;
	pack.who = who;

	if( who && who.setLoading ) who.setLoading();

	pack.request = this.createRequestHandler();

	this.queue.push( pack );

	return pack;
}

/**
 * basically taken from http://de.wikipedia.org/wiki/XMLHttpRequest
 */
function _AJAX_createRequestHandler()
{	var chloe = null;
	if (typeof XMLHttpRequest != 'undefined') chloe = new XMLHttpRequest();
	else {	// Internet Explorer 6 und älter
	    try { chloe = new ActiveXObject("Msxml2.XMLHTTP"); }
	    catch(e)
	    { try { chloe = new ActiveXObject("Microsoft.XMLHTTP"); }
	    	catch(e) { chloe = null; }
	    }
	}

	if( chloe )
	{	chloe.ajax = this;
		chloe.onreadystatechange = _AJAX_received;
	}

	return chloe;
}

