var positions = new Array();
var galleryEffect = null;
var m = $('menu');

var moveIt = function(pos,old){
  var ml = parseInt(m.down('ul').getStyle('marginLeft'));
  var df = m.getWidth() - m.select('li').map(function(e){return e.getWidth()}).inject(0,function(a,n){return a += n});
  var w = m.down('li').getWidth();
  if (df < 0) {
    m.down('ul').setStyle({marginLeft:((pos > old) ? ((ml-w < df) ? df : ml-w) : ((ml+w > 0) ? 0 : ml+w)) + 'px'});
  }
};

var slideIt = function(e,a){
  var active = m.down('.act');
  var pos = active.previousSiblings().length;
  var from = parseInt($('slides').getStyle("marginLeft")) || 0;
  var old = pos;
  
  switch(a) {
    case 'next':
      pos += 1;
    break;
    case 'previous':
      pos -= 1;
    break;
    case 'direct':
      pos = e.up('li').previousSiblings().length;
    break;
  }
  moveIt(pos,old);
  $$('#menu li.menuItem').each(function(elem) {
    elem.addClassName('inact').removeClassName('act');
  });
  $$('#menu li.menuItem')[pos].removeClassName('inact').addClassName('act');

  active = $('menu').down('.act');
  
  if (active.next() == null) {
    $('controls').down('.arrow-next').hide();
  } else {
    $('controls').down('.arrow-next').show();
  }
  
  if (active.previous() == null) {
    $('controls').down('.arrow-prev').hide();
  } else {
    $('controls').down('.arrow-prev').show();
  }
  
  if (galleryEffect) {
    galleryEffect.cancel();
  }

  galleryEffect = new Effect.Tween(
    $('slides'), 
    from,
    -positions[pos],
    {duration:0.45},
    function(p) {
      this.setStyle({marginLeft:p + 'px'});
    }
  );
};

Event.addBehavior({
  "#gallery": function() {
    if ($('menu').select('li.menuItem').length < 2) {
      $('controls').hide();
    }
    
    var totalWidth = 0;
    $$('#slides .slide').each(function(slide, i){
      positions[i]= totalWidth;
      totalWidth += slide.getWidth();
      if (!slide.getWidth()) {
        alert("Please, fill in width & height for all your images!");
        return false;
      }
    });
    $('slides').setStyle({width:totalWidth+"px"});
    $('menu').select('li.menuItem').each(function(element, i) {
      if (i==0) {
        element.addClassName('act');
      } else {
        element.addClassName('inact');
      }
    });
  },
  "#controls a:click": function(e){
    var element = e.element();
    var active = $('menu').down('.act');
    if (element.className == 'arrow-next') {
      if (active.next() != null) {
        slideIt(element,'next');
      } else {
        return false;
      }
    } else {
      if (active.previous() != null) {
        slideIt(element,'previous');
      } else {
        return false;
      }
    }
    e.preventDefault();
  },
  "#menu ul li a:click": function(e){
    var element = e.element();
    slideIt(element,'direct');
    e.preventDefault();
  }
});

