; (function ($){ var URI = _AN_Call_replace('replace', _AN_Read_href('href', _AN_Read_location('location', window)), /#.*/, ''); var $localScroll = $.localScroll = function (settings){ $('body').localScroll(settings); } ; $localScroll.defaults = { duration: 1000, axis: 'y', event: 'click', stop: true , target: window, reset: true } ; $localScroll.hash = function (settings){ if (_AN_Read_location('location', window).hash) { settings = $.extend({ } , $localScroll.defaults, settings); _AN_Write_hash('hash', settings, false , false ); if (settings.reset) { var d = settings.duration; delete settings.duration; $(_AN_Read_target('target', settings)).scrollTo(0, settings); settings.duration = d; } scroll(0, _AN_Read_location('location', window), settings); } } ; $.fn.localScroll = function (settings){ settings = $.extend({ } , $localScroll.defaults, settings); return settings.lazy? this.bind(settings.event, function (e){ var a = $([_AN_Read_target('target', e), _AN_Read_target('target', e).parentNode] ).filter(filter)[0]; if (a) scroll(e, a, settings); } ): this.find('a,area').filter(filter).bind(settings.event, function (e){ scroll(e, this, settings); } ).end().end(); function filter(){ return !!_AN_Read_href('href', this) && !!_AN_Read_hash('hash', this) && _AN_Call_replace('replace', _AN_Read_href('href', this), _AN_Read_hash('hash', this), '') == URI && (!settings.filter || $(this).is(settings.filter)); } ; } ; function scroll(e, link, settings){ var id = _AN_Read_hash('hash', link).slice(1), elem = document.getElementById(id) || document.getElementsByName(id)[0]; if (!elem) return ; if (e) e.preventDefault(); var $target = $(_AN_Read_target('target', settings)); if (settings.lock && $target.is(':animated') || settings.onBefore && settings.onBefore(e, elem, $target) === false ) return ; if (settings.stop) $target._scrollable().stop(true ); if (settings.hash) { var attr = elem.id == id? 'id': 'name', $a = $(' ').attr(attr, id).css({ position: 'absolute', top: $(window).scrollTop(), left: $(window).scrollLeft()} ); elem[attr] = ''; $('body').prepend($a); _AN_Write_location('location', window, false , _AN_Read_hash('hash', link)); $a.remove(); elem[attr] = id; } $target.scrollTo(elem, settings).trigger('notify.serialScroll', [elem] ); } ; } )(jQuery);