// This is a patch updates accordion.js to work with prototype 1.6
// Found here: http://snipplr.com/view/5502/stickman-labs-accordion-updated-for-prototypejs-16-/
// Original accordian script built for prototype 1.5 -DAM

Object.extend(accordion.prototype, {

		//
		//  Setup the Variables
		//
		showAccordion : null,
		currentAccordion : null,
		duration : null,
		effects : [],
		animating : false,

		//  
		//  Initialize the accordions
		//
		initialize: function(container, options) {
		  if (!$(container)) {
		    throw(container+" doesn't exist!");
		    return false;
		  }

			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);
				if (this.options.onEvent == 'click') {
				  accordion.onclick = function() {return false;};
				}

				if (this.options.direction == 'horizontal') {
					var options = {width: '0px', display:'none'};
				} else {
					var options = {height: '0px', display:'none'};
				}
	//			options.merge({display: 'none'});			

				this.currentAccordion = $(accordion.next(0)).setStyle(options);
			}.bind(this));
		},

		//
		//  Activate an accordion
		//
		activate : function(accordion) {
			if (this.animating) {
				return false;
			}

			this.effects = [];

			this.currentAccordion = $(accordion.next(0));
			this.currentAccordion.setStyle({
				display: 'block'
			});		

			this.currentAccordion.previous(0).addClassName(this.options.classNames.toggleActive);

			if (this.options.direction == 'horizontal') {
				this.scaling = $H({
					scaleX: true,
					scaleY: false
				});
			} else {
				this.scaling = $H({
					scaleX: false,
					scaleY: true
				});			
			}

			if (this.currentAccordion == this.showAccordion) {
			  this.deactivate();
			} else {
			  this._handleAccordion();
			}
		},
		// 
		// Deactivate an active accordion
		//
		deactivate : function() {
			var options = $H({
			  duration: this.duration,
				scaleContent: false,
				transition: Effect.Transitions.sinoidal,
				queue: {
					position: 'end', 
					scope: 'accordionAnimation'
				},
				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
				},
				afterFinish: function() {
					this.showAccordion.setStyle({
	          height: 'auto',
						display: 'none'
					});				
					this.showAccordion = null;
					this.animating = false;
				}.bind(this)
			});    
	//    options.merge(this.scaling);

	    this.showAccordion.previous(0).removeClassName(this.options.classNames.toggleActive);

			new Effect.Scale(this.showAccordion, 0, options.update(this.scaling).toObject());
		},

	  //
	  // Handle the open/close actions of the accordion
	  //
		_handleAccordion : function() {
			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(this.scaling);

			this.effects.push(
				new Effect.Scale(this.currentAccordion, 100, options.update(this.scaling).toObject())
			);

			if (this.showAccordion) {
				this.showAccordion.previous(0).removeClassName(this.options.classNames.toggleActive);

				options = $H({
					sync: true,
					scaleContent: false,
					transition: Effect.Transitions.sinoidal
				});
				options.merge(this.scaling);

				this.effects.push(
					new Effect.Scale(this.showAccordion, 0, options.update(this.scaling).toObject())
				);				
			}

	    new Effect.Parallel(this.effects, {
				duration: this.duration, 
				queue: {
					position: 'end', 
					scope: 'accordionAnimation'
				},
				beforeStart: function() {
					this.animating = true;
				}.bind(this),
				afterFinish: function() {
					if (this.showAccordion) {
						this.showAccordion.setStyle({
							display: 'none'
						});				
					}
					$(this.currentAccordion).setStyle({
					  height: 'auto'
					});
					this.showAccordion = this.currentAccordion;
					this.animating = false;
				}.bind(this)
			});
		}

});
		
