var Groups = {
  toggle : function(link_element, element, url)
  {
    element = $(element)
    
    if(element.busy) {
      return;
    }
    
    element.busy = true;
      
    if(element.shown) {
      Effect.BlindUp(element, {
        duration: 0.5,
        afterFinish: function(effect) {
          element.busy = false;
        },
        queue: { position: 'end', scope: 'q_' + element.id }
      });
      
      element.shown.innerHTML = element.shown.innerHTML.sub("HIDE", "SHOW", 1);
      Element.removeClassName(element.shown, 'current');
      
      if(element.shown == link_element) {
        element.shown = null;
        return;
      } else {
        element.shown = null;
      }
    }
    
    link_element.innerHTML = link_element.innerHTML.sub("SHOW", "HIDE", 1);
    Element.addClassName(link_element, 'current');
    Element.addClassName(link_element, 'loading');
    
    new Ajax.Updater(element, url, {
      method: 'get',
      evalScripts: true,
      onComplete: function() {
        if(element.shown != link_element) { 
          Effect.BlindDown(element, {
            duration: 0.5,
            afterFinish: function(effect) {
              element.busy = false;
            },
            queue: { position: 'end', scope: 'q_' + element.id }
          });
          
          element.shown = link_element;
          Element.removeClassName(link_element, 'loading');
        }
      }
    });
    
  }
}
