

function pr(test) {
	$('#dump').text($.dump(test));
}




jQuery.fn.resurCorusel = function(maxSpeed) {
	
	
	
	return this.each(
		function() {
			
			var el = $('div.sliding:first', this);
			
			el.resurCoruselCFG = {
				maxSpeed	: maxSpeed,
				speed		: 0,
				containerW	: $(this).width(),		// Ширина таблицы
				containerHW	: $(this).width()/2,	// Ширина таблицы
				containerY	: $(this).height(),		// Высота таблицы
				sliderW		: el.width(),			// Ширина            div.sliding
				sliderHW	: el.width()/2,			// Ширина            div.sliding
				halfWidth	: 0,					// Ширина UL. Расчитывается яваскриптом
				width		: 0,					// Ширина UL Расчитывается яваскриптом
				startX		: 0,
				mouseX		: 0,
				startTime	: 0,
				timeOut		: 0,
				innerDiv	: $('ul', el)
			}
			
			
			
			var s = $("li", el.resurCoruselCFG.innerDiv).length;
			var w = $("li", el.resurCoruselCFG.innerDiv).width();
			var h = $("li", el.resurCoruselCFG.innerDiv).height();
			el.css("overflow","hidden");
			el.resurCoruselCFG.width = s*w;
			el.resurCoruselCFG.halfWidth = el.resurCoruselCFG.width/2;
			$("ul", el).css('width', el.resurCoruselCFG.width);
			
			
			
			
			
			
			el.resurCoruselMoving = function(e) {
				
				var newTime		= new Date().getTime()/1000;	// Время в секундах с точностью до милисекунд.
				var deltaTime	= newTime - el.resurCoruselCFG.startTime;
				var offset		= deltaTime * el.resurCoruselCFG.speed - el.resurCoruselCFG.startX;
				
				
				
				if (offset < 0 || el.resurCoruselCFG.width - el.resurCoruselCFG.sliderW - offset < 0) {	// Если упёрлись.
					
					if (offset < 0 || el.resurCoruselCFG.sliderW > el.resurCoruselCFG.width) {	// Если пришли в начало, выставляем в 0 (автоматом это не происходит т.к. скорость и перемещение не квантуется)
						el.resurCoruselCFG.innerDiv.css('margin-left', '0px');
					} else {
						var tmp = el.resurCoruselCFG.sliderW - el.resurCoruselCFG.width;
						el.resurCoruselCFG.innerDiv.css('margin-left', tmp + 'px');
					}
					window.clearInterval(el.resurCoruselCFG.timeOut)
					return;
				}
				
				el.resurCoruselCFG.innerDiv.css('margin-left', -offset + 'px');
				
				
				
				
				
				
			}
			
			
			el.resurCoruselMouseMove = function(e) {
				
				
				
				el.resurCoruselCFG.containerW	= $(this).width();		// Ширина таблицы
				el.resurCoruselCFG.containerHW	= $(this).width()/2;	// Ширина таблицы
				el.resurCoruselCFG.sliderW		= el.width();			// Ширина            div.sliding
				el.resurCoruselCFG.sliderHW		= el.width()/2;			// Ширина            div.sliding
					
				
				
				
				
				
				if (el.resurCoruselCFG.startTime) {
					window.clearInterval(el.resurCoruselCFG.timeOut)
					el.resurCoruselMoving(e);
				}
				
				
				var mouseX				= e.pageX - $(this).offset().left;
				var halfWidth			= el.resurCoruselCFG.containerHW;
				var mouseCenterOffset	= mouseX - halfWidth;
				
				if (mouseCenterOffset > 20 || mouseCenterOffset < -20) {
					
					
					el.resurCoruselCFG.speed = mouseCenterOffset / halfWidth * el.resurCoruselCFG.maxSpeed;
					el.resurCoruselCFG.startX = parseInt(el.resurCoruselCFG.innerDiv.css('margin-left'));
					el.resurCoruselCFG.startTime = new Date().getTime()/1000;	// Время в секундах с точностью до милисекунд.
					
					el.resurCoruselCFG.timeOut = window.setInterval(el.resurCoruselMoving, 20);
					
					
				} else {
					el.resurCoruselCFG.startTime = 0;
					window.clearInterval(el.resurCoruselCFG.timeOut);
				}
			
				
				// pr(el.resurCoruselCFG);
				
			}
			
			el.resurCoruselMouseOut = function(e) {
				
				// Предотвращение обработки, если курсор наехал на картинку, но не выходил за пределы ДИВа.
				var mouseX	= e.pageX - this.offsetLeft;
				var mouseX2	= e.pageX - $(this).offset().left;
				var mouseY	= e.pageY - this.offsetTop;
				var mouseY2	= e.pageY - $(this).offset().top;
				
				
				if (
					mouseX2 > 0 &&
					mouseX2 < el.resurCoruselCFG.containerW &&
					mouseY2 > 0 &&
					mouseY2 < el.resurCoruselCFG.containerY
					) {
					return;
				}
				
				
				
				
				window.clearInterval(el.resurCoruselCFG.timeOut);	// Если пользователь увёл мыш, то прекращаем движение.
				el.resurCoruselCFG.startTime = 0;
				
			}
			
			
			$(this).bind('mousemove', el.resurCoruselMouseMove);
			// Если надо, что бы останавливалось, когда юзер вынимает мышку из контейнера, то расскомментировать это:
			$(this).bind('mouseout', el.resurCoruselMouseOut);
			
			
			
						
		}
	);
}










