function new_ajax()
{
	try {
		return new XMLHttpRequest();
	}
	catch(e)
	{
	}
	try {
		return new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
	}
	try {
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch(e)
	{
	}
	alert("No AJAX support!");
	return null;
}

function init_ajax(callback)
{
	var ajax = new_ajax();
	if(!ajax)
		return null;
	ajax.onreadystatechange = function()
	{
		/* 0: not initialized */
		/* 1: request set up */
		/* 2: request sent */
		/* 3: receiving response */
		/* 4: request complete */
		if(ajax.readyState == 4)
			callback(ajax);
	}
	return ajax;
}

function query_string(params, start)
{
	var query = "";
	for(var name in params)
	{
		if(query != "")
			query += "&";
		else
			query = start;
		query += name + "=" + params[name];
	}
	return query;
}

function ajax_get(url, params, callback)
{
	var ajax = init_ajax(callback);
	if(!ajax)
		return false;
	var query = query_string(params, "?");
	ajax.open("GET", url + query, true);
	ajax.send(null);
	return true;
}

function ajax_post(url, params, callback)
{
	var ajax = init_ajax(callback);
	if(!ajax)
		return false;
	var query = query_string(params, "");
	ajax.open("POST", url, true);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.setRequestHeader("Content-Length", query.length);
	ajax.setRequestHeader("Connection", "close");
	ajax.send(query);
}
