/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Date: 2/19/2008
 * @author Ariel Flesler
 * @version 1.3.3
 */
;
(function ($) {
  var o = $.scrollTo = function (a, b, c) {
      o.window().scrollTo(a, b, c)
      };
  o.defaults = {
    axis: 'y',
    duration: 1
  };
  o.window = function () {
    return $($.browser.safari ? 'body' : 'html')
  };
  $.fn.scrollTo = function (l, m, n) {
    if (typeof m == 'object') {
      n = m;
      m = 0
    }
    n = $.extend({}, o.defaults, n);
    m = m || n.speed || n.duration;
    n.queue = n.queue && n.axis.length > 1;
    if (n.queue) m /= 2;
    n.offset = j(n.offset);
    n.over = j(n.over);
    return this.each(function () {
      var a = this,
          b = $(a),
          t = l,
          c, d = {},
          w = b.is('html,body');
      switch (typeof t) {
      case 'number':
      case 'string':
        if (/^([+-]=)?\d+(px)?$/.test(t)) {
          t = j(t);
          break
        }
        t = $(t, this);
      case 'object':
        if (t.is || t.style) c = (t = $(t)).offset()
      }
      $.each(n.axis.split(''), function (i, f) {
        var P = f == 'x' ? 'Left' : 'Top',
            p = P.toLowerCase(),
            k = 'scroll' + P,
            e = a[k],
            D = f == 'x' ? 'Width' : 'Height';
        if (c) {
          d[k] = c[p] + (w ? 0 : e - b.offset()[p]);
          if (n.margin) {
            d[k] -= parseInt(t.css('margin' + P)) || 0;
            d[k] -= parseInt(t.css('border' + P + 'Width')) || 0
          }
          d[k] += n.offset[p] || 0;
          if (n.over[p]) d[k] += t[D.toLowerCase()]() * n.over[p]
        } else d[k] = t[p];
        if (/^\d+$/.test(d[k])) d[k] = d[k] <= 0 ? 0 : Math.min(d[k], h(D));
        if (!i && n.queue) {
          if (e != d[k]) g(n.onAfterFirst);
          delete d[k]
        }
      });
      g(n.onAfter);

      function g(a) {
        b.animate(d, m, n.easing, a &&
        function () {
          a.call(this, l)
        })
      };

      function h(D) {
        var b = w ? $.browser.opera ? document.body : document.documentElement : a;
        return b['scroll' + D] - b['client' + D]
      }
    })
  };

  function j(a) {
    return typeof a == 'object' ? a : {
      top: a,
      left: a
    }
  }
})(jQuery);
