$(document).ready(function() {
	//banner
	var slideInterval;
	var smoothBanner = {
		init: function(options, banner){
			var slideList = banner.find('li.slide');
			smoothBanner.slideList = banner.find('li.slide');
			
			if (typeof(options.autosliding) == 'number') {
				smoothBanner.autoslideDuraton = parseInt(options.autosliding + '000', 10);
			} else {
				smoothBanner.autoslideDuraton = smoothBanner.autoslideDuraton;
			}
			
			//Сортировка
			slideList.each(function(){
				//$(this).prependTo(banner);
				smoothBanner.durationMassive.push(parseInt(($(this).attr('rel') + '000'), 10) || smoothBanner.autoslideDuraton);
			});
			
			if (options.autosliding) {
				smoothBanner.currentSlideDuration = smoothBanner.durationMassive[0];
				smoothBanner.autosliding({clear:false}, banner, options.fadeType);
			}
			
			if (options.stopOnHover) {
				banner.hover(function(){
					smoothBanner.enableAutoSliding = false;
					banner.find('.markerList li.current span').stop(false, false);
				}, function(){
					smoothBanner.enableAutoSliding = true;
					var currentSpan = banner.find('.markerList li.current span');
					var newAnimationSpeed = parseInt((smoothBanner.autoslideDuraton / 100) * (smoothBanner.markerHeight - currentSpan.height()) / (smoothBanner.markerHeight / 100)) - 300;
					currentSpan.animate({height:'100%'}, newAnimationSpeed, 'linear');
				});
			}
			
			options.fadeType ? 1 : options.fadeType = 'switch';
			options.animationSpeed ? 1 : options.animationSpeed = 'fast';
			options.markerList ? smoothBanner.makeMarkerList(banner, slideList, options.fadeType, options.animationSpeed) : 1;

		},
		makeMarkerList: function(banner, slideList, fadeType, animationSpeed){
			var markersSize = banner.find('li.slide').size();
			banner.prepend(function(){
				var liList = '';
				for (var i = 0; i < markersSize; i++) {
					liList += '<li><span></span></li>';
				}
				return '<li class="markerList"><ul>'+ liList +'</ul></li>';
			});
			var markerList = banner.find('li.markerList');
			var markerListLi = markerList.find('li');
			markerListLi.filter(':last').addClass('current');
			
			var avilableHeight = markerList.height() - 3*markersSize;
			var markerHeight = parseInt((avilableHeight / markersSize), 10);
			smoothBanner.markerHeight = markerHeight;
			markerListLi.height(markerHeight);
			markerList.fadeIn('slow');
			smoothBanner.slideProsgress(markerListLi);
			
			markerListLi.click(function(){
				clearInterval(slideInterval);
				markerListLi.find('span').height('1px');
				var self = $(this);
				markerListLi.filter('.current').removeClass('current');
				self.addClass('current');

				var thisIndex = markerListLi.size() - self.index();
				
				smoothBanner.currentPosition = thisIndex;
				switch(fadeType) {
					case 'switch':
						smoothBanner.fadeAnimate(banner, slideList, thisIndex, animationSpeed, markerListLi);
					break;
					
					default: break;
				}
				smoothBanner.autosliding({clear:false}, banner, fadeType);
			});
		},
		fadeAnimate: function(banner, slideList, newSlideIndex, animationSpeed, markerListLi){
			var newSlide = slideList.filter(':eq(' + (newSlideIndex-1) + ')');
			newSlide.addClass('prepare');
			slideList.filter('.current').stop(true, true).animate({opacity:'hide'}, animationSpeed, function(){
				var self = $(this);
				self.removeClass('current');
				newSlide.addClass('current').removeClass('prepare');
				smoothBanner.slideProsgress(markerListLi);
			});
		}, autosliding: function(options, banner, fadeType){
			//var duration = parseInt(smoothBanner.autoslideDuraton+'000');
			
			if (smoothBanner.enableAutoSliding) {
				if (options.clear) {
					clearInterval(slideInterval);
				}
				clearInterval(slideInterval);
				
				function slideIntervalFunc() {
					
					slideInterval = setInterval(function(){
						if (smoothBanner.enableAutoSliding) {
							var markerList = banner.find('li.markerList li');
							var nextSlide = markerList.filter('.current').prev();

							if (nextSlide.size() > 0) {
								smoothBanner.currentSlideDuration = smoothBanner.durationMassive[smoothBanner.currentPosition ];
								nextSlide.trigger('click');

							} else {
								smoothBanner.currentSlideDuration = smoothBanner.durationMassive[0];
								var otherNextSlide = markerList.filter(':last');
								otherNextSlide.trigger('click');

							}
						} else {
							clearInterval(slideInterval);
							setTimeout(function(){slideIntervalFunc()}, 1000);
						}
					}, smoothBanner.currentSlideDuration);
				}
				slideIntervalFunc();

			}
		},
		slideProsgress : function(markerListLi){
			markerListLi.filter('.current').find('span').animate({height:'100%'}, smoothBanner.currentSlideDuration, 'linear');
		},
		autoslideDuraton: 3000,
		currentSlideDuration:3000,
		durationMassive:[],
		slideList:'',
		currentPosition: 1,
		enableAutoSliding: true
	}

	//banner init
	smoothBanner.init({
		//Опции
		autosliding: 5, //Включает автослайдинг раз в 5 секунд.
		stopOnHover: false, //Останавливает слайдинг при наведении
		markerList: true, //Включает маркеры
		fadeType: 'switch', //switch - смена одного на другой. Так же можно: slide — слева направо
		animationSpeed: 'slow' //Скорость анимации в миллисикундах либо fast/middle/slow
	}, $('.smoothBanner')); //И отправляем дом-объект. Если баннеров несколько на странице, то каждому присваиваем ID и инициализируем отдельно
});
