if (typeof Effect == 'undefined')throw("accordion.js requires including script.aculo.us' effects.js library!");
var accordion = Class.create();
accordion.prototype = {	showAccordion : null,currentAccordion : null,duration : null,effects : [],animating : false,
initialize: function(container, options) {
		this.options = Object.extend({
			resizeSpeed : 8,
			classNames : {toggle : 'accordion_toggle',toggleActive : 'accordion_toggle_active',content : 'accordion_content' },
			    defaultSize : { height : null,	width : null},direction : 'vertical',onEvent : 'click'}, options || {});
		this.duration = ((11-this.options.resizeSpeed)*0.15);
		var accordions = $$(container+' .'+this.options.classNames.toggle);
		accordions.each(function(accordion) {
			Event.observe(accordion, this.options.onEvent, this.activate.bind(this, accordion), false);
			accordion.onclick = function() {return false;};
			if (this.options.direction == 'horizontal') {var options = $H({width: '0px'});} else {var options = $H({height: '0px'});}
			this.currentAccordion = $(accordion.next(0)).setStyle(options);	}.bind(this));	},
	activate : function(accordion) {if (this.animating) {return false;}
		this.effects = [];
		this.currentAccordion = $(accordion.next(0));
		if (this.currentAccordion == this.showAccordion) {return false;}this.currentAccordion.previous(0).addClassName(this.options.classNames.toggleActive);
		if (this.options.direction == 'horizontal') {var adjustments = $H({scaleX: true,scaleY: false});} else {var adjustments = $H({scaleX: false,scaleY: true});		}
		var options = $H({sync: true,scaleFrom: 0,scaleContent: false,transition: Effect.Transitions.sinoidal,scaleMode: {
				originalHeight: this.options.defaultSize.height ? this.options.defaultSize.height : this.currentAccordion.scrollHeight,
				originalWidth: this.options.defaultSize.width ? this.options.defaultSize.width : this.currentAccordion.scrollWidth}});
		options.merge(adjustments);this.effects.push(new Effect.Scale(this.currentAccordion, 100, options));
		if (this.showAccordion) {this.showAccordion.previous(0).removeClassName(this.options.classNames.toggleActive);options = $H({sync: true,scaleContent: false,transition: Effect.Transitions.sinoidal});
			options.merge(adjustments);this.effects.push(new Effect.Scale(this.showAccordion, 0, options));}
		new Effect.Parallel(this.effects, {duration: this.duration,queue: {position: 'end',scope: 'accordionAnimation'},
			beforeStart: function() {this.animating = true;}.bind(this),afterFinish: function() {this.showAccordion = this.currentAccordion;this.animating = false;}.bind(this)});}}
	
