/*
 * fadeSlider
 * based on fadeSlideShow v.2.0.0 from pascal bakorat
 *
 * @package fadeSlider
 * @author  pascal bajorat, maik mettenheimer
 * @since   2011-06-08
 *
 * http://www.pascal-bajorat.com
 */

jQuery.fn.fadeSlideShow = function(options) {
	return this.each(function(){
		settings = jQuery.extend({
     		width: 510,              // default width of the slideshow
     		height: 346,             // default height of the slideshow
			speed: 500,              // default animation transition speed
			interval: 8000,          // default interval between image change
			NextElement: 'fadeNext', // default id for next button
			NextElementText: '>>',   // default text for next button
			PrevElement: 'fadePrev', // default id for prev button
			PrevElementText: '<<',   // default text for prev button
			autoplay: true           // autoplay the slideshow
	 	}, options);

		// set style for wrapper element
		jQuery(this).css({
			width: settings.width,
			height: settings.height,
			position: 'relative',
			overflow: 'hidden'
		});

		// set styles for child element
		jQuery('> *',this).css({
			position: 'absolute',
			width: settings.width,
			height: settings.height
		});

		// count number of slides
		Slides = jQuery('> *', this).length;
		Slides = Slides - 1;
		ActSlide = Slides;
		// Set jQuery Slide short var
		jQslide = jQuery('> *', this);
		// save this
		fssThis = this;

		autoplay = function(){
			intval = setInterval(function(){
				jQslide.eq(ActSlide).fadeOut(settings.speed);

				if(ActSlide <= 0){
					jQslide.fadeIn(settings.speed);
					ActSlide = Slides;
				}else{
					ActSlide = ActSlide - 1;
				}
			}, settings.interval);

		}

		stopAutoplay = function(){
			clearInterval(intval);
			intval = false;
		}

		jumpTo = function(newIndex){
			if(newIndex < 0){newIndex = Slides;}
			else if(newIndex > Slides){newIndex = 0;}
			if( newIndex >= ActSlide ){
				jQuery('> *:lt('+(newIndex+1)+')', fssThis).fadeIn(settings.speed);
			}else if(newIndex <= ActSlide){
				jQuery('> *:gt('+newIndex+')', fssThis).fadeOut(settings.speed);
			}

			// set the active slide
			ActSlide = newIndex;

		}

		if(settings.NextElement){
			if(!jQuery('#'+settings.NextElement).css('display')){
				jQuery(this).after('<a href="#" id="'+settings.NextElement+'">'+settings.NextElementText+'<\/a>');
			}

			jQuery('#'+settings.NextElement).bind('click', function(){
				nextSlide = ActSlide-1;
				stopAutoplay();
				jumpTo(nextSlide);
				stopAutoplay(); // stop autoplay on click
				return false;
			});
		}

		if(settings.PrevElement){
			if(!jQuery('#'+settings.PrevElement).css('display')){
				jQuery(this).after('<a href="#" id="'+settings.PrevElement+'">'+settings.PrevElementText+'<\/a>');
			}

			jQuery('#'+settings.PrevElement).bind('click', function(){
				prevSlide = ActSlide+1;
				stopAutoplay();
				jumpTo(prevSlide);
				stopAutoplay(); // stop autoplay on click
				return false;
			});
		}

		// start autoplay or set it to false
		if(settings.autoplay){autoplay();}else{intval=false;}

		// stop autoplay on mousover
		/*
		jQuery(this).bind('mouseover', function(){
			stopAutoplay();
		});
		*/

	});
};

jQuery(document).ready(function(){
    jQuery('#slideshow').fadeSlideShow();
});

