/* JQuery Slideshow
	by Aaron Lozier 2008 (lozieraj-[at]-gmail.com)

	Dependencies:
	  * jQuery 1.2.x
	  * jquery.timers.js (http://jquery.offput.ca/every/)
 
	Usage:
	
	$('#slideshow').slideshow();
	
	Note: At this time it is required that all CSS/XHTML be handled outside the plugin.  Here is a code example:
	
	<div id="slideshow">
		<ul class="slideClass">
			<li><img src="image-1.jpg" alt="Slide 1" /></li>
			<li><img src="image-1.jpg" alt="Slide 1" /></li>
			<li><img src="image-1.jpg" alt="Slide 1" /></li>
		</ul>
		<ul class="slideButton">
			<li>1</li>
			<li>2</li>
			<li>3</li>
		</ul>
	</div>
	
	<style type="text/css">
		*{
			margin:0;
			padding:0;
		}
		#slideshow{
			position:relative;
			top:0px;
			left:0px;
		}
		.slideClass,.slideButton{
			list-style:none;
		}
		.slideClass li{
			position:absolute;
			top:0px;
			left:0px;
		}
		.slideButton{
			clear: both;
		}
		.slideButton li
		{
			float:left;
			margin: 0 5px 0 0;
		}	
	</style>
*/

(function(jQuery){
 jQuery.fn.slideshow = function(options) {
    
	var defaults = {
		slideDuration: 5000,			//in ms, time between slides
		fadeDuration: 'slow',			//in ms (or jQuery alias - e.g. slow, fast, etc) duration of fade 
		slidesClass: 'slideClass', 		//class of slides container
		buttonsClass: 'slideButton',	//class of buttons container
		nextClass: 'nextClass',			//class of "next" button
		prevClass: 'prevClass',			//class of "prev" button
		pauseClass: 'pauseClass',		//class of "pause" button
		startClass: 'startClass',		//class of "start" button
		reverseClass: 'reverseClass',	//class of "reverse" button
		topZIndex: 1000,				//z-index of top slide
		stayOn: false,					//stay on a particular slide (e.g. 1,2,3) if false, slideshow automatically animates
		stopOnSelect: true,				//stop slideshow if user presses controls
		direction: 1,					//direction: 1 forward, -1 backward
		transitionType: 'crossFade'		//crossFade only at this time
	};
  
	var curslide = 0;
	var prevslide = 0;	
	var num_slides = 0;
	var options = jQuery.extend(defaults, options);
    
  return this.each(function() {

		obj = jQuery(this);
		
		num_slides = jQuery('.'+ options.slidesClass).eq(0).children('ul').children('li').length;
		
		jQuery('.'+options.buttonsClass+' ul li a').eq(0).addClass('selected');
		
		jQuery('.'+ options.slidesClass).each(function(){
			var i = 0;

			jQuery(this).children('ul').children('li').each(function(){
				i++;
				jQuery(this).css('z-index',(options.topZIndex-i));
				if(i>1){
					jQuery(this).css('display','none');
				}
			});
		});
		
		if(options.stayOn){
			curslide = (options.stayOn-1);
			doSlide();
		} else {
			obj.everyTime(options.slideDuration, 'animateSlides', function advanceSlide() {
				moveSlide(options.direction);
			});
		}		

		function moveSlide(direction){
			curslide = curslide + direction;
			prevslide = curslide - direction;
			switch(direction){
				case 1:
					if(curslide==num_slides){
						curslide = 0;
						prevslide = (num_slides - 1);
					}
					break;
				case -1:
					if(curslide<0){
						curslide = (num_slides - 1);
						prevslide = 0;
					}
					break;
			}							
			doSlide();
		}
		
		jQuery('.'+options.prevClass).click(function(){
				moveSlide(-1);												 
		 });		
		jQuery('.'+options.nextClass).click(function(){
				moveSlide(1);												 
		 });	
		jQuery('.'+options.pauseClass).click(function(){
				obj.stopTime('animateSlides');											 
		 });
		jQuery('.'+options.startClass).click(function(){
			obj.everyTime(options.slideDuration, 'animateSlides', function advanceSlide() {
				moveSlide(options.direction);
			});											 
		 });		
		jQuery('.'+options.reverseClass).click(function(){
			options.direction = (options.direction * (-1));									 
		 });		
		
				
		jQuery('.'+options.buttonsClass+' ul li a').click(function(){
			if(options.stopOnSelect){
				obj.stopTime('animateSlides');
			}
			curslide = (jQuery('.'+options.buttonsClass+' ul li a').index(this));
			doSlide();
		});
		
		function doSlide(){
			jQuery('.curslide').html(curslide);
			jQuery('.prevslide').html(prevslide);
			jQuery('.numslides').html(num_slides);
			
			jQuery('.'+options.buttonsClass+' ul li a.selected').removeClass('selected');
			jQuery('.'+options.buttonsClass+' ul li a').eq(curslide).addClass('selected');
		
			jQuery('.'+ options.slidesClass).each(function(){
					switch(options.transitionType){
						case 'crossFade':
							jQuery(this).children('ul').children('li').eq(curslide).animate({opacity:'show'},options.fadeDuration);
							jQuery(this).children('ul').children('li').not(jQuery(this).children('ul').children('li').eq(curslide)).animate({opacity:'hide'},options.fadeDuration);
							break;
					}
			});
		}	
	
  });
 };
})(jQuery);
