// smoothscroll v1.2.1 var defaultoptions={framerate:150,animationtime:800,stepsize:120,pulsealgorithm:true,pulsescale:8,pulsenormalize:1,accelerationdelta:20,accelerationmax:1,keyboardsupport:true,arrowscroll:50,touchpadsupport:true,fixedbackground:true,excluded:""};var options=defaultoptions;var isexcluded=false;var isframe=false;var direction={x:0,y:0};var initdone=false;var root=document.documentelement;var activeelement;var observer;var deltabuffer=[120,120,120];var key={left:37,up:38,right:39,down:40,spacebar:32,pageup:33,pagedown:34,end:35,home:36};inittest();function inittest(){var disablekeyboard=false;if(document.url.indexof("google.com/reader/view")>-1){disablekeyboard=true}if(options.excluded){var domains=options.excluded.split(/[,\n] ?/);domains.push("mail.google.com");for(var i=domains.length;i--;){if(document.url.indexof(domains[i])>-1){observer&&observer.disconnect();removeevent("mousewheel",wheel);disablekeyboard=true;isexcluded=true;break}}}if(disablekeyboard){removeevent("keydown",keydown)}if(options.keyboardsupport&&!disablekeyboard){addevent("keydown",keydown)}}function init(){if(!document.body){return}var body=document.body;var html=document.documentelement;var windowheight=window.innerheight;var scrollheight=body.scrollheight;root=(document.compatmode.indexof("css")>=0)?html:body;activeelement=body;inittest();initdone=true;if(top!=self){isframe=true}else{if(scrollheight>windowheight&&(body.offsetheight<=windowheight||html.offsetheight<=windowheight)){var pending=false;var refresh=function(){if(!pending&&html.scrollheight!=document.height){pending=true;settimeout(function(){html.style.height=document.height+"px";pending=false},500)}};html.style.height="auto";settimeout(refresh,10);var config={attributes:true,childlist:true,characterdata:false};observer=new mutationobserver(refresh);observer.observe(body,config);if(root.offsetheight<=windowheight){var underlay=document.createelement("div");underlay.style.clear="both";body.appendchild(underlay)}}}}var que=[];var pending=false;var lastscroll=+new date;function scrollarray(elem,left,top,delay){delay||(delay=1000);directioncheck(left,top);if(options.accelerationmax!=1){var now=+new date;var elapsed=now-lastscroll;if(elapsed1){factor=math.min(factor,options.accelerationmax);left*=factor;top*=factor}}lastscroll=+new date}que.push({x:left,y:top,lastx:(left<0)?0.99:-0.99,lasty:(top<0)?0.99:-0.99,start:+new date});if(pending){return}var scrollwindow=(elem===document.body);var step=function(time){var now=+new date;var scrollx=0;var scrolly=0;for(var i=0;i=options.animationtime);var position=(finished)?1:elapsed/options.animationtime;if(options.pulsealgorithm){position=pulse(position)}var x=(item.x*position-item.lastx)>>0;var y=(item.y*position-item.lasty)>>0;scrollx+=x;scrolly+=y;item.lastx+=x;item.lasty+=y;if(finished){que.splice(i,1);i--}}if(scrollwindow){window.scrollby(scrollx,scrolly)}else{if(scrollx){elem.scrollleft+=scrollx}if(scrolly){elem.scrolltop+=scrolly}}if(!left&&!top){que=[]}if(que.length){requestframe(step,elem,(delay/options.framerate+1))}else{pending=false}};requestframe(step,elem,0);pending=true}function wheel(event){if(!initdone){init()}var target=event.target;var overflowing=overflowingancestor(target);if(!overflowing||event.defaultprevented||isnodename(activeelement,"embed")||(isnodename(target,"embed")&&/\.pdf/i.test(target.src))){return true}var deltax=event.wheeldeltax||0;var deltay=event.wheeldeltay||0;if(!deltax&&!deltay){deltay=event.wheeldelta||0}if(!options.touchpadsupport&&istouchpad(deltay)){return true}if(math.abs(deltax)>1.2){deltax*=options.stepsize/120}if(math.abs(deltay)>1.2){deltay*=options.stepsize/120}scrollarray(overflowing,-deltax,-deltay);event.preventdefault()}function keydown(event){var target=event.target;var modifier=event.ctrlkey||event.altkey||event.metakey||(event.shiftkey&&event.keycode!==key.spacebar);if(/input|textarea|select|embed/i.test(target.nodename)||target.iscontenteditable||event.defaultprevented||modifier){return true}if(isnodename(target,"button")&&event.keycode===key.spacebar){return true}var shift,x=0,y=0;var elem=overflowingancestor(activeelement);var clientheight=elem.clientheight;if(elem==document.body){clientheight=window.innerheight}switch(event.keycode){case key.up:y=-options.arrowscroll;break;case key.down:y=options.arrowscroll;break;case key.spacebar:shift=event.shiftkey?1:-1;y=-shift*clientheight*0.9;break;case key.pageup:y=-clientheight*0.9;break;case key.pagedown:y=clientheight*0.9;break;case key.home:y=-elem.scrolltop;break;case key.end:var damt=elem.scrollheight-elem.scrolltop-clientheight;y=(damt>0)?damt+10:0;break;case key.left:x=-options.arrowscroll;break;case key.right:x=options.arrowscroll;break;default:return true}scrollarray(elem,x,y);event.preventdefault()}function mousedown(event){activeelement=event.target}var cache={};setinterval(function(){cache={}},10*1000);var uniqueid=(function(){var i=0;return function(el){return el.uniqueid||(el.uniqueid=i++)}})();function setcache(elems,overflowing){for(var i=elems.length;i--;){cache[uniqueid(elems[i])]=overflowing}return overflowing}function overflowingancestor(el){var elems=[];var rootscrollheight=root.scrollheight;do{var cached=cache[uniqueid(el)];if(cached){return setcache(elems,cached)}elems.push(el);if(rootscrollheight===el.scrollheight){if(!isframe||root.clientheight+100)?1:-1;y=(y>0)?1:-1;if(direction.x!==x||direction.y!==y){direction.x=x;direction.y=y;que=[];lastscroll=0}}var deltabuffertimer;function istouchpad(deltay){if(!deltay){return}deltay=math.abs(deltay);deltabuffer.push(deltay);deltabuffer.shift();var allequals=(deltabuffer[0]==deltabuffer[1]&&deltabuffer[1]==deltabuffer[2]);var alldivisable=(isdivisible(deltabuffer[0],120)&&isdivisible(deltabuffer[1],120)&&isdivisible(deltabuffer[2],120));return !(allequals||alldivisable)}function isdivisible(n,divisor){return(math.floor(n/divisor)==n/divisor)}var requestframe=(function(){return window.requestanimationframe||window.webkitrequestanimationframe||function(callback,element,delay){window.settimeout(callback,delay||(1000/60))}})();var mutationobserver=window.mutationobserver||window.webkitmutationobserver;function pulse_(x){var val,start,expx;x=x*options.pulsescale;if(x<1){val=x-(1-math.exp(-x))}else{start=math.exp(-1);x-=1;expx=1-math.exp(-x);val=start+(expx*(1-start))}return val*options.pulsenormalize}function pulse(x){if(x>=1){return 1}if(x<=0){return 0}if(options.pulsenormalize==1){options.pulsenormalize/=pulse_(1)}return pulse_(x)}addevent("mousedown",mousedown);addevent("mousewheel",wheel);addevent("load",init);