// config defaults
var slideWidth = 0;
var slideHeight = 0;
var slideSpeed = 600;
var slideTime = 3000;
var autoplay = true;
var displayCaption = true;
var captionStyle = 'ALT';
var navStyle = 'text';
var transitionStyle = 'slide';

// initialise
function slideshowInit( ) {

var thumbWidth = 60;
var thumbHeight = 40;
var numSlides = 0;
var currentSlide = 1;
var navHTML = '';
var navHTMLPrev = '';
var navHTMLNext = '';
var navHTMLGoStop = '';

	// reposition slideshow
	$slideshow = $('#slideshow');
	if( $slideshow.length > 0 ){
		var slideshowHTML = $('#bgSlideshow');
		$('#bgSlideshow').remove();
		$slideshow.replaceWith( slideshowHTML );
		slideWidth = parseInt( $slideshow.attr( 'width' ) );
		slideHeight = parseInt( $slideshow.attr( 'height' ) );
		transitionStyle = $slideshow.attr( 'lang' );
	}

	// set slidshow wrapper and slide wrapper height and width.
	$('.slideshowWrap' ).css( 'height', slideHeight ).css( 'width', slideWidth );
	$('.slideWrap').css( 'height', slideHeight ).css( 'width', slideWidth );
	
	// get slidewrap, add ID + navigation buttons, get total slides.
	navHTMLPrev = '<a href="#" class="btnNavStep" id="btnPrev">PREV</a>';
	navHTMLNext = '<a href="#" class="btnNavStep" id="btnNext">NEXT</a>';
	navHTMLGoStop = '<a href="#" class="btnNavStep" id="btnGoStop">PLAY</a>';
	goHTML = 'PLAY';
	stopHTML = 'STOP';

	var captionHeight = 0;

	$('.slideWrap').each( function() {
		numSlides++;
		$(this).attr('id', 'slide-' + numSlides );
		if( displayCaption ) {
			captionHead = $(this).find('img').attr('alt');
			$(this).append( '<div id="slideCaption" class="slideCaption"><h3 class="slideH3">' + captionHead + '</h3></div>' );
		}
		
		// build navigation
		navHTML = navHTML + '<a href="#" class="btnNav" id="btn-' + numSlides + '" rel="' + numSlides + '">' + numSlides + '</a>';
		
		$thisCaption = $('.slideCaption', this);
		if( $thisCaption.outerHeight() > captionHeight ) captionHeight = $thisCaption.outerHeight();
		
		if( numSlides > 1 ) {  // shift all slides after number 1 out of bounds or display none for fade option.
			switch ( transitionStyle ) {
				case 'slide':
					$(this).css( 'left', slideWidth );
					break;
				case 'fade':
					$(this).css( {opacity: '0', display: 'none'} );
					break;
			}
		}
	} );
	
	// put navigation buttons into div and set current slide.
	$('#slideshowNav').html( navHTMLGoStop + navHTMLPrev + navHTML + navHTMLNext );
	$('#slideshowNav').css( 'width', slideWidth );
	
	$('#btn-' + currentSlide).addClass( 'currentSlide' );
	
	// set position of navigation
	var navHeight = document.getElementById('slideshowNav').clientHeight;
	$('#slideshowNav').css( 'top', slideHeight - navHeight );
	
	if( displayCaption ) $('.slideCaption').css( 'top', ( slideHeight - navHeight - captionHeight ) );
	
	// if autoplay is on set timer and doslide/fade forward.
	if( autoplay ) {
		var play = true;
		$('#btnGoStop').html( stopHTML );
		slideIntervalID = window.setInterval( function() {
			currentSlide = doTransition( 'forward', slideWidth, slideSpeed, currentSlide, numSlides, transitionStyle );
		}, slideTime );
	}
	
	// nav button click function. goto slide and stop timer.
	$('.btnNav').each( function(){
		$(this).bind( 'click', function() {
			slideID = parseInt($(this).attr( 'rel' ));
			if( !(slideID == currentSlide) ){ currentSlide = doTransition( 'goto', slideWidth, slideSpeed, currentSlide, numSlides, transitionStyle ); }
			if( play ){	$('#btnGoStop').html( goHTML ); clearInterval( slideIntervalID ); play = false;	}
			return false;
		} );
	} );
	
	// next button click function and stop slideshow
	$('#btnNext').bind( 'click', function() {
		if( play ){	$('#btnGoStop').html( goHTML );	clearInterval( slideIntervalID ); play = false;	}
		currentSlide = doTransition( 'forward', slideWidth, slideSpeed, currentSlide, numSlides, transitionStyle );
		return false;
	} );
	
	// previous button click function and stop slideshow
	$('#btnPrev').bind( 'click', function() {
		if( play ){	$('#btnGoStop').html( goHTML );	clearInterval( slideIntervalID ); play = false;	}
		currentSlide = doTransition( 'backward', slideWidth, slideSpeed, currentSlide, numSlides, transitionStyle );
		return false;
	} );
	
	// Play Stop click function
	$('#btnGoStop').bind( 'click', function() {
		if( play ){
			$(this).html( goHTML );
			clearInterval( slideIntervalID );
			play = false;
		} else {
			$(this).html( stopHTML );
			currentSlide = doTransition( 'forward', slideWidth, slideSpeed, currentSlide, numSlides, transitionStyle );
			slideIntervalID = window.setInterval( function() {
				currentSlide = doTransition( 'forward', slideWidth, slideSpeed, currentSlide, numSlides, transitionStyle );
			}, slideTime );
			play = true;
		}
		return false;
	} );
	
	// hover - nav menu show.
	$('#slideshowWrap').hover( function() {
		$('#slideshowNav').animate( { 'opacity' : '1' }, {queue: false, duration: slideSpeed} );
		if( displayCaption ) {
			$('.slideCaption').animate( { 'top' : (slideHeight - navHeight - captionHeight) }, {queue: false, duration: slideSpeed} );
		}
	}, function() {
		$('#slideshowNav').animate( { 'opacity' : '0' }, {queue: false, duration: slideSpeed} );
		if( displayCaption ){
			$('.slideCaption').animate( { 'top' : (slideHeight - captionHeight) }, {queue: false, duration: slideSpeed} );
		}
	} );
	
	$('#slideshowNav').click( function() { return false; } );

	// css cleanup
	$('.btnNav, #btnGoStop, #btnPrev, #btnNext', '#content div' ).css( { color: '#fdfdfd', textDecoration: 'none' } );
	$('img', '#bgSlideshow').css( {margin: '0'} );
	$('.slideH3').css( { textShadow: '0 0 2px #000000' } );

}

