if (typeof PV == 'undefined') { PV = {} }

PV.Toggle = Class.create({
  
	initialize: function(btnElt, contentElt, settings) {
	  
	  /* Settings */
	  if (typeof settings == 'undefined') { settings = {} }
	  this.settings = { expandedClass: "expanded", collapsedClass: "collapsed", duration: .3, hideOnInit: true, clickAction: function(){} };
		Object.extend(this.settings, settings);
		
		this.btnElt = btnElt;
	  this.contentElt = contentElt;
	  this.isAnimated = false;
	  this.isVisible = false;
	  
	  /* Hide ? */
	  if (this.settings.hideOnInit) {
	    this.contentElt.hide();
  	  this.isVisible = true;
	  }
	  
	  /* Events */
	  this.attachEvents();
	  
	  /* Update state */
	  this.updateClasses();
	},
	
	attachEvents: function() {
	  this.btnElt.observe("click", function() {
	    this.toggle();
	    this.settings.clickAction();
	  }.bind(this));
	},
	
	toggle: function() {
	  
	  this.isVisible = this.contentElt.visible();
	  
	  if (!this.isAnimated) {
	    
	    this.isAnimated = true;
	    
	    new Effect["Blind" + ((this.isVisible)?"Up":"Down")](this.contentElt, {
	      afterFinish: function() {
          this.isAnimated = false;
        }.bind(this),
        duration: this.settings.duration
      });
      
      this.updateClasses();
	  }
	  
	},
	
	updateClasses: function() {
	  this.btnElt
      .removeClassName((this.isVisible)? this.settings.expandedClass : this.settings.collapsedClass)
      .addClassName((this.isVisible)? this.settings.collapsedClass : this.settings.expandedClass);
	}
	
});