function ajax(request, response)
{	
	if (request.config)
	{
		url = request.config.url;
		data = 'cache_clear=' + Math.floor(Math.random() * 1000);
		for (key in request.data)
		{
			if (key != 'handler' && key != 'post')
			{
				data += '&' + key + '=' + request.data[key];
			}
		}			
	
		if (getGetKey('show_request'))
		{
			alert(location.host + url + '?' + data);
		}
	}
	else
	{
		if (!request.handler)
		{
			request.handler = '/resources/phpscripts/ajax/control.php?';
		}
		
		for (key in request)
		{
			if (key != 'handler' && key != 'post')
			{
				request.handler += '&' + key + '=' + request[key];
			}
		}
		
		request.handler += '&cache_clear=' + Math.floor(Math.random()*1000);	
	
		if (getGetKey('show_request'))
		{
			alert(location.host + request.handler);
		}
	}
	
	var http;
	try 
	{
		http = new XMLHttpRequest();
	}
	catch (e)
	{
		try 
		{
			http = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				http = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				http = false;
			}
		}
	}
	
	http.onreadystatechange = function ()
	{
		if (http.readyState == 4 && http.status == 200)
		{
			if (request.json)
			{
				response(eval('(' + http.responseText + ')'));
			}
			else
			{
				response(http.responseText);
			}
		}
	}
	
	if (request.config)
	{
		if (request.config.post)
		{
			http.open('POST', url, true);
			http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			http.setRequestHeader("Content-length", data.length);
			http.setRequestHeader("Connection", "close");
			http.send(data);
		}
		else
		{
			http.open('GET', url + '?' + data, true);
			http.send(null);			
		}	
	}
	else
	{
		http.open('GET', request.handler, true);
		http.send(null);
	}
}
