function getHTTPObject() {
	var xmlhttp						= null;
	var success						= false;

	// List of MS XMLHTTP versions - newest first
	var MSXML_XMLHTTP_PROGIDS		= new Array('MSXML2.XMLHTTP.6.0',
												'MSXML2.XMLHTTP.5.0',
												'MSXML2.XMLHTTP.4.0',
												'MSXML2.XMLHTTP.3.0',
												'MSXML2.XMLHTTP',
												'Microsoft.XMLHTTP');

	// test for IE implementations first
	for(i=0; i<MSXML_XMLHTTP_PROGIDS.length && !success; i++) {
		try {
			xmlhttp							= new ActiveXObject(MSXML_XMLHTTP_PROGIDS[i]);
			success							= true;
			return xmlhttp;
		}
		catch(e) {
			xmlhttp							= false;
		}
	}

	// Now test for non-IE implementations
	if(!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp							= new XMLHttpRequest();
		}
		catch (e) {
			xmlhttp							= false;
		}
	}

	return xmlhttp;
}

var http							 = getHTTPObject();

function AJAXConnect(link, onreadyfunction, readystatusDIV, extraVar) {
	if(typeof readystatusDIV == "undefined")
		readystatusDIV = false;
	if(http) {
		http.onreadystatechange = function() {
			if(http.readyState == 0) {
				status							= "Uninitialized";
			}
			if(http.readyState == 1) {
				status							= "Connecting...";
			}
			if(http.readyState == 2) {
				status							= "Connected!";
			}
			if(http.readyState == 3) {
				status							= "Receiving ^.^";
			}
			if(http.readyState == 4) {
				status							= "Parsing data";
				if(http.status == 200 || http.status == 304) {
					window.clearTimeout(timeoutReq);
					if(typeof extraVar == "undefined")
						onreadyfunction(http.responseText); // Parse data
					else
						onreadyfunction(http.responseText, extraVar); // Parse data
					status							= "";
				}
			}
			if(readystatusDIV)
				document.getElementById(readystatusDIV).innerHTML	= status;
		};
		http.open("GET", link, true);
		var timeoutReq					= window.setTimeout(function() {
			if(http.readyState != 0 && http.readyState != 4) {
				http.abort();
				status							= "Time out, please retry!";
				if(readystatusDIV)
					document.getElementById(readystatusDIV).innerHTML	= status;
			}
		}, 3000);
		http.send(null);
	}
}
