/**
 * 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,
		interval: 5e3,
		force: true
	};
	$.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);
