// Slideshow
// Requires Yahoo event and anim
var Slideshow = function(params) {

	// Setup variables
	var slides = params['slides'];
	var linkContainer = params['linkContainer'];
	var delay = params['delay'];
	if(!delay) {
		delay = 10000;	
	}
	var timer = null;
	var currentSlideNo = -1;
	var animOpen = new YAHOO.util.Anim('', { opacity: { from: 0, to: 1 } }, .75);
	var animClose = new YAHOO.util.Anim('', { opacity: { from: 1, to: 0 } }, .75);
	
	// Setup function
	this.setup = function() {
		
		for(var i = 0; i < slides.length; i++) {
			var curSlide = document.getElementById(slides[i]['slide']);
			curSlide.style.visibility = 'hidden';
			curSlide.style.opacity = 0;
			curSlide.style.filter = 'alpha(opacity=0)';
		}
		var links = document.getElementById(linkContainer).getElementsByTagName('a');
		for(var i = 0; i < links.length; ++i) {
			YAHOO.util.Event.addListener(links[i], 'mouseover', this.handleUserClick, this);
		}
		this.start();
	}
	
	// Start the slideshow
	this.start = function() {
		// Set the first slide and start looping
		this.changeSlide(slides[0].slide);
		var self = this;
		var rotate = function() {
			self.changeSlide(1);
		}
		timer = setInterval(rotate, delay);
	};
	
	// Set/show slide
	// 1 = go to next slide
	// -1 = previous slide
	// any string will set to slide of that ID
	this.changeSlide = function(idOrDirection) {
		var newSlideNo = null;
		if(idOrDirection == 1) {
			var newNo = currentSlideNo + 1;
			newSlideNo = (newNo >= slides.length) ? 0 : newNo;
		}
		else if(idOrDirection == -1) {
			var newNo = currentSlideNo - 1;
			newSlideNo = (newNo < 0) ? slides.length - 1 : newNo;
		}
		else {
			for(var i = 0; i < slides.length; ++i) {
				if(slides[i].slide == idOrDirection) {
					newSlideNo = i;
					break;
				}
			}
		}
		if(currentSlideNo == newSlideNo) {
			return;	
		}
		// Hide the old, display the new slide/link
		if(currentSlideNo != -1) {
			var closingSlide = document.getElementById(slides[currentSlideNo].slide);
			closingSlide.style.visibility = 'hidden';
			closingSlide.style.opacity = 0;
			closingSlide.style.filter = 'alpha(opacity=0)';
			var linkClass = document.getElementById(slides[currentSlideNo].button);
			linkClass.className = linkClass.className.replace(/\s?active/, '');
		}
		var openingSlide = document.getElementById(slides[newSlideNo].slide);
		openingSlide.style.visibility = 'visible';

		animOpen.setEl(document.getElementById(slides[newSlideNo].slide));
		animOpen.animate();
		var linkClass = document.getElementById(slides[newSlideNo].button);
		linkClass.className = linkClass.className + ' active';
		currentSlideNo = newSlideNo;
	};

	// User click intervention
	this.handleUserClick = function(evt, slideShow) {
		for(var i = 0; i < slides.length; ++i) {
			if(slides[i].button == this.id) {
				slideShow.changeSlide(slides[i].slide);
				break;
			}
		}
		slideShow.stop();
	};

	// Stop slideshow
	this.stop = function() {
		clearInterval(timer);
	};
	
	// Reset animation
	this.reset = function() {
		currentSlideNo = -1;
	};
	
	// Initialize show
	this.init = function() {
		YAHOO.util.Event.addListener(window, 'load', this.setup, this, true);
	}

};
