$( document ).ready( function() {
  $( "#siteMap ul li ul" ).hide() ;
  $( "#siteMap .trail > ul" ).show() ;
  $( "#siteMap .active > ul" ).show() ;
  $( "#siteMap" ).click( function( e ) {
    if ( !e ) var e = window.event ;
    if ( e.target.tagName != "A" ) {
      var eventYPos = 0 ;
      if ( e.pageY ) {
        eventYPos = e.pageY ;
      } else {
        var docElem = document.documentElement ;
        var docBody = document.body ;
        eventYPos = e.clientY + 
            ( docElem.scrollTop || docBody.scrollTop ) - ( docElem.clientTop || 0 ) ;
      }
      var navItems = document.getElementById( "siteMap" ).getElementsByTagName( "LI" ) ;
      for ( var navItemIter = navItems.length - 1 ; navItemIter >= 0 ; navItemIter -- ) {
        var navItem = navItems[ navItemIter ] ;
        elemYPos = getElemYPos( navItem ) ;
        if ( ( elemYPos > 0 ) && ( eventYPos > elemYPos ) && 
             ( eventYPos < ( navItem.offsetHeight + elemYPos ) ) ) {
          if ( $(navItem).children( "ul:first" ).is( ":hidden" ) )
            $(navItem).children( "ul:first" ).show( "normal" ) ;
          else
            $(navItem).children( "ul:first" ).hide( "normal" ) ;
          navItemIter = -1 ;
        }
      }
    }
  }) ;
}) ;

function getElemYPos( elem ) {
  var elemTop = 0 ;
  if ( elem.offsetParent ) {
    do {
      elemTop += elem.offsetTop ;
    } while ( elem = elem.offsetParent ) ;
  }
  return elemTop ;
}
