/**************************************************************************
* Simple Javascript Rich Slideshow
*
* Changes slides out (crossfade)
* Scott Wespi (scott@darkstardesign.com)
*
* Requires Prototype / Scriptaculous
**************************************************************************/
var dsd_show = {
	_interval: 6, // time (in seconds) between transitions
	_effect_duration: .5, // total time (in seconds) transitioning
	
	_total_slides: 0,
	_index: 0,
	_last_index: 0,
	_timer: -1,
	_moving: false,
	
	container: 0,
	slide_toc: false,
	
	init: function(container, slide_toc) {
		dsd_show.container = $(container);
		
		
		// get slides
		dsd_show._total_slides = dsd_show.container.select('.slide').size();
		dsd_show._index = 0;
		dsd_show._last_slide = 0;
		dsd_show._moving = false;
		
		if (slide_toc) {
			dsd_show.slide_toc = slide_toc;
			
			dsd_show.slide_toc.update('');
			var li = 0;
			
			for (var i = 0, j = dsd_show._total_slides; i < j; ++i) {
				li = new Element('li');
				li.update(i + 1);
				li.show_index = i;
				li.onclick = function() { dsd_show.goto_slide($(this).show_index); };
				if (i == 0) {
					li.addClassName('current');
				}
				dsd_show.slide_toc.insert({bottom: li});
			}
		}
		
		if (dsd_show._total_slides > 1) {
			// hide everything besides the current slide
			dsd_show.container.select('.slide').each(function(s, i) {
				if (i != dsd_show._index) {
					s.hide();
				} else {
					s.show();
				}
			});
			
			// auto start				
			dsd_show._timer = window.setInterval(dsd_show._next_slide, dsd_show._interval * 1000);
		}
	},
	
	goto_slide: function(index) {
		window.clearInterval(dsd_show._timer);
		if (!dsd_show._moving) {
			dsd_show._moving = true;
			if (index != dsd_show._index) {
				dsd_show._last_index = dsd_show._index;
				dsd_show._index = index;
				dsd_show._cycle_slide();
				return true;
			}
			dsd_show._moving = false;
		}
		return false;
	},
	
	_next_slide: function() {
		if (!dsd_show._moving) {
			dsd_show._moving = true;
			dsd_show._last_index = dsd_show._index;
			dsd_show._index = (dsd_show._index + 1) % dsd_show._total_slides;
			dsd_show._cycle_slide();
		} else {
			window.clearInterval(dsd_show._timer);
		}
	},
	
	_cycle_slide: function() {
		if (dsd_show.slide_toc) {
			dsd_show.slide_toc.down('li', dsd_show._last_index).removeClassName('current');
			dsd_show.slide_toc.down('li', dsd_show._index).addClassName('current');
		}
		
		if (/MSIE\s8/.test(navigator.userAgent) || /MSIE\s7/.test(navigator.userAgent)) {
			// fade doesn't work in IE8, also looks kinda bad in IE7 (fading transparent PNGs show black behind any alpha transparency while opacity is less than 1)
			dsd_show.container.down('.slide', dsd_show._last_index).hide();
			dsd_show.container.down('.slide', dsd_show._index).show();
			dsd_show._moving = false;		
		} else {
			dsd_show.container.down('.slide', dsd_show._last_index).visualEffect('fade', { duration: dsd_show._effect_duration });
			dsd_show.container.down('.slide', dsd_show._index).visualEffect('appear', { duration: dsd_show._effect_duration, afterFinish: function() {
				dsd_show._moving = false;
			}});
		}
	}
};
