var Toggle = Class.create({
  initialize: function(options) {
    this.options = Object.extend({
      toggleClass: 'toggle',
      selectedClass: 'arrowselected',
      deleteClass: 'delete',
      deleteMessage: 'Are you sure you want to delete this item?',
      deleteCallback: Prototype.emptyFunction,
      prefix: ''
    }, options || {});
    
    
    Event.observe(window, 'load', function() {
      this.initToggles();
      this.initDeletes();
    }.bind(this));
  },
  
  initToggles: function() {
    $$('a.'+this.options.toggleClass).each(function(link) {
      link.observe('click', function(event) {
        var link = Event.element(event);
        var targetDiv = this.getLinkTarget(link);
        
        if (link.hasClassName(this.options.selectedClass)) {
          link.removeClassName(this.options.selectedClass); // hide
        } else {
          link.addClassName(this.options.selectedClass); //show
        }

        Effect.toggle(this.options.prefix+targetDiv, 'slide', {queue: 'end'});
        event.stop();
      }.bind(this));
    }.bind(this));
  },
  
  initDeletes: function() {
    $$('a.'+this.options.deleteClass).each(function(link) {
      link.observe('click', function(event) {
        if (confirm(this.options.deleteMessage)) {
          var link = Event.element(event);
          var targetDiv = this.getLinkTarget(link);
          if (!$(targetDiv)) return;          
          new Effect.Parallel([
            Effect.Fade(targetDiv),
            Effect.Fade(link.up())
          ]);
          this.options.deleteCallback(link);
        }
        event.stop();
      }.bind(this));
    }.bind(this));
  },
  
  getLinkTarget: function(link) {
    return link.href.substring(link.href.indexOf('#')+1);
  },
  
  toggleMorph: function(link, options) {
    var options = Object.extend({
      min:'120px', max:'300px'
    }, options || {});
    var targetDiv = $(this.getLinkTarget(link)); 
    if (targetDiv.getStyle('height') == options.max) {
      targetDiv.morph('height:'+options.min);
      link.innerHTML = '+';
    } else {
      targetDiv.morph('height:'+options.max);
      link.innerHTML = '&ndash;';
    }
    
    return false;
  }
});

var ucb_Toggle = new Toggle();

function viewHide(link) {
  var box = $(link).up('.headerbox');
  if (box.expander == undefined) {
    box.expander = {
      expanded: false,
      originalHeight: box.getHeight()
    }
  }
  if (box.expander.expanded == false) {
    new Effect.ReSize(box, {
      originalSize: box.expander.originalHeight,
      toSize: 205,
      afterFinish: function(){ link.innerHTML = '[show less]'; }
    });
    box.expander.expanded = true;
  } else {
    new Effect.ReSize(box, {
      originalSize: 205,
      toSize: box.expander.originalHeight,
      afterFinish: function(){ link.innerHTML = '[show more]'; }
    });
    box.expander.expanded = false;
  }
}