
/*-----------------------------------------------------------------------------------------------*/


var expander = Class.create();
expander.prototype = {

	initialize: function(container,options) {
		if (!$(container)) {
			return false;
		}
		
		this.options = Object.extend({
			speed : 10,
			classNames : {
				toggle : 'expander-toggle',
				toggleActive : 'expanded',
				content : 'expander-content'
			}
		}, options || {});
		
		this.duration = ((11-this.options.speed)*0.15);

		var toggles = $$('#'+container+' .'+this.options.classNames.toggle);
		toggles.each(function(toggle) {
			Event.observe(toggle, 'click', this.toggle.bind(this,toggle), false);
			toggle.onclick = function() {return false;};
			if ($(toggle).hasClassName(this.options.classNames.toggleActive)) {
				$(toggle).removeClassName(this.options.classNames.toggleActive);
			}
		}.bind(this));
		
		var contents = $$('#'+container+' .'+this.options.classNames.content);
		contents.each(function(content) {
		
			$(content).setStyle({display:'block'});
			$(content).origHeight = $(content).getHeight()+10;

			$(content).setStyle({
				height:'0px',
				display:'block',
				overflow:'hidden'
			});
		}.bind(this));
		
		
		
	},
	
	toggle : function(toggle) {
		if ($(toggle).hasClassName(this.options.classNames.toggleActive)) {
			this.deactivate(toggle);
		} else {
			this.activate(toggle,true);
		}
	},
	
	activate : function(toggle,animate) {
		$(toggle).addClassName(this.options.classNames.toggleActive);
		var content = $(toggle).next('.'+this.options.classNames.content);
		
		if(animate){
			new Effect.Morph(content, {
			  style: 'height: '+$(content).origHeight+'px;', 
			  duration: this.duration
			});
		} else {
			$(content).setStyle({
				'height' : $(content).origHeight+'px'
			});
		}

		
	},
	
	deactivate : function(toggle) {
		$(toggle).removeClassName(this.options.classNames.toggleActive);
		var content = $(toggle).next('.'+this.options.classNames.content);
		
		new Effect.Morph(content, {
		  style: 'height: 0px;', 
		  duration: this.duration
		});
		
	}
	
}
	
