/**
 * Pod1 Accordion extension
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 *
 *
 * @category   Pod1
 * @package    Pod1_Accordion
 * @extends    PodCore
 * @copyright  Copyright (c) 2010 Pod1 (http://www.pod1.com)
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
 
var Accordion=Class.create();Accordion.prototype={initialize:function(container,options){if(!$(container)){return;}
this.showAccordion=null;this.currentAccordion=null;this.effects=[];this.animating=false;this.container=container;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',openFirst:false},options||{});this.duration=((11-this.options.resizeSpeed)*0.15);this.accordions=$$('#'+container+' .'+this.options.classNames.toggle);this.accordions.each(this.addAccordion.bind(this));if(false==this.openActive()&&true===this.options.openFirst){this.open(this.accordions[0]);}},refresh:function(){this.destroy();this.initialize(this.container,this.options);},destroy:function(){this.accordions.each(this.removeAccordion.bind(this));},addAccordion:function(accordion){Event.observe(accordion,this.options.onEvent,this.activate.bindAsEventListener(this));if(this.options.direction=='horizontal'){var options={width:'0px',display:'none'};}else{var options={height:'0px',display:'block'};}
this.currentAccordion=$(accordion.next(0)).setStyle(options);},removeAccordion:function(accordion){Event.stopObserving(accordion,this.options.onEvent);},activate:function(event){event.stop();var accordion=Event.element(event);this.open(accordion);},openActive:function(){for(var i=0;i<this.accordions.length;i++){var accordion=this.accordions[i];if(accordion&&accordion.hasClassName('open')){this.open(accordion);return true;}}
return false;},open:function(accordion){if(this.animating||!accordion){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: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.removeClassName('accordion_content_active');this.showAccordion=null;this.animating=false;}.bind(this)});this.showAccordion.previous(0).removeClassName(this.options.classNames.toggleActive);new Effect.Scale(this.showAccordion,0,options.update(this.scaling).toObject());},_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.removeClassName('accordion_content_active');}
this.currentAccordion.addClassName('accordion_content_active');this.showAccordion=this.currentAccordion;this.animating=false;}.bind(this)});}}
