(function(a){
	function b(b,c){
		function w(a){
			if(!(g.ratio>=1)){
				o.now=Math.min(i[c.axis]-j[c.axis],Math.max(0,o.start+((k?a.pageX:a.pageY)-p.start)));
				n=o.now*h.ratio;g.obj.css(l,-n);
				j.obj.css(l,o.now)
			}
			return false
		}
		function v(b){
			a(document).unbind("mousemove",w);
			a(document).unbind("mouseup",v);
			j.obj.unbind("mouseup",v);
			document.ontouchmove=j.obj[0].ontouchend=document.ontouchend=null;
			return false
		}
		function u(b){
			if(!(g.ratio>=1)){
				var b=b||window.event;
				var d=b.wheelDelta?b.wheelDelta/120:-b.detail/3;
				n-=d*c.wheel;
				n=Math.min(g[c.axis]-f[c.axis],Math.max(0,n));
				j.obj.css(l,n/h.ratio);
				g.obj.css(l,-n);
				b=a.event.fix(b);
				b.preventDefault()
			}
		}
		function t(b){
			p.start=k?b.pageX:b.pageY;
			var c=parseInt(j.obj.css(l));
			o.start=c=="auto"?0:c;
			a(document).bind("mousemove",w);
			document.ontouchmove=function(b){
				a(document).unbind("mousemove");
				w(b.touches[0])
			};
			a(document).bind("mouseup",v);
			j.obj.bind("mouseup",v);
			j.obj[0].ontouchend=document.ontouchend=function(b){
				a(document).unbind("mouseup");
				j.obj.unbind("mouseup");
				v(b.touches[0])
			};
			return false
		}
		function s(){
			j.obj.bind("mousedown",t);
			j.obj[0].ontouchstart=function(a){
				a.preventDefault();
				j.obj.unbind("mousedown");
				t(a.touches[0]);
				return false
			};
			i.obj.bind("mouseup",w);
			if(c.scroll&&this.addEventListener){
				e[0].addEventListener("DOMMouseScroll",u,false);
				e[0].addEventListener("mousewheel",u,false)
			}else if(c.scroll){
				e[0].onmousewheel=u
			}
		}
		function r(){
			j.obj.css(l,n/h.ratio);
			g.obj.css(l,-n);
			p["start"]=j.obj.offset()[l];
			var a=m.toLowerCase();
			h.obj.css(a,i[c.axis]);
			i.obj.css(a,i[c.axis]);
			j.obj.css(a,j[c.axis])
		}
		function q(){
			d.update();
			s();
			return d
		}
		var d=this;
		var e=b;
		var f={obj:a(".viewport",b)};
		var g={obj:a(".overview",b)};
		var h={obj:a(".scrollbar",b)};
		var i={obj:a(".track",h.obj)};
		var j={obj:a(".thumb",h.obj)};
		var k=c.axis=="x",
			l=k?"left":"top",
			m=k?"Width":"Height";
		var n,
			o={start:0,now:0},
			p={};
		this.update=function(a){
			f[c.axis]=f.obj[0]["offset"+m];
			g[c.axis]=g.obj[0]["scroll"+m];
			g.ratio=f[c.axis]/g[c.axis];
			h.obj.toggleClass("disable",g.ratio>=1);
			i[c.axis]=c.size=="auto"?f[c.axis]:c.size;
			j[c.axis]=Math.min(i[c.axis],Math.max(0,c.sizethumb=="auto"?i[c.axis]*g.ratio:c.sizethumb));
			h.ratio=c.sizethumb=="auto"?g[c.axis]/i[c.axis]:(g[c.axis]-f[c.axis])/(i[c.axis]-j[c.axis]);
			n=a=="relative"&&g.ratio<=1?Math.min(g[c.axis]-f[c.axis],Math.max(0,n)):0;
			n=a=="bottom"&&g.ratio<=1?g[c.axis]-f[c.axis]:isNaN(parseInt(a))?n:parseInt(a);
			r()
		};
		return q()
	}
	a.tiny=a.tiny||{};
	a.tiny.scrollbar={options:{axis:"y",wheel:40,scroll:true,size:"auto",sizethumb:"auto"}};
	a.fn.tinyscrollbar=function(c){
		var c=a.extend({},a.tiny.scrollbar.options,c);
		this.each(function(){
			a(this).data("tsb",new b(a(this),c))
		});
		return this
	};
	a.fn.tinyscrollbar_update=function(b){
		return a(this).data("tsb").update(b)
	};
})
(jQuery)