// slide/fade forward, backward or goto. shift current button class.	
function doTransition( direction, slideWidth, slideSpeed, current, numSlides, transitionStyle ) {
	
switch ( transitionStyle ){
	
	case 'slide':	
		if( direction == 'forward' ) {
			slideID = current + 1; if ( slideID > numSlides ) { slideID = 1; }
			$('#slide-' + current).animate( {'left' : -slideWidth }, {queue: false, duration: slideSpeed} );
			$('#slide-' + slideID).css( 'left', slideWidth ).animate( {'left' : '0px'}, {queue: false, duration: slideSpeed} );
		} else if( direction == 'backward' ) {
			slideID = current - 1; if ( slideID < 1 ) { slideID = numSlides; }
			$('#slide-' + current).animate( {'left' : slideWidth }, {queue: false, duration: slideSpeed} );
			$('#slide-' + slideID).css( 'left', -slideWidth ).animate( {'left' : '0px'}, {queue: false, duration: slideSpeed} );
		} else if( direction == 'goto' ) {
			if( slideID > current ) {
				$('#slide-' + current).animate( {'left' : -slideWidth }, {queue: false, duration: slideSpeed} );
				$('#slide-' + slideID).css( 'left', slideWidth ).animate( {'left' : '0px'}, {queue: false, duration: slideSpeed} );
			} else {
				$('#slide-' + current).animate( {'left' : slideWidth }, {queue: false, duration: slideSpeed} );
				$('#slide-' + slideID).css( 'left', -slideWidth ).animate( {'left' : '0px'}, {queue: false, duration: slideSpeed} );
			}
		}
		break;
		
	case 'fade':
		if( direction == 'forward' ) {
			slideID = current + 1; if ( slideID > numSlides ) { slideID = 1; }	
		} else if( direction == 'backward' ) {
			slideID = current - 1; if ( slideID < 1 ) { slideID = numSlides; }	
		}
		if( slideID != current ) {
			$('#slide-' + current).animate( { 'opacity' : '0' }, {queue: false, duration: slideSpeed, complete: function(){ $(this).css( 'display', 'none' ) } } );
			$('#slide-' + slideID).css( 'display', 'block' ).animate( { 'opacity' : '1' }, {queue: false, duration: slideSpeed} );
		}
		break;
	
	}

	$('.btnNav').removeClass( 'currentSlide' );	$('#btn-' + slideID).addClass( 'currentSlide' );
	return slideID;
}
