﻿// JScript File
/*
        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 comboSlideShow = Class.create();

// implementing the class
comboSlideShow.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.lastLightboxIter = 0;
        element.style.display="block";
        element.style.backgroundImage="url('/images/about/slideshow/slideshow-bg.png')";
        element.style.backgroundColor="#afd4ee"; //Background color for left/right buttons

        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="30px";  //currentImg.style.top="0px";
            currentImg.style.margin="0px";
            currentImg.style.border="0px";
            currentImg.style.backgroundImage="url('" + data[i][0] + "')";
            currentImg.style.backgroundPosition="center center";

            element.appendChild(currentImg);
            currentImg.currentOpacity = new fx.Opacity(currentImg, {duration:500});
            currentImg.setStyle('opacity',0);
            this.slideElements[parseInt(i)] = currentImg;
        }
        if (data.length>1)
        {
            var leftArrow = document.createElement('a');
            leftArrow.className = 'left';
            leftArrow.onclick = this.pushPrevSlideShow.bind(this);
            leftArrow.setAttribute("title", "Previous Slide");
            element.appendChild(leftArrow);

            var rightArrow = document.createElement('a');
            rightArrow.className = 'right';
            rightArrow.onclick = this.pushNextSlideShow.bind(this);
            rightArrow.setAttribute("title", "Next Slide");
            element.appendChild(rightArrow);
        }
        currentImg.currentOpacity = new fx.Opacity(currentImg, {duration:400});
        currentImg.setStyle('opacity',0);
        
        this.loadingElement = document.createElement('div');        //added this block
		this.loadingElement.className = 'loadingElement';
		element.appendChild(this.loadingElement);
		
        this.slideInfoZone = document.createElement('div');
        this.slideInfoZone.className = 'slideInfoZone';
        element.appendChild(this.slideInfoZone);
        this.slideInfoZone.style.opacity = 0;
      
        this.doSlideShow(1);
    },
    pushNextSlideShow: function() {
        setTimeout(this.hideInfoSlideShow.bind(this),10);
        setTimeout(this.nextSlideShow.bind(this),500);
        this.arrowClicked = 1;
    },
    pushPrevSlideShow: function() {
        setTimeout(this.hideInfoSlideShow.bind(this),10);
        setTimeout(this.prevSlideShow.bind(this),500);
        this.arrowClicked = 1;
    },
    startSlideShow: function() {
    this.loadingElement.style.display = "none";     //added
        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.lastLightboxIter = this.currentIter;
        this.slideShowInit = 0;
        
//        alert("nextSlideShow lastIter=" + this.lastIter + " currentIter=" + this.currentIter);   
        this.doSlideShow.bind(this)(1);
    },
    prevSlideShow: function() {
        this.lastIter = this.currentIter;
        this.currentIter--;
        if (this.currentIter <= -1)
        {
            this.currentIter = this.maxIter - 1;
            this.lastIter = 0;
        }
        this.lastLightboxIter = this.currentIter;
        this.slideShowInit = 0;
        this.doSlideShow.bind(this)(2);
    },
    doSlideShow: function(position) {
        if (this.slideShowInit == 1)
        {                
            imgPreloader = new Image();                     //added most of this block except setTimeout
			// 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 (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);
                }
            }
            if (this.arrowClicked == 1)
            {
                setTimeout(this.showInfoSlideShow.bind(this),1000);
                this.arrowClicked = 0;
     //       setTimeout(this.hideInfoSlideShow.bind(this),this.slideShowDelay-1000);
       //     setTimeout(this.nextSlideShow.bind(this),this.slideShowDelay);  //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.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 articleLink = document.createElement('a');
        this.slideInfoZone.appendChild(articleLink);
        articleLink.innerHTML = 'View Property'; //change this to whatever nice link text you want.
        articleLink.href = this.slideShowData[this.currentIter][1];*/

        var slideInfoZoneDescription = document.createElement('p');
        slideInfoZoneDescription.innerHTML = this.slideShowData[this.currentIter][3];
        this.slideInfoZone.appendChild(slideInfoZoneDescription);
        this.slideShowElement.appendChild(this.slideInfoZone);
        this.slideInfoZone.normalHeight = this.slideInfoZone.getStyle('height', true).toInt(); //added
		this.slideInfoZone.styles.custom({'opacity': [0, 0.7], 'height': [0, this.slideInfoZone.normalHeight]}); //changed
        //this.slideInfoZone.styles.custom({'opacity': [0, 0.7], 'height': [0,this.slideInfoZone.getStyle('height', true)]});
    },
    hideInfoSlideShow: function() {
        this.slideInfoZone.styles.custom({'opacity': [0.7, 0]});
    },
    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;
		    
		    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)
	    {
	          this.doSlideShow.bind(this)(3);
         //   alert("stay lastIter=" + this.lastIter);  
	    }
	    else
	    {
	        if (this.currentIter-num==1)
	            this.lastIter = num + 1;		    
	        else
	            this.lastIter = this.currentIter;		   
	        //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.arrowClicked = 1;
		this.doSlideShow.bind(this)();
	}
};

function initSlideShow(element, data) {
    var slideshow = new comboSlideShow(element, data);
    return slideshow;
}

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
         window.onload = func;
    } else {
        window.onload = function() {
            oldonload();
            func();
        }
    }
} 
