/*
	This js drives the NAV Bar. The basic concept behind the NAV bar is to prevent
	any change of state until the mouse stops for more than 50ms. This provides a
	more natural and fluid movement of the NAV in co-ordination with the the mouse.
	A 500ms timeout period is also provided if the user moves off the nav. This
  provides smoothness if the mouse movement is slightly jerky.
*/

var __mouse_moving_timer = null;
var __parent_element = null;
var __curr_hovered_element = null;

$j(document).ready(function() {
  // for IE6, setup mouseover/mouseout classes on nav to simulate :hover
  $j('#topnav li').mousemove(navMouseMove);
  $j('#topnav li').mouseout(navMouseOut);
});

function _hide_nav(event) {
  if (__mouse_moving_timer != null) {
    clearInterval(__mouse_moving_timer);
    __mouse_moving_timer = null;
  }
  
  // Clear any and all hovered elements
  $j('.topnav-leave-meta').removeClass('hovered').removeClass('topnav-leave-meta');
  $j('.subnav-leave-meta').removeClass('hovered').removeClass('subnav-leave-meta');
}

function _mouse_stopped(event) {
  if (__mouse_moving_timer != null) { clearInterval(__mouse_moving_timer); __mouse_moving_timer = null; }
  
  if ((__parent_element != null) && (__curr_hovered_element == null)) {
    // Clear all hovered elements and the old parent
    $j('.topnav-leave-meta').removeClass('hovered').removeClass('topnav-leave-meta');
    
    // Set the new parent
    __parent_element.addClass('hovered').addClass('topnav-leave-meta');
  } else if (__curr_hovered_element != null) {
    // Clear all previous hovered elements
    $j('.subnav-leave-meta').removeClass('hovered').removeClass('subnav-leave-meta');
    
    // Set the new hovered item
    __curr_hovered_element.addClass('hovered').addClass('subnav-leave-meta');
  }
}

function navMouseMove(event) {
  target = $j(this);
  
  if (target.hasClass('topnav-item')) {
    if (!target.hasClass('topnav-leave-meta')) {
      __parent_element = target;
      
      // Only clear the current hovered element if it's already hovered
      if ((__curr_hovered_element != null) && (__curr_hovered_element.hasClass('subnav-leave-meta'))) {
        __curr_hovered_element = null;
      }
    }
  } else {
    if (!target.hasClass('subnav-leave-meta')) {
      __curr_hovered_element = target;
    }
  }
  
  // Reset the MouseMoving timer
  if (__mouse_moving_timer != null) { clearInterval(__mouse_moving_timer); }
  __mouse_moving_timer = setInterval(_mouse_stopped, 50);
}

function navMouseOut(event) {
  if (__mouse_moving_timer != null) { clearInterval(__mouse_moving_timer); }
  __mouse_moving_timer = setInterval(_hide_nav, 500);
}
