/*
 * Overscroll v1.4.5
 *  A jQuery Plugin that emulates the iPhone scrolling experience in a browser.
 *  http://azoffdesign.com/overscroll
 *
 * Intended for use with the latest jQuery
 *  http://code.jquery.com/jquery-latest.js
 *
 * Copyright 2011, Jonathan Azoff
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *  http://jquery.org/license
 *
 * For API documentation, see the README file
 *  https://github.com/azoff/Overscroll/blob/master/README.md
 *
 * Date: Saturday, May 31st 2011
 *//*jslint onevar: true, strict: true *//*global window, jQuery */"use strict",function(a,b,c,d){d=c.fn.overscroll=function(a){return this.each(function(){d.init(c(this),a)})},d=c.fn.removeOverscroll=function(a){return this.each(function(){var a=c(this).data(d.removerKey);c.isFunction(a)&&a()})},c.extend(d,{events:{wheel:"mousewheel DOMMouseScroll",start:"select mousedown touchstart",drag:"mousemove touchmove",end:"mouseup mouseleave touchend",ignored:"dragstart drag"},div:"<div/>",removerKey:"overscroll-remover",constants:{driftFrequency:40,driftSequences:22,driftDecay:1.15,driftTimeout:100,timeout:400,captureThreshold:3,wheelDelta:20,scrollDelta:15,thumbThickness:8,thumbOpacity:.7,boundingBox:1e6},checkIosDevice:function(){d.isIOS===undefined&&(d.isIOS=/iP((hone)|(ad)|(od))/.test(navigator.platform));return d.isIOS},init:function(a){var e={sizing:d.getSizing(a)},f=c.extend({showThumbs:!0,wheelDirection:"vertical",cursor:"move",wheelDelta:d.constants.wheelDelta,scrollDelta:d.constants.scrollDelta,direction:"multi",cancelOn:""},f||{});f.scrollDelta=b.abs(f.scrollDelta),f.wheelDelta=b.abs(f.wheelDelta),a.removeOverscroll(),a.data(d.removerKey,d.remover(a,e)),a.css({position:"relative",overflow:"hidden",cursor:f.cursor}).bind(d.events.wheel,e,d.wheel).bind(d.events.start,e,d.start).bind(d.events.end,e,d.stop).bind(d.events.ignored,!1),f.showThumbs&&(e.thumbs={},e.sizing.container.scrollWidth>0&&f.direction!=="vertical"&&(e.thumbs.horizontal=c(d.div).css(d.getThumbCss(e.sizing.thumbs.horizontal)).fadeTo(0,0),a.prepend(e.thumbs.horizontal)),e.sizing.container.scrollHeight>0&&f.direction!=="horizontal"&&(e.thumbs.vertical=c(d.div).css(d.getThumbCss(e.sizing.thumbs.vertical)).fadeTo(0,0),a.prepend(e.thumbs.vertical))),e.target=a,e.options=f},remover:function(a,b){return function(){a.css({overflow:"auto",cursor:"default"}).unbind(d.events.wheel,d.wheel).unbind(d.events.start,b,d.start).unbind(d.events.end,b,d.stop).unbind(d.events.ignored,!1),b.thumbs&&(b.thumbs.horizontal&&b.thumbs.horizontal.remove(),b.thumbs.vertical&&b.thumbs.vertical.remove())}},triggerEvent:function(a,b){b.target.trigger("overscroll:"+a)},toggleThumbs:function(a,b){a.thumbs&&(b?(a.thumbs.vertical&&a.thumbs.vertical.stop(!0,!0).fadeTo("fast",d.constants.thumbOpacity),a.thumbs.horizontal&&a.thumbs.horizontal.stop(!0,!0).fadeTo("fast",d.constants.thumbOpacity)):(a.thumbs.vertical&&a.thumbs.vertical.fadeTo("fast",0),a.thumbs.horizontal&&a.thumbs.horizontal.fadeTo("fast",0)))},setPosition:function(a,b,c){b.x=a.pageX,b.y=a.pageY,b.time=d.time(),b.index=c;return b},wheel:function(b,c){d.clearInterval(b.data.target),b.wheelDelta&&(c=b.wheelDelta/(a.opera?-120:120)),b.detail&&(c=-b.detail/3),b.data.wheelCapture||(b.data.wheelCapture={timeout:null},d.toggleThumbs(b.data,!0),b.data.target.stop(!0,!0).data("dragging",!0)),c*=b.data.options.wheelDelta,b.data.options.wheelDirection==="horizontal"?this.scrollLeft-=c:this.scrollTop-=c,d.moveThumbs(b,this.scrollLeft,this.scrollTop),b.data.wheelCapture.timeout&&clearTimeout(b.data.wheelCapture.timeout),b.data.wheelCapture.timeout=setTimeout(function(a){b.data.wheelCapture=undefined,d.toggleThumbs(b.data,!1),b.data.target.data("dragging",!1)},d.constants.timeout);return!1},moveThumbs:function(a,b,c,d,e,f,g){a.data.options.showThumbs&&(d=a.data.thumbs,e=a.data.sizing,d.horizontal&&(f=b*(1+e.container.width/e.container.scrollWidth),g=c+e.thumbs.horizontal.top,d.horizontal.css("margin",g+"px 0 0 "+f+"px")),d.vertical&&(f=b+e.thumbs.vertical.left,g=c*(1+e.container.height/e.container.scrollHeight),d.vertical.css("margin",g+"px 0 0 "+f+"px")))},start:function(a){d.clearInterval(a.data.target);if(!c(a.target).is(a.data.options.cancelOn)){d.normalizeEvent(a),a.data.target.bind(d.events.drag,a.data,d.drag).stop(!0,!0).data("dragging",!1),a.data.position=d.setPosition(a,{}),a.data.capture=d.setPosition(a,{},2),d.triggerEvent("dragstart",a.data);return!1}},drag:function(a,b,c,e,f){d.normalizeEvent(a),a.data.target.data("dragging")||d.toggleThumbs(a.data,!0),a.data.options.direction!=="vertical"&&(this.scrollLeft-=a.pageX-a.data.position.x),a.data.options.direction!=="horizontal"&&(this.scrollTop-=a.pageY-a.data.position.y),d.moveThumbs(a,this.scrollLeft,this.scrollTop),d.setPosition(a,a.data.position),--a.data.capture.index<=0&&(a.data.target.data("dragging",!0),d.setPosition(a,a.data.capture,d.constants.captureThreshold));return!0},normalizeEvent:function(a){if(d.checkIosDevice()){var b=a.originalEvent.changedTouches[0];a.pageX=b.pageX,a.pageY=b.pageY}},time:function(){return(new Date).getTime()},stop:function(a,b,c,e){a.data.position&&(a.data.target.unbind(d.events.drag,d.drag),d.triggerEvent("dragend",a.data),a.data.target.data("dragging")?d.drift(this,a,function(a){a.target.data("dragging",!1),d.toggleThumbs(a,!1)}):(a.data.target.data("dragging",!1),d.toggleThumbs(a.data,!1)),a.data.capture=a.data.position=undefined);return!a.data.target.data("dragging")},clearInterval:function(b){b=c(b);var d=b.data("overscroll-interval");d&&a.clearInterval(d),b.data("overscroll-interval",null)},setInterval:function(a,b){d.clearInterval(a),c(a).data("overscroll-interval",b)},drift:function(b,c,e){if(d.time()-c.data.capture.time>d.constants.driftTimeout)return e.call(null,c.data);d.normalizeEvent(c);var f=c.data.options.scrollDelta*(c.pageX-c.data.capture.x),g=c.data.options.scrollDelta*(c.pageY-c.data.capture.y),h=b.scrollLeft,i=b.scrollTop,j=f/d.constants.driftSequences,k=g/d.constants.driftSequences,l=d.constants.driftDecay;c.data.options.direction!=="vertical"&&(h-=f),c.data.options.direction!=="horizontal"&&(i-=g),d.triggerEvent("driftstart",c.data),d.setInterval(b,a.setInterval(function(){var a=!0,f=1,g=-1;if(k>f&&b.scrollTop>i||k<g&&b.scrollTop<i)a=!1,b.scrollTop-=k,k/=l;if(j>f&&b.scrollLeft>h||j<g&&b.scrollLeft<h)a=!1,b.scrollLeft-=j,j/=l;d.moveThumbs(c,b.scrollLeft,b.scrollTop),a&&(d.clearInterval(b),d.triggerEvent("driftend",c.data),e.call(null,c.data))},d.constants.driftFrequency))},getSizing:function(a){var b={left:a.scrollLeft(),top:a.scrollTop()},c={};c.container={width:a.width(),height:a.height()},a.scrollLeft(d.constants.boundingBox).scrollTop(d.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:d.constants.thumbThickness,corner:d.constants.thumbThickness/2,left:0,top:c.container.height-d.constants.thumbThickness},vertical:{width:d.constants.thumbThickness,height:c.container.height*c.container.height/c.container.scrollHeight,corner:d.constants.thumbThickness/2,left:c.container.width-d.constants.thumbThickness,top:0}},c.container.width-=c.thumbs.horizontal.width,c.container.height-=c.thumbs.vertical.height,a.scrollTop(b.top).scrollLeft(b.left);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)
