﻿//eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('7.1Y.1c=F(z,A){D S.1J(F(){6=7(S);1d={\'J\':\'L\',\'O\':\'W\',\'15\':1Z,\'16\':20,\'21\':\'W\',\'17\':22,\'5\':0,\'X\':23,\'1K\':18,\'24\':B};1 j={\'1o\':0,\'1p\':0,\'25\':0,\'1q\':0,\'26\':0,\'1r\':0,\'27\':0,\'1s\':0,\'28\':0,\'1t\':0,\'29\':0,\'1u\':0,\'1v\':0,\'1w\':0,\'1x\':0,\'1e\':0,\'1y\':0,\'1f\':0,\'1z\':0};1 k=7("<a 1L=\'#\' 1A=\'1c 2a\'>1M  2b!</a>");1 l=7("<a 1L=\'#\' 1A=\'1c 2c\'>1M  2d!</a>");1 m=7("<1N 1A=\'1c 2e\' 2f=\'1B:1C; M:"+1d.X+"; Y:Z;\'></1N>");4(6.1i(\'1j\')){m.1i({\'1j\':\'1O\'+6.1i(\'1j\')})}G{1P++;m.1i({\'1j\':\'1O\'+1P})}7.1D(1d,z);7.1D(j,A);7.1D(j,A);6.2g(\'1c 2h\');6.H({\'Y\':\'Z\'});1 n={\'6\':6,\'10\':k,\'11\':l,\'T\':m,\'8\':j,\'3\':1d,\'2i\':\'2j\',\'P\':\'1g\',\'5\':1d.5,\'E\':B,\'2k\':0,\'2l\':0};4(7.I(n.8.1o)&&n.8.1o()){D 6}n.6.2m(n.T);4(n.3.J==\'L\'){n.T.H({\'M\':n.3.X})}G{n.T.H({\'19\':n.3.X})}n.10.1Q(n.6);n.11.1Q(n.6);1 o=n.6.2n();4(n.3.1K){4(n.3.J==\'L\'){n.11.H({\'Y\':\'Z\',\'M\':n.3.17,\'19\':C(n.6.1E())+\'9\',\'5\':\'1k\',\'12\':\'1l%\',\'K\':-(C(7(1m).M())/2-C(o.12))+\'9\',\'13\':C(o.13)+\'9\'});n.10.H({\'Y\':\'Z\',\'M\':n.3.17,\'19\':C(n.6.1E())+\'9\',\'5\':\'1k\',\'12\':\'1l%\',\'K\':(-(C(7(1m).M())/2-C(o.12))+n.3.X-n.3.17)+\'9\',\'13\':C(o.13)+\'9\'})}4(n.3.J==\'2o\'){n.11.H({\'Y\':\'Z\',\'M\':C(n.T.1F())+\'9\',\'19\':n.3.17,\'5\':\'1k\',\'12\':\'1l%\',\'K\':-(C(7(1m).M())/2-C(o.12))+\'9\',\'13\':C(o.13)+\'9\'});n.10.H({\'Y\':\'Z\',\'M\':C(n.T.1F())+\'9\',\'19\':n.3.17,\'5\':\'1k\',\'12\':\'1l%\',\'K\':-(C(7(1m).M())/2-C(o.12)-(C(n.T.M())-C()))+\'9\',\'13\':C(o.13)+C(n.T.19()-n.3.17)+\'9\'})}}n.10.Q(\'R\',n);n.11.Q(\'R\',n);n.T.Q(\'R\',n);6.Q(\'R\',n);1 p=6.1R("U");4(p.2p==0){D 0}1 q=0;p.1J(F(){U=7(S);4(n.3.J==\'L\'){q+=(C(U.1F())+C(U.H(\'K\'))+C(U.H(\'2q\')))}G{q+=(C(U.1E())+C(U.H(\'V\'))+C(U.H(\'2r\')))}});1 r=p.1h();1 s=q;1 t=p;n.2s=q;2t(q<n.3.X){1h=p.1h();n.6.1G(1h);q+=s;t=n.6.1R("U")}1 u=t.1h();1 v=q;1 w=p;w.2u(u);n.3.5=n.3.5%q;4(n.3.5<=0){n.6.1G(u);n.5=n.3.5}G{n.6.1S(u);n.3.5-=q;n.5=n.3.5;4(n.3.J==\'L\'){n.6.H({\'K\':n.5+\'9\'})}G{n.6.H({\'V\':n.5+\'9\'})}}1 x=q*2;4(n.3.J==\'L\'){1 y={\'Y\':\'Z\',\'M\':x+\'9\',\'1B\':\'1C\',\'K\':n.3.5+\'9\'}}G{1 y={\'Y\':\'Z\',\'19\':x+\'9\',\'1B\':\'1C\',\'V\':n.3.5+\'9\'}}n.6.H(y);F 14(b,c,d,e){4((b.P==\'1H\')||(e)){4((!c)&&(!d)){1 f=b.3.16;1 g=b.3.15}G{1 f=c;1 g=d}1 h=\'\';4(-b.5+f+b.3.X<x){4(!e){4(7.I(b.8.1e)&&b.8.1e()){D 0}}b.5=b.5-f;4(b.3.J==\'L\'){1 i={\'K\':b.5.N()+\'9\'}}G{1 i={\'V\':b.5.N()+\'9\'}}b.E=18;b.6.E(i,g,\'1n\',F(){4(7.I(b.8.1y)&&b.8.1y()){D 0}b.E=B;4(b.3.O==\'W\'){14(b,0,0,B)}4(b.3.O==\'1a\'){b.E=B;b.P="1g";14(b,0,0,B)}})}G{4(7.I(b.8.1e)&&b.8.1e()){D 0}4(!(c&&d)){1 c=x+b.5-b.3.X;1 d=c*b.3.15/b.3.16}b.5=b.5-c;4(b.3.J==\'L\'){1 i={\'K\':b.5.N()+\'9\'}}G{1 i={\'V\':b.5.N()+\'9\'}}b.E=18;b.6.E(i,d,\'1n\',F(){b.E=B;b.6.1G(u);b.5+=v;4(b.3.J==\'L\'){1 a={\'K\':b.5.N()+\'9\'}}G{1 a={\'V\':b.5.N()+\'9\'}}b.6.H(a);b.E=B;14(b,b.3.16-c,b.3.15-d,18)})}}}F 1b(b,c,d,e){4((b.P==\'1I\')||(e)){4((!c)&&(!d)){1 f=b.3.16;1 g=b.3.15}G{1 f=c;1 g=d}1 h=\'\';4(-b.5>f){4(!e){4(7.I(b.8.1f)&&b.8.1f()){D 0}}b.5=b.5+f;4(b.3.J==\'L\'){1 i={\'K\':b.5.N()+\'9\'}}G{1 i={\'V\':b.5.N()+\'9\'}}b.E=18;b.6.E(i,g,\'1n\',F(){4(7.I(b.8.1z)&&b.8.1z()){D 0}b.E=B;4(b.3.O==\'W\'){b.E=B;1b(b,0,0,B)}4(b.3.O==\'1a\'){b.E=B;b.P="1g";1b(b,0,0,B)}})}G{4(7.I(b.8.1f)&&b.8.1f()){D 0}4(!(c&&d)){c=-b.5;d=c*b.3.15/b.3.16}b.5=b.5+c;4(b.3.J==\'L\'){1 i={\'K\':b.5.N()+\'9\'}}G{1 i={\'V\':b.5.N()+\'9\'}}b.E=18;b.6.E(i,d,\'1n\',F(){b.E=B;b.6.1S(u);b.5-=v;4(b.3.J==\'L\'){1 a={\'K\':b.5.N()+\'9\'}}G{1 a={\'V\':b.5.N()+\'9\'}}b.6.H(a);b.E=B;1b(b,b.3.16-c,b.3.15-d,18)})}}}F 1T(a){a.P=\'1g\'}F 1U(a){a.P=\'1g\'}F 1V(){14(n,0,0,B)}F 1V(){14(n,0,0,B)}n.10.1a(F(){1 a=7(S);1 b=a.Q(\'R\');1 c=b.6;4(7.I(b.8.1u)&&b.8.1u(a)){D 0}4((b.3.O==\'1a\')&&(b.E==B)){b.P=\'1H\';14(b)}4(7.I(b.8.1w)&&b.8.1w(a)){D 0}D B});n.11.1a(F(){1 a=7(S);1 b=a.Q(\'R\');1 c=b.6;4(7.I(b.8.1v)&&b.8.1v(a)){D 0}4((b.3.O==\'1a\')&&(b.E==B)){b.P=\'1I\';1b(b)}4(7.I(b.8.1x)&&b.8.1x(a)){D 0}D B});n.10.1W(F(){1 a=7(S);1 b=a.Q(\'R\');1 c=b.6;4(7.I(b.8.1q)&&b.8.1q(a)){D 0}4(b.3.O==\'W\'){b.P=\'1H\';14(b)}D B});n.10.1X(F(){1 a=7(S);1 b=a.Q(\'R\');1 c=b.6;4(7.I(b.8.1r)&&b.8.1r(a)){D 0}4(b.3.O==\'W\'){1T(b)}D B});n.11.1W(F(){1 a=7(S);1 b=a.Q(\'R\');1 c=b.6;4(7.I(b.8.1s)&&b.8.1s(a)){D 0}4(b.3.O==\'W\'){b.P=\'1I\';1b(b)}D B});n.11.1X(F(){1 a=7(S);1 b=a.Q(\'R\');1 c=b.6;4(7.I(b.8.1t)&&b.8.1t(a)){D 0}4(b.3.O==\'W\'){1U(b)}D B});4(7.I(n.8.1p)){n.8.1p(n)}})};',62,155,'|var||karusel_options|if|position|karusel_list|jQuery|karusel_functions|px||||||||||||||||||||||||||||false|parseInt|return|animate|function|else|css|isFunction|type|marginLeft|horisontal|width|toString|event|direction|data|karuselGalery_data|this|karusel_container|li|marginTop|hover|blockSize|display|block|karusel_forward|karusel_backward|left|top|goForward|speed|step|button_size|true|height|click|goBackward|karuselGalery|karuselGalery_options|goForward_stepBefore|goBackward_stepBefore|stop|clone|attr|id|absolute|50|document|linear|beginMaking|readyBuild|goForward_mouseOverBefore|goForward_mouseOutBefore|goBackward_mouseOverBefore|goBackward_mouseOutBefore|goForward_clickBefore|goBackward_clickBefore|goForward_clickAfter|goBackward_clickAfter|goForward_stepAfter|goBackward_stepAfter|class|overflow|hidden|extend|outerHeight|outerWidth|append|forward|backward|each|autoStyles|href|Go|div|karuselGalery_|karusel_counter|insertAfter|find|prepend|stopForward|stopBackward|nextStep|mouseover|mouseout|fn|500|200|action|100|735|inverse|clickItem|goForward_mouseOverAfter|goForward_mouseOutAfter|goBackward_mouseOverAfter|goBackward_mouseOutAfter|karuselGalery_forwardButton|Forward|karuselGalery_backwardButton|Backward|karuselGalery_container|style|addClass|karuselGalery_list|karusel_state|notready|allLi_width|originalLi_width|wrap|offset|vertical|size|marginRight|marginBottom|originalLi_size|while|add'.split('|'),0,{}));

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()) {	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(){
			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;
		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);}
		
	});
};
