// {{{ function ajax
function ajax(url, callback, post)
{
	var xmlHttp;

	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				return false;
			}
		}
	}

	xmlHttp.onreadystatechange=function()
	{
		if(xmlHttp.readyState==4)
		{
			callback(xmlHttp.responseText);
		}
	}

	// handle GET request
	if (post == undefined)
	{
		xmlHttp.open("GET",url,true);
		xmlHttp.send(null);
	}
	// handle POST request
	else
	{
		// build form params
		var params = getUrlParams(post);

		xmlHttp.open("POST",url,true);
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", params.length);
		xmlHttp.setRequestHeader("Connection", "close");

		xmlHttp.send(params);
	}

	return true;
}
// }}}
// {{{ function getUrlParams
function getUrlParams(params)
{
	// check string vs form object
	if (typeof params === typeof "")
	{
		return params;
	}

	var newParams = new Array();

	for (var key in params)
	{
		newParams[newParams.length] = escape(key) + "=" + escape(params[key]);
	}

	return newParams.join('&');
}
// }}}
