function addLoadEvent (func) 
{
	var oldonload = window.onload;
	if (typeof window.onload != 'function') 
	{
		window.onload = func;
	}
	else 
	{
		window.onload = function() 
		{
			oldonload();
			func();
		}
	}
}

function getHTTPObject ()
{
	var xhr = false;
	if (window.XMLHttpRequest) 
	{
		xhr = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		try 
		{
			xhr = new ActiveXObject('Msxml2.XMLHTTP');
		} catch (e) {
			try 
			{
				xhr = new ActiveXObject('Microsoft.XMLHTTP');
			} catch (e) {
				xhr = false;
			}
		}
	}
	return xhr;
}

function displayLoading (element)
{
	while (element.hasChildNodes())
	{
		element.removeChild(element.lastChild);
	}
	var li = document.createElement('li');
	var image = document.createElement('img');
	image.setAttribute('src', '/images/loading.gif');
	image.setAttribute('alt', 'Loading...');
	li.appendChild(image);
	element.appendChild(li);
}

function parseResponse (request, func)
{
	//Function takes a request object
	if (request.readyState == 4) //If the request has been completed
	{
		if (request.status == 200 || request.status == 304) //If the request has gone as we want it to
		{
			// Call function and pass request response
			func(request.responseText);
		}
	}
}

function grabFile (file, loading_element, func)
{
	var request = getHTTPObject();	//Assign an xhr object to this local variable
	if (request) //If the xhr object was successfully created
	{
		displayLoading(loading_element);
		request.onreadystatechange = function() //At each stage of the ajax process
		{
			parseResponse(request, func);	//Do this function
		}
		request.open('GET', file, true);	//Open the xhr request to the file supplied to the grabFile function
		request.send(null);	//Send the xhr request without any data (it's a get)
		return true;
	}
	else
	{
		return false;
	}
}

function flashElements (tagName, className)
{
	if (!document.getElementsByTagName) return;
	var rows = document.getElementsByTagName(tagName);
	for (var i=0; i < rows.length; i++) 
	{
		if (rows[i].className == className) 
		{
			fadeUp(rows[i], 92, 170, 204);
		}
	}
}

function fadeUp (element, red, green, blue)
{
	if (element.fade) 
	{
		clearTimeout(element.fade);
	}
	element.style.backgroundColor = "rgb("+red+","+green+","+blue+")";
	if ((red == 136) && (green == 195) && (blue == 204)) 
	{
		return;
	}
	var newred = red + Math.ceil((136 - red)/10);
	var newgreen = green + Math.ceil((195 - green)/10);
	var newblue = blue + Math.ceil((204 - blue)/10);
	var repeat = function() 
	{
		fadeUp(element, newred, newgreen, newblue);
	};
	element.fade = setTimeout(repeat, 10);
}

function hideElement (elementId)
{
	if (!document.getElementById)	return;
	if (!document.getElementById(elementId))	return;
	$('#'+elementId).hide();
}

function prepareDisplayToggle (toggleElement, toggleTarget)
{
	if (!document.getElementById)	return;
	// Find feature toggle
	$('.'+toggleElement).toggle(
		function () 
		{
	    	$('#'+toggleTarget).show('fast');
		    return false;
	    },
		function () 
		{
	    	$('#'+toggleTarget).hide('fast');
		    return false;
	    }
	);
}