/*
	Ryan Neal
	version 1.4.0
*/

var XMLHttp_heap = new Array();
var local_ajax_undefined;


//##############################################################################
function XMLHttp_request(post_to, url, params, eID, status, tasks)
{
	if (tasks == local_ajax_undefined)
	{
		tasks = new Array();
	}
    if (post_to == "POST" ) {
        post_to = "innerHTML";
    }
	var success = true;
	var isIE = false;
    if ( status != local_ajax_undefined ) {
	    show_element(status);
	}
    
	var request = new Array();
	if (window.XMLHttpRequest)
	{
		request.push(new XMLHttpRequest());
		if (request[0] && request[0].overrideMimeType)
		{
			request[0].overrideMimeType('text/xml');
		}
	}
	else
	{
		isIE = true;
		if (window.ActiveXObject)
		{
			try
			{
				request.push(new ActiveXObject("Msxml2.XMLHTTP"));
			}
			catch (e)
			{
				try
				{
					request.push(new ActiveXObject("Microsoft.XMLHTTP"));
				}
				catch (e)
				{alert(e)}
			}
		}
	}
	if (request[0])
	{
		request.push(eID);
		var timestamp = new Date();
		request.push(Math.floor(timestamp.getTime()/1000));
        request.push(post_to);
        request.push(status);
		request.push(tasks);
		request[0].onreadystatechange = alertContents;
		request[0].open('POST', url, true);
        request[0].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		request[0].setRequestHeader("Content-length", params.length);
		request[0].setRequestHeader("Connection", "close");
		request[0].send(params);
		XMLHttp_heap.push(request);
	}
	else
	{
		alert('Cannot create XMLHTTP instance');
		success = false;
	}
	return success;
}

//##########################################################################
function alertContents()
/*
	shows the nice status_wheel
	pupulates eID.innerHTML with the response, and runs any queued tasks
*/
{
	var timestamp = new Date();
	for (var i = 0; i < XMLHttp_heap.length; i++)
	{
        if ( XMLHttp_heap[i][4] != local_ajax_undefined ) {
	        show_element(XMLHttp_heap[i][4]);
        }
		if (XMLHttp_heap[i][0].readyState == 4)
		{
			if(XMLHttp_heap[i][0].status == 200)
			{
                var response = XMLHttp_heap[i][0].responseText.replace(/(^<html>|<\/html>$)/g,'');
				eval('document.getElementById(XMLHttp_heap[i][1]).' + XMLHttp_heap[i][3] + ' = response;');
				while (XMLHttp_heap[i][5].length)
				{
					eval(XMLHttp_heap[i][5].pop());
				}
                if ( XMLHttp_heap[i][4] != local_ajax_undefined ) {
                    hide_element(XMLHttp_heap[i][4]);
                }
			}
		}
	}

	for (var i = XMLHttp_heap.length -1; i >= 0; i--)
	{
		if (XMLHttp_heap[i][0].readyState == 4 || (Math.floor(timestamp.getTime()/1000) - XMLHttp_heap[i][2]) > 30)
		{
			if ((Math.floor(timestamp.getTime()/1000) - XMLHttp_heap[i][2]) > 30)
			{
				XMLHttp_heap[i][0].abort();
                if ( XMLHttp_heap[i][4] != local_ajax_undefined ) {
                    hide_element(XMLHttp_heap[i][4]);
                }
			}
			XMLHttp_heap.splice(i, 1);
		}
	}
}
//##############################################################################
function show_element(eID)
{
	//show a hidden element
//    alert('SHOW('+eID+')');
	if (document.getElementById(eID) != local_ajax_undefined)
	{
		document.getElementById(eID).style.display = 'block';
		document.getElementById(eID).style.visibility = 'visible';
	}
}

//##############################################################################
function hide_element(eID)
{
	//hide a given element
//    alert('HIDE('+eID+')');
	if (document.getElementById(eID) != local_ajax_undefined)
	{
		document.getElementById(eID).style.display = 'none';
		document.getElementById(eID).style.visibility = 'hidden';
	}
}


//##############################################################################
function pause(ms)
{
	//waif for a specified number of milliseconds

	var dt = new Date();
	var current_dt = null;
	do
	{
		current_dt = new Date();
	}
	while(current_dt -dt < ms);
} 

