(function( $ ){
$.fn.xGroup = function(options)
{
   var sp = this.selector.split(" ");
   var target = sp[0].substring(1);
   var defaults = {
      hClass: '',
      divClass: 'xgd',
      hdrSpacing: 4,
      clrDim: '#999999',
      clrBold: '#666666',
      clrActive: '#000000',
      specialClass: '',
      specialAction: void 0
   };
   if (options)
      $.extend(defaults, options);

   return $(this).each(function()
   {
      var _ = $(this);
      _.attr("style", defaults.divStyle);
      var old = $("h3", this).first();
      var c = $("<h3 style='padding-top:0px; padding-bottom:0px; margin-bottom:"+defaults.hdrSpacing+
                            "px; margin-top:"+defaults.hdrSpacing+
                            "px;' class='"+defaults.hClass+"'>"+old.html()+"</h3>");
      old.remove();
      c.css("cursor", "pointer");
      c.css("color", defaults.clrDim);
      c.data("clicked", false);
      if (_.attr("class") == "visible")
      {
         c.css("color", defaults.clrActive);
         c.data("visible", true);
      }
      else
      {
         c.data("visible", false);
         _.css("display", "none");
      }
      _.before(c);
      c.click(function()
      {
         $(this).data("clicked", true);
         $("."+target+" > h3").each(function()
         {
             var _ = $(this);
             var clicked = _.data("clicked");
             _.data("clicked", false)
             if (_.data("visible"))
             {
                if (!clicked)
                {
                   _.css("color", defaults.clrDim);
                   _.data("visible", false);
                   _.next().slideToggle();
                   if (defaults.specialClass != "" && old.hasClass(defaults.specialClass))
                      defaults.specialAction();
                }
             }
             else
             {
                if (clicked)
                {
                   _.css("color", defaults.clrActive);
                   _.data("visible", true);
                   _.next().slideToggle();
                }
             }
         });
      });
      c.mouseenter(function()
      {
         if (!c.data("visible"))
            c.css("color", defaults.clrBold);
      });
      c.mouseleave(function()
      {
         if (!c.data("visible"))
            c.css("color", defaults.clrDim);
      });
   });
};
})( jQuery );


