﻿/**
* jQuery.ScrollTo - Easy element scrolling using jQuery.
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
* Date: 3/9/2009
* @author Ariel Flesler
* @version 1.4.1
*
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html
*/
; (function($) { var m = $.scrollTo = function(b, h, f) { $(window).scrollTo(b, h, f) }; m.defaults = { axis: 'xy', duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1 }; m.window = function(b) { return $(window).scrollable() }; $.fn.scrollable = function() { return this.map(function() { var b = this, h = !b.nodeName || $.inArray(b.nodeName.toLowerCase(), ['iframe', '#document', 'html', 'body']) != -1; if (!h) return b; var f = (b.contentWindow || b).document || b.ownerDocument || b; return $.browser.safari || f.compatMode == 'BackCompat' ? f.body : f.documentElement }) }; $.fn.scrollTo = function(l, j, a) { if (typeof j == 'object') { a = j; j = 0 } if (typeof a == 'function') a = { onAfter: a }; if (l == 'max') l = 9e9; a = $.extend({}, m.defaults, a); j = j || a.speed || a.duration; a.queue = a.queue && a.axis.length > 1; if (a.queue) j /= 2; a.offset = n(a.offset); a.over = n(a.over); return this.scrollable().each(function() { var k = this, o = $(k), d = l, p, g = {}, q = o.is('html,body'); switch (typeof d) { case 'number': case 'string': if (/^([+-]=)?\d+(\.\d+)?(px)?$/.test(d)) { d = n(d); break } d = $(d, this); case 'object': if (d.is || d.style) p = (d = $(d)).offset() } $.each(a.axis.split(''), function(b, h) { var f = h == 'x' ? 'Left' : 'Top', i = f.toLowerCase(), c = 'scroll' + f, r = k[c], s = h == 'x' ? 'Width' : 'Height'; if (p) { g[c] = p[i] + (q ? 0 : r - o.offset()[i]); if (a.margin) { g[c] -= parseInt(d.css('margin' + f)) || 0; g[c] -= parseInt(d.css('border' + f + 'Width')) || 0 } g[c] += a.offset[i] || 0; if (a.over[i]) g[c] += d[s.toLowerCase()]() * a.over[i] } else g[c] = d[i]; if (/^\d+$/.test(g[c])) g[c] = g[c] <= 0 ? 0 : Math.min(g[c], u(s)); if (!b && a.queue) { if (r != g[c]) t(a.onAfterFirst); delete g[c] } }); t(a.onAfter); function t(b) { o.animate(g, j, a.easing, b && function() { b.call(this, l, a) }) }; function u(b) { var h = 'scroll' + b; if (!q) return k[h]; var f = 'client' + b, i = k.ownerDocument.documentElement, c = k.ownerDocument.body; return Math.max(i[h], c[h]) - Math.min(i[f], c[f]) } }).end() }; function n(b) { return typeof b == 'object' ? b : { top: b, left: b} } })(jQuery);

/**
* jQuery.LocalScroll - Animated scrolling navigation, using anchors.
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
* Date: 3/11/2009
* @author Ariel Flesler
* @version 1.2.7
**/
; (function($) { var l = location.href.replace(/#.*/, ''); var g = $.localScroll = function(a) { $('body').localScroll(a) }; g.defaults = { duration: 1e3, axis: 'y', event: 'click', stop: true, target: window, reset: true }; g.hash = function(a) { if (location.hash) { a = $.extend({}, g.defaults, a); a.hash = false; if (a.reset) { var e = a.duration; delete a.duration; $(a.target).scrollTo(0, a); a.duration = e } i(0, location, a) } }; $.fn.localScroll = function(b) { b = $.extend({}, g.defaults, b); return b.lazy ? this.bind(b.event, function(a) { var e = $([a.target, a.target.parentNode]).filter(d)[0]; if (e) i(a, e, b) }) : this.find('a,area').filter(d).bind(b.event, function(a) { i(a, this, b) }).end().end(); function d() { return !!this.href && !!this.hash && this.href.replace(this.hash, '') == l && (!b.filter || $(this).is(b.filter)) } }; function i(a, e, b) { var d = e.hash.slice(1), f = document.getElementById(d) || document.getElementsByName(d)[0]; if (!f) return; if (a) a.preventDefault(); var h = $(b.target); if (b.lock && h.is(':animated') || b.onBefore && b.onBefore.call(b, a, f, h) === false) return; if (b.stop) h.stop(true); if (b.hash) { var j = f.id == d ? 'id' : 'name', k = $('<a> </a>').attr(j, d).css({ position: 'absolute', top: $(window).scrollTop(), left: $(window).scrollLeft() }); f[j] = ''; $('body').prepend(k); location = e.hash; k.remove(); f[j] = d } h.scrollTo(f, b).trigger('notify.serialScroll', [f]) } })(jQuery);

/**
* jQuery[a] - Animated scrolling of series
* Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
* Date: 3/20/2008
* @author Ariel Flesler
* @version 1.2.1
*
* http://flesler.blogspot.com/2008/02/jqueryserialscroll.html
*/
; (function($) { var a = 'serialScroll', b = '.' + a, c = 'bind', C = $[a] = function(b) { $.scrollTo.window()[a](b) }; C.defaults = { duration: 1e3, axis: 'x', event: 'click', start: 0, step: 1, lock: 1, cycle: 1, constant: 1 }; $.fn[a] = function(y) { y = $.extend({}, C.defaults, y); var z = y.event, A = y.step, B = y.lazy; return this.each(function() { var j = y.target ? this : document, k = $(y.target || this, j), l = k[0], m = y.items, o = y.start, p = y.interval, q = y.navigation, r; if (!B) m = w(); if (y.force) t({}, o); $(y.prev || [], j)[c](z, -A, s); $(y.next || [], j)[c](z, A, s); if (!l.ssbound) k[c]('prev' + b, -A, s)[c]('next' + b, A, s)[c]('goto' + b, t); if (p) k[c]('start' + b, function(e) { if (!p) { v(); p = 1; u() } })[c]('stop' + b, function() { v(); p = 0 }); k[c]('notify' + b, function(e, a) { var i = x(a); if (i > -1) o = i }); l.ssbound = 1; if (y.jump) (B ? k : w())[c](z, function(e) { t(e, x(e.target)) }); if (q) q = $(q, j)[c](z, function(e) { e.data = Math.round(w().length / q.length) * q.index(this); t(e, this) }); function s(e) { e.data += o; t(e, this) }; function t(e, a) { if (!isNaN(a)) { e.data = a; a = l } var c = e.data, n, d = e.type, f = y.exclude ? w().slice(0, -y.exclude) : w(), g = f.length, h = f[c], i = y.duration; if (d) e.preventDefault(); if (p) { v(); r = setTimeout(u, y.interval) } if (!h) { n = c < 0 ? 0 : n = g - 1; if (o != n) c = n; else if (!y.cycle) return; else c = g - n - 1; h = f[c] } if (!h || d && o == c || y.lock && k.is(':animated') || d && y.onBefore && y.onBefore.call(a, e, h, k, w(), c) === !1) return; if (y.stop) k.queue('fx', []).stop(); if (y.constant) i = Math.abs(i / A * (o - c)); k.scrollTo(h, i, y).trigger('notify' + b, [c]) }; function u() { k.trigger('next' + b) }; function v() { clearTimeout(r) }; function w() { return $(m, l) }; function x(a) { if (!isNaN(a)) return a; var b = w(), i; while ((i = b.index(a)) == -1 && a != l) a = a.parentNode; return i } }) } })(jQuery);
