var http_request=null;
var ajax_handler=null;
var ajax_url=null;
var ajax_params=null;
var ajax_retry = 0;
var ajax_reply = false;
var ajax_abort = false;
var ajax_timeout_handle=null;
function makeRequest(url, xmlHandler, params)
{
	if (http_request!=null) return;
//	if(http_request && http_request.readyState!=4){
//    	http_request.abort();
//	}
	ajax_handler = xmlHandler;
	ajax_url = url;
	ajax_params = params;
    ajax_reply = false;
    ajax_abort = false;
    http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }
    http_request.onreadystatechange = ajaxHandler;
    if (params)
    {
	    http_request.open('POST', url, true);
		http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http_request.setRequestHeader("Content-length", params.length);
		http_request.setRequestHeader("Connection", "close");
		http_request.send(params);
    }
    else
    {
	    http_request.open('GET', url, true);
	    http_request.send(null);
    }
    if (ajax_timeout_handle==null)
    	ajax_timeout_handle = setTimeout(ajaxTimeout,8000);
}

function ajaxTimeout()
{
	if (!ajax_reply)
	{
		ajax_abort = true;
		http_request.abort();
		ajax_timeout_handle = null;
		ajax_handler();
		http_request = null;
	}
}

function ajaxHandler()
{
	if (ajax_abort) return;
	if (http_request.readyState == 4)
	{
		ajax_reply = true;
		clearTimeout(ajax_timeout_handle);
		ajax_timeout_handle = null;
		if (http_request.status == 200 || ajax_retry == 1)
		{
			ajax_retry = 0;
			ajax_handler();
			http_request = null;
		}
		else if (http_request.status != 200)
		{
			ajax_retry++;
			http_request = null;
			makeRequest(ajax_url, ajax_handler, ajax_params);
		}
	}
}