var positionCursorTimeout;

window.onload = function()
{
  replaceFlash(jQuery("div.logo")[0]);
  
  jQuery("#mainNavBar > ul > li." + whichPage).addClass("selected");
  
  if (window.whichSubnav)
  {
    jQuery("#mainNavBar > ul ul > li." + whichSubnav).addClass("selected");
  }
  
  /* have to call initializeAnchorHover here to avoid conflicts in IE */
  if (jQuery("#mainNavBar > ul > li.selected ul").length > 0)
  {
    jQuery("#mainNavBar > ul > li.selected ul").css({zIndex: -1, top: 0}).animate({top: jQuery("#mainNavBar > ul > li:first").height()}, 500, initializeAnchorHover);
  }
  else
  {
    setTimeout(initializeAnchorHover, 500);
  }
}


function showCursor(target)
{
  // default the left to the cursor's current location, plus half of its width, which is for when the hover off is on a page with no primary nav item
  var l;
  var w;
  var exists = (target.length > 0);
  var cursorExtensionLength = 0; // how much the cursor should extent past each side of the nav item
  
  if (exists)
  {
    l = target.offset().left - jQuery("#mainNavBar").offset().left - cursorExtensionLength;
    
    w = target.width() + parseInt(target.css("paddingLeft")) + parseInt(target.css("paddingRight")) + cursorExtensionLength * 2;
    
    jQuery("#mainNavBar #cursor").css({height: jQuery("#mainNavBar #cursor div").height()});
    
    hideCursor(function()
    {
      jQuery("#mainNavBar #cursor").css({left: l + w / 4, width: w / 2});
      
      if (target[0].parentNode.className.indexOf("selected") < 0)
      {
        jQuery("#mainNavBar #cursor").animate({top: jQuery("#mainNavBar ul").offset().top + 24, left: l, width: w}, 200);
      }
    });
  }
  else
  {
    jQuery("#mainNavBar #cursor").css({top: jQuery("#mainNavBar ul").offset().top + 20, left: jQuery("#mainNavBar ul").offset().left / 2});
  }
  
  jQuery("#mainNavBar > ul > li.selected ul").css({zIndex: ""});
}

function hideCursor(callback)
{
  var target = jQuery("#mainNavBar #cursor");
  var cursorExtensionLength = 0; // how much the cursor should extent past each side of the nav item
  var l = target.offset().left - jQuery("#mainNavBar").offset().left - cursorExtensionLength;
  var w = target.width() + parseInt(target.css("paddingLeft")) + parseInt(target.css("paddingRight")) + cursorExtensionLength * 2;
  
  jQuery("#mainNavBar #cursor").animate({top: jQuery("#mainNavBar ul").offset().top + 20, left: l + w / 4, width: w / 2}, 200, function()
  {
    jQuery("#mainNavBar #cursor").css({left: jQuery("#mainNavBar ul").offset().left / 2});
    
    if (callback)
    {
      callback();
    }
  });
}

function resetCursor()
{
  showCursor(jQuery("#infinityAndBeyond"));
}

function initializeAnchorHover()
{
  var cursorExtensionLength = 0; // how much the cursor should extent past each side of the nav item
  var target = jQuery("#mainNavBar > ul > li.selected > a:first-child");
  
  jQuery("#mainNavBar div.cursor")[0].id = "cursor";
  if (target[0])
  {
    var l = target.offset().left - jQuery("#mainNavBar").offset().left - cursorExtensionLength;
    var w = target.width() + parseInt(target.css("paddingLeft")) + parseInt(target.css("paddingRight")) + cursorExtensionLength * 2;
    var cursorSelected = jQuery("#mainNavBar #cursor").clone();
    
    cursorSelected[0].id = "cursorSelected";
    
    cursorSelected.insertAfter("#mainNavBar #cursor");
    
    cursorSelected.css({top: jQuery("#mainNavBar ul").offset().top + 24, left: l, width: w, height: jQuery("#mainNavBar #cursor div").height()});
  }
  
  jQuery("#mainNavBar > ul > li > a").hover(
    function()
    {
      jQuery("#mainNavBar #cursor").stop();
      
      showCursor(jQuery(this));
    },
    function()
    {
      jQuery("#mainNavBar #cursor").stop();
      
      hideCursor();
    }
  );
  
  resetCursor();
}