/**************************************************************

     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,
               openHeight: 70,
               transition: Fx.Transitions.quadOut,
               duration: 500,
               open: null,
               border: 0
          };
     },

     initialize: function(elements, options){
          this.setOptions(this.getOptions(), options);
          
          this.elements = $$(elements);
          
          this.heights = {};
          this.heights.closed = this.elements[0].getStyle('height').toInt();
          this.heights.openSelected = this.options.openHeight;
          this.heights.openOthers = Math.round(((this.heights.closed*this.elements.length) - (this.heights.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 Height = this.heights.openOthers;
               if(num+1 == this.elements.length){
                    Height += this.options.border;
               }
          }else{
               var Height = this.heights.closed;
          }
          
          var obj = {};
          this.elements.each(function(el,i){
               var h = Height;
               if(i == this.elements.length-1){
                    h = Height+5
               }
               obj[i] = {'height': h};
          }.bind(this));
          
          if($type(num) == 'number'){
               obj[num] = {'height': this.heights.openSelected};
          }
                    
          this.fx.start(obj);
     }
     
});

ImageMenu.implement(new Options);
ImageMenu.implement(new Events);


/*************************************************************/
