/**************************************************************

  Script  : Image Menu
  Version  : 2.2
  Authors  : Samuel Birch
  Desc  : 
  Licence  : Open Source MIT Licence

**************************************************************/

var ImageMenu = new Class({
  
  getOptions: function(){
    return {
      onOpen: true,
      onClose: Class.empty,
      openWidth: 400,
      transition: Fx.Transitions.quadOut,
      duration: 400,
      open: 4,
      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);


/*************************************************************/
