(function(n){n.isScrollToFixed=function(t){return!!n(t).data("ScrollToFixed")};n.ScrollToFixed=function(t,i){function st(){r.trigger("preUnfixed.ScrollToFixed");f();r.trigger("unfixed.ScrollToFixed");l=-1;p=r.offset().top;c=r.offset().left;u.options.offsets&&(c+=r.offset().left-r.position().left);it==-1&&(it=c);e=r.css("position");y=!0;u.options.bottom!=-1&&(r.trigger("preFixed.ScrollToFixed"),k(),r.trigger("fixed.ScrollToFixed"))}function rt(){var n=u.options.limit;return n?typeof n=="function"?n.apply(r):n:0}function a(){return e==="fixed"}function ut(){return e==="absolute"}function s(){return!(a()||ut())}function k(){if(!a()){var n=r[0].getBoundingClientRect();o.css({display:r.css("display"),width:n.width,height:n.height,float:r.css("float")});cssOptions={"z-index":u.options.zIndex,position:"fixed",top:u.options.bottom==-1?w():"",bottom:u.options.bottom==-1?"":u.options.bottom,"margin-left":"0px"};u.options.dontSetWidth||(cssOptions.width=r.css("width"));r.css(cssOptions);r.addClass(u.options.baseClassName);u.options.className&&r.addClass(u.options.className);e="fixed"}}function ft(){var n=rt(),t=c;u.options.removeOffsets&&(t="",n=n-p);cssOptions={position:"absolute",top:n,left:t,"margin-left":"0px",bottom:""};u.options.dontSetWidth||(cssOptions.width=r.css("width"));r.css(cssOptions);e="absolute"}function f(){s()||(l=-1,o.css("display","none"),r.css({"z-index":tt,width:"",position:b,left:"",top:nt,"margin-left":""}),r.removeClass("scroll-to-fixed-fixed"),u.options.className&&r.removeClass(u.options.className),e=null)}function d(n){n!=l&&(r.css("left",c-n),l=n)}function w(){var n=u.options.marginTop;return n?typeof n=="function"?n.apply(r):n:0}function v(){var t,v;if(n.isScrollToFixed(r)&&!r.is(":hidden")){t=y;v=s();y?s()&&(p=r.offset().top,c=r.offset().left):st();var e=n(window).scrollLeft(),o=n(window).scrollTop(),i=rt();u.options.minWidth&&n(window).width()<u.options.minWidth?s()&&t||(h(),r.trigger("preUnfixed.ScrollToFixed"),f(),r.trigger("unfixed.ScrollToFixed")):u.options.maxWidth&&n(window).width()>u.options.maxWidth?s()&&t||(h(),r.trigger("preUnfixed.ScrollToFixed"),f(),r.trigger("unfixed.ScrollToFixed")):u.options.bottom==-1?i>0&&o>=i-w()?v||ut()&&t||(h(),r.trigger("preAbsolute.ScrollToFixed"),ft(),r.trigger("unfixed.ScrollToFixed")):o>=p-w()?(a()&&t||(h(),r.trigger("preFixed.ScrollToFixed"),k(),l=-1,r.trigger("fixed.ScrollToFixed")),d(e)):s()&&t||(h(),r.trigger("preUnfixed.ScrollToFixed"),f(),r.trigger("unfixed.ScrollToFixed")):i>0?o+n(window).height()-r.outerHeight(!0)>=i-(w()||-ht())?a()&&(h(),r.trigger("preUnfixed.ScrollToFixed"),b==="absolute"?ft():f(),r.trigger("unfixed.ScrollToFixed")):(a()||(h(),r.trigger("preFixed.ScrollToFixed"),k()),d(e),r.trigger("fixed.ScrollToFixed")):d(e)}}function ht(){return u.options.bottom?u.options.bottom:0}function h(){var n=r.css("position");n=="absolute"?r.trigger("postAbsolute.ScrollToFixed"):n=="fixed"?r.trigger("postFixed.ScrollToFixed"):r.trigger("postUnfixed.ScrollToFixed")}var u=this;u.$el=n(t);u.el=t;u.$el.data("ScrollToFixed",u);var y=!1,r=u.$el,e,b,ot,nt,tt,p=0,c=0,it=-1,l=-1,o=null;var g=function(){r.is(":visible")?(y=!1,v()):f()},et=function(){!window.requestAnimationFrame?v():requestAnimationFrame(v)},lt=function(){var n=document.body,t,i,r,u,f;return document.createElement&&n&&n.appendChild&&n.removeChild?(t=document.createElement("div"),!t.getBoundingClientRect)?null:(t.innerHTML="x",t.style.cssText="position:fixed;top:100px;",n.appendChild(t),i=n.style.height,r=n.scrollTop,n.style.height="3000px",n.scrollTop=500,u=t.getBoundingClientRect().top,n.style.height=i,f=u===100,n.removeChild(t),n.scrollTop=r,f):null},ct=function(n){n=n||window.event;n.preventDefault&&n.preventDefault();n.returnValue=!1};u.init=function(){u.options=n.extend({},n.ScrollToFixed.defaultOptions,i);tt=r.css("z-index");u.$el.css("z-index",u.options.zIndex);o=n("<div />");e=r.css("position");b=r.css("position");ot=r.css("float");nt=r.css("top");s()&&u.$el.after(o);n(window).bind("resize.ScrollToFixed",g);n(window).bind("scroll.ScrollToFixed",et);"ontouchmove"in window&&n(window).bind("touchmove.ScrollToFixed",v);u.options.preFixed&&r.bind("preFixed.ScrollToFixed",u.options.preFixed);u.options.postFixed&&r.bind("postFixed.ScrollToFixed",u.options.postFixed);u.options.preUnfixed&&r.bind("preUnfixed.ScrollToFixed",u.options.preUnfixed);u.options.postUnfixed&&r.bind("postUnfixed.ScrollToFixed",u.options.postUnfixed);u.options.preAbsolute&&r.bind("preAbsolute.ScrollToFixed",u.options.preAbsolute);u.options.postAbsolute&&r.bind("postAbsolute.ScrollToFixed",u.options.postAbsolute);u.options.fixed&&r.bind("fixed.ScrollToFixed",u.options.fixed);u.options.unfixed&&r.bind("unfixed.ScrollToFixed",u.options.unfixed);u.options.spacerClass&&o.addClass(u.options.spacerClass);r.bind("resize.ScrollToFixed",function(){o.height(r.height())});r.bind("scroll.ScrollToFixed",function(){r.trigger("preUnfixed.ScrollToFixed");f();r.trigger("unfixed.ScrollToFixed");v()});r.bind("detach.ScrollToFixed",function(t){ct(t);r.trigger("preUnfixed.ScrollToFixed");f();r.trigger("unfixed.ScrollToFixed");n(window).unbind("resize.ScrollToFixed",g);n(window).unbind("scroll.ScrollToFixed",et);r.unbind(".ScrollToFixed");o.remove();u.$el.removeData("ScrollToFixed")});g()};u.init()};n.ScrollToFixed.defaultOptions={marginTop:0,limit:0,bottom:-1,zIndex:1e3,baseClassName:"scroll-to-fixed-fixed"};n.fn.scrollToFixed=function(t){return this.each(function(){new n.ScrollToFixed(this,t)})}})(jQuery)