/**
 * jQuery Plugin: ul-Dropdown
 */


(function($) {

  // classes used by the plugin
  // need to be styled via external stylesheet, see first example
  var CLASSES = {
    hideList: "dropdownClosed", 
    showList: "dropdownOpened", 
    showTrigger: "dropdownTriggerVisible",
    hideTrigger: "dropdownTriggerHidden"
  };
  
  $.extend($.fn, {
    
    uldropdown: function() {
      
      var selector = this;
      var trigger = $(selector).find("p."+CLASSES.showTrigger+", p."+CLASSES.hideTrigger);
      var list = $(selector).find("ul."+CLASSES.showList+", ul."+CLASSES.hideList);
      
      // show trigger and add show-event
      if (trigger) {
        trigger.removeClass(CLASSES.hideTrigger);
        trigger.addClass(CLASSES.showTrigger);
        
        $(trigger).bind("click", showList);
        $(list).find("a").bind("focus", showList);
        $(list).find("a").bind("blur", hideList);
        $(list).find("a").bind("click", hideList);
      }
      
      
      function showList(e) {
        list.removeClass(CLASSES.hideList);
        list.addClass(CLASSES.showList);
        
        $("body").bind("click", hideList);
        $(trigger).unbind("click", showList);
        $(trigger).bind("click", hideList);

        if (!e) {var e = window.event;}
        e.cancelBubble = true;
        if (e.stopPropagation) e.stopPropagation();
      }
      
      function hideList(e) {
        list.removeClass(CLASSES.showList);
        list.addClass(CLASSES.hideList);
        
        $("body").unbind("click", hideList);
        $(trigger).unbind("click", hideList);
        $(trigger).bind("click", showList);
        
        if (!e) {var e = window.event;}
        e.cancelBubble = true;
        if (e.stopPropagation) e.stopPropagation();
      }
    }
  });
  
  // provide backwards compability
  $.fn.Uldropdown = $.fn.uldropdown;
})(jQuery);

