/*

    This file is part of JonDesign's SmoothSlideshow v2.0.



    JonDesign's SmoothSlideshow is free software; you can redistribute it and/or modify

    it under the terms of the GNU General Public License as published by

    the Free Software Foundation; either version 2 of the License, or

    (at your option) any later version.



    JonDesign's SmoothSlideshow is distributed in the hope that it will be useful,

    but WITHOUT ANY WARRANTY; without even the implied warranty of

    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

    GNU General Public License for more details.



    You should have received a copy of the GNU General Public License

    along with Foobar; if not, write to the Free Software

    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA



    Main Developer: Jonathan Schemoul (JonDesign: http://www.jondesign.net/)

    Contributed code by:

    - Christian Ehret (bugfix)

    - Simon Willison (addLoadEvent)

*/



// declaring the class

var timedSlideShow = Class.create();



// implementing the class

timedSlideShow.prototype = {

	initialize: function(element, data) {

		this.currentIter = 0;

		this.lastIter = 0;

		this.maxIter = 0;

		this.slideShowElement = element;

		this.slideShowData = data;

		this.slideShowInit = 1;

		this.slideElements = Array();

		this.slideShowDelay = 4500;

		this.articleLink = "";

		this.slideInfoZone = "";



		element.style.display="block";



		this.articleLink = document.createElement('a');

		this.articleLink.className = 'global';

		element.appendChild(this.articleLink);

		this.articleLink.href = "";



		this.maxIter = data.length;

		for(i=0;i<data.length;i++)

		{

			var currentImg = document.createElement('div');

			currentImg.className = "slideElement";

			currentImg.style.position="absolute";

			currentImg.style.left="0px";

			currentImg.style.top="0px";

			currentImg.style.margin="0px";

			currentImg.style.border="0px";

			currentImg.style.backgroundImage="url('" + data[i][0] + "')";

			currentImg.style.backgroundPosition="center center";



			this.articleLink.appendChild(currentImg);

			currentImg.currentOpacity = new fx.Opacity(currentImg, {duration: 400});

			currentImg.setStyle('opacity',0);

			this.slideElements[parseInt(i)] = currentImg;

		}

		

		this.loadingElement = document.createElement('div');

		this.loadingElement.className = 'loadingElement';

		this.articleLink.appendChild(this.loadingElement);

		

		this.slideInfoZone = document.createElement('div');

		this.slideInfoZone.className = 'slideInfoZone';

		this.articleLink.appendChild(this.slideInfoZone);

		this.slideInfoZone.style.opacity = 0;



		this.doSlideShow();

	},

	destroySlideShow: function(element) {

		var myClassName = element.className;

		var newElement = document.createElement('div');

		newElement.className = myClassName;

		element.parentNode.replaceChild(newElement, element);

	},

	startSlideShow: function() {

		this.loadingElement.style.display = "none";

		this.lastIter = this.maxIter - 1;

		this.currentIter = 0;

		this.slideShowInit = 0;

		this.slideElements[parseInt(this.currentIter)].setStyle('opacity', 1);

		setTimeout(this.showInfoSlideShow.bind(this),1000);

		setTimeout(this.hideInfoSlideShow.bind(this),this.slideShowDelay-1000);

		setTimeout(this.nextSlideShow.bind(this),this.slideShowDelay);

	},

	nextSlideShow: function() {

		this.lastIter = this.currentIter;

		this.currentIter++;

		if (this.currentIter >= this.maxIter)

		{

			this.currentIter = 0;

			this.lastIter = this.maxIter - 1;

		}

		this.slideShowInit = 0;

		this.doSlideShow.bind(this)();

	},

	doSlideShow: function() {

		if (this.slideShowInit == 1)

		{

			imgPreloader = new Image();

			// once image is preloaded, start slideshow

			imgPreloader.onload=function(){

				setTimeout(this.startSlideShow.bind(this),10);

			}.bind(this);

			imgPreloader.src = this.slideShowData[0][0];

		} else {

			if (this.currentIter != 0) {

				this.slideElements[parseInt(this.currentIter)].currentOpacity.options.onComplete = function() {

					this.slideElements[parseInt(this.lastIter)].setStyle('opacity',0);

				}.bind(this);

				this.slideElements[parseInt(this.currentIter)].currentOpacity.custom(0, 1);

			} else {

				this.slideElements[parseInt(this.currentIter)].setStyle('opacity',1);

				this.slideElements[parseInt(this.lastIter)].currentOpacity.custom(1, 0);

			}

			setTimeout(this.showInfoSlideShow.bind(this),1000);

			setTimeout(this.hideInfoSlideShow.bind(this),this.slideShowDelay-1000);

			setTimeout(this.nextSlideShow.bind(this),this.slideShowDelay);

		}

	},

	showInfoSlideShow: function() {

		this.articleLink.removeChild(this.slideInfoZone);

		this.slideInfoZone = document.createElement('div');

		this.slideInfoZone.styles = new fx.Styles(this.slideInfoZone);

		this.slideInfoZone.setStyle('opacity',0);

		var slideInfoZoneTitle = document.createElement('h2');

		slideInfoZoneTitle.innerHTML = this.slideShowData[this.currentIter][2]

		this.slideInfoZone.appendChild(slideInfoZoneTitle);

		var slideInfoZoneDescription = document.createElement('p');

		slideInfoZoneDescription.innerHTML = this.slideShowData[this.currentIter][3];

		this.slideInfoZone.appendChild(slideInfoZoneDescription);

		this.articleLink.appendChild(this.slideInfoZone);

		this.articleLink.href = this.slideShowData[this.currentIter][1];

		this.slideInfoZone.className = 'slideInfoZone';

		this.slideInfoZone.normalHeight = this.slideInfoZone.getStyle('height', true).toInt();

		this.slideInfoZone.styles.custom({'opacity': [0, 0.7], 'height': [0, this.slideInfoZone.normalHeight]});

	},

	hideInfoSlideShow: function() {

		this.slideInfoZone.styles.custom({'opacity': [0.7, 0]});

	}

};



function initTimedSlideShow(element, data) {

	var slideshow = new timedSlideShow(element, data);

}



function addLoadEvent(func) {

	var oldonload = window.onload;

	if (typeof window.onload != 'function') {

		window.onload = func;

	} else {

		window.onload = function() {

			oldonload();

			func();

		}

	}

}
