(function($){
			$.fn.mouseSlider = function(options){
				var defaults = {
					containerID:'cont',
					containertag:'<div id="%%containerID%%" class="cont" />'
				}; 		
				var options = $.extend(defaults, options);
				this.each(function() {
					var obj=$(this);
					var contobjid;
					var contobj;
					var $items;
					var mousePosX;
					var mousePosY;
					var totalwidth=0;
					var t=0;
					var tc=0;
					var xl=0;
					var xm=0;
					var xr=0;
					function init(){
						contobjid = obj.attr("id")+"_"+options.containerID;
						$("> ul",obj).wrap(String(options.containertag).replace("%%containerID%%",contobjid));
						contobj = $("#"+contobjid);
						$items = $("li",contobj);
						calculateWidth();
						$items.each(function(){
							var img = $("img",$(this));
							var loader = new Image();
							loader.onload=function(){
								calculateWidth();
							}
							loader.src = img.attr("src");
						});
					}
					function calculateWidth(){
						totalwidth=0;
						$items.each(function(){ 
							totalwidth += $(this).width()+parseInt($(this).css("padding-left"))+parseInt($(this).css("padding-right"));
						});
						setWidth();
						setEvents();
					}
					function setWidth(){
						contobj.css("margin-left","0px");
						contobj.css("width",totalwidth+"px");
						obj.css("overflow","hidden");
					}
					function setEvents(){
						obj.unbind('mouseenter');
						obj.unbind('mouseleave');
						if(contobj.width()>obj.width()){
							obj.mouseenter(function(){
								t = setInterval(mouseCatcher,10);
								tc = setInterval(animate,10);
							});
							obj.mouseleave(function(){
								clearInterval(t);
								clearInterval(tc);
							});
						}else{
							contobj.css("display","inline-block");
							contobj.css("margin","auto");
							obj.css("text-align","center");
						}
						xl=obj.offset().left;
						xm=obj.offset().left+(obj.width()/2);
						xr=obj.offset().left+obj.width();
					}
					function animate(){
						var step=1;
						var per=0;
						var ratio=5;
						if(contobj.width()>obj.width()){
							if(mousePosX>(xm+10)){ 
								per = (mousePosX-(xm+10))/(xr-(xm+10));
								step = -1 * (1 + Math.round(ratio*per)); 
							}
							if(mousePosX<(xm-10)){
								per = (mousePosX-(xm-10))/((xm-10)-xl);
								step =  Math.abs(1 + Math.round(ratio*per));
							}
							if(mousePosX<(xm+10)&&mousePosX>(xm-10)){ step=0; }
							$("#debug").html(step);
							var cm=parseInt(contobj.css("margin-left"));
							contobj.css("margin-left",(cm+step)+"px");
							if(parseInt(contobj.css("margin-left"))>0){ contobj.css("margin-left","0px"); }
							if(parseInt(contobj.css("margin-left"))<((obj.width()+Math.abs(step))-totalwidth)){ contobj.css("margin-left",(obj.width()-totalwidth)+"px"); }
						}
					}
					function mouseCatcher(){
						$(document).mousemove(function(e){ mousePosX=e.pageX; mousePosY=e.pageY; })
					}
					init();
				});
			}
		})(jQuery);
