/*
 * jquery.tools 1.1.2 - The missing UI library for the Web
 * 
 * [tools.scrollable-1.1.2, tools.scrollable.circular-0.5.1,
 * tools.scrollable.autoscroll-1.0.1, tools.scrollable.navigator-1.0.2,
 * tools.scrollable.mousewheel-1.0.1]
 * 
 * Copyright (c) 2009 Tero Piirainen http://flowplayer.org/tools/
 * 
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 * 
 * -----
 * 
 * jquery.event.wheel.js - rev 1 Copyright (c) 2008, Three Dub Media
 * (http://threedubmedia.com) Liscensed under the MIT License (MIT-LICENSE.txt)
 * http://www.opensource.org/licenses/mit-license.php Created: 2008-07-01 |
 * Updated: 2008-07-14
 * 
 * -----
 * 
 * File generated: Wed Oct 07 11:28:41 GMT+00:00 2009
 */
(function(b) {
	b.tools = b.tools || {};
	b.tools.scrollable = {
		version : "1.1.2",
		conf : {
			size : 5,
			vertical : false,
			speed : 400,
			keyboard : true,
			keyboardSteps : null,
			disabledClass : "disabled",
			hoverClass : null,
			clickable : true,
			activeClass : "active",
			easing : "swing",
			loop : false,
			items : ".items",
			item : null,
			prev : ".prev",
			next : ".next",
			prevPage : ".prevPage",
			nextPage : ".nextPage",
			api : false
		}
	};
	var c;
	function a(o, m) {
		var r = this, p = b(this), d = !m.vertical, e = o.children(), k = 0, i;
		if (!c) {
			c = r
		}
		b.each(m, function(s, t) {
					if (b.isFunction(t)) {
						p.bind(s, t)
					}
				});
		if (e.length > 1) {
			e = b(m.items, o)
		}
		function l(t) {
			var s = b(t);
			return m.globalNav ? s : o.parent().find(t)
		}
		o.data("finder", l);
		var f = l(m.prev), h = l(m.next), g = l(m.prevPage), n = l(m.nextPage);
		b.extend(r, {
			getIndex : function() {
				return k
			},
			getClickIndex : function() {
				var s = r.getItems();
				return s.index(s.filter("." + m.activeClass))
			},
			getConf : function() {
				return m
			},
			getSize : function() {
				return r.getItems().size()
			},
			getPageAmount : function() {
				return Math.ceil(this.getSize() / m.size)
			},
			getPageIndex : function() {
				return Math.ceil(k / m.size)
			},
			getNaviButtons : function() {
				return f.add(h).add(g).add(n)
			},
			getRoot : function() {
				return o
			},
			getItemWrap : function() {
				return e
			},
			getItems : function() {
				return e.children(m.item)
			},
			getVisibleItems : function() {
				return r.getItems().slice(k, k + m.size)
			},
			seekTo : function(s, w, t) {
				if (s < 0) {
					s = 0
				}
				if (k === s) {
					return r
				}
				if (b.isFunction(w)) {
					t = w
				}
				if (s > r.getSize() - m.size) {
					return m.loop ? r.begin() : this.end()
				}
				var u = r.getItems().eq(s);
				if (!u.length) {
					return r
				}
				var v = b.Event("onBeforeSeek");
				p.trigger(v, [s]);
				if (v.isDefaultPrevented()) {
					return r
				}
				if (w === undefined || b.isFunction(w)) {
					w = m.speed
				}
				function x() {
					if (t) {
						t.call(r, s)
					}
					p.trigger("onSeek", [s])
				}
				if (d) {
					e.animate({
								left : -u.position().left
							}, w, m.easing, x)
				} else {
					e.animate({
								top : -u.position().top
							}, w, m.easing, x)
				}
				c = r;
				k = s;
				v = b.Event("onStart");
				p.trigger(v, [s]);
				if (v.isDefaultPrevented()) {
					return r
				}
				f.add(g).toggleClass(m.disabledClass, s === 0);
				h
						.add(n)
						.toggleClass(m.disabledClass, s >= r.getSize() - m.size);
				return r
			},
			move : function(u, t, s) {
				i = u > 0;
				return this.seekTo(k + u, t, s)
			},
			next : function(t, s) {
				return this.move(1, t, s)
			},
			prev : function(t, s) {
				return this.move(-1, t, s)
			},
			movePage : function(w, v, u) {
				i = w > 0;
				var s = m.size * w;
				var t = k % m.size;
				if (t > 0) {
					s += (w > 0 ? -t : m.size - t)
				}
				return this.move(s, v, u)
			},
			prevPage : function(t, s) {
				return this.movePage(-1, t, s)
			},
			nextPage : function(t, s) {
				return this.movePage(1, t, s)
			},
			setPage : function(t, u, s) {
				return this.seekTo(t * m.size, u, s)
			},
			begin : function(t, s) {
				i = false;
				return this.seekTo(0, t, s)
			},
			end : function(t, s) {
				i = true;
				var u = this.getSize() - m.size;
				return u > 0 ? this.seekTo(u, t, s) : r
			},
			reload : function() {
				p.trigger("onReload");
				return r
			},
			focus : function() {
				c = r;
				return r
			},
			click : function(u) {
				var v = r.getItems().eq(u), s = m.activeClass, t = m.size;
				if (u < 0 || u >= r.getSize()) {
					return r
				}
				if (t == 1) {
					if (m.loop) {
						return r.next()
					}
					if (u === 0 || u == r.getSize() - 1) {
						i = (i === undefined) ? true : !i
					}
					return i === false ? r.prev() : r.next()
				}
				if (t == 2) {
					if (u == k) {
						u--
					}
					r.getItems().removeClass(s);
					v.addClass(s);
					return r.seekTo(u, time, fn)
				}
				if (!v.hasClass(s)) {
					r.getItems().removeClass(s);
					v.addClass(s);
					var x = Math.floor(t / 2);
					var w = u - x;
					if (w > r.getSize() - t) {
						w = r.getSize() - t
					}
					if (w !== u) {
						return r.seekTo(w)
					}
				}
				return r
			},
			bind : function(s, t) {
				p.bind(s, t);
				return r
			},
			unbind : function(s) {
				p.unbind(s);
				return r
			}
		});
		b.each("onBeforeSeek,onStart,onSeek,onReload".split(","),
				function(s, t) {
					r[t] = function(u) {
						return r.bind(t, u)
					}
				});
		f.addClass(m.disabledClass).click(function() {
					r.prev()
				});
		h.click(function() {
					r.next()
				});
		n.click(function() {
					r.nextPage()
				});
		if (r.getSize() < m.size) {
			h.add(n).addClass(m.disabledClass)
		}
		g.addClass(m.disabledClass).click(function() {
					r.prevPage()
				});
		var j = m.hoverClass, q = "keydown."
				+ Math.random().toString().substring(10);
		r.onReload(function() {
					if (j) {
						r.getItems().hover(function() {
									b(this).addClass(j)
								}, function() {
									b(this).removeClass(j)
								})
					}
					if (m.clickable) {
						r.getItems().each(function(s) {
							b(this).unbind("click.scrollable").bind(
									"click.scrollable", function(t) {
										if (b(t.target).is("a")) {
											return
										}
										return r.click(s)
									})
						})
					}
					if (m.keyboard) {
						b(document).unbind(q).bind(q, function(t) {
									if (t.altKey || t.ctrlKey) {
										return
									}
									if (m.keyboard != "static" && c != r) {
										return
									}
									var u = m.keyboardSteps;
									if (d
											&& (t.keyCode == 37 || t.keyCode == 39)) {
										r.move(t.keyCode == 37 ? -u : u);
										return t.preventDefault()
									}
									if (!d
											&& (t.keyCode == 38 || t.keyCode == 40)) {
										r.move(t.keyCode == 38 ? -u : u);
										return t.preventDefault()
									}
									return true
								})
					} else {
						b(document).unbind(q)
					}
				});
		r.reload()
	}
	b.fn.scrollable = function(d) {
		var e = this.eq(typeof d == "number" ? d : 0).data("scrollable");
		if (e) {
			return e
		}
		var f = b.extend({}, b.tools.scrollable.conf);
		d = b.extend(f, d);
		d.keyboardSteps = d.keyboardSteps || d.size;
		this.each(function() {
					e = new a(b(this), d);
					b(this).data("scrollable", e)
				});
		return d.api ? e : this
	}
})(jQuery);
(function(b) {
	var a = b.tools.scrollable;
	a.plugins = a.plugins || {};
	a.plugins.circular = {
		version : "0.5.1",
		conf : {
			api : false,
			clonedClass : "cloned"
		}
	};
	b.fn.circular = function(e) {
		var d = b.extend({}, a.plugins.circular.conf), c;
		b.extend(d, e);
		this.each(function() {
			var i = b(this).scrollable(), n = i.getItems(), k = i.getConf(), f = i
					.getItemWrap(), j = 0;
			if (i) {
				c = i
			}
			if (n.length < k.size) {
				return false
			}
			n.slice(0, k.size).each(function(o) {
						b(this).clone().appendTo(f).click(function() {
									i.click(n.length + o)
								}).addClass(d.clonedClass)
					});
			var l = b.makeArray(n.slice(-k.size)).reverse();
			b(l).each(function(o) {
						b(this).clone().prependTo(f).click(function() {
									i.click(-o - 1)
								}).addClass(d.clonedClass)
					});
			var m = f.children(k.item);
			var h = k.hoverClass;
			if (h) {
				m.hover(function() {
							b(this).addClass(h)
						}, function() {
							b(this).removeClass(h)
						})
			}
			function g(o) {
				var p = m.eq(o);
				if (k.vertical) {
					f.css({
								top : -p.position().top
							})
				} else {
					f.css({
								left : -p.position().left
							})
				}
			}
			g(k.size);
			b.extend(i, {
						move : function(s, r, p, q) {
							var u = j + s + k.size;
							var t = u > i.getSize() - k.size;
							if (u <= 0 || t) {
								var o = j + k.size + (t ? -n.length : n.length);
								g(o);
								u = o + s
							}
							if (q) {
								m.removeClass(k.activeClass).eq(u
										+ Math.floor(k.size / 2))
										.addClass(k.activeClass)
							}
							if (u === j + k.size) {
								return self
							}
							return i.seekTo(u, r, p)
						},
						begin : function(p, o) {
							return this.seekTo(k.size, p, o)
						},
						end : function(p, o) {
							return this.seekTo(n.length, p, o)
						},
						click : function(p, r, q) {
							if (!k.clickable) {
								return self
							}
							if (k.size == 1) {
								return this.next()
							}
							var s = p - j, o = k.activeClass;
							s -= Math.floor(k.size / 2);
							return this.move(s, r, q, true)
						},
						getIndex : function() {
							return j
						},
						setPage : function(p, q, o) {
							return this.seekTo(p * k.size + k.size, q, o)
						},
						getPageAmount : function() {
							return Math.ceil(n.length / k.size)
						},
						getPageIndex : function() {
							if (j < 0) {
								return this.getPageAmount() - 1
							}
							if (j >= n.length) {
								return 0
							}
							var o = (j + k.size) / k.size - 1;
							return o
						},
						getVisibleItems : function() {
							var o = j + k.size;
							return m.slice(o, o + k.size)
						}
					});
			i.onStart(function(p, o) {
						j = o - k.size;
						return false
					});
			i.getNaviButtons().removeClass(k.disabledClass)
		});
		return d.api ? c : this
	}
})(jQuery);
(function(b) {
	var a = b.tools.scrollable;
	a.plugins = a.plugins || {};
	a.plugins.autoscroll = {
		version : "1.0.1",
		conf : {
			autoplay : true,
			interval : 3000,
			autopause : true,
			steps : 1,
			api : false
		}
	};
	b.fn.autoscroll = function(d) {
		if (typeof d == "number") {
			d = {
				interval : d
			}
		}
		var e = b.extend({}, a.plugins.autoscroll.conf), c;
		b.extend(e, d);
		this.each(function() {
					var g = b(this).scrollable();
					if (g) {
						c = g
					}
					var i, f, h = true;
					g.play = function() {
						if (i) {
							return
						}
						h = false;
						i = setInterval(function() {
									g.move(e.steps)
								}, e.interval);
						g.move(e.steps)
					};
					g.pause = function() {
						i = clearInterval(i)
					};
					g.stop = function() {
						g.pause();
						h = true
					};
					if (e.autopause) {
						g.getRoot().add(g.getNaviButtons()).hover(function() {
									g.pause();
									clearInterval(f)
								}, function() {
									if (!h) {
										f = setTimeout(g.play, e.interval)
									}
								})
					}
					if (e.autoplay) {
						setTimeout(g.play, e.interval)
					}
				});
		return e.api ? c : this
	}
})(jQuery);
(function(b) {
	var a = b.tools.scrollable;
	a.plugins = a.plugins || {};
	a.plugins.navigator = {
		version : "1.0.2",
		conf : {
			navi : ".navi",
			naviItem : null,
			activeClass : "active",
			indexed : false,
			api : false,
			idPrefix : null
		}
	};
	b.fn.navigator = function(d) {
		var e = b.extend({}, a.plugins.navigator.conf), c;
		if (typeof d == "string") {
			d = {
				navi : d
			}
		}
		d = b.extend(e, d);
		this.each(function() {
					var i = b(this).scrollable(), f = i.getRoot(), l = f
							.data("finder").call(null, d.navi), g = null, k = i
							.getNaviButtons();
					if (i) {
						c = i
					}
					i.getNaviButtons = function() {
						return k.add(l)
					};
					function j() {
						if (!l.children().length || l.data("navi") == i) {
							l.empty();
							l.data("navi", i);
							for (var m = 0; m < i.getPageAmount(); m++) {
								l.append(b("<" + (d.naviItem || "a") + "/>"))
							}
							g = l.children().each(function(n) {
										var o = b(this);
										o.click(function(p) {
													i.setPage(n);
													return p.preventDefault()
												});
										if (d.indexed) {
											o.text(n)
										}
										if (d.idPrefix) {
											o.attr("id", d.idPrefix + n)
										}
									})
						} else {
							g = d.naviItem ? l.find(d.naviItem) : l.children();
							g.each(function(n) {
										var o = b(this);
										o.click(function(p) {
													i.setPage(n);
													return p.preventDefault()
												})
									})
						}
						g.eq(0).addClass(d.activeClass)
					}
					i.onStart(function(o, n) {
								var m = d.activeClass;
								g.removeClass(m).eq(i.getPageIndex())
										.addClass(m)
							});
					i.onReload(function() {
								j()
							});
					j();
					var h = g.filter("[href=" + location.hash + "]");
					if (h.length) {
						i.move(g.index(h))
					}
				});
		return d.api ? c : this
	}
})(jQuery);
(function(b) {
	b.fn.wheel = function(e) {
		return this[e ? "bind" : "trigger"]("wheel", e)
	};
	b.event.special.wheel = {
		setup : function() {
			b.event.add(this, d, c, {})
		},
		teardown : function() {
			b.event.remove(this, d, c)
		}
	};
	var d = !b.browser.mozilla ? "mousewheel" : "DOMMouseScroll"
			+ (b.browser.version < "1.9" ? " mousemove" : "");
	function c(e) {
		switch (e.type) {
			case "mousemove" :
				return b.extend(e.data, {
							clientX : e.clientX,
							clientY : e.clientY,
							pageX : e.pageX,
							pageY : e.pageY
						});
			case "DOMMouseScroll" :
				b.extend(e, e.data);
				e.delta = -e.detail / 3;
				break;
			case "mousewheel" :
				e.delta = e.wheelDelta / 120;
				break
		}
		e.type = "wheel";
		return b.event.handle.call(this, e, e.delta)
	}
	var a = b.tools.scrollable;
	a.plugins = a.plugins || {};
	a.plugins.mousewheel = {
		version : "1.0.1",
		conf : {
			api : false,
			speed : 50
		}
	};
	b.fn.mousewheel = function(f) {
		var g = b.extend({}, a.plugins.mousewheel.conf), e;
		if (typeof f == "number") {
			f = {
				speed : f
			}
		}
		f = b.extend(g, f);
		this.each(function() {
					var h = b(this).scrollable();
					if (h) {
						e = h
					}
					h.getRoot().wheel(function(i, j) {
								h.move(j < 0 ? 1 : -1, f.speed || 50);
								return false
							})
				});
		return f.api ? e : this
	}
})(jQuery);
