/*!
* jCarousel - Riding carousels with jQuery
*   http://sorgalla.com/jcarousel/
*
* Copyright (c) 2006 Jan Sorgalla (http://sorgalla.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.
*
* Built on top of the jQuery library
*   http://jquery.com
*
* Inspired by the "Carousel Component" by Bill Scott
*   http://billwscott.com/carousel/
*/

(function (i) {
    var q =
{
    vertical: false,
    rtl: false,
    start: 1,
    offset: 1,
    size: null,
    scroll: 1,
    visible: null,
    animation: "normal",
    easing: "swing",
    auto: 0,
    wrap: null,
    initCallback: null,
    reloadCallback: null,
    itemLoadCallback: null,
    itemFirstInCallback: null,
    itemFirstOutCallback: null,
    itemLastInCallback: null,
    itemLastOutCallback: null,
    itemVisibleInCallback: null,
    itemVisibleOutCallback: null,
    buttonNextHTML: "<div></div>",
    buttonPrevHTML: "<div></div>",
    buttonNextEvent: "click",
    buttonPrevEvent: "click",
    buttonNextCallback: null,
    buttonPrevCallback: null,
    itemFallbackDimension: null
},
r = false; i(window).bind("load.jcarousel",
function () { r = true }); i.jcarousel = function (a,
c) {
    this.options = i.extend({},
q,
c || {}); this.autoStopped = this.locked = false; this.buttonPrevState = this.buttonNextState = this.buttonPrev = this.buttonNext = this.list = this.clip = this.container = null; if (!c || c.rtl === undefined) this.options.rtl = (i(a).attr("dir") || i("html").attr("dir") || "").toLowerCase() == "rtl"; this.wh = !this.options.vertical ? "width" : "height"; this.lt = !this.options.vertical ? this.options.rtl ? "right" : "left" : "top"; for (var b = "",
d = a.className.split(" "),
f = 0; f < d.length; f++) if (d[f].indexOf("jcarousel-skin") != -1) { i(a).removeClass(d[f]); b = d[f]; break } if (a.nodeName.toUpperCase() == "UL" || a.nodeName.toUpperCase() == "OL") { this.list = i(a); this.container = this.list.parent(); if (this.container.hasClass("jcarousel-clip")) { if (!this.container.parent().hasClass("jcarousel-container")) this.container = this.container.wrap("<div></div>"); this.container = this.container.parent() } else if (!this.container.hasClass("jcarousel-container")) this.container = this.list.wrap("<div></div>").parent() } else { this.container = i(a); this.list = this.container.find("ul,ol").eq(0) } b !== "" && this.container.parent()[0].className.indexOf("jcarousel-skin") == -1 && this.container.wrap('<div class=" ' + b + '"></div>'); this.clip = this.list.parent(); if (!this.clip.length || !this.clip.hasClass("jcarousel-clip")) this.clip = this.list.wrap("<div></div>").parent(); this.buttonNext = i(".jcarousel-next",
this.container); if (this.buttonNext.size() === 0 && this.options.buttonNextHTML !== null) this.buttonNext = this.clip.after(this.options.buttonNextHTML).next(); this.buttonNext.addClass(this.className("jcarousel-next")); this.buttonPrev = i(".jcarousel-prev",
this.container); if (this.buttonPrev.size() === 0 && this.options.buttonPrevHTML !== null) this.buttonPrev = this.clip.after(this.options.buttonPrevHTML).next(); this.buttonPrev.addClass(this.className("jcarousel-prev")); this.clip.addClass(this.className("jcarousel-clip")).css({ overflow: "hidden",
    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 = this.options.visible !== null ? Math.ceil(this.clipping() / this.options.visible) : null; b = this.list.children("li"); var e = this; if (b.size() > 0) {
        var g = 0,
k = this.options.offset; b.each(function () {
    e.format(this,
k++); g += e.dimension(this,
j)
}); this.list.css(this.wh,
g + 100 + "px"); if (!c || c.size === undefined) this.options.size = b.size()
    } this.container.css("display",
"block"); this.buttonNext.css("display",
"block"); this.buttonPrev.css("display",
"block"); this.funcNext = function () { e.next() }; this.funcPrev = function () { e.prev() }; this.funcResize = function () { e.reload() }; this.options.initCallback !== null && this.options.initCallback(this,
"init"); if (!r && i.browser.safari) {
        this.buttons(false,
false); i(window).bind("load.jcarousel",
function () { e.setup() })
    } else this.setup()
}; var h = i.jcarousel; h.fn = h.prototype = { jcarousel: "0.2.7" }; h.fn.extend = h.extend = i.extend; h.fn.extend({ setup: function () {
    this.prevLast = this.prevFirst = this.last = this.first = null; this.animating = false; this.tail = this.timer = null; this.inTail = false; if (!this.locked) {
        this.list.css(this.lt,
this.pos(this.options.offset) + "px"); var a = this.pos(this.options.start,
true); this.prevFirst = this.prevLast = null; this.animate(a,
false); i(window).unbind("resize.jcarousel",
this.funcResize).bind("resize.jcarousel",
this.funcResize)
    }
},
    reset: function () {
        this.list.empty(); this.list.css(this.lt,
"0px"); this.list.css(this.wh,
"10px"); this.options.initCallback !== null && this.options.initCallback(this,
"reset"); this.setup()
    },
    reload: function () {
        this.tail !== null && this.inTail && this.list.css(this.lt,
h.intval(this.list.css(this.lt)) + this.tail); this.tail = null; this.inTail = false; this.options.reloadCallback !== null && this.options.reloadCallback(this); if (this.options.visible !== null) {
            var a = this,
c = Math.ceil(this.clipping() / this.options.visible),
b = 0,
d = 0; this.list.children("li").each(function (f) {
    b += a.dimension(this,
c); if (f + 1 < a.first) d = b
}); this.list.css(this.wh,
b + "px"); this.list.css(this.lt,
-d + "px")
        } this.scroll(this.first,
false)
    },
    lock: function () { this.locked = true; this.buttons() },
    unlock: function () { this.locked = false; this.buttons() },
    size: function (a) { if (a !== undefined) { this.options.size = a; this.locked || this.buttons() } return this.options.size },
    has: function (a,
c) { if (c === undefined || !c) c = a; if (this.options.size !== null && c > this.options.size) c = this.options.size; for (var b = a; b <= c; b++) { var d = this.get(b); if (!d.length || d.hasClass("jcarousel-item-placeholder")) return false } return true },
    get: function (a) {
        return i(".jcarousel-item-" + a,
this.list)
    },
    add: function (a,
c) {
        var b = this.get(a),
d = 0,
f = i(c); if (b.length === 0) {
            var j,
e = h.intval(a); for (b = this.create(a); ; ) { j = this.get(--e); if (e <= 0 || j.length) { e <= 0 ? this.list.prepend(b) : j.after(b); break } }
        } else d = this.dimension(b); if (f.get(0).nodeName.toUpperCase() == "LI") { b.replaceWith(f); b = f } else b.empty().append(c); this.format(b.removeClass(this.className("jcarousel-item-placeholder")),
a); f = this.options.visible !== null ? Math.ceil(this.clipping() / this.options.visible) : null; d = this.dimension(b,
f) - d; a > 0 && a < this.first && this.list.css(this.lt,
h.intval(this.list.css(this.lt)) - d + "px"); this.list.css(this.wh,
h.intval(this.list.css(this.wh)) + d + "px"); return b
    },
    remove: function (a) {
        var c = this.get(a); if (!(!c.length || a >= this.first && a <= this.last)) {
            var b = this.dimension(c); a < this.first && this.list.css(this.lt,
h.intval(this.list.css(this.lt)) + b + "px"); c.remove(); this.list.css(this.wh,
h.intval(this.list.css(this.wh)) - b + "px")
        }
    },
    next: function () { this.tail !== null && !this.inTail ? this.scrollTail(false) : this.scroll((this.options.wrap == "both" || this.options.wrap == "last") && this.options.size !== null && this.last == this.options.size ? 1 : this.first + this.options.scroll) },
    prev: function () { this.tail !== null && this.inTail ? this.scrollTail(true) : this.scroll((this.options.wrap == "both" || this.options.wrap == "first") && this.options.size !== null && this.first == 1 ? this.options.size : this.first - this.options.scroll) },
    scrollTail: function (a) { if (!(this.locked || this.animating || !this.tail)) { this.pauseAuto(); var c = h.intval(this.list.css(this.lt)); c = !a ? c - this.tail : c + this.tail; this.inTail = !a; this.prevFirst = this.first; this.prevLast = this.last; this.animate(c) } },
    scroll: function (a,
c) {
        if (!(this.locked || this.animating)) {
            this.pauseAuto(); this.animate(this.pos(a),
c)
        }
    },
    pos: function (a,
c) {
        var b = h.intval(this.list.css(this.lt)); if (this.locked || this.animating) return b; if (this.options.wrap != "circular") a = a < 1 ? 1 : this.options.size && a > this.options.size ? this.options.size : a; for (var d = this.first > a,
f = this.options.wrap != "circular" && this.first <= 1 ? 1 : this.first,
j = d ? this.get(f) : this.get(this.last),
e = d ? f : f - 1,
g = null,
k = 0,
l = false,
m = 0; d ? --e >= a : ++e < a; ) {
            g = this.get(e); l = !g.length; if (g.length === 0) {
                g = this.create(e).addClass(this.className("jcarousel-item-placeholder")); j[d ? "before" : "after"](g); if (this.first !== null && this.options.wrap == "circular" && this.options.size !== null && (e <= 0 || e > this.options.size)) {
                    j = this.get(this.index(e)); if (j.length) g = this.add(e,
j.clone(true))
                }
            } j = g; m = this.dimension(g); if (l) k += m; if (this.first !== null && (this.options.wrap == "circular" || e >= 1 && (this.options.size === null || e <= this.options.size))) b = d ? b + m : b - m
        } f = this.clipping(); var p = [],
o = 0,
n = 0; j = this.get(a - 1); for (e = a; ++o; ) {
            g = this.get(e); l = !g.length; if (g.length === 0) {
                g = this.create(e).addClass(this.className("jcarousel-item-placeholder")); j.length === 0 ? this.list.prepend(g) : j[d ? "before" : "after"](g); if (this.first !== null && this.options.wrap == "circular" && this.options.size !== null && (e <= 0 || e > this.options.size)) {
                    j = this.get(this.index(e)); if (j.length) g = this.add(e,
j.clone(true))
                }
            } j = g; m = this.dimension(g); if (m === 0) throw Error("jCarousel: No width/height set for items. This will cause an infinite loop. Aborting..."); if (this.options.wrap != "circular" && this.options.size !== null && e > this.options.size) p.push(g); else if (l) k += m; n += m; if (n >= f) break; e++
        } for (g = 0; g < p.length; g++) p[g].remove(); if (k > 0) {
            this.list.css(this.wh,
this.dimension(this.list) + k + "px"); if (d) {
                b -= k; this.list.css(this.lt,
h.intval(this.list.css(this.lt)) - k + "px")
            }
        } k = a + o - 1; if (this.options.wrap != "circular" && this.options.size && k > this.options.size) k = this.options.size; if (e > k) { o = 0; e = k; for (n = 0; ++o; ) { g = this.get(e--); if (!g.length) break; n += this.dimension(g); if (n >= f) break } } e = k - o + 1; if (this.options.wrap != "circular" && e < 1) e = 1; if (this.inTail && d) { b += this.tail; this.inTail = false } this.tail = null; if (this.options.wrap != "circular" && k == this.options.size && k - o + 1 >= 1) {
            d = h.margin(this.get(k),
!this.options.vertical ? "marginRight" : "marginBottom"); if (n - d > f) this.tail = n - f - d
        } if (c && a === this.options.size && this.tail) { b -= this.tail; this.inTail = true } for (; a-- > e; ) b += this.dimension(this.get(a)); this.prevFirst = this.first; this.prevLast = this.last; this.first = e; this.last = k; return b
    },
    animate: function (a,
c) {
        if (!(this.locked || this.animating)) {
            this.animating = true; var b = this,
d = function () {
    b.animating = false; a === 0 && b.list.css(b.lt,
0); if (!b.autoStopped && (b.options.wrap == "circular" || b.options.wrap == "both" || b.options.wrap == "last" || b.options.size === null || b.last < b.options.size || b.last == b.options.size && b.tail !== null && !b.inTail)) b.startAuto(); b.buttons(); b.notify("onAfterAnimation"); if (b.options.wrap == "circular" && b.options.size !== null) for (var f = b.prevFirst; f <= b.prevLast; f++) if (f !== null && !(f >= b.first && f <= b.last) && (f < 1 || f > b.options.size)) b.remove(f)
}; this.notify("onBeforeAnimation"); if (!this.options.animation || c === false) {
                this.list.css(this.lt,
a + "px"); d()
            } else this.list.animate(!this.options.vertical ? this.options.rtl ? { right: a} : { left: a} : { top: a },
this.options.animation,
this.options.easing,
d)
        }
    },
    startAuto: function (a) {
        if (a !== undefined) this.options.auto = a; if (this.options.auto === 0) return this.stopAuto(); if (this.timer === null) {
            this.autoStopped = false; var c = this; this.timer = window.setTimeout(function () { c.next() },
this.options.auto * 1E3)
        }
    },
    stopAuto: function () { this.pauseAuto(); this.autoStopped = true },
    pauseAuto: function () { if (this.timer !== null) { window.clearTimeout(this.timer); this.timer = null } },
    buttons: function (a,
c) {
        if (a == null) { a = !this.locked && this.options.size !== 0 && (this.options.wrap && this.options.wrap != "first" || this.options.size === null || this.last < this.options.size); if (!this.locked && (!this.options.wrap || this.options.wrap == "first") && this.options.size !== null && this.last >= this.options.size) a = this.tail !== null && !this.inTail } if (c == null) { c = !this.locked && this.options.size !== 0 && (this.options.wrap && this.options.wrap != "last" || this.first > 1); if (!this.locked && (!this.options.wrap || this.options.wrap == "last") && this.options.size !== null && this.first == 1) c = this.tail !== null && this.inTail } var b = this; if (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 ? false : true); this.options.buttonNextCallback !== null && this.buttonNext.data("jcarouselstate") != a && this.buttonNext.each(function () {
    b.options.buttonNextCallback(b,
this,
a)
}).data("jcarouselstate",
a)
        } else this.options.buttonNextCallback !== null && this.buttonNextState != a && this.options.buttonNextCallback(b,
null,
a); if (this.buttonPrev.size() > 0) {
            this.buttonPrev.unbind(this.options.buttonPrevEvent + ".jcarousel",
this.funcPrev); c && this.buttonPrev.bind(this.options.buttonPrevEvent + ".jcarousel",
this.funcPrev); this.buttonPrev[c ? "removeClass" : "addClass"](this.className("jcarousel-prev-disabled")).attr("disabled",
c ? false : true); this.options.buttonPrevCallback !== null && this.buttonPrev.data("jcarouselstate") != c && this.buttonPrev.each(function () {
    b.options.buttonPrevCallback(b,
this,
c)
}).data("jcarouselstate",
c)
        } else this.options.buttonPrevCallback !== null && this.buttonPrevState != c && this.options.buttonPrevCallback(b,
null,
c); this.buttonNextState = a; this.buttonPrevState = c
    },
    notify: function (a) {
        var c = this.prevFirst === null ? "init" : this.prevFirst < this.first ? "next" : "prev"; this.callback("itemLoadCallback",
a,
c); if (this.prevFirst !== this.first) {
            this.callback("itemFirstInCallback",
a,
c,
this.first); this.callback("itemFirstOutCallback",
a,
c,
this.prevFirst)
        } if (this.prevLast !== this.last) {
            this.callback("itemLastInCallback",
a,
c,
this.last); this.callback("itemLastOutCallback",
a,
c,
this.prevLast)
        } this.callback("itemVisibleInCallback",
a,
c,
this.first,
this.last,
this.prevFirst,
this.prevLast); this.callback("itemVisibleOutCallback",
a,
c,
this.prevFirst,
this.prevLast,
this.first,
this.last)
    },
    callback: function (a,
c,
b,
d,
f,
j,
e) {
        if (!(this.options[a] == null || typeof this.options[a] != "object" && c != "onAfterAnimation")) {
            var g = typeof this.options[a] == "object" ? this.options[a][c] : this.options[a]; if (i.isFunction(g)) {
                var k = this; if (d === undefined) g(k,
b,
c); else if (f === undefined) this.get(d).each(function () {
    g(k,
this,
d,
b,
c)
}); else {
                    a = function (m) {
                        k.get(m).each(function () {
                            g(k,
this,
m,
b,
c)
                        })
                    }; for (var l = d; l <= f; l++) l !== null && !(l >= j && l <= e) && a(l)
                }
            }
        }
    },
    create: function (a) {
        return this.format("<li></li>",
a)
    },
    format: function (a,
c) {
        a = i(a); for (var b = a.get(0).className.split(" "),
d = 0; d < b.length; d++) b[d].indexOf("jcarousel-") != -1 && a.removeClass(b[d]); a.addClass(this.className("jcarousel-item")).addClass(this.className("jcarousel-item-" + c)).css({ "float": this.options.rtl ? "right" : "left",
    "list-style": "none"
}).attr("jcarouselindex",
c); return a
    },
    className: function (a) { return a + " " + a + (!this.options.vertical ? "-horizontal" : "-vertical") },
    dimension: function (a,
c) {
        var b = a.jquery !== undefined ? a[0] : a,
d = !this.options.vertical ? (b.offsetWidth || h.intval(this.options.itemFallbackDimension)) + h.margin(b,
"marginLeft") + h.margin(b,
"marginRight") : (b.offsetHeight || h.intval(this.options.itemFallbackDimension)) + h.margin(b,
"marginTop") + h.margin(b,
"marginBottom"); if (c == null || d == c) return d; d = !this.options.vertical ? c - h.margin(b,
"marginLeft") - h.margin(b,
"marginRight") : c - h.margin(b,
"marginTop") - h.margin(b,
"marginBottom"); i(b).css(this.wh,
d + "px"); return this.dimension(b)
    },
    clipping: function () { return !this.options.vertical ? this.clip[0].offsetWidth - h.intval(this.clip.css("borderLeftWidth")) - h.intval(this.clip.css("borderRightWidth")) : this.clip[0].offsetHeight - h.intval(this.clip.css("borderTopWidth")) - h.intval(this.clip.css("borderBottomWidth")) },
    index: function (a,
c) { if (c == null) c = this.options.size; return Math.round(((a - 1) / c - Math.floor((a - 1) / c)) * c) + 1 }
}); h.extend({ defaults: function (a) {
    return i.extend(q,
a || {})
},
    margin: function (a,
c) {
        if (!a) return 0; var b = a.jquery !== undefined ? a[0] : a; if (c == "marginRight" && i.browser.safari) {
            var d = { display: "block",
                "float": "none",
                width: "auto"
            },
f,
j; i.swap(b,
d,
function () { f = b.offsetWidth }); d.marginRight = 0; i.swap(b,
d,
function () { j = b.offsetWidth }); return j - f
        } return h.intval(i.css(b,
c))
    },
    intval: function (a) {
        a = parseInt(a,
10); return isNaN(a) ? 0 : a
    }
}); i.fn.jcarousel = function (a) {
    if (typeof a == "string") {
        var c = i(this).data("jcarousel"),
b = Array.prototype.slice.call(arguments,
1); return c[a].apply(c,
b)
    } else return this.each(function () {
        i(this).data("jcarousel",
new h(this,
a))
    })
}
})(jQuery);

var teasersize = 75;
function mycarousel_initCallback(carousel) {
    jQuery('#external ul li a').bind('click', function () {
        carousel.scroll(jQuery.jcarousel.intval(jQuery(this).text()));
        return false;
    });
    carousel.clip.hover(function () {
        carousel.stopAuto();
    }, function () {
        carousel.startAuto();
    });
};
function highlight(carousel, objectli, liindex, listate) {
    actindex = teasersize - (liindex % teasersize); // calculate which item this corresponds to after first scroll
    jQuery('#external a').removeAttr("class", "active");
    jQuery('#external a#link' + actindex).attr("class", "active");
};
function removehighlight(carousel, objectli, liindex, listate) {
    actindex = teasersize - (liindex % teasersize);
    jQuery('#external a#link' + actindex).removeAttr("class", "active");
};
