// UTILITY FUNCTIONS, ALSO USED IN EXTERNAL FILES
//------------------------------------------------------------------------------

function addEvent(obj, type, fn) // - requires above EventCache var
{
	if(obj.addEventListener)					// standards
		{obj.addEventListener(type, fn, false);}
	else										// IE
		{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		}
}

function removeEvent(obj, type, fn)
{
	if (obj.detachEvent)
		{
		obj.detachEvent("on"+type, fn );
		obj[type+fn] = null;
		}
	else
		{obj.removeEventListener( type, fn, false );}
}

function findThis(e)
{
	if(!e)
		{var e = window.event;}

	if(e.target)			// standards
		{var obj = e.target;}
	else if(e.srcElement)	// IE
		{var obj = e.srcElement;}

	return obj;
}

function preventDef(e)
{
	e = e || event;

	if(e.preventDefault)			// standards
		{e.preventDefault();}
	else
		{e.returnValue = false;}	// IE
}

function stopProp(e)
{
	e = e || event;

	if (e.stopPropagation)			// standards
		{e.stopPropagation();}
	else
		{e.cancelBubble = true;}	// IE
}


if (!document.getElementsByClassName)
	{
	document.getElementsByClassName = function(className)
		{
		var children = document.body.getElementsByTagName('*');
		var elems = [];
		var A = children.length;
		for (var i=0; i<A; i++)
			{
			if(children[i].className == className || children[i].className.match(className + ' ') || children[i].className.match(' ' +className))
				{elems.push(children[i]);}
			}
		return elems;
		}
	}

function insertAfter(refNode,newNode)
	{refNode.parentNode.insertBefore(newNode,refNode.nextSibling);}

function newClass(elem, newclass)
	{elem.className = elem.className + ' ' + newclass}

function removeClass(elem, remclass)
	{elem.className = elem.className.replace(remclass,'');}

function createXMLHttpRequest()		// generic asynchronous requests
{
	try {return new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {}
	try {return new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {}
	try {return new XMLHttpRequest();} catch(e) {}
	return null;
}

function parseQ(para)			// parse querystring for value attached to 'para'meter
{
	para = para.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");

	var regexS = "[\\?&]"+para+"=([^&#]*)";
	var regex = new RegExp(regexS);
	var results = regex.exec(window.location.search);

	if(results == null)
		{return "";}
	else
		{return results[1];}
}