/**
 * Next Slideshow Plugin 
 * 
 * @author dan.rades
 * @lastmod 26.02.2008
 * 
 * Pluginul realizeaza un slideshow intre mai multe elemente(slides).
 * 
 * 
 */

(function($) {
	$.fn.nextSlideshow = function(o) {
		o = $.extend($.fn.nextSlideshow.defaults, o || {})
		return this.each(function() {
			this.options = o;

			this.slides = $('.slide',$(this));
			this.currentSlideIdx = 0;
			this.interval = 0;

			var _self = this;

			this.start = function() {
				$.fn.nextSlideshow.start(this);
			}
			
			this.stop = function() {
				clearInterval(this.interval);
			}
			
			this.jumpTo = function(i) {
				if (i < 0)	{
					i = 0;
				}

				if (i > (this.slides.length - 1)) {
					i = this.slides.length - 1
				}
				
				this.stop();
				var prevSlideIdx = this.currentSlideIdx;
				this.currentSlideIdx = i - 1;
				
				$.fn.nextSlideshow.run(_self,'next', prevSlideIdx);
			};
						
			$('.start',$(this)).click(function() {
				$.fn.nextSlideshow.run(_self);
				$.fn.nextSlideshow.start(_self);
			});	
			
			$('.stop',$(this)).click(function() {
				$.fn.nextSlideshow.stop(_self);
			});						
			
			$('.next',$(this)).click(function() {
				$.fn.nextSlideshow.run(_self,'next');
			});
			
			$('.prev',$(this)).click(function() {
				$.fn.nextSlideshow.run(_self,'previous');
			});			
						
			if (o.autostart == true) {
				$.fn.nextSlideshow.start(_self);
			}			

		});
	}

	$.fn.nextSlideshow.defaults = {		
		speed : 1800,		
		staticTime : 4000,
		autostart : false,
		callback : function() {}
	};

	$.fn.nextSlideshow.jumpTo = function(el, i) {

	};

	$.fn.nextSlideshow.start = function(el) {
		el.interval = setInterval(function() {
			$.fn.nextSlideshow.run(el);
		},el.options.staticTime);
	};

	$.fn.nextSlideshow.stop = function(el) {
		clearInterval(el.interval);
	};

	$.fn.nextSlideshow.run =  function (el, direction, previousSlideIdx) {
		var direction = direction || 'next';

		if (typeof arguments[2] != 'undefined') {
			previousSlideIdx = arguments[2];
		} else {
			previousSlideIdx = -1;
		}

		var c = (direction == 'next') ? 1 : -1;
		var idx = c + el.currentSlideIdx;
		
		if (idx < 0) {
			idx = el.slides.length - 1;
		}
		
		idx = (typeof el.slides[idx] != 'undefined') ? idx : 0;	
				
		el.currentSlideIdx = idx;
		if (previousSlideIdx == -1) {
			if (direction == 'next') {
				previousSlideIdx = (idx == 0) ? el.slides.length - 1 : (idx == el.slides.length) ? 0 : idx - 1;
			}
			else {
				previousSlideIdx = (idx == el.slides.length - 1) ? 0 : idx + 1;
			}
		} 

		var currentSlide  = $(el.slides[idx]);
		$(el.slides[previousSlideIdx]).fadeOut($.fn.nextSlideshow.defaults.speed);
		currentSlide.fadeIn($.fn.nextSlideshow.defaults.speed);	
		el.options.callback(idx);
	};
})(jQuery);