/*
 * addEvent( obj, evType, fn, useCapture )
 * 
 * From: DHTML Utopia: Modern Web Design Using JavaScript & DOM, published by Sitepoint
 *  Scott Andrew's addEvent function, used to register events to an element through addEventListener 
 *  or attachEvent.
 */
function addEvent( elm, evType, fn, useCapture )
{
	if ( elm.addEventListener )
	{
		elm.addEventListener( evType, fn, useCapture );
		return true;
	}
	else if ( elm.attachEvent )
	{
		var r = elm.attachEvent( 'on' + evType, fn );
		return r;
	}
	else
	{
		elm['on' + evType] = fn;
	}
}

/*
 * removeEvent( elm, evType, fn, useCapture )
 * 
 * From: DHTML Utopia: Modern Web Design Using JavaScript & DOM, published by Sitepoint
 */
function removeEvent( elm, evType, fn, useCapture )
{
	if ( typeof elm.removeEventListener != "undefined" )
	{
		elm.removeEventListener( evType, fn, useCapture );
	}
	else if ( typeof elm.detachEvent != "undefined" )
	{
		elm.detachEvent( 'on' + evType, fn );
	}
	else
	{
		elm['on' + evType] = null;
	}
}

/*
 * getElementsByClassName( oElm, strTagName, strClassName )
 * 
 * From: http://www.robertnyman.com/index.php?p=256
 *  Written by Jonathan Snook, http://www.snook.ca/jonathan
 *  Add-ons by Robert Nyman, http://www.robertnyman.com
 */
function getElementsByClassName( oElm, strTagName, strClassName )
{
	var arrElements = ( strTagName == "*" && oElm.all ) ? oElm.all : oElm.getElementsByTagName( strTagName );
	var arrReturnElements = new Array();
	strClassName = strClassName.replace( /-/g, "\-" );
	var oRegExp = new RegExp( "(^|\s)" + strClassName + "(\s|$)" );
	var oElement;
	for( var i = 0; i < arrElements.length; i++ )
	{
		oElement = arrElements[i];
		if( oRegExp.test( oElement.className ) )
		{
			arrReturnElements.push( oElement );
		}
	}
	return ( arrReturnElements )
}
