jQuery.fn.topicChooser = function(options) {

  var closeTopics = jQuery.fn.topicChooser.closeTopics;
  var openTopics = jQuery.fn.topicChooser.openTopics;

  $(".topic-group a").hoverIntent({
    over : openTopics,
    out : closeTopics
  });

  if (options && options.topic_click_handler)
  {
    $("a.topic").click(options.topic_click_handler).click(closeTopics);
  }

  $(".topics").mouseenter(function() {
    $(this).data("over", true);
  }).data("over", false);

  $(".topics").mouseleave(function() {
    $(this).data("over", false);
  });

  $(".topic-groups").mouseleave($.fn.topicChooser.closeAll);

  return this;
};

jQuery.fn.topicChooser.currentTopic = null;

jQuery.fn.topicChooser.closeTopics = function(jEvent)
{
  var $flyout = $('#' + jQuery.fn.topicChooser.currentTopic);

  if ($flyout.data("over")) //mouse is over flyout
  {
    $flyout.mouseleave($.fn.topicChooser.closeAll);
  }

};

jQuery.fn.topicChooser.closeAll = function() {
  $('.topics').hide();
  $('.topic-group').removeClass('selected');
};

jQuery.fn.topicChooser.openTopics = function(topicGroupAnchor)
{
  jQuery.fn.topicChooser.currentTopic = $(this).attr('class');
  $(".topic-group").removeClass('selected');
  $(this).closest(".topic-group").addClass('selected');
  $('.topics').hide();
  $('#' + jQuery.fn.topicChooser.currentTopic).show();
};
