(function($){var version="1.1";var locationPath=filterPath(location.pathname+location.search);$.fn.extend({smoothScroll:function(options){this.each(function(){var opts=$.extend({},$.fn.smoothScroll.defaults,options);$(this).bind("click",function(event){var link=this,$link=$(this),hostMatch=((location.hostname===link.hostname)||!link.hostname),pathMatch=opts.scrollTarget||(filterPath(link.pathname+link.search)||locationPath)===locationPath,thisHash=link.hash&&"#"+link.hash.replace("#",""),include=true;if(!opts.scrollTarget&&(!hostMatch||!pathMatch||thisHash.length<=1)){include=false;}else{var exclude=opts.exclude,elCounter=0,el=exclude.length;while(include&&elCounter<el){if($link.is(exclude[elCounter++])){include=false;}}var excludeWithin=opts.excludeWithin,ewlCounter=0,ewl=excludeWithin.length;while(include&&ewlCounter<ewl){if($link.parents(excludeWithin[ewlCounter++]+":first").length){include=false;}}}if(include){opts.scrollTarget=opts.scrollTarget||thisHash;opts.link=link;event.preventDefault();$.smoothScroll(opts);}});});return this;}});$.smoothScroll=function(options,px){var opts,scrollTargetOffset,scrollElem=scrollableElement("html","body");if(typeof options==="number"){opts=$.fn.smoothScroll.defaults;scrollTargetOffset=options;}else{opts=$.extend({},$.fn.smoothScroll.defaults,options);scrollTargetOffset=px||$(opts.scrollTarget).offset().top;}opts=$.extend({link:null},opts);$(scrollElem).animate({scrollTop:scrollTargetOffset+opts.offset},{duration:opts.speed,easing:opts.easing,complete:function(){if(opts.afterScroll&&$.isFunction(opts.afterScroll)){opts.afterScroll.call(opts.link,opts);}}});};$.smoothScroll.version=version;$.fn.smoothScroll.defaults={exclude:[],excludeWithin:[],offset:0,scrollTarget:null,afterScroll:null,easing:"swing",speed:400};function scrollableElement(els){for(var i=0,argLength=arguments.length;i<argLength;i++){var el=arguments[i],$scrollElement=$(el);if($scrollElement.scrollTop()>0){return el;}else{$scrollElement.scrollTop(1);var isScrollable=$scrollElement.scrollTop()>0;$scrollElement.scrollTop(0);if(isScrollable){return el;}}}return[];}function filterPath(string){return string.replace(/^\//,"").replace(/(index|default).[a-zA-Z]{3,4}$/,"").replace(/\/$/,"");}})(jQuery);
