function fXMLHttpRequest_send(oRequest) {
		oRequest._object.send(oRequest._data);

		// BUGFIX: Gecko - missing readystatechange calls in synchronous requests
		if (bGecko && !oRequest._async) {
			oRequest.readyState = cXMLHttpRequest.OPENED;

			// Synchronize state
			fSynchronizeValues(oRequest);

			// Simulate missing states
			while (oRequest.readyState < cXMLHttpRequest.DONE) {
				oRequest.readyState++;
				fReadyStateChange(oRequest);
				// Check if we are aborted
				if (oRequest._aborted) {
					return;
				}
			}
		}
	}
// Queue manager
var oQueuePending = {"CRITICAL":[],"HIGH":[],"NORMAL":[],"LOW":[],"LOWEST":[]},
aQueueRunning = [];
function fQueue_add(oRequest) {
	oQueuePending[oRequest.priority in oQueuePending ? oRequest.priority : "NORMAL"].push(oRequest);
	//
	setTimeout(fQueue_process);
};

function fQueue_remove(oRequest) {
	for (var nIndex = 0, bFound = false; nIndex < aQueueRunning.length; nIndex++)
	if (bFound) {
		aQueueRunning[nIndex - 1] = aQueueRunning[nIndex];
	} else {
		if (aQueueRunning[nIndex] == oRequest) {
			bFound  = true;
		}
}

	if (bFound) {
		aQueueRunning.length--;
	}


	//
	setTimeout(fQueue_process);
};

function fQueue_process() {
if (aQueueRunning.length < 6) {
for (var sPriority in oQueuePending) {
if (oQueuePending[sPriority].length) {
var oRequest  = oQueuePending[sPriority][0];
oQueuePending[sPriority]  = oQueuePending[sPriority].slice(1);
//
aQueueRunning.push(oRequest);
// Send request
fXMLHttpRequest_send(oRequest);
break;
}
}
}
};