// Common utility functions

/******************************************************************************
*  Name: el()
*  Date: 2007.02.07
*  Desc: Replaces document.getElementById( "" )
******************************************************************************/
function el( strElementId )
{
   return document.getElementById( strElementId );
}

/******************************************************************************
*  Name: getElementsByClass()
*  Date: 2007.02.17
*  Desc: Returns an array of all elements under node with the class
*        searchClass.  node and tag arguments are optional.
*        Note: taken from http://www.dustindiaz.com/top-ten-javascript/
******************************************************************************/
function getElementsByClass( searchClass, node, tag) {
	var classElements = new Array();

	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';

	var els     = node.getElementsByTagName(tag);
	var elsLen  = els.length;
	var pattern = new RegExp('(^|\\s)' + searchClass + '(\\s|$)');

	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

/******************************************************************************
*  Name: toggleVisibility()
*  Date: 2007.02.17
*  Desc: Toggles the display property of elm.style
******************************************************************************/
function toggleVisibility( elm )
{   
   if ( elm.style.display != 'none' )
      elm.style.display = 'none';
   else
      elm.style.display = 'block';
}

/******************************************************************************
*  Name: getEventTarget()
*  Date: 2007.06.23
*  Desc: returns the true target of event
*  From: http://www.quirksmode.org/js/events_properties.html
******************************************************************************/
function getEventTarget( event ) {
	var target;

	if (!event) 
      var event = window.event;
	if ( event.target ) 
      target = event.target;
	else if ( event.srcElement ) 
      target = event.srcElement;

	if ( target.nodeType == 3 ) // defeat Safari bug
		target = target.parentNode;

   return target;
}

/******************************************************************************
*  Name: getFirstParentByTag
*  Date: 2007.06.25
*  Desc: returns the first parent of childNode whose tag matches strTag.
*        returns null if no such node exists.
******************************************************************************/
function getFirstParentByTag( childNode, strTag )
{
   if ( childNode.parentNode.nodeName == "#document" )
      return null;
   else if ( childNode.parentNode.nodeName == strTag )
      return childNode.parentNode;
   else
      return getFirstParentByTag( childNode.parentNode, strTag );
}
