var req;
var reqTimeout;
var userfuncOK = null;
var userfuncErr = null;

function loadXMLDoc(url, params, method) 
{
	req = null;
	if (window.XMLHttpRequest) 
	{
		try 
		{
			req = new XMLHttpRequest();
		} 
		catch (e){}
	} 
	else if (window.ActiveXObject) 
	{
		try 
		{
			req = new ActiveXObject('Msxml2.XMLHTTP');
		} 
		catch (e)
		{
			try 
			{
				req = new ActiveXObject('Microsoft.XMLHTTP');
			} 
			catch (e){}
		}
	}

	if (req) 
	{
		// add some random number to avoid caching
		if(params.length > 0)
			params += '&';
		params += 'r='+Math.random();

		req.onreadystatechange = processReqChange;
		switch(method.toUpperCase())
		{
		case "GET":
			http.open("GET", url+"?"+params, true);
			req.send(null);
			break;
		case "POST":
			req.open("POST", url, true);
			req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			req.setRequestHeader("Content-length", params.length);
			req.setRequestHeader("Connection", "close");
			req.send(params);
			break;
		}
		reqTimeout = setTimeout("req.abort();", 5000);
	} 
	else 
	{
		alert("Браузер не поддерживает AJAX");
	}
}

function processReqChange() 
{
	if (req.readyState == 4) 
	{
		clearTimeout(reqTimeout);

		// only if "OK"
		if (req.status == 200) 
		{
			if(userfuncOK)
				userfuncOK(req);
		} 
		else 
		{
			if(userfuncErr)
				userfuncErr(req);
		}
	}  
}

function requestdata(url, params, method, funcOK, funcErr)
{
	userfuncOK = funcOK;
	userfuncErr = funcErr;
	loadXMLDoc(url, params, method);
}

function encodeParams(params, values)
{
	uri = '';
	for(i = 0; i < params.length; i++)
	{
		key = params[i];
		val = values[i];
		if(uri.length > 0)
			uri += '&';
		uri += (key+'='+encodeURIComponent(val));
	}
	return uri;
}