/************************************************************** Script : Image Menu Version : 2.2 Authors : Samuel Birch Desc : Licence : Open Source MIT Licence **************************************************************/ var ImageMenu = new Class({ getOptions: function(){ return { onOpen: false, onClose: Class.empty, openWidth: 1000, transition: Fx.Transitions.quadOut, duration: 1000, open: null, border: 0 }; }, initialize: function(elements, options){ this.setOptions(this.getOptions(), options); this.elements = $$(elements); this.widths = {}; this.widths.closed = this.elements[0].getStyle('width').toInt(); this.widths.openSelected = this.options.openWidth; this.widths.openOthers = Math.round(((this.widths.closed*this.elements.length) - (this.widths.openSelected+this.options.border)) / (this.elements.length-1)) this.fx = new Fx.Elements(this.elements, {wait: false, duration: this.options.duration, transition: this.options.transition}); this.elements.each(function(el,i){ el.addEvent('mouseenter', function(e){ new Event(e).stop(); this.reset(i); }.bind(this)); el.addEvent('mouseleave', function(e){ new Event(e).stop(); this.reset(this.options.open); }.bind(this)); var obj = this; el.addEvent('click', function(e){ if(obj.options.onOpen){ new Event(e).stop(); if(obj.options.open == i){ obj.options.open = null; obj.options.onClose(this.href, i); }else{ obj.options.open = i; obj.options.onOpen(this.href, i); } } }) }.bind(this)); if(this.options.open){ if($type(this.options.open) == 'number'){ this.reset(this.options.open); }else{ this.elements.each(function(el,i){ if(el.id == this.options.open){ this.reset(i); } },this); } } }, reset: function(num){ if($type(num) == 'number'){ var width = this.widths.openOthers; if(num+1 == this.elements.length){ width += this.options.border; } }else{ var width = this.widths.closed; } var obj = {}; this.elements.each(function(el,i){ var w = width; if(i == this.elements.length-1){ w = width+5 } obj[i] = {'width': w}; }.bind(this)); if($type(num) == 'number'){ obj[num] = {'width': this.widths.openSelected}; } this.fx.start(obj); } }); ImageMenu.implement(new Options); ImageMenu.implement(new Events); /*************************************************************/