/*
 * jQuery Tools 1.2.5 - The missing UI library for the Web
 * 
 * [scrollable]
 * 
 * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
 * 
 * http://flowplayer.org/tools/
 * 
 * File generated: Thu Nov 11 11:06:48 GMT 2010
 */
(function(e) {
	function p(f, c) {
		var b = e(c);
		return b.length < 2 ? b : f.parent().find(c)
	}
	function u(f, c) {
		var b = this, n = f.add(b), g = f.children(), l = 0, j = c.vertical;
		k || (k = b);
		if (g.length > 1)
			g = e(c.items, f);
		e.extend(b, {
			getConf : function() {
				return c
			},
			getIndex : function() {
				return l
			},
			getSize : function() {
				return b.getItems().size()
			},
			getNaviButtons : function() {
				return o.add(q)
			},
			getRoot : function() {
				return f
			},
			getItemWrap : function() {
				return g
			},
			getItems : function() {
				return g.children(c.item).not("." + c.clonedClass)
			},
			move : function(a, d) {
				return b.seekTo(l + a, d)
			},
			next : function(a) {
				return b.move(1, a)
			},
			prev : function(a) {
				return b.move(-1, a)
			},
			begin : function(a) {
				return b.seekTo(0, a)
			},
			end : function(a) {
				return b.seekTo(b.getSize() - 1, a)
			},
			focus : function() {
				return k = b
			},
			addItem : function(a) {
				a = e(a);
				if (c.circular) {
					g.children("." + c.clonedClass + ":last").before(a);
					g.children("." + c.clonedClass + ":first").replaceWith(
							a.clone().addClass(c.clonedClass))
				} else
					g.append(a);
				n.trigger("onAddItem", [ a ]);
				return b
			},
			seekTo : function(a, d, h) {
				a.jquery || (a *= 1);
				if (c.circular && a === 0 && l == -1 && d !== 0)
					return b;
				if (!c.circular && a < 0 || a > b.getSize() || a < -1)
					return b;
				var i = a;
				if (a.jquery)
					a = b.getItems().index(a);
				else
					i = b.getItems().eq(a);
				var r = e.Event("onBeforeSeek");
				if (!h) {
					n.trigger(r, [ a, d ]);
					if (r.isDefaultPrevented() || !i.length)
						return b
				}
				i = j ? {
					top : -i.position().top
				} : {
					left : -i.position().left
				};
				l = a;
				k = b;
				if (d === undefined)
					d = c.speed;
				g.animate(i, d, c.easing, h || function() {
					n.trigger("onSeek", [ a ])
				});
				return b
			}
		});
		e.each( [ "onBeforeSeek", "onSeek", "onAddItem" ], function(a, d) {
			e.isFunction(c[d]) && e(b).bind(d, c[d]);
			b[d] = function(h) {
				h && e(b).bind(d, h);
				return b
			}
		});
		if (c.circular) {
			var s = b.getItems().slice(-1).clone().prependTo(g), t = b
					.getItems().eq(1).clone().appendTo(g);
			s.add(t).addClass(c.clonedClass);
			b.onBeforeSeek(function(a, d, h) {
				if (!a.isDefaultPrevented())
					if (d == -1) {
						b.seekTo(s, h, function() {
							b.end(0)
						});
						return a.preventDefault()
					} else
						d == b.getSize() && b.seekTo(t, h, function() {
							b.begin(0)
						})
			});
			b.seekTo(0, 0, function() {
			})
		}
		var o = p(f, c.prev).click(function() {
			b.prev()
		}), q = p(f, c.next).click(function() {
			b.next()
		});
		if (!c.circular && b.getSize() > 1) {
			b.onBeforeSeek(function(a, d) {
				setTimeout(function() {
					if (!a.isDefaultPrevented()) {
						o.toggleClass(c.disabledClass, d <= 0);
						q.toggleClass(c.disabledClass, d >= b.getSize() - 1)
					}
				}, 1)
			});
			c.initialIndex || o.addClass(c.disabledClass)
		}
		c.mousewheel && e.fn.mousewheel && f.mousewheel(function(a, d) {
			if (c.mousewheel) {
				b.move(d < 0 ? 1 : -1, c.wheelSpeed || 50);
				return false
			}
		});
		if (c.touch) {
			var m = {};
			g[0].ontouchstart = function(a) {
				a = a.touches[0];
				m.x = a.clientX;
				m.y = a.clientY
			};
			g[0].ontouchmove = function(a) {
				if (a.touches.length == 1 && !g.is(":animated")) {
					var d = a.touches[0], h = m.x - d.clientX;
					d = m.y - d.clientY;
					b[j && d > 0 || !j && h > 0 ? "next" : "prev"]();
					a.preventDefault()
				}
			}
		}
		c.keyboard
				&& e(document).bind(
						"keydown.scrollable",
						function(a) {
							if (!(!c.keyboard || a.altKey || a.ctrlKey || e(
									a.target).is(":input")))
								if (!(c.keyboard != "static" && k != b)) {
									var d = a.keyCode;
									if (j && (d == 38 || d == 40)) {
										b.move(d == 38 ? -1 : 1);
										return a.preventDefault()
									}
									if (!j && (d == 37 || d == 39)) {
										b.move(d == 37 ? -1 : 1);
										return a.preventDefault()
									}
								}
						});
		c.initialIndex && b.seekTo(c.initialIndex, 0, function() {
		})
	}
	e.tools = e.tools || {
		version : "1.2.5"
	};
	e.tools.scrollable = {
		conf : {
			activeClass : "active",
			circular : false,
			clonedClass : "cloned",
			disabledClass : "disabled",
			easing : "swing",
			initialIndex : 0,
			item : null,
			items : ".items",
			keyboard : true,
			mousewheel : false,
			next : ".next",
			prev : ".prev",
			speed : 400,
			vertical : false,
			touch : true,
			wheelSpeed : 0
		}
	};
	var k;
	e.fn.scrollable = function(f) {
		var c = this.data("scrollable");
		if (c)
			return c;
		f = e.extend( {}, e.tools.scrollable.conf, f);
		this.each(function() {
			c = new u(e(this), f);
			e(this).data("scrollable", c)
		});
		return f.api ? c : this
	}
})(jQuery);

