$.fn.equalHeight = function() {
  var maxHeight = 0;
  this.each(function() {
    if ($.browser.msie && $.browser.version < 7)
      $(this).css({ width: $(this).width() });

    var myHeight = $(this).height();
    if (myHeight > maxHeight)
      maxHeight = myHeight;
  });
  this.css({ height: maxHeight });
};

$.subnav = function() {
  if ($.browser.msie && $.browser.version < 8) {
    var zIndexNumber = 1000;
    $('div').each(function() {
      zIndexNumber -= 1;
      $(this).css('zIndex', zIndexNumber);
    });
  }

  var top_nav = $('#nav-container');
  top_nav.data('originalZ', top_nav.css("z-index"));

  function subnav_defaults(subnav_elem) {
    var columns = subnav_elem.children('ul').children('li');
    columns.eq(columns.length - 1).addClass('last');

    var nav_width = 0;
    columns.each(function() {
      nav_width += $(this).width();
    });
    nav_width += columns.length;

    subnav_elem.children().wrapAll('<div class="wrapper" />');
    subnav_elem.css({ width: nav_width, zIndex: 5000 });

    subnav_elem.find('h3:first-child').addClass('first');

    columns.equalHeight();
    subnav_elem.find('.wrapper').css({ height: columns.height() });

    if ($.browser.msie)
      subnav_elem.bgiframe();

    return nav_width;
  }

  top_nav.find('li .inner a').each(function() {
    var cufon_elem   = $(this),
        container_li = $(this).closest('li'),
        subnav_elem  = container_li.children('.subnav'),
        has_subnav   = subnav_elem.length > 0,
        first_run    = true;

    container_li.hover(function() {
      container_li.addClass('hovered');

      if (has_subnav && first_run) {
        var nav_width = subnav_defaults(subnav_elem);

        var remaining_space = parseInt(940 - container_li.position().left),
            overflow        = remaining_space - nav_width;
        if (overflow < 0)
          subnav_elem.css({ left: overflow });

        first_run = false;
      }
    }, function() {
      container_li.removeClass('hovered');
    });
  });

  return this;
};
