/**************************************************************

   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: 200,
         transition: Fx.Transitions.quadOut,
         duration: 400,
         open: 5,
         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);


/*************************************************************/
