(function(k,j,e,c){c=e.fn.overscroll=function(a){return this.each(function(){c.init(e(this),a)})};e.extend(c,{events:{wheel:"mousewheel DOMMouseScroll",start:"mousedown touchstart",drag:"mousemove touchmove",scroll:"scroll",end:"mouseup touchend",ignored:"dragstart drag"},div:"
",noop:function(){return false},constants:{scrollDuration:800,timeout:400,captureThreshold:3,wheelDelta:20,scrollDelta:5.9,thumbThickness:8,thumbOpacity:0.7,boundingBox:1E6},init:function(a,b,d){d={sizing:c.getSizing(a)}; b=e.extend({openedCursor:"http://github.com/downloads/azoff/Overscroll/opened.cur",closedCursor:"http://github.com/downloads/azoff/Overscroll/closed.cur",showThumbs:true,wheelDirection:"vertical",wheelDelta:c.constants.wheelDelta,scrollDelta:c.constants.scrollDelta,direction:"multi",onDriftEnd:e.noop},b||{});b.scrollDelta=j.abs(b.scrollDelta);b.wheelDelta=j.abs(b.wheelDelta);b.cache={openedCursor:new Image,closedCursor:new Image};b.cache.openedCursor.src=b.openedCursor;b.cache.closedCursor.src=b.closedCursor; b.openedCss={cursor:"url('"+b.openedCursor+"'),default"};b.closedCss={cursor:"url('"+b.closedCursor+"'),default"};a.css("overflow","hidden").css(b.openedCss).bind(c.events.wheel,d,c.wheel).bind(c.events.start,d,c.start).bind(c.events.ignored,c.noop);if(b.showThumbs){d.thumbs={};if(d.sizing.container.scrollWidth>0&&b.direction!=="vertical"){d.thumbs.horizontal=e(c.div).css(c.getThumbCss(d.sizing.thumbs.horizontal)).fadeTo(0,0);a.prepend(d.thumbs.horizontal)}if(d.sizing.container.scrollHeight>0&&b.direction!== "horizontal"){d.thumbs.vertical=e(c.div).css(c.getThumbCss(d.sizing.thumbs.vertical)).fadeTo(0,0);a.prepend(d.thumbs.vertical)}d.sizing.relative=d.thumbs.vertical||d.thumbs.horizontal;if(d.sizing.relative){d.sizing.relative.oldOffset=d.sizing.relative.offset();a.scrollTop(c.constants.boundingBox).scrollLeft(c.constants.boundingBox);d.sizing.relative.remove().prependTo(a);d.sizing.relative.newOffset=d.sizing.relative.offset();d.sizing.relative=d.sizing.relative.oldOffset.left!=d.sizing.relative.newOffset.left|| d.sizing.relative.oldOffset.top!=d.sizing.relative.newOffset.top;a.scrollTop(0).scrollLeft(0);a.bind(c.events.scroll,d,c.scroll)}}d.target=a;d.options=b},toggleDragMode:function(a,b){b?a.target.css(a.options.closedCss):a.target.css(a.options.openedCss);if(a.thumbs)if(b){a.thumbs.vertical&&a.thumbs.vertical.stop(true,true).fadeTo("fast",c.constants.thumbOpacity);a.thumbs.horizontal&&a.thumbs.horizontal.stop(true,true).fadeTo("fast",c.constants.thumbOpacity)}else{a.thumbs.vertical&&a.thumbs.vertical.fadeTo("fast", 0);a.thumbs.horizontal&&a.thumbs.horizontal.fadeTo("fast",0)}},setPosition:function(a,b,d){b.x=a.pageX;b.y=a.pageY;b.index=d;return b},wheel:function(a,b){if(a.wheelDelta)b=a.wheelDelta/(k.opera?-120:120);if(a.detail)b=-a.detail/3;if(!a.data.wheelCapture){a.data.wheelCapture={timeout:null};c.toggleDragMode(a.data,true);a.data.target.stop(true,true).data("dragging",true)}b*=a.data.options.wheelDelta;if(a.data.options.wheelDirection==="horizontal")this.scrollLeft-=b;else this.scrollTop-=b;a.data.wheelCapture.timeout&& clearTimeout(a.data.wheelCapture.timeout);a.data.wheelCapture.timeout=setTimeout(function(){a.data.wheelCapture=undefined;c.toggleDragMode(a.data,false);a.data.target.data("dragging",false);a.data.options.onDriftEnd.call(a.data.target,a.data)},c.constants.timeout);return false},scroll:function(a,b,d,f,i,g,h){b=a.data.thumbs;d=a.data.sizing;f=this.scrollLeft;i=this.scrollTop;if(b.horizontal){g=f*d.container.width/d.container.scrollWidth;h=d.thumbs.horizontal.top;if(d.relative){g+=f;h+=i}b.horizontal.css("margin", h+"px 0 0 "+g+"px")}if(b.vertical){g=d.thumbs.vertical.left;h=i*d.container.height/d.container.scrollHeight;if(d.relative){g+=f;h+=i}b.vertical.css("margin",h+"px 0 0 "+g+"px")}},start:function(a){e(document).bind(c.events.drag,a.data,c.drag).bind(c.events.end,a.data,c.stop);a.data.target.stop(true,true).data("dragging",false);c.toggleDragMode(a.data,true);a.data.position=c.setPosition(a,{});a.data.capture=c.setPosition(a,{},2);return false},drag:function(a){a.data.options.direction!=="vertical"&& a.data.target.scrollLeft(a.data.target.scrollLeft()-(a.pageX-a.data.position.x));a.data.options.direction!=="horizontal"&&a.data.target.scrollTop(a.data.target.scrollTop()-(a.pageY-a.data.position.y));c.setPosition(a,a.data.position);if(--a.data.capture.index<=0){a.data.target.data("dragging",true);c.setPosition(a,a.data.capture,c.constants.captureThreshold)}return true},stop:function(a,b,d,f){if(a.data.position){e(document).unbind(c.events.drag,c.drag);if(a.data.target.data("dragging")){b=a.data.options.scrollDelta* (a.pageX-a.data.capture.x);d=a.data.options.scrollDelta*(a.pageY-a.data.capture.y);f={};if(a.data.options.direction!=="vertical")f.scrollLeft=a.data.target.scrollLeft()-b;if(a.data.options.direction!=="horizontal")f.scrollTop=a.data.target.scrollTop()-d;a.data.target.animate(f,{duration:c.constants.scrollDuration,easing:"cubicEaseOut",complete:function(){a.data.target.data("dragging",false);a.data.options.onDriftEnd.call(a.data.target,a.data);c.toggleDragMode(a.data,false)}})}else c.toggleDragMode(a.data, false);a.data.capture=a.data.position=undefined}return!a.data.target.data("dragging")},getSizing:function(a,b){b={};b.container={width:a.width(),height:a.height()};a.scrollLeft(c.constants.boundingBox).scrollTop(c.constants.boundingBox);b.container.scrollWidth=a.scrollLeft();b.container.scrollHeight=a.scrollTop();a.scrollTop(0).scrollLeft(0);b.thumbs={horizontal:{width:b.container.width*b.container.width/b.container.scrollWidth,height:c.constants.thumbThickness,corner:c.constants.thumbThickness/2, left:0,top:b.container.height-c.constants.thumbThickness},vertical:{width:c.constants.thumbThickness,height:b.container.height*b.container.height/b.container.scrollHeight,corner:c.constants.thumbThickness/2,left:b.container.width-c.constants.thumbThickness,top:0}};b.container.width-=b.thumbs.horizontal.width;b.container.height-=b.thumbs.vertical.height;return b},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"}}});e.extend(e.easing,{cubicEaseOut:function(a,b,d,f){return(d+f)*((a=a/1-1)*a*a+1)+d}})})(window,Math,jQuery);