var AJAX_ERROR = -1;
var AJAX_TIMEOUT = 5000;

function createXMLHttpRequest(resFnc)
{
	var xmlHttpObj = null;
	
	// create XMLHttpRequest Object
	if (window.XMLHttpRequest)
	{
		// for Safari, Firefox, IE7
		xmlHttpObj = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		try
		{
			// for IE6
			xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				// for IE5
				xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				xmlHttpObj = null;
			}
		}
	}
	
	if (xmlHttpObj)
	{
		xmlHttpObj.onreadystatechange = resFnc;
	}
	
	return xmlHttpObj;
}

function getData(xmlHttpObj, uri)
{
	xmlHttpObj.open("GET", uri, true);
	xmlHttpObj.send(null);
}

function postData(xmlHttpObj, uri, sendData)
{
	xmlHttpObj.open("POST", uri, true);
	xmlHttpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlHttpObj.send(sendData);
}

function getJSON(xmlHttpObj)
{
	return getJsonData(xmlHttpObj.responseText);
}

function getJsonData(responseText)
{
	return eval("(" + responseText + ")");
}

function getResponseText(xmlHttpObj)
{
	return xmlHttpObj.responseText;
}

function isComplete(xmlHttpObj)
{
	return ((xmlHttpObj.readyState == 4) && (xmlHttpObj.status == 200));
}

function checkCompleteAndClearTimeout(xmlHttpObj, timerId)
{
	if (isComplete(xmlHttpObj))
	{
		clearTimeout(timerId);
		return true;
	}
	return false;
}

function abortHttp(xmlHttpObj)
{
	xmlHttpObj.abort();
}
// ---

var __httpObj = null;
var __callBackFnc = null;
var __timerId = null;
function doAjax(url, sendData, callBackFnc)
{
	__callBackFnc = callBackFnc;
	__httpObj = createXMLHttpRequest(resAjax);
	postData(__httpObj, url, sendData);
	__timerId = setTimeout("timeoutAjax()", AJAX_TIMEOUT);
}

function timeoutAjax()
{
	abortHttp(__httpObj);
	
	var tmpFnc = __callBackFnc;
	__callBackFnc = null;
	if (tmpFnc != null) tmpFnc(AJAX_ERROR, true);
}

function resAjax()
{
	if (checkCompleteAndClearTimeout(__httpObj, __timerId))
	{
		var tmpFnc = __callBackFnc;
		__callBackFnc = null;
		
		var errFlg = false;
		var responseText = null;
		try
		{
			responseText = __httpObj.responseText;
			errFlg = (responseText == AJAX_ERROR);
		}
		catch (e)
		{
			errFlg = true;
		}
		
		if (tmpFnc != null) tmpFnc(responseText, errFlg);
	}
}

//function resAjaxProc(responseText, errFlg)
