if (typeof(LM) == 'undefined') LM = {};



LM.DetailsGallery = new Class({

  initialize: function(list) {
    if (!list) return false;

    // create effect
    this.featuredDivHeight = new Fx.Style($('featured'), 'height', {duration:360});

    this.photo = $('photo');

    this.previousButton = $E('#photo a.previous');
    if (this.previousButton) {
      this.previousButton.addEvent('click', function(ev) {
        this.swap(this.previousButton, ev);
      }.bind(this));      
    }

    this.nextButton = $E('#photo a.next');
    if (this.nextButton) {
      this.nextButton.addEvent('click', function(ev) {
        this.swap(this.nextButton, ev);
      }.bind(this));      
    }

    var listitems = list.getElements('li');
    listitems[0].addClass('first selected');
    if (listitems.length > 1) {
      listitems.getLast().addClass('last');
      this.nextButton.removeClass('disabled');
    }
  },
  
  swap: function(link, ev) {
    ev = new Event(ev).stop();

    this.photo.addClass('loading');

    // if direction is disabled, do nothing
    if (link.hasClass('disabled')) return false;

    var currentImage = $E('#photolist .selected');

    if (link.hasClass('previous')) {
      var newImage = currentImage.getPrevious('li');
    }
    if (link.hasClass('next')) {
      var newImage = currentImage.getNext('li');
    }
    currentImage.removeClass('selected');
    newImage.addClass('selected');

    // disable next/previous buttons if it's the first or last image
    if (newImage.hasClass('first')) {
      this.previousButton.addClass('disabled');
    } else {
      this.previousButton.removeClass('disabled');
    }
    if (newImage.hasClass('last')) {
      this.nextButton.addClass('disabled');
    } else {
      this.nextButton.removeClass('disabled');
    }

    // swap the image
    var featuredDiv = $('featured');
    var featuredImage = $E('#featured img');
    var newImageSrc = newImage.getElement('a').getProperty('href');
    var newImageHeight = newImage.getElement('a').getProperty('class');
    newImageHeight = newImageHeight.replace('height-', '');

    // set height, based on current image
    this.featuredDivHeight.set(featuredImage.getSize().size.y);
    var $this = this;

    featuredImage.effect('opacity', { duration:400 }).start(0);
    new Asset.image(newImageSrc, {
      onload: function() {
        var checkHeight = function() {
          if (featuredDiv.getSize().size.y != newImageHeight) {
            $this.featuredDivHeight.set(newImageHeight);
          }
        }

        featuredImage.remove();
        var newImageElement = new Element('img', {'src':newImageSrc});
        newImageElement.injectInside(featuredDiv);
        newImageElement.effect('opacity').set(0);

        $this.featuredDivHeight.start(newImageHeight)
        newImageElement.effect('opacity', {duration:400, onComplete:function(){ checkHeight(); }}).start(0,1);

        $this.photo.removeClass('loading');
      }
    });
  }
});


LM.ReviewToggle = new Class({
  initialize: function(review, content) {
    if (!review || !content) return false;
    
    content = new Fx.Slide(content);
    content.hide();

    $E('#review h3 a.toggle').addEvent('click', function(e){
      e = new Event(e);
      e.stop();
      content.toggle();
      if ( review.hasClass('selected') ) {
        review.removeClass('selected');
      } else {
        review.addClass('selected');
      }
    });
    $E('#review .close a').addEvent('click', function(e) {
      e = new Event(e);
      e.stop();
      if ( review.hasClass('selected') ) {
        review.removeClass('selected');
      } else {
        review.addClass('selected');
      }
      content.toggle();
    });
  }
});


window.addEvent('domready', function() {
  var detailsgallery = new LM.DetailsGallery($('photolist'));
  
  var reviewtoggle = new LM.ReviewToggle($('review'), $E('#review .content'))
});

