/*
    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 = 9000;
		this.arrowClicked = 0;
	//	this.articleLink = "";
	//	this.slideInfoZone = "";
		this.lastLightboxIter = 0;

		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);
			element.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);
		element.appendChild(this.loadingElement);
		
		this.slideInfoZone = document.createElement('div');
		this.slideInfoZone.className = 'slideInfoZone';
		//this.articleLink.appendChild(this.slideInfoZone);
		element.appendChild(this.slideInfoZone);
		this.slideInfoZone.style.opacity = 0;

		this.doSlideShow(1);
	},
	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() {
	//alert("nextSlideShow");
		this.lastIter = this.currentIter;
		this.currentIter++;
		if (this.currentIter >= this.maxIter)
		{
			this.currentIter = 0;
			this.lastIter = this.maxIter - 1;
		}
		this.lastLightboxIter = this.currentIter;  //added
		this.slideShowInit = 0;
//		alert("NEXT lastIter=" + this.lastIter + " currentIter= " + this.currentIter + " lastLight " + this.lastLightboxIter);   
		this.doSlideShow.bind(this)(1);
	},
	doSlideShow: function(position) {
		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);
			}*/
			if (position == 1)
            {
                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);
                }
            } else if (position == 2){
                if (this.currentIter != this.maxIter - 1) {
                    this.slideElements[parseInt(this.currentIter)].setStyle('opacity',1);
                    this.slideElements[parseInt(this.lastIter)].currentOpacity.custom(1, 0);
                } else {
                    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);
                }
            }
			/*setTimeout(this.showInfoSlideShow.bind(this),1000);			
			setTimeout(this.hideInfoSlideShow.bind(this),this.slideShowDelay-1000);
			setTimeout(this.nextSlideShow.bind(this),this.slideShowDelay);*/
			if (this.arrowClicked == 1)
            {
            //clearTimeout(ab);  clearTimeout(ac);  clearTimeout(ad);
            setTimeout(this.showInfoSlideShow.bind(this),1000);
            this.arrowClicked = 0;
            //setTimeout(this.hideInfoSlideShow.bind(this),this.slideShowDelay+1000);
            //setTimeout(this.nextSlideShow.bind(this),this.slideShowDelay+2000);  //added to keep slideshow going after user clicks on next/prev
            } else {
            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.slideShowElement.removeChild(this.slideInfoZone);
		this.slideInfoZone = document.createElement('div');
		this.slideInfoZone.className = 'slideInfoZone';
		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.slideShowElement.appendChild(this.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]});
	},
	/*loadThumbnail: function(num) {
    //    setTimeout(this.hideInfoSlideShow.bind(this),10);
		setTimeout(this.pushedloadThumbnail(num).bind(this),500);
        this.arrowClicked = 1;
    },*/
	loadThumbnail: function(num) {	
	    
	    this.arrowClicked=1;    //added
	    setTimeout(this.hideInfoSlideShow.bind(this),10);	   
	    
	    if ( ((num>this.lastIter) && (this.lastLightboxIter<num)) ||
            ((this.lastIter==(this.maxIter-1)) && this.currentIter==0 && num>0 )	)    //first time, going forwards, lastIter will=3
	    {	        	        
	        if (num>0)
    	        this.lastIter = num-1; //this.currentIter;		
    	    else
    	        this.lastIter = this.maxIter-1;		
		    this.currentIter = num;
		    this.slideShowInit = 0;
    		this.lastLightboxIter = num;
//   			alert("ForwardS lastIter=" + this.lastIter + " currentIter= " + this.currentIter + " lastLight " + this.lastLightboxIter);   
            for(i=0;i<this.maxIter;i++)
		    {
			    this.slideElements[parseInt(i)].setStyle('opacity',0);			    
		    }
		    
	    	this.doSlideShow.bind(this)(1);			    		    			
		}
		else if (this.lastLightboxIter==num) 
		//|| (this.lastIter==num && this.lastIter!=(this.maxIter-1) ) )		//else if (this.lastLightboxIter==num)
		{
            //alert("stay lastIter=" + this.lastIter);  
            this.doSlideShow.bind(this)(3);
		}
		else
		{			    
		    if (this.currentIter-num==1)
		      this.lastIter = num + 1;		    
		   else
		        this.lastIter = this.currentIter;		   		    
		    this.currentIter = num;
//		    alert("backwards lastIter=" + this.lastIter + " currentIter=" + this.currentIter);   
		    this.slideShowInit = 0;
		    this.lastLightboxIter = num;
		    for(i=0;i<this.maxIter;i++)
		    {
		        if (i!=this.lastIter)
			        this.slideElements[parseInt(i)].setStyle('opacity',0);			    
		    }
		    this.doSlideShow.bind(this)(2);		  
		}		
	},
	goTo: function(num) {
		this.currentIter = num;
		if (num == 0) this.lastIter = this.maxIter-1;
		else this.lastIter = num-1;
		this.slideShowInit = 0;
		for(i=0;i<this.maxIter;i++)
		{
			this.slideElements[i].currentOpacity.setOpacity(0);
		}
		this.doSlideShow.bind(this)();
	}
};

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