/**
 * promoslide plugin by ayoke akatadke
 *
 * Options:
 *
 * autoloop				Автоматическая смена, default
 * interval				Пауза между слайдами
 * fade					Скорость перехода между слайдами
 * idprefix				Префикс для автоматически проставляемых id
 * startid				Первый id
 * activeclass			Класс активного слайда
 * lastactiveclass		Класс предыдущего активного слайда
 * pager				Сгенерировать переключатель
 * pagerclass			Класс переключателя
 * pageractiveclass		Класс активного слайда в переключателе
 *
 */

(function($) {
	var defaults = {
		'autoloop': true,
		'interval': 5000,
		'fade': 500,
		'idprefix': 'b-promo-slide-',
		'startid': 1,
		'activeclass': 'b-promo-active',
		'lastactiveclass': 'b-promo-last-active',
		'pager': true,
		'pagerclass': 'b-promo-pager',
		'pageractiveclass': 'active'
	};
	
	$.fn.promoslide = function(options) {
		options = $.extend({}, defaults, options);

		return this.each(function(){
			var $slshow = $(this);
			
			$slshow.find(':first').addClass(options.activeclass);
			
			var slides = $slshow.children();
			
			if (slides.length > 1) {
				if (options.pager) {
					var $pager = $('<div />').addClass(options.pagerclass);
				}
				
				var loop;
				
				slides.each(function(){
					var slide_id = options.idprefix + options.startid++;
					$(this).attr('id', slide_id);
					
					if (options.pager) {
						var li = $('<li />').attr('rel', slide_id);
						if ($(this).hasClass(options.activeclass)) {
							li.addClass(options.pageractiveclass);
						}
						li.prependTo($pager);

						li.click(function(e){
							if (e.stopPropagation)
								e.stopPropagation();
							e.cancelBubble = true;
							
							var active = $slshow.find('.'+options.activeclass),
								next_id = $(this).attr('rel');
							
							if (active.attr('id') != next_id) {
								var next = $('#'+next_id);
								
								nextSlide(next, active);
								if (options.autoloop) {
									slideLoop();
								}
							}
						});
					}
				});
				
				if (options.pager) {
					$pager.hide().appendTo($slshow.parent()).fadeIn(300);
				}

				function nextSlide(next, active) {
					if (options.pager) {
						$pager.find('.'+options.pageractiveclass).removeClass(options.pageractiveclass);
						$pager.find("[rel='"+next.attr('id')+"']").addClass(options.pageractiveclass);
					}
					
					active.addClass(options.lastactiveclass);
					
					next.css({opacity: 0})
						.addClass(options.activeclass)
						.animate({opacity: 1}, {
							duration: options.fade,
							complete: function() {
								active.removeClass(options.activeclass+' '+options.lastactiveclass);
							}
						});
				}
				
				function slideLoop() {
					clearInterval(loop);
					loop = setInterval(function() {
						var active = $slshow.find('.'+options.activeclass);
						if (!active.length) {
							return;
						}

						var next =  active.next();
						if (!next.length) {
							next = $slshow.find(':first');
						}
						
						nextSlide(next, active);
					}, options.interval);
				}
				
				if (options.autoloop) {
					slideLoop();
				}
			}
		});
	};
})(jQuery);
