
var r_request = null;
var r_first = null;
var r_queue = new Array();

function request_action()
{
	if (r_request.readyState == 4)
	{
		if (r_first != null)
		{
			r_first['handler'](r_request.status, r_request.responseText, r_first['user_id']);
			r_first = null;
		}

		request_next();
	}
}

function request_url(url, params)
{
	if (window.XMLHttpRequest)
	{
        	r_request = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		r_request = new ActiveXObject("Microsoft.XMLHTTP");
	}

	if (r_request)
	{
		r_request.onreadystatechange = request_action;

		if (params)
		{
			var body = '';
			for (var name in params)
			{
				body += (body.length ? "&" : "") + name + '=' + encodeURIComponent(params[name]);
			}

			r_request.open("POST", url, true);
			r_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			r_request.setRequestHeader("Content-Length", body.length);
			r_request.setRequestHeader("Connection", "close");
			r_request.send(body);
		}
		else
		{
			r_request.open("GET", url, true);
			r_request.send(null);
		}
	}
}

function request_next()
{
	if (r_first == null)
	{
		if (r_queue.length > 0)
		{
			r_first = r_queue.shift();

			request_url(r_first['url'], r_first['params']);
		}
	}
}

function request(url, handler, user_id)
{
	r_queue.push({
		url	: url,
		handler	: handler,
		user_id	: user_id
	});

	request_next();
}

function request_post(url, params, handler, user_id)
{
	r_queue.push({
		url	: url,
		params	: params,
		handler	: handler,
		user_id	: user_id
	});

	request_next();
}
