!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):n.stickybits=t()}(this,function(){"use strict";var n=function(){function t(n,t){var i=void 0!==t?t:{},r,u,f,e,s;this.version="3.3.2";this.userAgent=window.navigator.userAgent||"no `userAgent` provided by the browser";this.props={customStickyChangeNumber:i.customStickyChangeNumber||null,noStyles:i.noStyles||!1,stickyBitStickyOffset:i.stickyBitStickyOffset||0,parentClass:i.parentClass||"js-stickybit-parent",scrollEl:document.querySelector(i.scrollEl)||window,stickyClass:i.stickyClass||"js-is-sticky",stuckClass:i.stuckClass||"js-is-stuck",stickyChangeClass:i.stickyChangeClass||"js-is-sticky--change",useStickyClasses:i.useStickyClasses||!1,verticalPosition:i.verticalPosition||"top"};r=this.props;r.positionVal=this.definePosition()||"fixed";var h=r.verticalPosition,c=r.noStyles,o=r.positionVal;for(this.els="string"==typeof n?document.querySelectorAll(n):n,("length"in this.els)||(this.els=[this.els]),this.instances=[],u=0;u<this.els.length;u+=1)f=this.els[u],e=f.style,(e[h]="top"!==h||c?"":r.stickyBitStickyOffset+"px",e.position="fixed"!==o?o:"","fixed"===o||r.useStickyClasses)&&(s=this.addInstance(f,r),this.instances.push(s));return this}var n=t.prototype;return n.definePosition=function(){for(var i,r=["","-o-","-webkit-","-moz-","-ms-"],n=document.head.style,t=0;t<r.length;t+=1)n.position=r[t]+"sticky";return i=n.position?n.position:"fixed",n.position="",i},n.addInstance=function(n,t){var u=this,i={el:n,parent:n.parentNode,props:t},r;return this.isWin=this.props.scrollEl===window,r=this.isWin?window:this.getClosestParent(i.el,i.props.scrollEl),this.computeScrollOffsets(i),i.parent.className+=" "+t.parentClass,i.state="default",i.stateContainer=function(){return u.manageState(i)},r.addEventListener("scroll",i.stateContainer),i},n.getClosestParent=function(n,t){var i=t,r=n;if(r.parentElement===i)return i;for(;r.parentElement!==i;)r=r.parentElement;return i},n.getOffsetTop=function(n){var t=0;do t=n.offsetTop+t;while(n=n.offsetParent);return t},n.computeScrollOffsets=function(n){var t=n,i=t.props,s=t.el,r=t.parent,f=!this.isWin&&"fixed"===i.positionVal,e="bottom"!==i.verticalPosition,o=f?this.getOffsetTop(i.scrollEl):0,u=f?this.getOffsetTop(r)-o:this.getOffsetTop(r),h=null!==i.customStickyChangeNumber?i.customStickyChangeNumber:s.offsetHeight;return t.offset=o+i.stickyBitStickyOffset,t.stickyStart=e?u-t.offset:0,t.stickyChange=t.stickyStart+h,t.stickyStop=e?u+r.offsetHeight-(t.el.offsetHeight+t.offset):u+r.offsetHeight,t},n.toggleClasses=function(n,t,i){var f=n,r=f.className.split(" "),u;i&&-1===r.indexOf(i)&&r.push(i);u=r.indexOf(t);-1!==u&&r.splice(u,1);f.className=r.join(" ")},n.manageState=function(n){var t=n,f=t.el,i=t.props,s=t.state,a=t.stickyStart,v=t.stickyChange,h=t.stickyStop,u=f.style,y=i.noStyles,c=i.positionVal,k=i.scrollEl,l=i.stickyClass,p=i.stickyChangeClass,w=i.stuckClass,d=i.verticalPosition,g=function(n){n()},e=this.isWin&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame)||g,o=this.toggleClasses,r=this.isWin?window.scrollY||window.pageYOffset:k.scrollTop,nt=r<=a&&"sticky"===s,tt=r>=h&&"sticky"===s,b;return r>a&&r<h&&("default"===s||"stuck"===s)?(t.state="sticky",e(function(){o(f,w,l);u.position=c;y||(u.bottom="",u[d]=i.stickyBitStickyOffset+"px")})):nt?(t.state="default",e(function(){o(f,l);"fixed"===c&&(u.position="")})):tt&&(t.state="stuck",e(function(){o(f,l,w);"fixed"!==c||y||(u.top="",u.bottom="0",u.position="absolute")})),b=r>=v&&r<=h,r<v||r>h?e(function(){o(f,p)}):b&&e(function(){o(f,"stub",p)}),t},n.update=function(){for(var t,n=0;n<this.instances.length;n+=1)t=this.instances[n],this.computeScrollOffsets(t);return this},n.removeInstance=function(n){var t=n.el,i=n.props,r=this.toggleClasses;t.style.position="";t.style[i.verticalPosition]="";r(t,i.stickyClass);r(t,i.stuckClass);r(t.parentNode,i.parentClass)},n.cleanup=function(){for(var n,t=0;t<this.instances.length;t+=1)n=this.instances[t],n.props.scrollEl.removeEventListener("scroll",n.stateContainer),this.removeInstance(n);this.manageState=!1;this.instances=[]},t}();return function(t,i){return new n(t,i)}})