/**
 * Set an element's display style to the appropriate value for
 * that element (depending on which browser is executing)
 *
 * @param MIXED element
 *    STRING - id of element to show
 *    OBJECT - element object to show
 */
function show( element )
{
  if( typeof element === 'string' )
  {
    element = document.getElementById( element );
  }
  if( typeof element === 'object' && element !== null && typeof element.style !== 'undefined' )
  {
    var sDisplay;

    switch( element.tagName.toLowerCase() )
    {
      case 'tr':
        if( typeof navigator === 'undefined' || typeof navigator.userAgent !== 'string' || navigator.userAgent.indexOf( 'MSIE' ) < 0 )
        {
          sDisplay = 'table-row';
          break;
        } //else, fall through to block element

        //block elements
      case 'div':
      case 'h1':
      case 'h2':
      case 'h3':
      case 'h4':
      case 'h5':
      case 'h6':
      case 'p':
      case 'ul':
      case 'ol':
      case 'dl':
      case 'li':
      case 'dt':
      case 'dd':
      case 'table':
      case 'blockquote':
      case 'pre':
      case 'form':
        sDisplay = 'block';
        break;

        //inline elements
      default:
        sDisplay = 'inline';
        break;
    }

    element.style.display = sDisplay;
  }
}

/**
 * Set an element's display style to none
 *
 * @param MIXED element
 *    STRING - id of element to hide
 *    OBJECT - element object to hide
 */
function hide( element )
{
  if( typeof element === 'string' )
  {
    element = document.getElementById( element );
  }

  if( typeof element === 'object' && element !== null && typeof element.style !== 'undefined' )
  {
    element.style.display = 'none';
  }
}
/**
 * Toggle an element's display style to show or hide (depending on which state it is already in)
 *
 * @param MIXED element
 *    STRING - id (or multiple IDs if dot or comma separated) of element(s) to show
 *    OBJECT - element object to show
 * @return BOOL true if item now visible, false if item now hidden (if multiple items passed, only
 *              returns false if more items were hid than shown)
 */
function show_hide( element )
{
  var aElements = [];
  if( typeof element === 'string' )
  {
    var aElementIds;
    var i;
    if( element.indexOf( ',' ) > -1 )
    {
      aElementIds = element.split( ',' );
      for( i = 0; i < aElementIds.length; i++ )
      {
        aElements.push( document.getElementById( aElementIds[ i ] ) );
      }
    }
    else
    {
      aElements.push( document.getElementById( element ) );
    }
  }
  else
  {
    aElements.push( element );
  }

  var numShown = 0;
  var numHid = 0;
  for( var e = 0; e < aElements.length; e++ )
  {
    if( typeof aElements[ e ] === 'object' && aElements[ e ] !== null )
    {
      if( typeof aElements[ e ].style.display === 'undefined' || aElements[ e ].style.display !== 'none' )
      {
        hide( aElements[ e ] );
        numHid++;
      }
      else
      {
        show( aElements[ e ] );
        numShown++;
      }
      openClose( aElements[ e ] );
    }
  }

  var returnValue;
  if( numHid > numShown )
  {
    returnValue = false;
  }
  else
  {
    returnValue = true;
  }
  return returnValue;
}
/**
 * Toggle an "arrow" image's classname between "open" and "closed"
 *
 * @param MIXED element
 *    STRING - id suffix of the image element to manipulate
 *    OBJECT - image element object to manipulate
 * @return STRING
 */
function openClose( element )
{
  var aIdPrefixes = [ 'arrow', 'arrow2' ];
  var sIdSuffix = '';
  if( typeof element === 'string' )
  {
    sIdSuffix = element;
  }
  else if( element !== null && typeof element === 'object' && typeof element.id === 'string' )
  {
    sIdSuffix = element.id;
  }

  if( sIdSuffix !== '' )
  {
    var oArrow;
    var bFoundArrow = false;
    for( var i = 0; i < aIdPrefixes.length; i++ )
    {
      oArrow = document.getElementById( aIdPrefixes[ i ] + sIdSuffix );
      if( oArrow !== null && typeof oArrow === 'object' )
      {
        bFoundArrow = true;
        break;
      }
    }

    if( bFoundArrow === true )
    {

      if( oArrow.tagName == 'IMG' )
      {
        if( oArrow.className === 'closed' )
        {
          oArrow.className = 'open';
        }
        else
        {
          oArrow.className = 'closed';
        }
      }
      else
      {
        if( oArrow.className === 'more_closedImage' )
        {
          oArrow.className = 'more_openImage';
        }
        else
        {
          oArrow.className = 'more_closedImage';
        }
      }

      return oArrow.className;
    }
  }
}
/**
 * Toggle the src of an img element based on the flag passed in
 *
 * @param MIXED element
 *    STRING - id suffix of the image element to manipulate
 *    OBJECT - image element object to manipulate
 * @param BOOL swapFlag
 *
 */
function swapArrowImgSrc( element, swapFlag )
{
  var imgId = 'img';
  if( typeof element === 'string' )
  {
    imgId += element;
  }
  else if( typeof element === 'object' && element !== null && typeof element.id !== 'undefined' )
  {
    imgId += element.id;
  }

  var img = document.getElementById( imgId );
  if( typeof img === 'object' && img !== null )
  {
    if( swapFlag === true )
    {
      img.src = '/images/open.gif';
    }
    else
    {
      img.src = '/images/plus.gif';
    }
  }
}

