var queueRequest = new Array();
var queueDest = new Array();
var queueExec = new Array();
var busy = false;

function load(request, dest)
{
	queueRequest.push(request);
	queueDest.push(dest);
	nextJob();
}

function exec(job)
{
	queueExec.push(job);
	nextJob();
}

function nextJob()
{
	if (!busy)
	{
		if (queueRequest.length>0)
		{
			busy = true;
			ajaxRequest(queueRequest.shift(), queueDest.shift());
			return;
		}
		if (queueExec.length>0)
		{
			setTimeout(queueExec.shift(), 0);
		}
	}
}

function getAjaxObject()
{
	var ajaxObject = null;
	try
	{
		ajaxObject = new XMLHttpRequest();
		return ajaxObject;
	}
	catch(e) {}
	try
	{
		ajaxObject = new ActiveXObject('Msxml2.XMLHTTP');
		return ajaxObject;
	}
	catch(e) {}
	try
	{
		ajaxObject = new ActiveXObject("Microsoft.XMLHTTP");
		return ajaxObject;
	}
	catch(e) {}
	
	return null;
}

function ajaxRequest(request, dest)
{
	var ajaxObject = getAjaxObject();
	if (ajaxObject==null)
	{
		alert('Bla…d ajaxa :s');
		return;
	}
	
	ajaxObject.onreadystatechange=function()
	{
		if(ajaxObject.readyState==4)
		{
			if (ajaxObject.status==200)
			{
				if (dest!=null)
				{
					//document.getElementById(dest).display = 'none';
					document.getElementById(dest).innerHTML = ajaxObject.responseText;
					//document.getElementById(dest).display = 'block';
				}
				else
					setTimeout(ajaxObject.responseText, 0);
			}
			else
			{
				//alert('Server response: '+ajaxObject.status);
				errMsg();
			}
			busy = false;
		}
		nextJob();
	};
	
	ajaxObject.open('GET', request+'&random='+Math.random(), true);
    ajaxObject.send(null);
}
