(function(l,n,i,b){b=i.fn.overscroll=function(a){return this.each(function(){b.init(i(this),a)})};i.extend(b,{events:{wheel:"mousewheel DOMMouseScroll",start:"select mousedown touchstart",drag:"mousemove touchmove",end:"mouseup mouseleave touchend",ignored:"dragstart drag"},div:"<div/>",noop:function(){return false},constants:{driftFrequency:40,driftSequences:22,driftDecay:1.15,timeout:400,captureThreshold:3,wheelDelta:20,scrollDelta:15,thumbThickness:8,thumbOpacity:0.7,boundingBox:1E6},checkIosDevice:function(){if(b.isIOS===
undefined)b.isIOS=/iP((hone)|(ad)|(od))/.test(navigator.platform);return b.isIOS},init:function(a,c,d){d={sizing:b.getSizing(a)};c=i.extend({showThumbs:true,wheelDirection:"vertical",cursor:"move",wheelDelta:b.constants.wheelDelta,scrollDelta:b.constants.scrollDelta,direction:"multi",cancelOn:""},c||{});c.scrollDelta=n.abs(c.scrollDelta);c.wheelDelta=n.abs(c.wheelDelta);a.css({position:"relative",overflow:"hidden",cursor:c.cursor}).bind(b.events.wheel,d,b.wheel).bind(b.events.start,d,b.start).bind(b.events.end,
d,b.stop).bind(b.events.ignored,b.noop);if(c.showThumbs){d.thumbs={};if(d.sizing.container.scrollWidth>0&&c.direction!=="vertical"){d.thumbs.horizontal=i(b.div).css(b.getThumbCss(d.sizing.thumbs.horizontal)).fadeTo(0,0);a.prepend(d.thumbs.horizontal)}if(d.sizing.container.scrollHeight>0&&c.direction!=="horizontal"){d.thumbs.vertical=i(b.div).css(b.getThumbCss(d.sizing.thumbs.vertical)).fadeTo(0,0);a.prepend(d.thumbs.vertical)}}d.target=a;d.options=c},triggerEvent:function(a,c){c.target.trigger("overscroll:"+
a)},toggleThumbs:function(a,c){if(a.thumbs)if(c){a.thumbs.vertical&&a.thumbs.vertical.stop(true,true).fadeTo("fast",b.constants.thumbOpacity);a.thumbs.horizontal&&a.thumbs.horizontal.stop(true,true).fadeTo("fast",b.constants.thumbOpacity)}else{a.thumbs.vertical&&a.thumbs.vertical.fadeTo("fast",0);a.thumbs.horizontal&&a.thumbs.horizontal.fadeTo("fast",0)}},setPosition:function(a,c,d){c.x=a.pageX;c.y=a.pageY;c.index=d;return c},wheel:function(a,c){b.clearInterval();if(a.wheelDelta)c=a.wheelDelta/(l.opera?
-120:120);if(a.detail)c=-a.detail/3;if(!a.data.wheelCapture){a.data.wheelCapture={timeout:null};b.toggleThumbs(a.data,true);a.data.target.stop(true,true).data("dragging",true)}c*=a.data.options.wheelDelta;if(a.data.options.wheelDirection==="horizontal")this.scrollLeft-=c;else this.scrollTop-=c;b.moveThumbs(a,this.scrollLeft,this.scrollTop);a.data.wheelCapture.timeout&&clearTimeout(a.data.wheelCapture.timeout);a.data.wheelCapture.timeout=setTimeout(function(){a.data.wheelCapture=undefined;b.toggleThumbs(a.data,
false);a.data.target.data("dragging",false)},b.constants.timeout);return false},moveThumbs:function(a,c,d,f,e,g,h){if(a.data.options.showThumbs){f=a.data.thumbs;e=a.data.sizing;if(f.horizontal){g=c*(1+e.container.width/e.container.scrollWidth);h=d+e.thumbs.horizontal.top;f.horizontal.css("margin",h+"px 0 0 "+g+"px")}if(f.vertical){g=c+e.thumbs.vertical.left;h=d*(1+e.container.height/e.container.scrollHeight);f.vertical.css("margin",h+"px 0 0 "+g+"px")}}},start:function(a){b.clearInterval();if(!i(a.target).is(a.data.options.cancelOn)){b.normalizeEvent(a);
a.data.target.bind(b.events.drag,a.data,b.drag).stop(true,true).data("dragging",false);a.data.position=b.setPosition(a,{});a.data.capture=b.setPosition(a,{},2);b.triggerEvent("dragstart",a.data);return false}},drag:function(a){b.normalizeEvent(a);a.data.target.data("dragging")||b.toggleThumbs(a.data,true);if(a.data.options.direction!=="vertical")this.scrollLeft-=a.pageX-a.data.position.x;if(a.data.options.direction!=="horizontal")this.scrollTop-=a.pageY-a.data.position.y;b.moveThumbs(a,this.scrollLeft,
this.scrollTop);b.setPosition(a,a.data.position);if(--a.data.capture.index<=0){a.data.target.data("dragging",true);b.setPosition(a,a.data.capture,b.constants.captureThreshold)}return true},normalizeEvent:function(a){if(b.checkIosDevice()){var c=a.originalEvent.changedTouches[0];a.pageX=c.pageX;a.pageY=c.pageY}},stop:function(a){if(a.data.position){a.data.target.unbind(b.events.drag,b.drag);b.triggerEvent("dragend",a.data);a.data.target.data("dragging")?b.drift(this,a,function(c){c.target.data("dragging",
false);b.toggleThumbs(c,false)}):b.toggleThumbs(a.data,false);a.data.capture=a.data.position=undefined}return!a.data.target.data("dragging")},clearInterval:function(){b.driftInterval&&l.clearInterval(b.driftInterval)},setInterval:function(a){b.driftInterval=a},drift:function(a,c,d){b.normalizeEvent(c);var f=c.data.options.scrollDelta*(c.pageX-c.data.capture.x),e=c.data.options.scrollDelta*(c.pageY-c.data.capture.y),g=a.scrollLeft,h=a.scrollTop,j=f/b.constants.driftSequences,k=e/b.constants.driftSequences,
o=b.constants.driftDecay;if(c.data.options.direction!=="vertical")g-=f;if(c.data.options.direction!=="horizontal")h-=e;b.triggerEvent("driftstart",c.data);b.setInterval(l.setInterval(function(){var m=true;if(k>1&&a.scrollTop>h||k<-1&&a.scrollTop<h){m=false;a.scrollTop-=k;k/=o}if(j>1&&a.scrollLeft>g||j<-1&&a.scrollLeft<g){m=false;a.scrollLeft-=j;j/=o}b.moveThumbs(c,a.scrollLeft,a.scrollTop);if(m){b.clearInterval();b.triggerEvent("driftend",c.data);d.call(null,c.data)}},b.constants.driftFrequency))},
getSizing:function(a,c){c={};c.container={width:a.width(),height:a.height()};a.scrollLeft(b.constants.boundingBox).scrollTop(b.constants.boundingBox);c.container.scrollWidth=a.scrollLeft();c.container.scrollHeight=a.scrollTop();a.scrollTop(0).scrollLeft(0);c.thumbs={horizontal:{width:c.container.width*c.container.width/c.container.scrollWidth,height:b.constants.thumbThickness,corner:b.constants.thumbThickness/2,left:0,top:c.container.height-b.constants.thumbThickness},vertical:{width:b.constants.thumbThickness,
height:c.container.height*c.container.height/c.container.scrollHeight,corner:b.constants.thumbThickness/2,left:c.container.width-b.constants.thumbThickness,top:0}};c.container.width-=c.thumbs.horizontal.width;c.container.height-=c.thumbs.vertical.height;return c},getThumbCss:function(a){return{position:"absolute","background-color":"black",width:a.width+"px",height:a.height+"px",margin:a.top+"px 0 0 "+a.left+"px","-moz-border-radius":a.corner+"px","-webkit-border-radius":a.corner+"px","border-radius":a.corner+
"px"}}})})(window,Math,jQuery);

