SlideShow = Class.create();
SlideShow.prototype = {

    initialize: function(id)
    {
		this.id		= id,
		this.obj	= this,
		this.slide	= null,
		this.lock	= false,

		this.btnPrevious	= $('slide-show-previous');
		this.btnNext		= $('slide-show-next');

		Event.observe('slide-show-previous', 'click', this.Previous.bindAsEventListener(this.obj));
		Event.observe('slide-show-next', 'click', this.Next.bindAsEventListener(this.obj));

		this.Next();
    },

	Previous: function()
	{
		if ( !this.lock )
		{
			this.lock = true;

			var slideList = document.getElementsByClassName('slide', $('slide-show'));

			if ( slideList && slideList.length )
			{
				var previous_slide		= this.slide;
				var previous_slide_id	= previous_slide != null ? 'slide_' + (previous_slide + 1) : null;

				if ( this.slide == null || this.slide == 0 )
				{
					var slide_id = 'slide_' + slideList.length;
					this.slide = slideList.length - 1;
				}
				else
				{
					var slide_id = 'slide_' + this.slide;
					this.slide = this.slide - 1;
				}

				this.Toogle(slide_id, previous_slide_id);
			}
		}
	},

	Next: function()
	{
		if ( !this.lock )
		{
			this.lock = true;

			var slideList = document.getElementsByClassName('slide', $('slide-show'));

			if ( slideList && slideList.length )
			{
				var previous_slide		= this.slide;
				var previous_slide_id	= previous_slide != null ? 'slide_' + (previous_slide + 1) : null;

				if ( this.slide == null || this.slide == (slideList.length - 1) )
				{
					this.slide = 0;
					var slide_id = 'slide_1';
				}
				else
				{
					this.slide = this.slide + 1;
					var slide_id = 'slide_' + (this.slide + 1);
				}

				this.Toogle(slide_id, previous_slide_id);
			}
		}
	},

	Toogle: function(slide_id, previous_slide_id)
	{
		if ( previous_slide_id != null )
		{
			var oQueue = {};

			oQueue.position	= 'end';
			oQueue.scope	= 'slide-queue';

			// hide previous slide
			new Effect.toggle( previous_slide_id, 'appear', {
				queue: oQueue
			} );

			// show next slide
			new Effect.toggle( slide_id, 'appear', {
				queue: oQueue,
				afterFinish: this.EnableControls.bindAsEventListener(this.obj)
			} );
		}
		else
		{
			// show first slide
			new Effect.toggle( slide_id, 'appear', {
				afterFinish: this.EnableControls.bindAsEventListener(this.obj)
			} );

			$('slide-show-controls').show();
		}
	},

	EnableControls: function(slide_id, previous_slide_id)
	{
		this.lock = false;
	},

	DisableControls: function(slide_id, previous_slide_id)
	{
		this.lock = true;
	}
};


Event.observe(window, 'load', function() {
	if ( $('slide-show') )
	{
		oSlideShow = new SlideShow('slide-show');
	}
});
