﻿/**
*	Basic Slideshow App
*	
*	Plagerised from Tom Doyle by Isotope Communications Ltd, Dec 2008
*	http://www.tomdoyletalk.com/2008/10/28/simple-image-gallery-slideshow-with-scriptaculous-and-prototype/
*	
*	Published [16/12/08]:
*	http://www.icommunicate.co.uk/articles/all/simple_slide_show_for_prototype_scriptaculous_38/	
*
*	Changes: Basically made it an object so that you can run multiple instances and so that
*			 it doesn't get interfered with by other scripts on the page.
*	
*			 Have also added a few things, like "Captions" and the option of changing the
*			 effects..
*
*	Example:
*			Event.observe(window, 'load', function(){
*				oMySlides = new iSlideShow({
*					autostart 	: true		// optional, boolean (default:true)
*					start		: 0,	 	// optional, slides[start] (default:0) 
*					wait 		: 4000, 	// optional, milliseconds (default:4s)
*					slides 		: [
*						'image-div-a', 
*						'image-div-b', 
*						'image-div-c', 
*						'image-div-d' 
*					],
*					counter		: 'counter-div-id', // optional...
*					caption 	: 'caption-div-id', // optional... 
*					playButton	: 'PlayButton', 	// optional (default:playButton)
*					pauseButton	: 'PauseButton', 	// optional (default:PauseButton)
*				});
*				oMySlides.startSlideShow();
*			});
*
*			To start the slideshow:
*				oMySlides.startSlideShow();
*
*			To skip forward, back, stop:
*				oMySlides.goNext();
*				oMySlides.goPrevious();
*				oMySlides.stop();
*/

var iSlideShow = new Class.create();

iSlideShow.prototype = {

	initialize: function(oArgs) {
		this.wait = oArgs.wait ? oArgs.wait : 4000;
		this.start = oArgs.start ? oArgs.start : 0;
		this.duration = oArgs.duration ? oArgs.duration : 0.5;
		this.autostart = (typeof (oArgs.autostart) == 'undefined') ? true : oArgs.autostart;
		this.slides = oArgs.slides;
		this.counter = oArgs.counter;
		this.caption = oArgs.caption;
		this.playButton = oArgs.playButton ? oArgs.playButton : 'PlayButton';
		this.pauseButton = oArgs.pauseButton ? oArgs.pauseButton : 'PauseButton';
		this.iImageId = this.start;
		if (this.slides) {
			this.numOfImages = this.slides.length;
			if (!this.numOfImages) {
				alert('No slides?');
			}
		}
		if (this.autostart) {
			this.startSlideShow();
		}
	},

	// The Fade Function
	swapImage: function(x, y) {
		$(this.slides[x]) && $(this.slides[x]).appear({ duration: this.duration });
		$(this.slides[y]) && $(this.slides[y]).fade({ duration: this.duration });
	},

	// the onload event handler that starts the fading.
	startSlideShow: function() {
	
		this.play = setInterval(this.play.bind(this), this.wait);
		/*
		$(this.playButton).hide();
		$(this.pauseButton).appear({ duration: 0 });
		*/
		this.updatecounter();

	},

	play: function() {

		var imageShow, imageHide;

		imageShow = this.iImageId + 1;
		imageHide = this.iImageId;

		if (imageShow == this.numOfImages) {
			this.swapImage(0, imageHide);
			this.iImageId = 0;
		} else {
			this.swapImage(imageShow, imageHide);
			this.iImageId++;
		}

		this.textIn = this.iImageId + 1 + ' of ' + this.numOfImages;
		this.updatecounter();
	},

	stop: function() {
		clearInterval(this.play);
		$(this.playButton).appear({ duration: 0 });
		$(this.pauseButton).hide();
	},

	goto: function(nummer) {
		clearInterval(this.play);
		if (this.iImageId != nummer) {
			this.swapImage(nummer, this.iImageId);
			this.iImageId = nummer;
		}
	},

	go: function() {
		this.play = setInterval(iSlideShow.prototype.play.bind(this), this.wait);
	},

	goNext: function() {
		clearInterval(this.play);
		$(this.playButton).appear({ duration: 0 });
		$(this.pauseButton).hide();

		var imageShow, imageHide;

		imageShow = this.iImageId + 1;
		imageHide = this.iImageId;

		if (imageShow == this.numOfImages) {
			this.swapImage(0, imageHide);
			this.iImageId = 0;
		} else {
			this.swapImage(imageShow, imageHide);
			this.iImageId++;
		}

		this.updatecounter();
	},

	goPrevious: function() {
		clearInterval(this.play);
		$(this.playButton).appear({ duration: 0 });
		$(this.pauseButton).hide();

		var imageShow, imageHide;

		imageShow = this.iImageId - 1;
		imageHide = this.iImageId;

		if (this.iImageId == 0) {
			this.swapImage(this.numOfImages - 1, imageHide);
			this.iImageId = this.numOfImages - 1;

			//alert(NumOfImages-1 + ' and ' + imageHide + ' i=' + i)

		} else {
			this.swapImage(imageShow, imageHide);
			this.iImageId--;

			//alert(imageShow + ' and ' + imageHide)
		}

		this.updatecounter();
	},

	updatecounter: function() {
		var textIn = this.iImageId + 1 + ' of ' + this.numOfImages;
		$(this.counter) && ($(this.counter).innerHTML = textIn);
		if ($(this.caption) && (oNewCaption = $(this.slides[this.iImageId]).down('.image-caption'))) {
			$(this.caption).innerHTML = oNewCaption.innerHTML;
		}
	}
}

