//
// Instantiating of XMLHttpRequest object for different type of browsers.
//
// Returns null if XMLHttpRequest instantiation failed.
//
function getXMLHttpRequest() {
    var request = null;

    if (window.XMLHttpRequest) {
		request = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
        // MS Internet Explorer specific.
        var msxmls = new Array(
			'Msxml2.XMLHTTP.5.0',
			'Msxml2.XMLHTTP.4.0',
			'Msxml2.XMLHTTP.3.0',
			'Msxml2.XMLHTTP',
			'Microsoft.XMLHTTP');
		for (var i in msxmls) {
			try {
				request = new ActiveXObject(msxmls[i]);
                break;
            } catch (e) {}
		}
	}
	return request;
}

function doGetRequest(request, url, async, responseHandlerName) {
	if (!request) {
		request = getXMLHttpRequest();
	}

    if (request) {
        request.open('GET', url, async);
		request.onreadystatechange = function() {eval(responseHandlerName)};
        request.send(null);
    }
	return request;
}

/**
 * Execute POST request with parameters specified.
 *
 * @param url An URL to invoke.
 * @param parameters Request parameters string.
 * @param async Flag for async request.
 * @param responseHandlerName A name of the response handler like 'handleResponse()'.
 */
function doPOSTRequest(request, url, parameters, async, responseHandlerName) {
	if (!request) {
		request = getXMLHttpRequest();
	}

    if (request) {
        request.open('POST', url, async); // Sync POST request.
		request.onreadystatechange = function() {eval(responseHandlerName)};
		request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        request.setRequestHeader("Content-length", parameters.length);
        request.send(parameters);
    }
	return request;
}

/**
 * Sets a timeout with handler and time in seconds specified.
 *
 * @param handler Timeout handler.
 * @param timeoutSec Timeout time in a seconds.
 */
function addTimeout(handler, timeoutSec) {
	return window.setTimeout(handler, timeoutSec*1000);
}

/**
 * Removes a timeout with Id specified.
 *
 * @param timeoutId Timeout identifier.
 */
function removeTimeout(timeoutId) {
	if (timeoutId) {
		window.clearTimeout(timeoutId);
	}
}