/**
 * Плагин галереи для главной страницы сайта Максима дубина
 * @author InviS
 * 30.06.2011
 */

(function($){
	$.fn.galery = function(options){
		var options = $.extend({
			fadeDuration: 800,
			slideDuration: 6000
		}, options || {});
		
		var $this = this;
		var $photos = $this.find('.photos li');
		var $control = $this.find('.control li');
		
		var Vars = {
			currentSlide : 0,
			maxSlide : $photos.length
		}
		
		var Functions = {
			/** корректируем введенное число, чтоб не превышало кол-во слайдов */
			correctSlideNum: function(num){
				if (num > Vars.maxSlide - 1)  num = num % Vars.maxSlide;
				if (num < 0) {
					num = Math.abs(num) % Vars.maxSlide;
					num = Vars.maxSlide - num;
				}
				return num;
			},
			
			/** смена слайда */
			changeSlide: function(slide){
				slide = Functions.correctSlideNum(slide);
				// изменяем цвет контрольной панели
				$control.removeClass('current').eq(slide).addClass('current');
				// изменяем текущий слайд
				$photos.parent().height($photos.filter(':visible').height());
				$photos.filter(':visible').fadeOut(options.fadeDuration,function(){
					$photos.eq(slide).fadeIn(options.fadeDuration);
					Vars.currentSlide = slide;
					$(document).stopTime('timer').oneTime(options.slideDuration,'timer',Functions.changeSlideToNextSlide);
				});
			},
			
			/** смена слайда на следующий */
			changeSlideToNextSlide: function(){
				Functions.changeSlide(Vars.currentSlide + 1)
			}
		}
		
		var Events = {
			/** переключение слайда вручную */
			controlClick: function(){
				if ($(this).hasClass('current')) return false;
				$(document).stopTime('timer');
				var n = $control.index($(this));	// слайд, на который будет сменен текущий
				$(this).siblings().removeClass('current').end().addClass('current');
				Functions.changeSlide(n);
			}
		}
		
		/** События */
		$control.bind('click',Events.controlClick);
		
		/** Инициализация */
		$(document).oneTime(options.slideDuration,Functions.changeSlideToNextSlide);
		
		return this;
	}
})(jQuery);

