﻿jQuery.fn.karuselGalery_rollback = function(){

	return this.each(function(){
		var list = $(this);
		karuselGalery_data = list.data('karuselGalery_data');
		
		karuselGalery_data.karusel_list.removeAttr('style');
		karuselGalery_data.karusel_backward.remove();
		karuselGalery_data.karusel_forward.remove();
		
		var clone = karuselGalery_data.karusel_list.clone();
		clone.insertAfter(karuselGalery_data.karusel_container);
		karuselGalery_data.karusel_container.remove();
		
		var li = clone.children("li");
		for (i = originalLi_size; i < li.size(); i++) {
			$(li[i]).remove();}
		
		clone.removeClass('karuselGalery karuselGalery_list');
		
		return clone;
		
	});
	
}

jQuery.fn.karuselGalery = function(settings, functions, buttonForward, buttonBackward) {

	return this.each(function(){
	
		karusel_list = jQuery(this);
		
		//Настройки по умолчанию
			karuselGalery_options =	{		'type':			'horisontal',
											'event':		'hover',
											'speed':		500,
											'step':			200,
											'button_size':	100,
											'position':		0,
											'blockSize':	jQuery(this).parent().width(),
																					
											'autoStyles':	true,
											'inverse':		false
										};
									
			var karuselGalery_functions =	{	'beginMaking':					0,
												'readyBuild':					0,
												'clickItem':					0,
															
												'goForward_mouseOverBefore':	0,
												'goForward_mouseOverAfter':		0,
												'goForward_mouseOutBefore':		0,
												'goForward_mouseOutAfter':		0,
																
												'goBackward_mouseOverBefore':	0,
												'goBackward_mouseOverAfter':	0,
												'goBackward_mouseOutBefore':	0,
												'goBackward_mouseOutAfter':		0,
																
												'goForward_clickBefore':		0,
												'goBackward_clickBefore':		0,
												'goForward_clickAfter':			0,
												'goBackward_clickAfter':		0,
																
												'goForward_stepBefore':			0,
												'goForward_stepAfter':			0,
												'goBackward_stepBefore':		0,
												'goBackward_stepAfter':			0
											};
		//}
		
		//Создаем дополнительные DOM объекты 
		if (typeof(buttonForward) == "undefined") {
			var karusel_forward =	jQuery("<a href='#' class='karuselGalery karuselGalery_forwardButton'>Go  Forward!</a>");}
		else {
			var karusel_forward = buttonForward;}
			
		if (typeof(buttonBackward) == "undefined") {
			var karusel_backward =	jQuery("<a href='#' class='karuselGalery karuselGalery_backwardButton'>Go  Backward!</a>");}
		else {
			var karusel_backward = buttonBackward;}
		var karusel_container =	jQuery("<div class='karuselGalery karuselGalery_container' style='overflow:hidden; width:"+karuselGalery_options.blockSize+"; display:block;'></div>");
		
		//Генерируем id для контейнера, чтобы было быстрее к нему потом обращаться
		if (karusel_list.attr('id')) { 	//Если у списка есть айдишник, то дописываем к нему 'karuselGalery_'
			karusel_container.attr({'id':	'karuselGalery_'+karusel_list.attr('id')});}
		else {							//Если айдишника нет, то генерируем его, добавляя уникальный номер
			karusel_counter++;
			karusel_container.attr({'id':	'karuselGalery_'+karusel_counter});}
		
		//Дополняем настройки по умолчанию переданными из параметров
		jQuery.extend(karuselGalery_options, settings);
		
		//Дополняем функции по умолчанию переданными из параметров
		jQuery.extend(karuselGalery_functions, functions);
		
		//Добавляем классы-идентификаторы к списку и делаем его блочным
		karusel_list.addClass('karuselGalery karuselGalery_list');
		karusel_list.css({'display':'block'});
		
		//Создаем объект, содержащий все, что нам может понадобиться:
		var karuselGalery_data = 	{	//Составные части
										'karusel_list':		karusel_list,
										'karusel_forward':	karusel_forward,
										'karusel_backward':	karusel_backward,
										'karusel_container':karusel_container,
										
										//Список настроек и функций
										'karusel_functions':karuselGalery_functions,
										'karusel_options':	karuselGalery_options,
										
										//Состояния карусели
										'karusel_state':	'notready',
										'direction':		'stop',
										'position':			karuselGalery_options.position,
										'animate':			false,
										
										//Всякие размеры, чтобы каждый раз не считать
										'allLi_width':		0,
										'originalLi_width':	0
									};
		
		//Вызов функции перед запуском дополнения элементов. Если возвращает не 0, то останавливаем все (так будет во всех последующих функциях)
		/*------------------------------------------------*/if (jQuery.isFunction(karuselGalery_data.karusel_functions.beginMaking) && karuselGalery_data.karusel_functions.beginMaking(karuselGalery_data)) {	return karusel_list;}
		
		//Окружаем список и вычисляем иго размер
		karuselGalery_data.karusel_list.wrap(karuselGalery_data.karusel_container);
		if (karuselGalery_data.karusel_options.type == 'horisontal') {
			karuselGalery_data.karusel_container.css({'width': karuselGalery_data.karusel_options.blockSize});}
		else {
			karuselGalery_data.karusel_container.css({'height': karuselGalery_data.karusel_options.blockSize});}
		//karuselGalery_options.blockSize = karuselGalery_data.karusel_container.outerWidth();
		
		//Вставляем кнопки вперед и назад
		karuselGalery_data.karusel_forward.insertAfter(karuselGalery_data.karusel_list);
		karuselGalery_data.karusel_backward.insertAfter(karuselGalery_data.karusel_list);
		
		//Находим координаты контейнера
		var karusel_position = karuselGalery_data.karusel_list.offset();//karuselGalery_data.karusel_container.offset();
		
		if (karuselGalery_data.karusel_options.autoStyles) {//Если указано, что генерировать стили автоматически, то делаем это
			if (karuselGalery_data.karusel_options.type == 'horisontal') {//Если галерея горизонтальная
				karuselGalery_data.karusel_backward.css({	'display':		'block',
															'width':		karuselGalery_data.karusel_options.button_size,
															'height':		parseInt(karuselGalery_data.karusel_list.height()) + 'px',
															'position':		'absolute',
															'left':			'50%',
															'marginLeft':	-Math.round(parseInt(jQuery("body").width())/2 - parseInt(karusel_position.left)) + 'px',
															'top':			parseInt(karusel_position.top) + 'px'
														});
																		
				karuselGalery_data.karusel_forward.css({	'display':		'block',
															'width':		karuselGalery_data.karusel_options.button_size,
															'height':		parseInt(karuselGalery_data.karusel_list.height()) + 'px',
															'position':		'absolute',
															'left':			'50%',
															'marginLeft':	(-Math.round(parseInt(jQuery("body").width())/2 - parseInt(karusel_position.left)) + karuselGalery_data.karusel_options.blockSize - karuselGalery_data.karusel_options.button_size) + 'px',
															'top':			parseInt(karusel_position.top) + 'px'
														});
			}
			
			if (karuselGalery_data.karusel_options.type == 'vertical') {//Если вертикальная
				karuselGalery_data.karusel_backward.css({	'display':		'block',
															'width':		parseInt(karuselGalery_data.karusel_container.width()) + 'px',
															'height':		karuselGalery_data.karusel_options.button_size,
															'position':		'absolute',
															'left':			'50%',
															'marginLeft':	-Math.round(parseInt(jQuery("body").width())/2 - parseInt(karusel_position.left)) + 'px',
															'top':			parseInt(karusel_position.top) + 'px'
														});
																		
				karuselGalery_data.karusel_forward.css({	'display':		'block',
															'width':		parseInt(karuselGalery_data.karusel_container.width()) + 'px',
															'height':		karuselGalery_data.karusel_options.button_size,
															'position':		'absolute',
															'left':			'50%',
															'marginLeft':	-Math.round(parseInt(jQuery("body").width())/2 - parseInt(karusel_position.left) - (parseInt(karuselGalery_data.karusel_container.width()) - parseInt())) + 'px',
															'top':			parseInt(karusel_position.top) + parseInt(karuselGalery_data.karusel_container.height() - karuselGalery_data.karusel_options.button_size) + 'px'
														});
			}
		}		

		//Проходимся по всему списку, считаем общую длину и добавляем сколько и куда нужно.
		var original_li = karusel_list.children("li");
		if (original_li.size() == 0) { return 0;}
		var original_li_size = 0;//Переменная, в которой будет храниться длина оригинального ула
		original_li.each(function(){
			var li = jQuery(this);
			if (karuselGalery_data.karusel_options.type == 'horisontal') {
				original_li_size += (parseInt(li.outerWidth()) + parseInt(li.css('marginLeft')) + parseInt(li.css('marginRight')));}
			else {
				original_li_size += (parseInt(li.outerHeight()) + parseInt(li.css('marginTop')) + parseInt(li.css('marginBottom')));}
		});
		
		//Создаем копию уже существующих элементов для последующего клонирования и считаем ее длину
		var temp_li = original_li.clone();
		var temp_li_size = original_li_size;
		
		//Пока суммарная длина всех элементов меньше длины блока, дополняем список клонами и увеличиваем ее длину.
		var firstPart_li = original_li;
		karuselGalery_data.originalLi_size = original_li_size;
		karuselGalery_data.originalLi = original_li;
		while (original_li_size < karuselGalery_data.karusel_options.blockSize) {
			clone = original_li.clone();
			karuselGalery_data.karusel_list.append(clone);
			original_li_size += temp_li_size;
			firstPart_li = karuselGalery_data.karusel_list.children("li");}
			
		//Дублируем все элементы, добавляя клоны в общий список
		var addition_li = firstPart_li.clone();
		var addition_li_size = original_li_size;
		var all_li = original_li; all_li.add(addition_li);
		
		//Проверяем где находится начальная позиция и вычисляем правильное значение отступа
		karuselGalery_data.karusel_options.position = karuselGalery_data.karusel_options.position % original_li_size;
		if (karuselGalery_data.karusel_options.position <= 0) {//Если у нас начаольная позиция находится за границами блока
			karuselGalery_data.karusel_list.append(addition_li);
			karuselGalery_data.position = karuselGalery_data.karusel_options.position;}
		else {//Если у нас начаольная позиция находится в блоке
			karuselGalery_data.karusel_list.prepend(addition_li);
			karuselGalery_data.karusel_options.position -= original_li_size;
			karuselGalery_data.position = karuselGalery_data.karusel_options.position;
			if (karuselGalery_data.karusel_options.type == 'horisontal') {
				karuselGalery_data.karusel_list.css({'marginLeft':karuselGalery_data.position + 'px'});
			}else {
				karuselGalery_data.karusel_list.css({'marginTop':karuselGalery_data.position + 'px'});}
		}
		

		var all_li_size = original_li_size*2;		
		if (karuselGalery_data.karusel_options.type == 'horisontal'){
			var css_settings =	{	'display':		'block',
									'width':		all_li_size+'px',
									'overflow':		'hidden',
									'marginLeft':	karuselGalery_data.karusel_options.position + 'px'
								};
		}else{
			var css_settings = 	{	'display':		'block',
									'height':		all_li_size+'px',
									'overflow':		'hidden',
									'marginTop':	karuselGalery_data.karusel_options.position + 'px'
								}
		}
		
		karuselGalery_data.allLi_width = all_li_size;
		karuselGalery_data.karusel_list.css(css_settings);
		
		//Функция промотки вперед
		karuselGalery_data.goForward = function(karuselGalery_data, temp_step, temp_speed, completes_started) {
		
			//Если направление по прежнему вперед
			if ((karuselGalery_data.direction == 'forward')||(completes_started)) {
				//Проверяем делаем ли мы новый шаг, или завершаем уже начатый
				if ((!temp_step)&&(!temp_speed)) {
					var direction_step 	= karuselGalery_data.karusel_options.step;
					var direction_speed = karuselGalery_data.karusel_options.speed;
				}else{
					var direction_step = temp_step;
					var direction_speed = temp_speed;
				}
				var direction = '';
			
				//Проверяем сможем ли мы подвинуть список на один шаг
				if (-karuselGalery_data.position + direction_step + karuselGalery_data.karusel_options.blockSize <= all_li_size) {//Если можем подвинуть на один шаг
					if (!completes_started) {
						/*----------------------------------------------------*/if (jQuery.isFunction(karuselGalery_data.karusel_functions.goForward_stepBefore) && karuselGalery_data.karusel_functions.goForward_stepBefore(karuselGalery_data)) {return 0;}/*----------------------------------------------------*/
					}
					karuselGalery_data.position = karuselGalery_data.position - direction_step;
					if (karuselGalery_data.karusel_options.type == 'horisontal') {
						var animate_options = {'marginLeft':	karuselGalery_data.position.toString() + 'px'};
					}else {
						var animate_options = {'marginTop':		karuselGalery_data.position.toString() + 'px'};
					}
					
					karuselGalery_data.animate = true;
					karuselGalery_data.karusel_list.animate(animate_options, direction_speed, 'linear', function(){
						/*----------------------------------------------------*/if (jQuery.isFunction(karuselGalery_data.karusel_functions.goForward_stepAfter) && karuselGalery_data.karusel_functions.goForward_stepAfter(karuselGalery_data)) {return 0;}/*----------------------------------------------------*/
						karuselGalery_data.animate = false;
						//Рекурсивно запускаем функцию
						if (karuselGalery_data.karusel_options.event == 'hover') {
							karuselGalery_data.goForward(karuselGalery_data, 0, 0, false);}
						if (karuselGalery_data.karusel_options.event == 'click') {
							karuselGalery_data.animate = false;
							karuselGalery_data.direction = "stop";
							karuselGalery_data.goForward(karuselGalery_data, 0, 0, false);}
					});
				}else{//Если на целый шаг подвинуть не можем, тогда
						/*----------------------------------------------------*/if (jQuery.isFunction(karuselGalery_data.karusel_functions.goForward_stepBefore) && karuselGalery_data.karusel_functions.goForward_stepBefore(karuselGalery_data)) {return 0;}/*----------------------------------------------------*/
					if (!(temp_step && temp_speed)) {//Если у нас заранее не заданы параметры перемещения или они равны 0
						//Вычисляем на сколько можно подвинуть и с какой скоростью
						var temp_step = all_li_size + karuselGalery_data.position - karuselGalery_data.karusel_options.blockSize;
						var temp_speed = Math.round(temp_step * karuselGalery_data.karusel_options.speed / karuselGalery_data.karusel_options.step);
					}
					//Ну и, собственно, двигаем	
					karuselGalery_data.position = karuselGalery_data.position - temp_step;
					if (karuselGalery_data.karusel_options.type == 'horisontal') {
						var animate_options = {'marginLeft':	karuselGalery_data.position.toString() + 'px'};
					}else {
						var animate_options = {'marginTop':		karuselGalery_data.position.toString() + 'px'};
					}
						
					karuselGalery_data.animate = true;
					karuselGalery_data.karusel_list.animate(animate_options, temp_speed, 'linear', function(){
						karuselGalery_data.animate = false;
						karuselGalery_data.karusel_list.append(addition_li);
						
						//Передвигаем карусель на длину переставленного куска так, чтобы внешне ничего не изменилось
						karuselGalery_data.position += addition_li_size;
						if (karuselGalery_data.karusel_options.type == 'horisontal') {
							var animate_options = {'marginLeft':	karuselGalery_data.position.toString() + 'px'};
						}else {
							var animate_options = {'marginTop':		karuselGalery_data.position.toString() + 'px'};
						}
						karuselGalery_data.karusel_list.css(animate_options);
						
						//Рекурсивно запускаем функцию, чтобы подвинуть на оставшийся шаг.
						karuselGalery_data.animate = false;
						karuselGalery_data.goForward(karuselGalery_data, karuselGalery_data.karusel_options.step - temp_step, karuselGalery_data.karusel_options.speed - temp_speed, true);
					});
				}
			}
		}

		//Функция промотки назад
		karuselGalery_data.goBackward = function(karuselGalery_data, temp_step, temp_speed, completes_started) {
		
			//Если направление по прежнему назад
			if ((karuselGalery_data.direction == 'backward')||(completes_started)) {
				//Проверяем делаем ли мы новый шаг, или завершаем уже начатый
				if ((!temp_step)&&(!temp_speed)) {
					var direction_step 	= karuselGalery_data.karusel_options.step;
					var direction_speed = karuselGalery_data.karusel_options.speed;
				}else{
					var direction_step = temp_step;
					var direction_speed = temp_speed;
				}
				var direction = '';
			
				//Проверяем сможем ли мы подвинуть список на один шаг
				if (-karuselGalery_data.position >= direction_step) {//Если можем подвинуть на один шаг
					if (!completes_started){
						/*----------------------------------------------------*/if (jQuery.isFunction(karuselGalery_data.karusel_functions.goBackward_stepBefore) && karuselGalery_data.karusel_functions.goBackward_stepBefore(karuselGalery_data)) {return 0;}/*----------------------------------------------------*/
					}
					karuselGalery_data.position = karuselGalery_data.position + direction_step;
					if (karuselGalery_data.karusel_options.type == 'horisontal') {
						var animate_options = {'marginLeft':	karuselGalery_data.position.toString() + 'px'};
					}else {
						var animate_options = {'marginTop':		karuselGalery_data.position.toString() + 'px'};
					}
						
					karuselGalery_data.animate = true;
					karuselGalery_data.karusel_list.animate(animate_options, direction_speed, 'linear', function(){
						/*----------------------------------------------------*/if (jQuery.isFunction(karuselGalery_data.karusel_functions.goBackward_stepAfter) && karuselGalery_data.karusel_functions.goBackward_stepAfter(karuselGalery_data)) {return 0;}/*----------------------------------------------------*/
						karuselGalery_data.animate = false;
						//Рекурсивно запускаем функцию
						if (karuselGalery_data.karusel_options.event == 'hover') {
							karuselGalery_data.animate = false;
							karuselGalery_data.goBackward(karuselGalery_data, 0, 0, false);}
						if (karuselGalery_data.karusel_options.event == 'click') {
							karuselGalery_data.animate = false;
							karuselGalery_data.direction = "stop";
							karuselGalery_data.goBackward(karuselGalery_data, 0, 0, false);}
					});
				}else{//Если на целый шаг подвинуть не можем, тогда
						/*----------------------------------------------------*/if (jQuery.isFunction(karuselGalery_data.karusel_functions.goBackward_stepBefore) && karuselGalery_data.karusel_functions.goBackward_stepBefore(karuselGalery_data)) {return 0;}/*----------------------------------------------------*/
					if (!(temp_step && temp_speed)) {//Если у нас заранее не заданы параметры перемещения или они равны 0
						//Вычисляем на сколько можно подвинуть и с какой скоростью (решаем пропорцию)
						temp_step = -karuselGalery_data.position;
						temp_speed = Math.round(temp_step * karuselGalery_data.karusel_options.speed / karuselGalery_data.karusel_options.step)	;
					}
					//Ну и, собственно, двигаем
					karuselGalery_data.position = karuselGalery_data.position + temp_step;
					if (karuselGalery_data.karusel_options.type == 'horisontal') {
						var animate_options = {'marginLeft':	karuselGalery_data.position.toString() + 'px'};
					}else {
						var animate_options = {'marginTop':		karuselGalery_data.position.toString() + 'px'};
					}
					
					karuselGalery_data.animate = true;
					karuselGalery_data.karusel_list.animate(animate_options, temp_speed, 'linear', function(){
						karuselGalery_data.animate = false;
						karuselGalery_data.karusel_list.prepend(addition_li);
						
						//Передвигаем карусель на длину переставленного куска так, чтобы внешне ничего не изменилось
						karuselGalery_data.position -= addition_li_size;
						if (karuselGalery_data.karusel_options.type == 'horisontal') {
							var animate_options = {'marginLeft':	karuselGalery_data.position.toString() + 'px'};
						}else {
							var animate_options = {'marginTop':		karuselGalery_data.position.toString() + 'px'};
						}
						karuselGalery_data.karusel_list.css(animate_options);
						
						//Рекурсивно запускаем функцию, чтобы подвинуть на оставшийся шаг.
						karuselGalery_data.animate = false;
						karuselGalery_data.goBackward(karuselGalery_data, karuselGalery_data.karusel_options.step - temp_step, karuselGalery_data.karusel_options.speed - temp_speed, true);
					});
				}
			}
		}
		
		karuselGalery_data.stopForward = function(karuselGalery_data) {
			karuselGalery_data.direction = 'stop';
		}
		
		karuselGalery_data.stopBackward = function(karuselGalery_data) {
			karuselGalery_data.direction = 'stop';
		}
		
		karuselGalery_data.nextStep = function() {
			karuselGalery_data.goForward(karuselGalery_data, 0, 0, false);
		}
		karuselGalery_data.prevStep = function() {
			karuselGalery_data.goBackward(karuselGalery_data, 0, 0, false);
		}
		
		//Обработка клика по кнопке вперед
		karuselGalery_data.karusel_forward.click(	function(){
														var clicked_button = jQuery(this);
														var karusel_data = clicked_button.data('karuselGalery_data');
														var karusel_list = karusel_data.karusel_list;
														
																/*----------------------------------------------------*/if (jQuery.isFunction(karusel_data.karusel_functions.goForward_clickBefore) && karusel_data.karusel_functions.goForward_clickBefore(karusel_data)) {return 0;}/*----------------------------------------------------*/
																		
														if ((karusel_data.karusel_options.event == 'click')&&(karusel_data.animate == false)) {//Если запуск анимации происходит по клику
															karusel_data.direction = 'forward';
															karusel_data.goForward(karusel_data);}
															
																/*----------------------------------------------------*/if (jQuery.isFunction(karusel_data.karusel_functions.goForward_clickAfter) && karusel_data.karusel_functions.goForward_clickAfter(karusel_data)) {return 0;}/*----------------------------------------------------*/
																
														return false;
													});
		
		//Обработка клика по кнопке назад
		karuselGalery_data.karusel_backward.click(	function(){
														var clicked_button = jQuery(this);
														var karusel_data = clicked_button.data('karuselGalery_data');
														var karusel_list = karusel_data.karusel_list;
														
																/*----------------------------------------------------*/if (jQuery.isFunction(karusel_data.karusel_functions.goBackward_clickBefore) && karusel_data.karusel_functions.goBackward_clickBefore(karusel_data)) {return 0;}/*----------------------------------------------------*/
																		
														if ((karusel_data.karusel_options.event == 'click')&&(karusel_data.animate == false)) {
															karusel_data.direction = 'backward';
															karusel_data.goBackward(karusel_data);}
														
																/*----------------------------------------------------*/if (jQuery.isFunction(karusel_data.karusel_functions.goBackward_clickAfter) && karusel_data.karusel_functions.goBackward_clickAfter(karusel_data)) {return 0;}/*----------------------------------------------------*/
																
														return false;
															
													});
		
		//Обработка события hover по кнопке вперед
		karuselGalery_data.karusel_forward.hover(	function(){//Заход на кнопку
														var clicked_button = jQuery(this);
														var karusel_data = clicked_button.data('karuselGalery_data');
														var karusel_list = karusel_data.karusel_list;
																		
																/*----------------------------------------------------*/if (jQuery.isFunction(karusel_data.karusel_functions.goForward_mouseOverBefore) && karusel_data.karusel_functions.goForward_mouseOverBefore(karusel_data)) {return 0;}/*----------------------------------------------------*/
																		
														if (karusel_data.karusel_options.event == 'hover') {
															karusel_data.direction = 'forward';
															karusel_data.goForward(karusel_data);}
													},
																	
													function(){//Выход за пределы кнопки
														var clicked_button = jQuery(this);
														var karusel_data = clicked_button.data('karuselGalery_data');
														var karusel_list = karusel_data.karusel_list;
																		
																/*----------------------------------------------------*/if (jQuery.isFunction(karusel_data.karusel_functions.goForward_mouseOutBefore) && karusel_data.karusel_functions.goForward_mouseOutBefore(karusel_data)) {return 0;}/*----------------------------------------------------*/
																		
														if (karusel_data.karusel_options.event == 'hover') {
															karusel_data.stopForward(karusel_data);}
													});
		
		//Обработка события hover по кнопке назад
		karuselGalery_data.karusel_backward.hover(	function(){//Заход на кнопку
														var clicked_button = jQuery(this);
														var karusel_data = clicked_button.data('karuselGalery_data');
														var karusel_list = karusel_data.karusel_list;
																			
																/*----------------------------------------------------*/if (jQuery.isFunction(karusel_data.karusel_functions.goBackward_mouseOverBefore) && karusel_data.karusel_functions.goBackward_mouseOverBefore(karusel_data)) {return 0;}/*----------------------------------------------------*/
																		
														if (karusel_data.karusel_options.event == 'hover') {
															karusel_data.direction = 'backward';
															karusel_data.goBackward(karusel_data);}
													},
																	
													function(){//Выход за пределы кнопки
														var clicked_button = jQuery(this);
														var karusel_data = clicked_button.data('karuselGalery_data');
														var karusel_list = karusel_data.karusel_list;
																		
																/*----------------------------------------------------*/if (jQuery.isFunction(karusel_data.karusel_functions.goBackward_mouseOutBefore) && karusel_data.karusel_functions.goBackward_mouseOutBefore(karusel_data)) {return 0;}/*----------------------------------------------------*/
																		
														if (karusel_data.karusel_options.event == 'hover') {
															karusel_data.stopBackward(karusel_data);}
													});
		
		
		//Записываем наш основной объект в атрибуты списка и всех остальных элементов
		karuselGalery_data.karusel_forward.data('karuselGalery_data', karuselGalery_data);
		karuselGalery_data.karusel_backward.data('karuselGalery_data', karuselGalery_data);
		karuselGalery_data.karusel_container.data('karuselGalery_data', karuselGalery_data);
		
		karusel_list.data('karuselGalery_data', karuselGalery_data);
													
		if (jQuery.isFunction(karuselGalery_data.karusel_functions.readyBuild)){
			karuselGalery_data.karusel_functions.readyBuild(karuselGalery_data);}
		
	});
};
