(function(a) { var b = { vertical: !1, rtl: !1, start: 1, offset: 1, size: null, scroll: 3, visible: null, animation: "normal", easing: "swing", auto: 0, wrap: null, initCallback: null, setupCallback: null, reloadCallback: null, itemLoadCallback: null, itemFirstInCallback: null, itemFirstOutCallback: null, itemLastInCallback: null, itemLastOutCallback: null, itemVisibleInCallback: null, itemVisibleOutCallback: null, animationStepCallback: null, buttonNextHTML: "
", buttonPrevHTML: "
", buttonNextEvent: "click", buttonPrevEvent: "click", buttonNextCallback: null, buttonPrevCallback: null, itemFallbackDimension: null }, c = !1; a(window).bind("load.jcarousel", function() { c = !0 }), a.jcarousel = function(e, f) { this.options = a.extend({}, b, f || {}), this.locked = !1, this.autoStopped = !1, this.container = null, this.clip = null, this.list = null, this.buttonNext = null, this.buttonPrev = null, this.buttonNextState = null, this.buttonPrevState = null, f && void 0 !== f.rtl || (this.options.rtl = "rtl" == (a(e).attr("dir") || a("html").attr("dir") || "").toLowerCase()), this.wh = this.options.vertical ? "height" : "width", this.lt = this.options.vertical ? "top" : this.options.rtl ? "right" : "left"; for (var g = "", h = e.className.split(" "), i = 0; h.length > i; i++) if (-1 != h[i].indexOf("jcarousel-skin")) { a(e).removeClass(h[i]), g = h[i]; break } "UL" == e.nodeName.toUpperCase() || "OL" == e.nodeName.toUpperCase() ? (this.list = a(e), this.clip = this.list.parents(".jcarousel-clip"), this.container = this.list.parents(".jcarousel-container")) : (this.container = a(e), this.list = this.container.find("ul,ol").eq(0), this.clip = this.container.find(".jcarousel-clip")), 0 === this.clip.size() && (this.clip = this.list.wrap("
").parent()), 0 === this.container.size() && (this.container = this.clip.wrap("
").parent()), "" !== g && -1 == this.container.parent()[0].className.indexOf("jcarousel-skin") && this.container.wrap('
'), this.buttonPrev = a(".jcarousel-prev", this.container), 0 === this.buttonPrev.size() && null !== this.options.buttonPrevHTML && (this.buttonPrev = a(this.options.buttonPrevHTML).appendTo(this.container)), this.buttonPrev.addClass(this.className("jcarousel-prev")), this.buttonNext = a(".jcarousel-next", this.container), 0 === this.buttonNext.size() && null !== this.options.buttonNextHTML && (this.buttonNext = a(this.options.buttonNextHTML).appendTo(this.container)), this.buttonNext.addClass(this.className("jcarousel-next")), this.clip.addClass(this.className("jcarousel-clip")).css({ position: "relative" }), this.list.addClass(this.className("jcarousel-list")).css({ overflow: "hidden", position: "relative", top: 0, margin: 0, padding: 0 }).css(this.options.rtl ? "right" : "left", 0), this.container.addClass(this.className("jcarousel-container")).css({ position: "relative" }), !this.options.vertical && this.options.rtl && this.container.addClass("jcarousel-direction-rtl").attr("dir", "rtl"); var j = null !== this.options.visible ? Math.ceil(this.clipping() / this.options.visible) : null, k = this.list.children("li"), l = this; if (k.size() > 0) { var m = 0, n = this.options.offset; k.each(function() { l.format(this, n++), m += l.dimension(this, j) }), this.list.css(this.wh, m + 100 + "px"), f && void 0 !== f.size || (this.options.size = k.size()) } this.container.css("display", "block"), this.buttonNext.css("display", "block"), this.buttonPrev.css("display", "block"), this.funcNext = function() { return l.next(), !1 }, this.funcPrev = function() { return l.prev(), !1 }, this.funcResize = function() { l.resizeTimer && clearTimeout(l.resizeTimer), l.resizeTimer = setTimeout(function() { l.reload() }, 100) }, null !== this.options.initCallback && this.options.initCallback(this, "init"), !c && d.isSafari() ? (this.buttons(!1, !1), a(window).bind("load.jcarousel", function() { l.setup() })) : this.setup() }; var d = a.jcarousel; d.fn = d.prototype = { jcarousel: "0.2.9" }, d.fn.extend = d.extend = a.extend, d.fn.extend({ setup: function() { if (this.first = null, this.last = null, this.prevFirst = null, this.prevLast = null, this.animating = !1, this.timer = null, this.resizeTimer = null, this.tail = null, this.inTail = !1, !this.locked) { this.list.css(this.lt, this.pos(this.options.offset) + "px"); var b = this.pos(this.options.start, !0); this.prevFirst = this.prevLast = null, this.animate(b, !1), a(window).unbind("resize.jcarousel", this.funcResize).bind("resize.jcarousel", this.funcResize), null !== this.options.setupCallback && this.options.setupCallback(this) } }, reset: function() { this.list.empty(), this.list.css(this.lt, "0px"), this.list.css(this.wh, "10px"), null !== this.options.initCallback && this.options.initCallback(this, "reset"), this.setup() }, reload: function() { if (null !== this.tail && this.inTail && this.list.css(this.lt, d.intval(this.list.css(this.lt)) + this.tail), this.tail = null, this.inTail = !1, null !== this.options.reloadCallback && this.options.reloadCallback(this), null !== this.options.visible) { var a = this, b = Math.ceil(this.clipping() / this.options.visible), c = 0, e = 0; this.list.children("li").each(function(d) { c += a.dimension(this, b), a.first > d + 1 && (e = c) }), this.list.css(this.wh, c + "px"), this.list.css(this.lt, -e + "px") } this.scroll(this.first, !1) }, lock: function() { this.locked = !0, this.buttons() }, unlock: function() { this.locked = !1, this.buttons() }, size: function(a) { return void 0 !== a && (this.options.size = a, this.locked || this.buttons()), this.options.size }, has: function(a, b) { void 0 !== b && b || (b = a), null !== this.options.size && b > this.options.size && (b = this.options.size); for (var c = a; b >= c; c++) { var d = this.get(c); if (!d.length || d.hasClass("jcarousel-item-placeholder")) return !1 } return !0 }, get: function(b) { return a(">.jcarousel-item-" + b, this.list) }, add: function(b, c) { var e = this.get(b), f = 0, g = a(c); if (0 === e.length) { var h, i = d.intval(b); for (e = this.create(b);;) if (h = this.get(--i), 0 >= i || h.length) { 0 >= i ? this.list.prepend(e) : h.after(e); break } } else f = this.dimension(e); "LI" == g.get(0).nodeName.toUpperCase() ? (e.replaceWith(g), e = g) : e.empty().append(c), this.format(e.removeClass(this.className("jcarousel-item-placeholder")), b); var j = null !== this.options.visible ? Math.ceil(this.clipping() / this.options.visible) : null, k = this.dimension(e, j) - f; return b > 0 && this.first > b && this.list.css(this.lt, d.intval(this.list.css(this.lt)) - k + "px"), this.list.css(this.wh, d.intval(this.list.css(this.wh)) + k + "px"), e }, remove: function(a) { var b = this.get(a); if (b.length && !(a >= this.first && this.last >= a)) { var c = this.dimension(b); this.first > a && this.list.css(this.lt, d.intval(this.list.css(this.lt)) + c + "px"), b.remove(), this.list.css(this.wh, d.intval(this.list.css(this.wh)) - c + "px") } }, next: function() { null === this.tail || this.inTail ? this.scroll("both" != this.options.wrap && "last" != this.options.wrap || null === this.options.size || this.last != this.options.size ? this.first + this.options.scroll : 1) : this.scrollTail(!1) }, prev: function() { null !== this.tail && this.inTail ? this.scrollTail(!0) : this.scroll("both" != this.options.wrap && "first" != this.options.wrap || null === this.options.size || 1 != this.first ? this.first - this.options.scroll : this.options.size) }, scrollTail: function(a) { if (!this.locked && !this.animating && this.tail) { this.pauseAuto(); var b = d.intval(this.list.css(this.lt)); b = a ? b + this.tail : b - this.tail, this.inTail = !a, this.prevFirst = this.first, this.prevLast = this.last, this.animate(b) } }, scroll: function(a, b) { this.locked || this.animating || (this.pauseAuto(), this.animate(this.pos(a), b)) }, pos: function(a, b) { var c = d.intval(this.list.css(this.lt)); if (this.locked || this.animating) return c; "circular" != this.options.wrap && (a = 1 > a ? 1 : this.options.size && a > this.options.size ? this.options.size : a); for (var m, e = this.first > a, f = "circular" != this.options.wrap && 1 >= this.first ? 1 : this.first, g = e ? this.get(f) : this.get(this.last), h = e ? f : f - 1, i = null, j = 0, k = !1, l = 0; e ? --h >= a : a > ++h;) i = this.get(h), k = !i.length, 0 === i.length && (i = this.create(h).addClass(this.className("jcarousel-item-placeholder")), g[e ? "before" : "after"](i), null !== this.first && "circular" == this.options.wrap && null !== this.options.size && (0 >= h || h > this.options.size) && (m = this.get(this.index(h)), m.length && (i = this.add(h, m.clone(!0))))), g = i, l = this.dimension(i), k && (j += l), null !== this.first && ("circular" == this.options.wrap || h >= 1 && (null === this.options.size || this.options.size >= h)) && (c = e ? c + l : c - l); var n = this.clipping(), o = [], p = 0, q = 0; for (g = this.get(a - 1), h = a; ++p;) { if (i = this.get(h), k = !i.length, 0 === i.length && (i = this.create(h).addClass(this.className("jcarousel-item-placeholder")), 0 === g.length ? this.list.prepend(i) : g[e ? "before" : "after"](i), null !== this.first && "circular" == this.options.wrap && null !== this.options.size && (0 >= h || h > this.options.size) && (m = this.get(this.index(h)), m.length && (i = this.add(h, m.clone(!0))))), g = i, l = this.dimension(i), 0 === l) throw Error("jCarousel: No width/height set for items. This will cause an infinite loop. Aborting..."); if ("circular" != this.options.wrap && null !== this.options.size && h > this.options.size ? o.push(i) : k && (j += l), q += l, q >= n) break; h++ } for (var r = 0; o.length > r; r++) o[r].remove(); j > 0 && (this.list.css(this.wh, this.dimension(this.list) + j + "px"), e && (c -= j, this.list.css(this.lt, d.intval(this.list.css(this.lt)) - j + "px"))); var s = a + p - 1; if ("circular" != this.options.wrap && this.options.size && s > this.options.size && (s = this.options.size), h > s) for (p = 0, h = s, q = 0; ++p && (i = this.get(h--), i.length) && (q += this.dimension(i), !(q >= n));); var t = s - p + 1; if ("circular" != this.options.wrap && 1 > t && (t = 1), this.inTail && e && (c += this.tail, this.inTail = !1), this.tail = null, "circular" != this.options.wrap && s == this.options.size && s - p + 1 >= 1) { var u = d.intval(this.get(s).css(this.options.vertical ? "marginBottom" : "marginRight")); q - u > n && (this.tail = q - n - u) } for (b && a === this.options.size && this.tail && (c -= this.tail, this.inTail = !0); a-- > t;) c += this.dimension(this.get(a)); return this.prevFirst = this.first, this.prevLast = this.last, this.first = t, this.last = s, c }, animate: function(b, c) { if (!this.locked && !this.animating) { this.animating = !0; var d = this, e = function() { if (d.animating = !1, 0 === b && d.list.css(d.lt, 0), !d.autoStopped && ("circular" == d.options.wrap || "both" == d.options.wrap || "last" == d.options.wrap || null === d.options.size || d.last < d.options.size || d.last == d.options.size && null !== d.tail && !d.inTail) && d.startAuto(), d.buttons(), d.notify("onAfterAnimation"), "circular" == d.options.wrap && null !== d.options.size) for (var a = d.prevFirst; d.prevLast >= a; a++) null === a || a >= d.first && d.last >= a || !(1 > a || a > d.options.size) || d.remove(a) }; if (this.notify("onBeforeAnimation"), this.options.animation && c !== !1) { var f = this.options.vertical ? { top: b } : this.options.rtl ? { right: b } : { left: b }, g = { duration: this.options.animation, easing: this.options.easing, complete: e }; a.isFunction(this.options.animationStepCallback) && (g.step = this.options.animationStepCallback), this.list.animate(f, g) } else this.list.css(this.lt, b + "px"), e() } }, startAuto: function(a) { if (void 0 !== a && (this.options.auto = a), 0 === this.options.auto) return this.stopAuto(); if (null === this.timer) { this.autoStopped = !1; var b = this; this.timer = window.setTimeout(function() { b.next() }, 1e3 * this.options.auto) } }, stopAuto: function() { this.pauseAuto(), this.autoStopped = !0 }, pauseAuto: function() { null !== this.timer && (window.clearTimeout(this.timer), this.timer = null) }, buttons: function(a, b) { null == a && (a = !this.locked && 0 !== this.options.size && (this.options.wrap && "first" != this.options.wrap || null === this.options.size || this.last < this.options.size), this.locked || this.options.wrap && "first" != this.options.wrap || null === this.options.size || !(this.last >= this.options.size) || (a = null !== this.tail && !this.inTail)), null == b && (b = !this.locked && 0 !== this.options.size && (this.options.wrap && "last" != this.options.wrap || this.first > 1), this.locked || this.options.wrap && "last" != this.options.wrap || null === this.options.size || 1 != this.first || (b = null !== this.tail && this.inTail)); var c = this; this.buttonNext.size() > 0 ? (this.buttonNext.unbind(this.options.buttonNextEvent + ".jcarousel", this.funcNext), a && this.buttonNext.bind(this.options.buttonNextEvent + ".jcarousel", this.funcNext), this.buttonNext[a ? "removeClass" : "addClass"](this.className("jcarousel-next-disabled")).attr("disabled", a ? !1 : !0), null !== this.options.buttonNextCallback && this.buttonNext.data("jcarouselstate") != a && this.buttonNext.each(function() { c.options.buttonNextCallback(c, this, a) }).data("jcarouselstate", a)) : null !== this.options.buttonNextCallback && this.buttonNextState != a && this.options.buttonNextCallback(c, null, a), this.buttonPrev.size() > 0 ? (this.buttonPrev.unbind(this.options.buttonPrevEvent + ".jcarousel", this.funcPrev), b && this.buttonPrev.bind(this.options.buttonPrevEvent + ".jcarousel", this.funcPrev), this.buttonPrev[b ? "removeClass" : "addClass"](this.className("jcarousel-prev-disabled")).attr("disabled", b ? !1 : !0), null !== this.options.buttonPrevCallback && this.buttonPrev.data("jcarouselstate") != b && this.buttonPrev.each(function() { c.options.buttonPrevCallback(c, this, b) }).data("jcarouselstate", b)) : null !== this.options.buttonPrevCallback && this.buttonPrevState != b && this.options.buttonPrevCallback(c, null, b), this.buttonNextState = a, this.buttonPrevState = b }, notify: function(a) { var b = null === this.prevFirst ? "init" : this.prevFirst < this.first ? "next" : "prev"; this.callback("itemLoadCallback", a, b), this.prevFirst !== this.first && (this.callback("itemFirstInCallback", a, b, this.first), this.callback("itemFirstOutCallback", a, b, this.prevFirst)), this.prevLast !== this.last && (this.callback("itemLastInCallback", a, b, this.last), this.callback("itemLastOutCallback", a, b, this.prevLast)), this.callback("itemVisibleInCallback", a, b, this.first, this.last, this.prevFirst, this.prevLast), this.callback("itemVisibleOutCallback", a, b, this.prevFirst, this.prevLast, this.first, this.last) }, callback: function(b, c, d, e, f, g, h) { if (null != this.options[b] && ("object" == typeof this.options[b] || "onAfterAnimation" == c)) { var i = "object" == typeof this.options[b] ? this.options[b][c] : this.options[b]; if (a.isFunction(i)) { var j = this; if (void 0 === e) i(j, d, c); else if (void 0 === f) this.get(e).each(function() { i(j, this, e, d, c) }); else for (var k = function(a) { j.get(a).each(function() { i(j, this, a, d, c) }) }, l = e; f >= l; l++) null === l || l >= g && h >= l || k(l) } } }, create: function(a) { return this.format("
  • ", a) }, format: function(b, c) { b = a(b); for (var d = b.get(0).className.split(" "), e = 0; d.length > e; e++) - 1 != d[e].indexOf("jcarousel-") && b.removeClass(d[e]); return b.addClass(this.className("jcarousel-item")).addClass(this.className("jcarousel-item-" + c)).css({ "float": this.options.rtl ? "right" : "left", "list-style": "none" }).attr("jcarouselindex", c), b }, className: function(a) { return a + " " + a + (this.options.vertical ? "-vertical" : "-horizontal") }, dimension: function(b, c) { var e = a(b); if (null == c) return this.options.vertical ? e.innerHeight() + d.intval(e.css("margin-top")) + d.intval(e.css("margin-bottom")) + d.intval(e.css("border-top-width")) + d.intval(e.css("border-bottom-width")) || d.intval(this.options.itemFallbackDimension) : e.innerWidth() + d.intval(e.css("margin-left")) + d.intval(e.css("margin-right")) + d.intval(e.css("border-left-width")) + d.intval(e.css("border-right-width")) || d.intval(this.options.itemFallbackDimension); var f = this.options.vertical ? c - d.intval(e.css("marginTop")) - d.intval(e.css("marginBottom")) : c - d.intval(e.css("marginLeft")) - d.intval(e.css("marginRight")); return a(e).css(this.wh, f + "px"), this.dimension(e) }, clipping: function() { return this.options.vertical ? this.clip[0].offsetHeight - d.intval(this.clip.css("borderTopWidth")) - d.intval(this.clip.css("borderBottomWidth")) : this.clip[0].offsetWidth - d.intval(this.clip.css("borderLeftWidth")) - d.intval(this.clip.css("borderRightWidth")) }, index: function(a, b) { return null == b && (b = this.options.size), Math.round(((a - 1) / b - Math.floor((a - 1) / b)) * b) + 1 } }), d.extend({ defaults: function(c) { return a.extend(b, c || {}) }, intval: function(a) { return a = parseInt(a, 10), isNaN(a) ? 0 : a }, windowLoaded: function() { c = !0 }, isSafari: function() { // var a = navigator.userAgent.toLowerCase(), // b = /(chrome)[ \/]([\w.]+)/.exec(a) || /(webkit)[ \/]([\w.]+)/.exec(a) || [], // c = b[1] || ""; //return "webkit" === c } }), a.fn.jcarousel = function(b) { if ("string" == typeof b) { var c = a(this).data("jcarousel"), e = Array.prototype.slice.call(arguments, 1); return c[b].apply(c, e) } return this.each(function() { var c = a(this).data("jcarousel"); c ? (b && a.extend(c.options, b), c.reload()) : a(this).data("jcarousel", new d(this, b)) }) } })(jQuery);