
//this is our requests handler array
var requests = new Array();

window.onbeforeunload = cleanUpRequests;

function cleanUpRequests(event)
{
	for (var i = 0; i < requests.length; i++)
	{
		if (requests[i].req.readyState < 4)
		{
			event.returnValue = "You have unfinished server requests.  Please hit cancel and wait a few seconds to allow them to finish!";
			break;
		}
	}
}

function sendHTTPRequest(myhandler, url)
{
	handler = myhandler;

	var request = GetRequestObject();
	if (request == null)
	{
		alert('Error, the user\'s browser does not support AJAX.');
		return;
	}

	var arr = new Object();
	arr.req = request;
	arr.handler = myhandler;
	requests.push(arr);
	
	url += "&cache_j=" + Math.floor(Math.random()*100000000) + "," + Math.floor(Math.random()*100000000) + "," + Math.floor(Math.random()*100000000)

	request.onreadystatechange=handle;
	request.open('GET', url, true)
	request.send(null);
}

function GetRequestObject()
{
	var request = null;

	try
	{
		request = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e)
	{
		try
		{
			request = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e)
		{

		}
	}

	if (request == null)
	{
		if (window.XMLHttpRequest)
		{
			request = new XMLHttpRequest();
		}
	}

	return request;
}

function handle()
{
	var newRequests = new Array();
	var toRun = new Array();

	var error = false;

	for (var i = 0; i < requests.length; i++)
	{
		if (requests[i].req.readyState == 4)
		{
			if (requests[i].req.status != 200)
			{
				error = true;
			}
			else
			{
				toRun.push(requests[i]);
			}
		}
		else
		{
			newRequests.push(requests[i]);
		}
	}

	if (error)
	{
		alert("Error, the server seems to be down at the moment.  Check your connection or please wait until the server comes back up.  Sorry");
	}
	
	requests = newRequests;

	for (i = 0; i < toRun.length; i++)
	{
		toRun[i].handler(toRun[i].req);
	}
}

function getTag(obj, tag)
{
	try
	{
		return obj.getElementsByTagName(tag);
	}
	catch (e)
	{
		return false;
	}
}

function getNode(obj, tag)
{
	try
	{
		return getTag(obj, tag)[0].firstChild.nodeValue;
	}
	catch (e)
	{
		return false;
	}
}


function getXY(event)
{
	var x = null;
	var y = null;

	if (!event)
	{
		var event = window.event;
	}

	if (event.clientX)
	{
		x = event.clientX;
		y = event.clientY;
	}
	else if (event.pageX)
	{
		x = event.pageX;
		y = event.pageY;
	}

	var pos = new Object();
	pos.x = x;
	pos.y = y;

	return pos;
}



function getXYScroll(event)
{
	var x = null;
	var y = null;
	if (!event)
	{
		var event = window.event;
	}
	if (event.clientX)
	{
		x = event.clientX + document.body.scrollLeft;// + document.documentElement.scrollLeft;
		y = event.clientY + document.body.scrollTop; // + document.documentElement.scrollTop;
	}
	else if (event.pageX)
	{
		x = event.pageX;
		y = event.pageY;
	}

	var pos = new Object();
	pos.x = x;
	pos.y = y;

	return pos;
}


function getScreenSize()
{
	var x = 0;
	var y = 0;

	if (self.innerHeight)
	{
		x = self.innerWidth;
		y = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
	{
		x = document.documentElement.clientWidth;
		y = document.documentElement.clientHeight;
	}
	else if (document.body)
	{
		x = document.body.clientWidth;
		y = document.body.clientHeight;
	}

	var pos = new Object();
	pos.x = x;
	pos.y = y;

	return pos;
}


function getKeyCode(event)
{
	if (event.keyCode)
	{
		return event.keyCode;
	}
	else if (event.which)
	{
		return event.which;
	}
	else if (event.charCode)
	{
		return event.charCode;
	}
	return 13;
}



function parseColor(value)
{
	var exp1 = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/;
	var exp2 = /^#(\w{6})$/;

	var a;

	if ((a = exp1.exec(value)) != null)
	{
		var col1 = parseInt(a[1]).toString(16);
		var col2 = parseInt(a[2]).toString(16);
		var col3 = parseInt(a[3]).toString(16);
		if (col1.length == 1)
			col1 = "0" + col1;
		if (col2.length == 1)
			col2 = "0" + col2;
		if (col3.length == 1)
			col3 = "0" + col3;
		return col1 + col2 + col3;
	}
	else if ((a = exp2.exec(value)) != null)
	{
		return a[1];
	}
	return "FFFFFF";
}

