(function(n){n.isScrollToFixed=function(t){return!!n(t).data("ScrollToFixed")};n.ScrollToFixed=function(t,i){function et(){r.trigger("preUnfixed.ScrollToFixed");o();r.trigger("unfixed.ScrollToFixed");c=-1;w=r.offset().top;h=r.offset().left;u.options.offsets&&(h+=r.offset().left-r.position().left);nt==-1&&(nt=h);f=r.css("position");a=!0;u.options.bottom!=-1&&(r.trigger("preFixed.ScrollToFixed"),b(),r.trigger("fixed.ScrollToFixed"))}function tt(){var n=u.options.limit;return n?typeof n=="function"?n.apply(r):n:0}function l(){return f==="fixed"}function it(){return f==="absolute"}function v(){return!(l()||it())}function b(){l()||(e.css({display:r.css("display"),width:r.outerWidth(!0),height:r.outerHeight(!0),float:r.css("float")}),cssOptions={position:"fixed",top:u.options.bottom==-1?y():"",bottom:u.options.bottom==-1?"":u.options.bottom,"margin-left":"0px"},u.options.dontSetWidth||(cssOptions.width=r.width()),r.css(cssOptions),r.addClass("scroll-to-fixed-fixed"),u.options.className&&r.addClass(u.options.className),f="fixed")}function rt(){var n=tt(),t=h;u.options.removeOffsets&&(t=0,n=n-w);cssOptions={position:"absolute",top:n,left:t,"margin-left":"0px",bottom:""};u.options.dontSetWidth||(cssOptions.width=r.width());r.css(cssOptions);f="absolute"}function o(){v()||(c=-1,e.css("display","none"),r.css({width:"",position:p,left:"",top:"","margin-left":""}),r.removeClass("scroll-to-fixed-fixed"),u.options.className&&r.removeClass(u.options.className),f=null)}function k(n){n!=c&&(r.css("left",h-n),c=n)}function y(){var n=u.options.marginTop;return n?typeof n=="function"?n.apply(r):n:0}function d(){var t;if(n.isScrollToFixed(r)){t=a;a||et();var f=n(window).scrollLeft(),e=n(window).scrollTop(),i=tt();u.options.minWidth&&n(window).width()<u.options.minWidth?v()&&t||(s(),r.trigger("preUnfixed.ScrollToFixed"),o(),r.trigger("unfixed.ScrollToFixed")):u.options.bottom==-1?i>0&&e>=i-y()?it()&&t||(s(),r.trigger("preAbsolute.ScrollToFixed"),rt(),r.trigger("unfixed.ScrollToFixed")):e>=w-y()?(l()&&t||(s(),r.trigger("preFixed.ScrollToFixed"),b(),c=-1,r.trigger("fixed.ScrollToFixed")),k(f)):v()&&t||(s(),r.trigger("preUnfixed.ScrollToFixed"),o(),r.trigger("unfixed.ScrollToFixed")):i>0?e+n(window).height()-r.outerHeight(!0)>=i-(y()||-ot())?l()&&(s(),r.trigger("preUnfixed.ScrollToFixed"),p==="absolute"?rt():o(),r.trigger("unfixed.ScrollToFixed")):(l()||(s(),r.trigger("preFixed.ScrollToFixed"),b()),k(f),r.trigger("fixed.ScrollToFixed")):k(f)}}function ot(){return u.options.bottom?u.options.bottom:0}function s(){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 a=!1,r=u.$el,f,p,ft,w=0,h=0,nt=-1,c=-1,e=null;var g=function(){r.is(":visible")&&(a=!1,d())},ut=function(){d()},ht=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},st=function(n){n=n||window.event;n.preventDefault&&n.preventDefault();n.returnValue=!1};u.init=function(){u.options=n.extend({},n.ScrollToFixed.defaultOptions,i);u.$el.css("z-index",u.options.zIndex);e=n("<div />");f=r.css("position");p=r.css("position");ft=n.extend({},r.offset());v()&&u.$el.after(e);n(window).bind("resize.ScrollToFixed",g);n(window).bind("scroll.ScrollToFixed",ut);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&&e.addClass(u.options.spacerClass);r.bind("resize.ScrollToFixed",function(){e.height(r.height())});r.bind("scroll.ScrollToFixed",function(){r.trigger("preUnfixed.ScrollToFixed");o();r.trigger("unfixed.ScrollToFixed");d()});r.bind("detach.ScrollToFixed",function(t){st(t);r.trigger("preUnfixed.ScrollToFixed");o();r.trigger("unfixed.ScrollToFixed");n(window).unbind("resize.ScrollToFixed",g);n(window).unbind("scroll.ScrollToFixed",ut);r.unbind(".ScrollToFixed");u.$el.removeData("ScrollToFixed")});g()};u.init()};n.ScrollToFixed.defaultOptions={marginTop:0,limit:0,bottom:-1,zIndex:1e3};n.fn.scrollToFixed=function(t){return this.each(function(){new n.ScrollToFixed(this,t)})}})(jQuery)