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:500});

		this.previousButton = $E('#photo a.previous');
		this.previousButton.addEvent('click', function(ev) {
			this.swap(this.previousButton, ev);
		}.bind(this));
		
		this.nextButton = $E('#photo a.next');
		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();

		// 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-', '');

		$('photo').addClass('loading');

		// 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() {
				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}).start(0,1);

				$('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'))
});
