var Request = new Object();

Request.send = function(url, method, callback, data, urlencoded, name)
	{
	var req;
	if (window.XMLHttpRequest)
		req = new XMLHttpRequest();
	else if (window.ActiveXObject)
		req = new ActiveXObject("Microsoft.XMLHTTP");
	if (typeof name == "undefined")
		name = "";
	else
		name += "\n";
	var readychange = function()
		{
		if(req.readyState == 4)
			{// only if req shows "loaded"
			if(req.status < 400)
				{// only if "OK"
				if (method=="POST")
					{
					callback(req,data);
					delete callback;
					}
				else
					{
					callback(req, data);
					delete callback;
					}
				}
			else if(typeof req == "undefined" || typeof req.status == "undefined")
				// don't do anything. user has navigated away
				delete callback;
			else if (req.status == 401)
				{ // unauthorized
				callback(req);
				delete callback;
				}
			else if (req.status == 404)
				{
				callback(req);
				delete callback;
				}
			else
				{
				//if(App.errorShowing) return false;
				//tool.errorShowing = true;
				switch(req.status)
					{
					// windows error codes
					case 12002: // server timeout
					case 12029: case 12030: case 12031: // dropped connection
					case 12152: // connection closed by server
					case 13030:
						alert(name + _("There was a network problem. Please reload the page."));
						break;
					case 500: case 503:
						alert(name + _("There was an internal server error. Please try later."));
						break;
					default:
						alert(_("There was a problem loading data:") + "\nstatus: " + req.status+ "/" + req.statusText + "\n" + url);
					//tool.errorShowing = false;
					}
				delete callback;
				}
			}
		};
	function do_request()
		{
		if (method=="POST")
			{
			req.open("POST", url, true);
			if (urlencoded) req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			req.onreadystatechange = readychange;
			req.send(data);
			}
		else
			{
			req.open("GET", url, true);
			req.onreadystatechange = readychange;
			req.send(null);
			}
		};
	do_request();
	return req;
	}

Request.sendRawPOST = function(url, data, callback, name)
	{
	Request.send(url, "POST", callback, data, false, name);
	}
Request.sendPOST = function(url, data, callback, name)
	{
	Request.send(url, "POST", callback, data, true, name);
	}
Request.sendGET = function(url, callback, args, name)
	{
	return Request.send(url, "GET", callback, args, name);
	}
