// JavaScript Document
// Writen by Nodin Weddington
// ----------------------------- Standard AJAX ----------------------------- //
// Use ajax(url,callback,postData) where
//   url = 'some_page.php?g_name=g_value&g_name_2=g_value_2';
//   callback = function (response){ alert(response); }
//   postData = "p_name=p_value&p_name_2=p_value_2";
//

// AJAX methods to try
var XMLHttpMethods = [
	function () {return new XMLHttpRequest()},
	function () {return new ActiveXObject("MSXML2.XMLHTTP.3.0")},
	function () {return new ActiveXObject("Msxml2.XMLHTTP")},
	function () {return new ActiveXObject("Msxml3.XMLHTTP")},
	function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

// AJAX function creator
function createXMLHttpObject() {
	var xmlhttp = false;
	for (var i=0;i<XMLHttpMethods.length;i++) {
		try {
			xmlhttp = XMLHttpMethods[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}

// readyState used below
// 0 = Object is not initialized with data.
// 1 = Object is loading its data.
// 2 = Object has finished loading its data.
// 3 = User can interact with the object even though it is not fully loaded.
// 4 = Object is completely initialized.

// Submit AJAX request to url with postData and start callback(body) where body is from the url loaded
function ajax(url,callback,postData) {
	if(!request){ var request = Array(); }
	while(i=Math.floor(Math.random()*10001)){
		if(!request[i]){ 
			request_num = i;
			request[i] = createXMLHttpObject();
			break;
		}
	}
	if (!request[request_num]) return;
	var method = (postData) ? "POST" : "GET";
	request[request_num].open(method,url,true);
	request[request_num].setRequestHeader('User-Agent','XMLHTTP/1.0');
	if (postData) request[request_num].setRequestHeader('Content-type','application/x-www-form-urlencoded');
	request[request_num].onreadystatechange = function () {
		if (request[request_num].readyState != 4) return;
		if (request[request_num].status != 200 && request[request_num].status != 304) return;
		callback(request[request_num].responseText);
		request.splice(request_num, 1);
	}
	//if (request[request_num].readyState == 4) return;
	request[request_num].send(postData || null);
	return request[request_num];
}
