/*! Created by Alexander Yegerev (a.k.a. Alex Riz)
 * 	
 * Thanks!
 * http://htmlbook.ru/
 * http://www.google.com.ua/
 * 
 * Version: 1.8.5
 */

(function($){
	// дефолтные настройки
	var settings = {
		fragm : 1,
		speed : 500,
		effect : 'swing',
		loading : false,
		auto : null
	};
	// создаем новый метод объекта jQuery.fn
	$.fn.arSlider = function(options){
		// возвращаем ссылку на объект jQuery
		return this.each(function(){
			if (options){
				$.extend(settings, options);
			}
			// определяем переменные
			var $argumList = $(this);
			var $itemsTotal = $argumList.children().length; // определяем сколько всего элементов у нашей карусели
			var $itemWidth = $argumList.children().outerWidth(); // находим ширину одного элемента внутри нашего контейнера
			var intID = null; // ID интервала (нужен для сброса интервала)
			var running = false;
			var step = 0;
			var slideroter = {
				wrap : '<div class="arslider"></div>',
				loading : '<div class="arloadingimg"></div>',
				ul : '<ul class="arslideroteul"></ul>',
				li : '<li class="arslideroteli"><div class="arslidediv"><div class="arslidedivleft"><div class="arslidedivcont"></div></div><div class="arslidedivright"><div class="arslidedivcont"></div></div></div></li>'
			}
			$argumList.wrap(slideroter.wrap); // Обвернем переданный список в div
			var $arSlider = $argumList.parent("div.arslider");
			if(settings.loading){
				$arSlider.children(':first').before(slideroter.loading);
				var t = 0, i = 0;
				var intervalID = setInterval(function() {
					if(i == 12) {
						i = 0;
						t = 0;
					}
					$("div.arloadingimg").css("backgroundPosition", "0 " + t + "px");
					t = t - 40;
					i++;
				}, 50);
			}
			$arSlider.children(':first').before(slideroter.ul); // Вставка псевдо-списка
			for(i = 0; i < settings.fragm; i++){
				$arSlider.children("ul.arslideroteul").append(slideroter.li);
			}
			$arslideroteul = $arSlider.children("ul.arslideroteul");
			$arSlider.css({
				'width': $itemWidth + 'px'
			});
			$arslideroteul.css({
				'width' : $itemWidth * 2 + "px"
			});
			$(">li", $arslideroteul).css({
				'width' : ($itemWidth/settings.fragm).toFixed(0) + "px"
			});
			for(i = 0; i < settings.fragm; i++){
				$(">li", $arslideroteul).eq(i).css({
					'zIndex' : (settings.fragm - i) + 10
				});
			}
			$(">li>div.arslidediv", $arslideroteul).css({
				'width' : ($itemWidth/settings.fragm).toFixed(0) * 2 + "px"
			});
			$(">li>div.arslidediv>div.arslidedivleft", $arslideroteul).css({
				'width' : ($itemWidth/settings.fragm).toFixed(0) + "px"
			});
			$(">li>div.arslidediv>div.arslidedivright", $arslideroteul).css({
				'width' : ($itemWidth/settings.fragm).toFixed(0) + "px"
			});
			$argumList.children().hide();
			$argumList.children().eq(0).show();
			
			function slide() {
				if (!running) {
					running = true;
				
					if (intID) { // если запущен интервал
						window.clearInterval(intID); // очищаем интервал
					}
					if(step >= $itemsTotal) {
						step = 0;
					}
					
					$arslideroteul.show();
					$(">li>div.arslidediv", $arslideroteul).css({
						'left' : 0 + 'px'
					});
					$(">li>div.arslidediv>div.arslidedivleft>div.arslidedivcont", $arslideroteul).html($argumList.children().eq(step).children().clone());
					for(i = 0; i < settings.fragm; i++){
						$(">li", $arslideroteul).eq(i).children("div.arslidediv").children("div.arslidedivleft").children("div.arslidedivcont").css({
							'width' : $itemWidth + 'px',
							'left' : (-1 * (i * ($itemWidth/settings.fragm).toFixed(0))) + 'px'
						});	
					}
					if(step + 1 >= $itemsTotal){
						$(">li>div.arslidediv>div.arslidedivright>div.arslidedivcont", $arslideroteul).html($argumList.children().eq(0).children().clone());
					}
					else {
						$(">li>div.arslidediv>div.arslidedivright>div.arslidedivcont", $arslideroteul).html($argumList.children().eq(step + 1).children().clone());
					}
					for(i = 0; i < settings.fragm; i++){
						$(">li", $arslideroteul).eq(i).children("div.arslidediv").children("div.arslidedivright").children("div.arslidedivcont").css({
							'width' : $itemWidth + 'px',
							'left' : (-1 * (i * ($itemWidth/settings.fragm).toFixed(0))) + 'px'
						});	
					}
					$argumList.children().hide();
					for(i = 1; i < settings.fragm; i++){
						$(">li>div.arslidediv", $arslideroteul).eq(i).animate(
							{'left' : (-1 * ($itemWidth/settings.fragm).toFixed(0)) + "px"},
							settings.speed,
							settings.effect
						);	
					}
					$(">li>div.arslidediv", $arslideroteul).eq(0).animate(
						{'left' : (-1 * ($itemWidth/settings.fragm).toFixed(0)) + "px"},
						settings.speed,
						settings.effect,
						function(){
							$arslideroteul.hide();
							step++;
							if(step >= $itemsTotal){
								$argumList.children().eq(0).show();
							}
							else{
								$argumList.children().eq(step).show();
							}
							
							if(settings.auto){ // если карусель должна проматываться автоматически
								// запускаем вызов функции через интервал времени (auto)
								intID = window.setInterval(function() { slide(); }, settings.auto);
							}
							running = false; // отмечаем, что анимация завершена
						}
					);
				}
				return false;
			}
			if(settings.auto){ // если карусель должна проматываться автоматически
				// запускаем вызов функции через временной интервал
				intID = window.setInterval(function() { slide(); }, settings.auto);
			}
		});
	};
})(jQuery);

