var XMLHTTP_requests	= new Array();
var XMLHTTP_args	= new Array();

	function XMLHTTP_init_object(responseMode) {
		var newXMLHTTP;
		
		var msxmlhttp = new Array(
			'Msxml2.XMLHTTP.5.0',
			'Msxml2.XMLHTTP.4.0',
			'Msxml2.XMLHTTP.3.0',
			'Msxml2.XMLHTTP',
			'Microsoft.XMLHTTP');
		for (var i = 0; i < msxmlhttp.length; i++) {
			try {
				newXMLHTTP = new ActiveXObject(msxmlhttp[i]);
			} catch (e) {
				newXMLHTTP = null;
			}
		}
		
		if(!newXMLHTTP && typeof XMLHttpRequest != "undefined")
			newXMLHTTP = new XMLHttpRequest();
	
		return newXMLHTTP;
	}


	function XMLHttp_do_call (args) {
			// usually called as (method, responseMode, url, paramstr, readystateFunction, func_args
		var newXMLHTTPcall;
		var func_args, method, responseMode, url, readystateFunction;
		var id;
		
		method		 		= XMLHttp_do_call.arguments[0];
		responseMode 		= XMLHttp_do_call.arguments[1];
		url			 		= XMLHttp_do_call.arguments[2];
		paramstr	 		= XMLHttp_do_call.arguments[3];
		readystateFunction	= XMLHttp_do_call.arguments[4];
		
		func_args = "";
		for (var i = 5; i < arguments.length; i++) {
			func_args += ", '" + arguments[i] + "'";
		}

		if (method == "GET") {
			url += paramstr;
		}
		newXMLHTTPcall = XMLHTTP_init_object(responseMode);
		if (newXMLHTTPcall == null)
			return false;
		else
			newXMLHTTPcall.open(method, url, true);
			
		XMLHTTP_requests[XMLHTTP_requests.length] 	= newXMLHTTPcall;
		XMLHTTP_args[XMLHTTP_args.length] 			= func_args;

		id = XMLHTTP_requests.length - 1;
		XMLHTTP = newXMLHTTPcall;
		
		newXMLHTTPcall.onreadystatechange = function () {
			if (newXMLHTTPcall.readyState == 4 && newXMLHTTPcall.status != 200) {
				alert("ERROR");
			}
  	  		if (newXMLHTTPcall.readyState == 4) {
				eval( readystateFunction + "(" + id + func_args + ");");
			}
//  			 if(this.readyState == 3) {
//  				 }

		};
		if (method == "POST") {
			newXMLHTTPcall.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
			newXMLHTTPcall.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			newXMLHTTPcall.setRequestHeader("Content-length", paramstr.length);
			newXMLHTTPcall.setRequestHeader("Connection", "close");
			
			newXMLHTTPcall.send(paramstr);
		} else {
			newXMLHTTPcall.send(null);
		}
	}

