/* Simple Accordion Script * Requires Prototype and Script.aculo.us Libraries * By: Brian Crescimanno * http://briancrescimanno.com * This work is licensed under the Creative Commons Attribution-Share Alike 3.0 * http://creativecommons.org/licenses/by-sa/3.0/us/ */ if (typeof Effect == 'undefined') throw("You must have the script.aculo.us library to use this accordion"); var Accordion = Class.create({ initialize: function(id, defaultExpandedCount) { if(!$(id)) throw("Attempted to initalize accordion with id: "+ id + " which was not found."); this.accordion = $(id); this.options = { toggleClass: "accordion-toggle", toggleActive: "accordion-toggle-active", contentClass: "accordion-content" } this.contents = this.accordion.select('div.'+this.options.contentClass); this.isAnimating = false; this.maxHeight = 0; this.current = defaultExpandedCount ? this.contents[defaultExpandedCount-1] : this.contents[0]; this.toExpand = null; this.checkMaxHeight(); this.initialHide(); this.attachInitialMaxHeight(); var clickHandler = this.clickHandler.bindAsEventListener(this); this.accordion.observe('click', clickHandler); }, expand: function(el) { this.toExpand = el.next('div.'+this.options.contentClass); if(this.current != this.toExpand){ this.toExpand.show(); this.animate(); } }, checkMaxHeight: function() { for(var i=0; i this.maxHeight) { this.maxHeight = this.contents[i].getHeight(); } } }, attachInitialMaxHeight: function() { this.current.previous('div.'+this.options.toggleClass).addClassName(this.options.toggleActive); if(this.current.getHeight() != this.maxHeight) this.current.setStyle({height: this.maxHeight+"px"}); }, clickHandler: function(e) { var el = e.element(); if(el.hasClassName(this.options.toggleClass) && !this.isAnimating) { this.expand(el); } if (el.up().hasClassName(this.options.toggleClass) && !this.isAnimating) { this.expand(el.up()); } }, initialHide: function(){ for(var i=0; i