/* MIT-style license ... Author: Mats Lindblad Inspiration: accordion.js found at script.aculo.us */ var Accordion = Class.create(); Accordion.prototype = { initialize: function(container, options){ this.container = $(container); this.setOptions(options); this.togglers = this.container.select(this.options.toggler); this.togglees = this.container.select(this.options.togglee); this.togglees.invoke("hide"); this.togglers.each(function(t, idx){ t.observe('click', this.show.bindAsEventListener(this, idx)); }.bind(this)); this.setCurrent(); }, show: function(event, index) { var element = Event.element(event); if (this.open.toggler == element) return; var current = this.open; var next = {toggler: element, togglee: this.togglees[index]}; new Effect.Parallel([new Effect.BlindUp(current.togglee), new Effect.BlindDown(next.togglee)], {duration: 0.5}); current.toggler.removeClassName(this.options.activeClassName); next.toggler.addClassName(this.options.activeClassName); this.open = next; }, setOptions: function(options){ this.options = { toggler: '.toggler', // className of the element you click togglee: '.togglee', // className of the element you toggle activeClassName: 'visible', // className to put on the open elements defaultTogglee: null }; Object.extend(this.options, options || {}); }, setCurrent: function(){ if (this.options.defaultTogglee != null) { this.togglees.each(function(t, idx){ if (t.id == this.options.defaultTogglee) { t.show(); this.open = {toggler: this.togglers[idx], togglee: this.togglees[idx]}; this.togglers[idx].addClassName(this.options.activeClassName); return; } }.bind(this)); } else { this.open = {toggler: this.togglers.first(), togglee: this.togglees.first()}; this.togglers.first().addClassName(this.options.activeClassName); this.togglees.first().show(); } } };