(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),tt==-1&&(tt=h),f=r.css("position"),v=!0,u.options.bottom!=-1&&(r.trigger("preFixed.ScrollToFixed"),b(),r.trigger("fixed.ScrollToFixed"))}function it(){var n=u.options.limit;return n?typeof n=="function"?n.apply(r):n:0}function l(){return f==="fixed"}function rt(){return f==="absolute"}function a(){return!(l()||rt())}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 ut(){var n=it(),t=h;u.options.removeOffsets&&(t="",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(){a()||(c=-1,e.css("display","none"),r.css({width:"",position:p,left:"",top:nt,"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=v,v||et();var f=n(window).scrollLeft(),e=n(window).scrollTop(),i=it();u.options.minWidth&&n(window).width()<u.options.minWidth?a()&&t||(s(),r.trigger("preUnfixed.ScrollToFixed"),o(),r.trigger("unfixed.ScrollToFixed")):u.options.maxWidth&&n(window).width()>u.options.maxWidth?a()&&t||(s(),r.trigger("preUnfixed.ScrollToFixed"),o(),r.trigger("unfixed.ScrollToFixed")):u.options.bottom==-1?i>0&&e>=i-y()?rt()&&t||(s(),r.trigger("preAbsolute.ScrollToFixed"),ut(),r.trigger("unfixed.ScrollToFixed")):e>=w-y()?(l()&&t||(s(),r.trigger("preFixed.ScrollToFixed"),b(),c=-1,r.trigger("fixed.ScrollToFixed")),k(f)):a()&&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"?ut():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 v=!1,r=u.$el,f,p,nt,w=0,h=0,tt=-1,c=-1,e=null,ht,ct;var g=function(){r.is(":visible")&&(v=!1,d())},ft=function(){d()},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},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"),nt=r.css("top"),a()&&u.$el.after(e),n(window).bind("resize.ScrollToFixed",g),n(window).bind("scroll.ScrollToFixed",ft),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",ft),r.unbind(".ScrollToFixed"),e.remove(),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)