/**
  Causes.com Header
  2009-10-02 / <brad@causes.com>
**/
if (typeof (Causes) === 'undefined') Causes = {};
if (typeof (Causes.Header) === 'undefined') Causes.Header = {};

Causes.Header.UtilityMenu = (function () {

  var bHoveringOverUtlityTab;
  var jqUtilityMenu;
  var jqUtilityTab;
  var jqUtilityTabContainer;

  // *-* public methods *-*

  function setup() {
    jqUtilityMenu = $("#header_utility_menu");
    jqUtilityTab = $("#header_cause_utility > a");
    jqUtilityTabContainer = $("#header_cause_utility");

    if (jqUtilityTab.size() > 0) {
      // WebKit freaks out if we don't stop and take a breath here
      setTimeout(positionUtilityMenu, 100);

      $(document.body).click(eventBodyClicked);
      jqUtilityTabContainer.hover(eventUtilityTabMouseOver,
                                  eventUtilityTabMouseOut);
    }
  }

  // *-* utility methods *-*

  function changeUtilityMenu(meth) {
    jqUtilityMenu[meth]();
  }

  function positionUtilityMenu() {
    var posTab = jqUtilityTab.position();
    var posHeight = jqUtilityTab.outerHeight();
    jqUtilityMenu.css({'top': posTab.top + posHeight, 'left': posTab.left});
  }

  // *-* event methods *-*

  function eventBodyClicked(evt) {
    if (evt.target != jqUtilityTab.get(0)) {
      changeUtilityMenu('hide');
    }
  }

  function eventUtilityTabMouseOver(evt) {
    bHoveringOverUtlityTab = true;
    jqUtilityMenu.show();
    evt.preventDefault();
    return false;
  }

  function eventUtilityTabMouseOut(evt) {
    bHoveringOverUtlityTab = false;
    setTimeout(function () {
      if (!bHoveringOverUtlityTab) {
        jqUtilityMenu.hide();
      }
    }, 150);
    evt.preventDefault();
    return false;
  }

  // expose public methods
  return {
    setup: setup
  };
})();

$(document).ready(Causes.Header.UtilityMenu.setup);
