var set;

var boz = {

	array_merge : function(master, slave)
	{
		var tempArray = master;
		for(key in slave)
			tempArray[key] = slave[key];
		return tempArray;
	},

	scriptaculous : { 

		accordion : function(settings){
		
			var defaults = {
				selector:'.AccordionPanel',
				openSpeed : 1,
				closeSpeed : 1,
				initCloseSpeed : 0.0,
				autoOpen : -1
			};
			
			localSettings = boz.array_merge(defaults, settings);

			var event_accordion= function(event){
				
				var curElement = null;
				if(event.element().tagName.toLowerCase()=='div')
					curElement = event.element().next();
				else if(event.element().tagName.toLowerCase()=='strong')
					curElement = event.element().up().next();
				
				
				if(curElement.busy)
					return ;
					
				if(curElement.isOpen)
				{ 
					curElement.busy=true;
					curElement.isOpen = false;
					Effect.BlindUp(curElement,{ duration: localSettings.openSpeed , afterFinish: function(){ curElement.busy=false; }});
					curElement.previous().removeClassName('accordion-toggle-active');
				}
				
				if(curElement.busy || curElement.isOpen)
					return;
					
				curElement.busy=true;
				curElement.isOpen = true;
 
				Effect.BlindDown(curElement,{ duration: localSettings.openSpeed , afterFinish: function(){ curElement.busy=false; }});
					curElement.previous().addClassName('accordion-toggle-active');
				
				$A( $$(localSettings.selector) ).each(function(ele){
				
					var remoteElement = ele.down().next();
					
					if(remoteElement.busy)
						return;
					
					remoteElement.busy=true;
				
					if(remoteElement != curElement){
						Effect.BlindUp( remoteElement , { duration: localSettings.closeSpeed, afterFinish: function(){ remoteElement.busy=false; } });
						remoteElement.isOpen = false;
						remoteElement.previous().removeClassName('accordion-toggle-active');
					}
						
				});				
			}

			$A( $$(localSettings.selector) ).each(function(ele){
				if(ele!=ele.up().childElements()[localSettings.autoOpen]){
					Effect.BlindUp( ele.down().next() , { duration: localSettings.initCloseSpeed, afterFinish: function(){ ele.down().next().busy=false; }  });
				ele.down().next().busy = true;
				ele.down().next().isOpen = false;
				}
				ele.down(0).observe('click', event_accordion );
				
			});
		}
		
	}

}