/*
 * Overscroll v1.3.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.min.js
 *
 * Copyright 2010, Jonathan Azoff
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *  http://jquery.org/license
 *
 * Date: Thursday, August 26th 2010
 */
"use strict";(function(w,m,$,o){o=$.fn.overscroll=function(options){return this.each(function(){o.init($(this),options)})};$.extend(o,{events:{wheel:"mousewheel DOMMouseScroll",start:"select mousedown touchstart",drag:"mousemove touchmove",scroll:"scroll",end:"mouseup mouseleave touchend",ignored:"dragstart drag"},div:"<div/>",noop:function(){return false},constants:{scrollDuration:800,timeout:400,captureThreshold:3,wheelDelta:20,scrollDelta:5.9,thumbThickness:8,thumbOpacity:0.7,boundingBox:1000000},init:function(target,options,data){data={sizing:o.getSizing(target)};options=$.extend({openedCursor:"http://github.com/downloads/azoff/Overscroll/opened.cur",closedCursor:"http://github.com/downloads/azoff/Overscroll/closed.cur",showThumbs:true,wheelDirection:"vertical",wheelDelta:o.constants.wheelDelta,scrollDelta:o.constants.scrollDelta,direction:"multi",onDriftEnd:$.noop},(options||{}));options.scrollDelta=m.abs(options.scrollDelta);options.wheelDelta=m.abs(options.wheelDelta);options.cache={openedCursor:new Image(),closedCursor:new Image()};options.cache.openedCursor.src=options.openedCursor;options.cache.closedCursor.src=options.closedCursor;options.openedCss={cursor:"url('"+options.openedCursor+"'),default"};options.closedCss={cursor:"url('"+options.closedCursor+"'),default"};target.css("overflow","hidden").css(options.openedCss).bind(o.events.wheel,data,o.wheel).bind(o.events.start,data,o.start).bind(o.events.end,data,o.stop).bind(o.events.ignored,o.noop);if(options.showThumbs){data.thumbs={};if(data.sizing.container.scrollWidth>0&&options.direction!=="vertical"){data.thumbs.horizontal=$(o.div).css(o.getThumbCss(data.sizing.thumbs.horizontal)).fadeTo(0,0);target.prepend(data.thumbs.horizontal)}if(data.sizing.container.scrollHeight>0&&options.direction!=="horizontal"){data.thumbs.vertical=$(o.div).css(o.getThumbCss(data.sizing.thumbs.vertical)).fadeTo(0,0);target.prepend(data.thumbs.vertical)}data.sizing.relative=data.thumbs.vertical||data.thumbs.horizontal;if(data.sizing.relative){data.sizing.relative.oldOffset=data.sizing.relative.offset();target.scrollTop(o.constants.boundingBox).scrollLeft(o.constants.boundingBox);data.sizing.relative.remove().prependTo(target);data.sizing.relative.newOffset=data.sizing.relative.offset();data.sizing.relative=data.sizing.relative.oldOffset.left!=data.sizing.relative.newOffset.left||data.sizing.relative.oldOffset.top!=data.sizing.relative.newOffset.top;target.scrollTop(0).scrollLeft(0);target.bind(o.events.scroll,data,o.scroll)}}data.target=target;data.options=options},toggleDragMode:function(data,dragging){if(dragging){data.target.css(data.options.closedCss)}else{data.target.css(data.options.openedCss)}if(data.thumbs){if(dragging){if(data.thumbs.vertical){data.thumbs.vertical.stop(true,true).fadeTo("fast",o.constants.thumbOpacity)}if(data.thumbs.horizontal){data.thumbs.horizontal.stop(true,true).fadeTo("fast",o.constants.thumbOpacity)}}else{if(data.thumbs.vertical){data.thumbs.vertical.fadeTo("fast",0)}if(data.thumbs.horizontal){data.thumbs.horizontal.fadeTo("fast",0)}}}},setPosition:function(event,position,index){position.x=event.pageX;position.y=event.pageY;position.index=index;return position},wheel:function(event,delta){if(event.wheelDelta){delta=event.wheelDelta/(w.opera?-120:120)}if(event.detail){delta=-event.detail/3}if(!event.data.wheelCapture){event.data.wheelCapture={timeout:null};o.toggleDragMode(event.data,true);event.data.target.stop(true,true).data("dragging",true)}delta*=event.data.options.wheelDelta;if(event.data.options.wheelDirection==="horizontal"){this.scrollLeft-=delta}else{this.scrollTop-=delta}if(event.data.wheelCapture.timeout){clearTimeout(event.data.wheelCapture.timeout)}event.data.wheelCapture.timeout=setTimeout(function(d){event.data.wheelCapture=undefined;o.toggleDragMode(event.data,false);event.data.target.data("dragging",false);event.data.options.onDriftEnd.call(event.data.target,event.data)},o.constants.timeout);return false},scroll:function(event,thumbs,sizing,left,top,ml,mt){thumbs=event.data.thumbs;sizing=event.data.sizing;left=this.scrollLeft;top=this.scrollTop;if(thumbs.horizontal){ml=left*sizing.container.width/sizing.container.scrollWidth;mt=sizing.thumbs.horizontal.top;if(sizing.relative){ml+=left;mt+=top}thumbs.horizontal.css("margin",mt+"px 0 0 "+ml+"px")}if(thumbs.vertical){ml=sizing.thumbs.vertical.left;mt=top*sizing.container.height/sizing.container.scrollHeight;if(sizing.relative){ml+=left;mt+=top}thumbs.vertical.css("margin",mt+"px 0 0 "+ml+"px")}},start:function(event){event.data.target.bind(o.events.drag,event.data,o.drag).stop(true,true).data("dragging",false);o.toggleDragMode(event.data,true);event.data.position=o.setPosition(event,{});event.data.capture=o.setPosition(event,{},2);return false},drag:function(event,ml,mt,left,top){if(event.data.options.direction!=="vertical"){this.scrollLeft-=(event.pageX-event.data.position.x)}if(event.data.options.direction!=="horizontal"){this.scrollTop-=(event.pageY-event.data.position.y)}o.setPosition(event,event.data.position);if(--event.data.capture.index<=0){event.data.target.data("dragging",true);o.setPosition(event,event.data.capture,o.constants.captureThreshold)}return true},stop:function(event,dx,dy,d){if(event.data.position){event.data.target.unbind(o.events.drag,o.drag);if(event.data.target.data("dragging")){dx=event.data.options.scrollDelta*(event.pageX-event.data.capture.x);dy=event.data.options.scrollDelta*(event.pageY-event.data.capture.y);d={};if(event.data.options.direction!=="vertical"){d.scrollLeft=this.scrollLeft-dx}if(event.data.options.direction!=="horizontal"){d.scrollTop=this.scrollTop-dy}event.data.target.animate(d,{duration:o.constants.scrollDuration,easing:"cubicEaseOut",complete:function(){event.data.target.data("dragging",false);event.data.options.onDriftEnd.call(event.data.target,event.data);o.toggleDragMode(event.data,false)}})}else{o.toggleDragMode(event.data,false)}event.data.capture=event.data.position=undefined}return !event.data.target.data("dragging")},getSizing:function(container,sizing){sizing={};sizing.container={width:container.width(),height:container.height()};container.scrollLeft(o.constants.boundingBox).scrollTop(o.constants.boundingBox);sizing.container.scrollWidth=container.scrollLeft();sizing.container.scrollHeight=container.scrollTop();container.scrollTop(0).scrollLeft(0);sizing.thumbs={horizontal:{width:sizing.container.width*sizing.container.width/sizing.container.scrollWidth,height:o.constants.thumbThickness,corner:o.constants.thumbThickness/2,left:0,top:sizing.container.height-o.constants.thumbThickness},vertical:{width:o.constants.thumbThickness,height:sizing.container.height*sizing.container.height/sizing.container.scrollHeight,corner:o.constants.thumbThickness/2,left:sizing.container.width-o.constants.thumbThickness,top:0}};sizing.container.width-=sizing.thumbs.horizontal.width;sizing.container.height-=sizing.thumbs.vertical.height;return sizing},getThumbCss:function(size){return{position:"absolute","background-color":"black",width:size.width+"px",height:size.height+"px",margin:size.top+"px 0 0 "+size.left+"px","-moz-border-radius":size.corner+"px","-webkit-border-radius":size.corner+"px","border-radius":size.corner+"px"}}});$.extend($.easing,{cubicEaseOut:function(p,n,firstNum,diff){var c=firstNum+diff;return c*((p=p/1-1)*p*p+1)+firstNum}})})(window,Math,jQuery);
