/**
 * 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);
