/**************************************************************

       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: 310,
                     transition: Fx.Transitions.quadOut,
                     duration: 400,
                     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);


/*************************************************************/
