function xmlhttpPost(strURL, sQStr, callback, timeout)
{
	var reqFin = false;
	function finalizeReq(bSuccess)
	{
		if (reqFin) return; else reqFin = true;
		var str;
		if (xmlHttpReq)
		{
			if (bSuccess)
				str = xmlHttpReq.responseText;
			if (callInProgress(xmlHttpReq))
				xmlHttpReq.abort();
		}
		callback(str, bSuccess);
	}
	var xmlHttpReq = false;

	// Mozilla/Safari
	if (window.XMLHttpRequest)
	{
		xmlHttpReq = new XMLHttpRequest();
	}
	// IE
	else if (window.ActiveXObject)
	{
		xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (!xmlHttpReq)
	{
		finalizeReq();
		return false;
	}
	var timeoutId;
	if (timeout)
		timeoutId = window.setTimeout(finalizeReq, timeout);
	xmlHttpReq.open("POST", strURL, true);
	xmlHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	//xmlHttpReq.setRequestHeader("Accept-Charset", "iso-8859-9");
	xmlHttpReq.onreadystatechange = function() {
		if (xmlHttpReq.readyState == 4) {
			if (timeout) window.clearTimeout(timeoutId);
			if (xmlHttpReq.status == 200)
				finalizeReq(true);
			else
				finalizeReq();
		}
	}
	xmlHttpReq.send(sQStr);
	return true;
}
function callInProgress(xmlhttp)
{
	switch (xmlhttp.readyState)
	{
		case 1: case 2: case 3:
		return true;
		break;
	
		// Case 4 and 0
		default:
		return false;
		break;
	}
}