/*
	Javascript Document
	Document Name: slideshow.js
	
	Description : This is the main JavaScript functionality to the browser slideshows on the site
		
	Author: Fuse Developments, Inc. Giancarlo Gomez
*/

// Configuration
var SlideShow = Object.extend({
	delay:4,
	fadeDuration:1,
	slideshowTimeout:null,
	paused:false,
	imageArray:new Array(),
	currentImage:1,
	currentSlide:1,
	buttons:new Array(),
	isPlaying:false,
	theSlides:null
});



function startSlideShow(){
	
	var ss = SlideShow;
	
	// set up the images
	ss.image1 = $('image1');
	ss.image2 = $('image2');
	
	// get the navigation buttons so we may update which image is being showed 
	ss.buttons = $$('#slideshowButtons a');
	
	if (ss.buttons.length > 0){
		ss.buttons[1].className='active';	
	}
	
	ss.slideShowTimeout = window.setTimeout(nextSlide,ss.delay*1000);
			
}

function nextSlide(){
	
	var ss = SlideShow;
	
	ss.isPlaying=true;
	
	//consoleDump(ss.currentImage);
	
	if (ss.currentImage == 1){
		// we fade top image
		new Effect.Opacity(ss.image1,{from:1,to:0,duration:ss.fadeDuration,afterFinish:nextSlideFinished});
		
	}else{
		// we fade lower image
		new Effect.Opacity(ss.image2,{from:1,to:0,duration:ss.fadeDuration,afterFinish:nextSlideFinished});
		
	}
	
}

function nextSlideFinished(){
	
	var ss = SlideShow;
	var nextImage
	
	if (ss.currentImage == 1){
		ss.currentImage=2;
		nextImage = ss.image1;
	}else{		
		ss.currentImage=1;
		nextImage = ss.image2;
	}
	
	ss.image1.toggleClassName('current');
	ss.image1.toggleClassName('next');
	ss.image2.toggleClassName('current');
	ss.image2.toggleClassName('next');
	
	ss.isPlaying=false;
	
	ss.currentSlide++;
	
	// consoleDump('the current slide is ' + ss.currentSlide);
	
	// here we manage the button settings
	if (ss.buttons.length > 0){
		// iterate thru each link
		ss.buttons.each(function(s,index){
			// first we skip the first one as it is the toggle button
			if (index>0){
				if (index == ss.currentSlide || ss.currenSlide == 0){
					//consoleDump('the active slide is ' + index)
					s.addClassName('active');	
				}else{
					s.removeClassName('active');
				}
				//consoleDump(index);
			}
		});
	}
	
	if (ss.currentSlide >= ss.imageArray.length) ss.currentSlide=0;
	
	var imgPreloader = new Image();
        
    // once image is preloaded, we can go ahead and continue to call the next slide
	imgPreloader.onload = (function(){
    	nextImage.src = ss.imageArray[ss.currentSlide][0];
    	nextImage.alt = ss.imageArray[ss.currentSlide][1];
		nextImage.setOpacity(1);
		// do not set a timeout if we are paused
		if (!ss.paused){
			ss.slideShowTimeout = window.setTimeout(nextSlide,ss.delay*1000);
		}
		//consoleDump('image loaded')
    });
	
    
	imgPreloader.src = ss.imageArray[ss.currentSlide][0];
		
}

function toggleSlideShow(){
	
	// cancel out any text selections (focus rectangles)
	document.body.focus();
	
	var ss = SlideShow;
	
	if (ss.paused){
		// restart animation
		ss.paused=false;
		// start the timer to go to the next slide after X seconds
		ss.slideShowTimeout = window.setTimeout(nextSlide, 0);
	}else{
		// cancel any pending transition
		if (ss.slideShowTimeout != null) window.clearTimeout(ss.slideShowTimeout);
		ss.slideShowTimeout = null;
		// pause animation
		ss.paused=true;	
	}
	
	ss.buttons[0].toggleClassName('paused');
}

function jumpToSlide(index){	
	
	//alert("Jumping to Slide");
	var ss = SlideShow;
	var nextImage;
	
	if (ss.isPlaying) return;
	if (ss.currentSlide==index) return;
	
	// cancel any pending transition
	if (ss.slideShowTimeout != null) window.clearTimeout(ss.slideShowTimeout);
	ss.slideShowTimeout = null;
		
	if (ss.currentImage == 1){
		nextImage = ss.image2;
	}else{		
		nextImage = ss.image1;
	}
	
	ss.currentSlide=index-1;
	
	nextImage.src = ss.imageArray[index-1][0];
	nextImage.alt = ss.imageArray[index-1][1];
	nextImage.setOpacity(1);
	nextSlide();
	consoleDump('i am jumping to slide ' + index);
	
}

function addImage(image,alt){
	
	var slides = SlideShow.imageArray;	
	slides[slides.length] = new Array(image,alt);
	
	//consoleDump(slides.length);
}