/*
Copyright (c) 2010, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.com/yui/license.html
version: 2.8.1
*/
(function () {
    var P;
    YAHOO.widget.Carousel = function (s, r) {
        YAHOO.widget.Carousel.superclass.constructor.call(this, s, r);
    };
    var U = YAHOO.widget.Carousel,
        e = YAHOO.util.Dom,
        c = YAHOO.util.Event,
        p = YAHOO.lang;
    P = "Carousel";
    var T = {},
        F = "afterScroll",
        g = "allItemsRemoved",
        b = "beforeHide",
        J = "beforePageChange",
        i = "beforeScroll",
        Y = "beforeShow",
        B = "blur",
        X = "focus",
        a = "hide",
        S = "itemAdded",
        o = "itemRemoved",
        Q = "itemReplaced",
        C = "itemSelected",
        L = "loadItems",
        I = "navigationStateChange",
        h = "pageChange",
        H = "render",
        V = "show",
        Z = "startAutoPlay",
        q = "stopAutoPlay",
        K = "uiUpdate";

    function G(r, s) {
        var t;
        for (t in s) {
            if (s.hasOwnProperty(t)) {
                e.setStyle(r, t, s[t]);
            }
        }
    }
    function W(s, r) {
        var t = document.createElement(s);
        r = r || {};
        if (r.className) {
            e.addClass(t, r.className);
        }
        if (r.styles) {
            G(t, r.styles);
        }
        if (r.parent) {
            r.parent.appendChild(t);
        }
        if (r.id) {
            t.setAttribute("id", r.id);
        }
        if (r.content) {
            if (r.content.nodeName) {
                t.appendChild(r.content);
            } else {
                t.innerHTML = r.content;
            }
        }
        return t;
    }
    function d(t, s, r) {
        var v;
        if (!t) {
            return 0;
        }
        function u(y, x) {
            var z;
            if (x == "marginRight" && YAHOO.env.ua.webkit) {
                z = parseInt(e.getStyle(y, "marginLeft"), 10);
            } else {
                z = parseInt(e.getStyle(y, x), 10);
            }
            return p.isNumber(z) ? z : 0;
        }
        function w(y, x) {
            var z;
            if (x == "marginRight" && YAHOO.env.ua.webkit) {
                z = parseFloat(e.getStyle(y, "marginLeft"));
            } else {
                z = parseFloat(e.getStyle(y, x));
            }
            return p.isNumber(z) ? z : 0;
        }
        if (typeof r == "undefined") {
            r = "int";
        }
        switch (s) {
        case "height":
            v = t.offsetHeight;
            if (v > 0) {
                v += u(t, "marginTop") + u(t, "marginBottom");
            } else {
                v = w(t, "height") + u(t, "marginTop") + u(t, "marginBottom") + u(t, "borderTopWidth") + u(t, "borderBottomWidth") + u(t, "paddingTop") + u(t, "paddingBottom");
            }
            break;
        case "width":
            v = t.offsetWidth;
            if (v > 0) {
                v += u(t, "marginLeft") + u(t, "marginRight");
            } else {
                v = w(t, "width") + u(t, "marginLeft") + u(t, "marginRight") + u(t, "borderLeftWidth") + u(t, "borderRightWidth") + u(t, "paddingLeft") + u(t, "paddingRight");
            }
            break;
        default:
            if (r == "int") {
                v = u(t, s);
            } else {
                if (r == "float") {
                    v = w(t, s);
                } else {
                    v = e.getStyle(t, s);
                }
            }
            break;
        }
        return v;
    }
    function O(w) {
        var u = this,
            x, t, s = 0,
            v = u.get("firstVisible"),
            r = false;
        if (u._itemsTable.numItems === 0) {
            return 0;
        }
        t = u._itemsTable.items[v] || u._itemsTable.loading[v];
        if (p.isUndefined(t)) {
            return 0;
        }
        x = e.get(t.id);
        if (typeof w == "undefined") {
            r = u.get("isVertical");
        } else {
            r = w == "height";
        }
        if (this._itemAttrCache[w]) {
            return this._itemAttrCache[w];
        }
        if (r) {
            s = d(x, "height");
        } else {
            s = d(x, "width");
        }
        this._itemAttrCache[w] = s;
        return s;
    }
    function N() {
        var s = this,
            t, r;
        t = s.get("isVertical");
        r = O.call(s, t ? "height" : "width");
        return (r * s.get("revealAmount") / 100);
    }
    function m(w) {
        var AH = this,
            z = AH._cols,
            v = AH._rows,
            u, AC, AB, t, x, AD, AJ = 0,
            AE, s, AG, AA = {},
            y = 0,
            AI = AH._itemsTable,
            AF = AI.items,
            r = AI.loading;
        AB = AH.get("isVertical");
        AC = O.call(AH, AB ? "height" : "width");
        AG = N.call(AH);
        while (y < w) {
            if (!AF[y] && !r[y]) {
                AJ++;
            }
            y++;
        }
        w -= AJ;
        if (v) {
            u = this.getPageForItem(w);
            if (AB) {
                x = Math.floor(w / z);
                AJ = x;
                AE = AJ * AC;
                AA.top = (AE + AG) + "px";
                AC = O.call(AH, "width");
                t = w % z;
                AJ = t;
                s = AJ * AC;
                AA.left = s + "px";
            } else {
                t = w % z;
                AD = (u - 1) * z;
                AJ = t + AD;
                s = AJ * AC;
                AA.left = (s + AG) + "px";
                AC = O.call(AH, "height");
                x = Math.floor(w / z);
                AD = (u - 1) * v;
                AJ = x - AD;
                AE = AJ * AC;
                AA.top = AE + "px";
            }
        } else {
            if (AB) {
                AA.left = 0;
                AA.top = ((w * AC) + AG) + "px";
            } else {
                AA.top = 0;
                AA.left = ((w * AC) + AG) + "px";
            }
        }
        return AA;
    }
    function D(s) {
        var r = this.get("numVisible");
        return Math.floor(s / r) * r;
    }
    function j(t) {
        var s = 0,
            r = 0;
        s = O.call(this);
        r = s * t;
        return r;
    }
    function f(r, s) {
        s.scrollPageBackward();
        c.preventDefault(r);
    }
    function k(r, s) {
        s.scrollPageForward();
        c.preventDefault(r);
    }
    function n(w, s) {
        var AA = this,
            AB = AA.CLASSES,
            r, y = AA._firstItem,
            t = AA.get("isCircular"),
            x = AA.get("numItems"),
            z = AA.get("numVisible"),
            v = s,
            u = y + z - 1;
        if (v >= 0 && v < x) {
            if (!p.isUndefined(AA._itemsTable.items[v])) {
                r = e.get(AA._itemsTable.items[v].id);
                if (r) {
                    e.removeClass(r, AB.SELECTED_ITEM);
                }
            }
        }
        if (p.isNumber(w)) {
            w = parseInt(w, 10);
            w = p.isNumber(w) ? w : 0;
        } else {
            w = y;
        }
        if (p.isUndefined(AA._itemsTable.items[w])) {
            w = D.call(AA, w);
            AA.scrollTo(w);
        }
        if (!p.isUndefined(AA._itemsTable.items[w])) {
            r = e.get(AA._itemsTable.items[w].id);
        }
        if (w < y || w > u) {
            w = D.call(AA, w);
            AA.scrollTo(w);
        }
    }
    function l() {
        var t = false,
            w = this,
            s = w.CLASSES,
            v, r, u;
        if (!w._hasRendered) {
            return;
        }
        r = w.get("navigation");
        u = w._firstItem + w.get("numVisible");
        if (r.prev) {
            if (w.get("numItems") === 0 || w._firstItem === 0) {
                if (w.get("numItems") === 0 || !w.get("isCircular")) {
                    c.removeListener(r.prev, "click", f);
                    e.addClass(r.prev, s.FIRST_NAV_DISABLED);
                    for (v = 0; v < w._navBtns.prev.length; v++) {
                        w._navBtns.prev[v].setAttribute("disabled", "true");
                    }
                    w._prevEnabled = false;
                } else {
                    t = !w._prevEnabled;
                }
            } else {
                t = !w._prevEnabled;
            }
            if (t) {
                c.on(r.prev, "click", f, w);
                e.removeClass(r.prev, s.FIRST_NAV_DISABLED);
                for (v = 0; v < w._navBtns.prev.length; v++) {
                    w._navBtns.prev[v].removeAttribute("disabled");
                }
                w._prevEnabled = true;
            }
        }
        t = false;
        if (r.next) {
            if (u >= w.get("numItems")) {
                if (!w.get("isCircular")) {
                    c.removeListener(r.next, "click", k);
                    e.addClass(r.next, s.DISABLED);
                    for (v = 0; v < w._navBtns.next.length; v++) {
                        w._navBtns.next[v].setAttribute("disabled", "true");
                    }
                    w._nextEnabled = false;
                } else {
                    t = !w._nextEnabled;
                }
            } else {
                t = !w._nextEnabled;
            }
            if (t) {
                c.on(r.next, "click", k, w);
                e.removeClass(r.next, s.DISABLED);
                for (v = 0; v < w._navBtns.next.length; v++) {
                    w._navBtns.next[v].removeAttribute("disabled");
                }
                w._nextEnabled = true;
            }
        }
        w.fireEvent(I, {
            next: w._nextEnabled,
            prev: w._prevEnabled
        });
    }
    function R(t) {
        var u = this,
            r, s;
        if (!u._hasRendered) {
            return;
        }
        s = u.get("numVisible");
        if (!p.isNumber(t)) {
            t = Math.floor(u.get("selectedItem") / s);
        }
        r = Math.ceil(u.get("numItems") / s);
        u._pages.num = r;
        u._pages.cur = t;
        if (r > u.CONFIG.MAX_PAGER_BUTTONS) {
            u._updatePagerMenu();
        } else {
            u._updatePagerButtons();
        }
    }
    function M(r, s) {
        switch (s) {
        case "height":
            return d(r, "marginTop") + d(r, "marginBottom") + d(r, "paddingTop") + d(r, "paddingBottom") + d(r, "borderTopWidth") + d(r, "borderBottomWidth");
        case "width":
            return d(r, "marginLeft") + d(r, "marginRight") + d(r, "paddingLeft") + d(r, "paddingRight") + d(r, "borderLeftWidth") + d(r, "borderRightWidth");
        default:
            break;
        }
        return d(r, s);
    }
    function A(s) {
        var r = this;
        if (!p.isObject(s)) {
            return;
        }
        switch (s.ev) {
        case S:
            r._syncUiForItemAdd(s);
            break;
        case o:
            r._syncUiForItemRemove(s);
            break;
        case Q:
            r._syncUiForItemReplace(s);
            break;
        case L:
            r._syncUiForLazyLoading(s);
            break;
        }
        r.fireEvent(K);
    }
    function E(u, s) {
        var w = this,
            v = w.get("currentPage"),
            t, r = w.get("numVisible");
        t = parseInt(w._firstItem / r, 10);
        if (t != v) {
            w.setAttributeConfig("currentPage", {
                value: t
            });
            w.fireEvent(h, t);
        }
        if (w.get("selectOnScroll")) {
            if (w.get("selectedItem") != w._selectedItem) {
                w.set("selectedItem", w._selectedItem);
            }
        }
        clearTimeout(w._autoPlayTimer);
        delete w._autoPlayTimer;
        if (w.isAutoPlayOn()) {
            w.startAutoPlay();
        }
        w.fireEvent(F, {
            first: w._firstItem,
            last: s
        }, w);
    }
    U.getById = function (r) {
        return T[r] ? T[r].object : false;
    };
    YAHOO.extend(U, YAHOO.util.Element, {
        _rows: null,
        _cols: null,
        _animObj: null,
        _carouselEl: null,
        _clipEl: null,
        _firstItem: 0,
        _hasFocus: false,
        _hasRendered: false,
        _isAnimationInProgress: false,
        _isAutoPlayInProgress: false,
        _itemsTable: null,
        _navBtns: null,
        _navEl: null,
        _nextEnabled: true,
        _pages: null,
        _pagination: {},
        _prevEnabled: true,
        _recomputeSize: true,
        _itemAttrCache: {},
        CLASSES: {
            BUTTON: "yui-carousel-button",
            CAROUSEL: "yui-carousel",
            CAROUSEL_EL: "yui-carousel-element",
            CONTAINER: "yui-carousel-container",
            CONTENT: "yui-carousel-content",
            DISABLED: "yui-carousel-button-disabled",
            FIRST_NAV: " yui-carousel-first-button",
            FIRST_NAV_DISABLED: "yui-carousel-first-button-disabled",
            FIRST_PAGE: "yui-carousel-nav-first-page",
            FOCUSSED_BUTTON: "yui-carousel-button-focus",
            HORIZONTAL: "yui-carousel-horizontal",
            ITEM_LOADING: "yui-carousel-item-loading",
            MIN_WIDTH: "yui-carousel-min-width",
            NAVIGATION: "yui-carousel-nav",
            NEXT_NAV: " yui-carousel-next-button",
            NEXT_PAGE: "yui-carousel-next",
            NAV_CONTAINER: "yui-carousel-buttons",
            PAGER_ITEM: "yui-carousel-pager-item",
            PAGINATION: "yui-carousel-pagination",
            PAGE_FOCUS: "yui-carousel-nav-page-focus",
            PREV_PAGE: "yui-carousel-prev",
            SELECTED_ITEM: "yui-carousel-item-selected",
            SELECTED_NAV: "yui-carousel-nav-page-selected",
            VERTICAL: "yui-carousel-vertical",
            MULTI_ROW: "yui-carousel-multi-row",
            ROW: "yui-carousel-row",
            VERTICAL_CONTAINER: "yui-carousel-vertical-container",
            VISIBLE: "yui-carousel-visible"
        },
        CONFIG: {
            FIRST_VISIBLE: 0,
            HORZ_MIN_WIDTH: 180,
            MAX_PAGER_BUTTONS: 25,
            VERT_MIN_WIDTH: 115,
            NUM_VISIBLE: 3
        },
        STRINGS: {
            ITEM_LOADING_CONTENT: "Loading",
            NEXT_BUTTON_TEXT: "Next Page",
            PAGER_PREFIX_TEXT: "Go to page ",
            PREVIOUS_BUTTON_TEXT: "Previous Page"
        },
        addItem: function (y, s) {
            var x = this,
                u, t, r, z = 0,
                w, v = x.get("numItems");
            if (!y) {
                return false;
            }
            if (p.isString(y) || y.nodeName) {
                t = y.nodeName ? y.innerHTML : y;
            } else {
                if (p.isObject(y)) {
                    t = y.content;
                } else {
                    return false;
                }
            }
            u = y.className || "";
            r = y.id ? y.id : e.generateId();
            if (p.isUndefined(s)) {
                x._itemsTable.items.push({
                    item: t,
                    className: u,
                    id: r
                });
                w = x._itemsTable.items.length - 1;
            } else {
                if (s < 0 || s > v) {
                    return false;
                }
                if (!x._itemsTable.items[s]) {
                    x._itemsTable.items[s] = undefined;
                    z = 1;
                }
                x._itemsTable.items.splice(s, z, {
                    item: t,
                    className: u,
                    id: r
                });
            }
            x._itemsTable.numItems++;
            if (v < x._itemsTable.items.length) {
                x.set("numItems", x._itemsTable.items.length);
            }
            x.fireEvent(S, {
                pos: s,
                ev: S,
                newPos: w
            });
            return true;
        },
        addItems: function (r) {
            var s, u, t = true;
            if (!p.isArray(r)) {
                return false;
            }
            for (s = 0, u = r.length; s < u; s++) {
                if (this.addItem(r[s][0], r[s][1]) === false) {
                    t = false;
                }
            }
            return t;
        },
        blur: function () {
            this._carouselEl.blur();
            this.fireEvent(B);
        },
        clearItems: function () {
            var r = this,
                s = r.get("numItems");
            while (s > 0) {
                if (!r.removeItem(0)) {}
                if (r._itemsTable.numItems === 0) {
                    r.set("numItems", 0);
                    break;
                }
                s--;
            }
            r.fireEvent(g);
        },
        focus: function () {
            var AA = this,
                v, w, x, u, z, AB, s, t, r;
            if (!AA._hasRendered) {
                return;
            }
            if (AA.isAnimating()) {
                return;
            }
            r = AA.get("selectedItem");
            AB = AA.get("numVisible");
            s = AA.get("selectOnScroll");
            t = (r >= 0) ? AA.getItem(r) : null;
            v = AA.get("firstVisible");
            z = v + AB - 1;
            x = (r < v || r > z);
            w = (t && t.id) ? e.get(t.id) : null;
            u = AA._itemsTable;
            if (!s && x) {
                w = (u && u.items && u.items[v]) ? e.get(u.items[v].id) : null;
            }
            if (w) {
                try {
                    w.focus();
                } catch (y) {}
            }
            AA.fireEvent(X);
        },
        hide: function () {
            var r = this;
            if (r.fireEvent(b) !== false) {
                r.removeClass(r.CLASSES.VISIBLE);
                r.fireEvent(a);
            }
        },
        init: function (u, s) {
            var v = this,
                r = u,
                w = false,
                t;
            if (!u) {
                return;
            }
            v._hasRendered = false;
            v._navBtns = {
                prev: [],
                next: []
            };
            v._pages = {
                el: null,
                num: 0,
                cur: 0
            };
            v._pagination = {};
            v._itemAttrCache = {};
            v._itemsTable = {
                loading: {},
                numItems: 0,
                items: [],
                size: 0
            };
            if (p.isString(u)) {
                u = e.get(u);
            } else {
                if (!u.nodeName) {
                    return;
                }
            }
            U.superclass.init.call(v, u, s);
            t = v.get("selectedItem");
            if (t > 0) {
                v.set("firstVisible", D.call(v, t));
            }
            if (u) {
                if (!u.id) {
                    u.setAttribute("id", e.generateId());
                }
                w = v._parseCarousel(u);
                if (!w) {
                    v._createCarousel(r);
                }
            } else {
                u = v._createCarousel(r);
            }
            r = u.id;
            v.initEvents();
            if (w) {
                v._parseCarouselItems();
            }
            if (t > 0) {
                n.call(v, t, 0);
            }
            if (!s || typeof s.isVertical == "undefined") {
                v.set("isVertical", false);
            }
            v._parseCarouselNavigation(u);
            v._navEl = v._setupCarouselNavigation();
            T[r] = {
                object: v
            };
            v._loadItems(Math.min(v.get("firstVisible") + v.get("numVisible"), v.get("numItems")) - 1);
        },
        initAttributes: function (r) {
            var s = this;
            r = r || {};
            U.superclass.initAttributes.call(s, r);
            s.setAttributeConfig("carouselEl", {
                validator: p.isString,
                value: r.carouselEl || "OL"
            });
            s.setAttributeConfig("carouselItemEl", {
                validator: p.isString,
                value: r.carouselItemEl || "LI"
            });
            s.setAttributeConfig("currentPage", {
                readOnly: true,
                value: 0
            });
            s.setAttributeConfig("firstVisible", {
                method: s._setFirstVisible,
                validator: s._validateFirstVisible,
                value: r.firstVisible || s.CONFIG.FIRST_VISIBLE
            });
            s.setAttributeConfig("selectOnScroll", {
                validator: p.isBoolean,
                value: r.selectOnScroll || true
            });
            s.setAttributeConfig("numVisible", {
                setter: s._numVisibleSetter,
                method: s._setNumVisible,
                validator: s._validateNumVisible,
                value: r.numVisible || s.CONFIG.NUM_VISIBLE
            });
            s.setAttributeConfig("numItems", {
                method: s._setNumItems,
                validator: s._validateNumItems,
                value: s._itemsTable.numItems
            });
            s.setAttributeConfig("scrollIncrement", {
                validator: s._validateScrollIncrement,
                value: r.scrollIncrement || 1
            });
            s.setAttributeConfig("selectedItem", {
                setter: s._selectedItemSetter,
                method: s._setSelectedItem,
                validator: p.isNumber,
                value: -1
            });
            s.setAttributeConfig("revealAmount", {
                method: s._setRevealAmount,
                validator: s._validateRevealAmount,
                value: r.revealAmount || 0
            });
            s.setAttributeConfig("isCircular", {
                validator: p.isBoolean,
                value: r.isCircular || false
            });
            s.setAttributeConfig("isVertical", {
                method: s._setOrientation,
                validator: p.isBoolean,
                value: r.isVertical || false
            });
            s.setAttributeConfig("navigation", {
                method: s._setNavigation,
                validator: s._validateNavigation,
                value: r.navigation || {
                    prev: null,
                    next: null,
                    page: null
                }
            });
            s.setAttributeConfig("animation", {
                validator: s._validateAnimation,
                value: r.animation || {
                    speed: 0,
                    effect: null
                }
            });
            s.setAttributeConfig("autoPlay", {
                validator: p.isNumber,
                value: r.autoPlay || 0
            });
            s.setAttributeConfig("autoPlayInterval", {
                validator: p.isNumber,
                value: r.autoPlayInterval || 0
            });
            s.setAttributeConfig("numPages", {
                readOnly: true,
                getter: s._getNumPages
            });
            s.setAttributeConfig("lastVisible", {
                readOnly: true,
                getter: s._getLastVisible
            });
        },
        initEvents: function () {
            var t = this,
                s = t.CLASSES,
                r;
            t.on("keydown", t._keyboardEventHandler);
            t.on(F, l);
            t.on(S, A);
            t.on(o, A);
            t.on(Q, A);
            t.on(C, function () {
                if (t._hasFocus) {
                    t.focus();
                }
            });
            t.on(L, A);
            t.on(g, function (u) {
                t.scrollTo(0);
                l.call(t);
                R.call(t);
            });
            t.on(h, R, t);
            t.on(H, function (u) {
                if (t.get("selectedItem") === null || t.get("selectedItem") <= 0) {
                    t.set("selectedItem", t.get("firstVisible"));
                }
                l.call(t, u);
                R.call(t, u);
                t._setClipContainerSize();
                t.show();
            });
            t.on("selectedItemChange", function (u) {
                n.call(t, u.newValue, u.prevValue);
                if (u.newValue >= 0) {
                    t._updateTabIndex(t.getElementForItem(u.newValue));
                }
                t.fireEvent(C, u.newValue);
            });
            t.on(K, function (u) {
                l.call(t, u);
                R.call(t, u);
            });
            t.on("firstVisibleChange", function (u) {
                if (!t.get("selectOnScroll")) {
                    if (u.newValue >= 0) {
                        t._updateTabIndex(t.getElementForItem(u.newValue));
                    }
                }
            });
            t.on("click", function (u) {
                if (t.isAutoPlayOn()) {
                    t.stopAutoPlay();
                }
                t._itemClickHandler(u);
                t._pagerClickHandler(u);
            });
            c.onFocus(t.get("element"), function (u, w) {
                var v = c.getTarget(u);
                if (v && v.nodeName.toUpperCase() == "A" && e.getAncestorByClassName(v, s.NAVIGATION)) {
                    if (r) {
                        e.removeClass(r, s.PAGE_FOCUS);
                    }
                    r = v.parentNode;
                    e.addClass(r, s.PAGE_FOCUS);
                } else {
                    if (r) {
                        e.removeClass(r, s.PAGE_FOCUS);
                    }
                }
                w._hasFocus = true;
                w._updateNavButtons(c.getTarget(u), true);
            }, t);
            c.onBlur(t.get("element"), function (u, v) {
                v._hasFocus = false;
                v._updateNavButtons(c.getTarget(u), false);
            }, t);
        },
        isAnimating: function () {
            return this._isAnimationInProgress;
        },
        isAutoPlayOn: function () {
            return this._isAutoPlayInProgress;
        },
        getElementForItem: function (r) {
            var s = this;
            if (r < 0 || r >= s.get("numItems")) {
                return null;
            }
            if (s._itemsTable.items[r]) {
                return e.get(s._itemsTable.items[r].id);
            }
            return null;
        },
        getElementForItems: function () {
            var t = this,
                s = [],
                r;
            for (r = 0; r < t._itemsTable.numItems; r++) {
                s.push(t.getElementForItem(r));
            }
            return s;
        },
        getItem: function (r) {
            var s = this;
            if (r < 0 || r >= s.get("numItems")) {
                return null;
            }
            if (s._itemsTable.numItems > r) {
                if (!p.isUndefined(s._itemsTable.items[r])) {
                    return s._itemsTable.items[r];
                }
            }
            return null;
        },
        getItems: function () {
            return this._itemsTable.items;
        },
        getLoadingItems: function () {
            return this._itemsTable.loading;
        },
        getRows: function () {
            return this._rows;
        },
        getCols: function () {
            return this._cols;
        },
        getItemPositionById: function (w) {
            var u = this,
                v = u.get("numItems"),
                s = 0,
                r = u._itemsTable.items,
                t;
            while (s < v) {
                t = r[s] || {};
                if (t.id == w) {
                    return s;
                }
                s++;
            }
            return -1;
        },
        getVisibleItems: function () {
            var u = this,
                s = u.get("firstVisible"),
                v = s + u.get("numVisible"),
                t = [];
            while (s < v) {
                t.push(u.getElementForItem(s));
                s++;
            }
            return t;
        },
        removeItem: function (s) {
            var u = this,
                t, r = u.get("numItems");
            if (s < 0 || s >= r) {
                return false;
            }
            t = u._itemsTable.items.splice(s, 1);
            if (t && t.length == 1) {
                u._itemsTable.numItems--;
                u.set("numItems", r - 1);
                u.fireEvent(o, {
                    item: t[0],
                    pos: s,
                    ev: o
                });
                return true;
            }
            return false;
        },
        replaceItem: function (z, u) {
            var y = this,
                w, v, t, x = y.get("numItems"),
                s, r = z;
            if (!z) {
                return false;
            }
            if (p.isString(z) || z.nodeName) {
                v = z.nodeName ? z.innerHTML : z;
            } else {
                if (p.isObject(z)) {
                    v = z.content;
                } else {
                    return false;
                }
            }
            if (p.isUndefined(u)) {
                return false;
            } else {
                if (u < 0 || u >= x) {
                    return false;
                }
                s = y._itemsTable.items[u];
                if (!s) {
                    s = y._itemsTable.loading[u];
                    y._itemsTable.items[u] = undefined;
                }
                y._itemsTable.items.splice(u, 1, {
                    item: v,
                    className: z.className || "",
                    id: e.generateId()
                });
                r = y._itemsTable.items[u];
            }
            y.fireEvent(Q, {
                newItem: r,
                oldItem: s,
                pos: u,
                ev: Q
            });
            return true;
        },
        replaceItems: function (r) {
            var s, u, t = true;
            if (!p.isArray(r)) {
                return false;
            }
            for (s = 0, u = r.length; s < u; s++) {
                if (this.replaceItem(r[s][0], r[s][1]) === false) {
                    t = false;
                }
            }
            return t;
        },
        render: function (s) {
            var u = this,
                r = u.CLASSES,
                t = u._rows;
            u.addClass(r.CAROUSEL);
            if (!u._clipEl) {
                u._clipEl = u._createCarouselClip();
                u._clipEl.appendChild(u._carouselEl);
            }
            if (s) {
                u.appendChild(u._clipEl);
                u.appendTo(s);
            } else {
                if (!e.inDocument(u.get("element"))) {
                    return false;
                }
                u.appendChild(u._clipEl);
            }
            if (t) {
                e.addClass(u._clipEl, r.MULTI_ROW);
            }
            if (u.get("isVertical")) {
                u.addClass(r.VERTICAL);
            } else {
                u.addClass(r.HORIZONTAL);
            }
            if (u.get("numItems") < 1) {
                return false;
            }
            u._refreshUi();
            return true;
        },
        scrollBackward: function () {
            var r = this;
            r.scrollTo(r._firstItem - r.get("scrollIncrement"));
        },
        scrollForward: function () {
            var r = this;
            r.scrollTo(r._firstItem + r.get("scrollIncrement"));
        },
        scrollPageBackward: function () {
            var t = this,
                u = t.get("isVertical"),
                s = t._cols,
                r = t._firstItem - t.get("numVisible");
            if (r < 0) {
                if (s) {
                    r = t._firstItem - s;
                }
            }
            if (t.get("selectOnScroll")) {
                t._selectedItem = t._getSelectedItem(r);
            }
            t.scrollTo(r);
        },
        scrollPageForward: function () {
            var s = this,
                r = s._firstItem + s.get("numVisible");
            if (r > s.get("numItems")) {
                r = 0;
            }
            if (s.get("selectOnScroll")) {
                s._selectedItem = s._getSelectedItem(r);
            }
            s.scrollTo(r);
        },
        scrollTo: function (AL, AI) {
            var AH = this,
                u, AJ, z, AB, AC, AM, AN, AO, AD, AA, v, AF, s, w, t, x, AE, y, AP, AK = AH._itemsTable,
                AG = AK.items,
                r = AK.loading;
            if (p.isUndefined(AL) || AL == AH._firstItem || AH.isAnimating()) {
                return;
            }
            AJ = AH.get("animation");
            z = AH.get("isCircular");
            AB = AH.get("isVertical");
            AA = AH._cols;
            v = AH._rows;
            AO = AH._firstItem;
            AF = AH.get("numItems");
            s = AH.get("numVisible");
            t = AH.get("currentPage");
            AP = function () {
                if (AH.isAutoPlayOn()) {
                    AH.stopAutoPlay();
                }
            };
            if (AL < 0) {
                if (z) {
                    AL = AF + AL;
                } else {
                    AP.call(AH);
                    return;
                }
            } else {
                if (AF > 0 && AL > AF - 1) {
                    if (AH.get("isCircular")) {
                        AL = AF - AL;
                    } else {
                        AP.call(AH);
                        return;
                    }
                }
            }
            if (isNaN(AL)) {
                return;
            }
            AN = (AH._firstItem > AL) ? "backward" : "forward";
            AE = AO + s;
            AE = (AE > AF - 1) ? AF - 1 : AE;
            x = AH.fireEvent(i, {
                dir: AN,
                first: AO,
                last: AE
            });
            if (x === false) {
                return;
            }
            AH.fireEvent(J, {
                page: t
            });
            AD = AL + s - 1;
            AH._loadItems(AD > AF - 1 ? AF - 1 : AD);
            AM = 0 - AL;
            if (v) {
                if (AB) {
                    AM = parseInt(AM / AA, 10);
                } else {
                    AM = parseInt(AM / v, 10);
                }
            }
            y = 0;
            while (AM < 0 && y < AL + s - 1 && y < AF) {
                if (!AG[y] && !r[y]) {
                    AM++;
                }
                y += v ? v : 1;
            }
            AH._firstItem = AL;
            AH.set("firstVisible", AL);
            AE = AL + s;
            AE = (AE > AF - 1) ? AF - 1 : AE;
            w = j.call(AH, AM);
            u = AJ.speed > 0;
            if (u) {
                AH._animateAndSetCarouselOffset(w, AL, AE, AI);
            } else {
                AH._setCarouselOffset(w);
                E.call(AH, AL, AE);
            }
        },
        getPageForItem: function (r) {
            return Math.ceil((r + 1) / parseInt(this.get("numVisible"), 10));
        },
        getFirstVisibleOnPage: function (r) {
            return (r - 1) * this.get("numVisible");
        },
        selectPreviousItem: function () {
            var t = this,
                s = 0,
                r = t.get("selectedItem");
            if (r == this._firstItem) {
                s = r - t.get("numVisible");
                t._selectedItem = t._getSelectedItem(r - 1);
                t.scrollTo(s);
            } else {
                s = t.get("selectedItem") - t.get("scrollIncrement");
                t.set("selectedItem", t._getSelectedItem(s));
            }
        },
        selectNextItem: function () {
            var s = this,
                r = 0;
            r = s.get("selectedItem") + s.get("scrollIncrement");
            s.set("selectedItem", s._getSelectedItem(r));
        },
        show: function () {
            var s = this,
                r = s.CLASSES;
            if (s.fireEvent(Y) !== false) {
                s.addClass(r.VISIBLE);
                s.fireEvent(V);
            }
        },
        startAutoPlay: function () {
            var r = this,
                s;
            if (p.isUndefined(r._autoPlayTimer)) {
                s = r.get("autoPlayInterval");
                if (s <= 0) {
                    return;
                }
                r._isAutoPlayInProgress = true;
                r.fireEvent(Z);
                r._autoPlayTimer = setTimeout(function () {
                    r._autoScroll();
                }, s);
            }
        },
        stopAutoPlay: function () {
            var r = this;
            if (!p.isUndefined(r._autoPlayTimer)) {
                clearTimeout(r._autoPlayTimer);
                delete r._autoPlayTimer;
                r._isAutoPlayInProgress = false;
                r.fireEvent(q);
            }
        },
        updatePagination: function () {
            var z = this,
                x = z._pagination;
            if (!x.el) {
                return false;
            }
            var w = z.get("numItems"),
                AA = z.get("numVisible"),
                u = z.get("firstVisible") + 1,
                v = z.get("currentPage") + 1,
                r = z.get("numPages"),
                t = {
                    "numVisible": AA,
                    "numPages": r,
                    "numItems": w,
                    "selectedItem": z.get("selectedItem") + 1,
                    "currentPage": v,
                    "firstVisible": u,
                    "lastVisible": z.get("lastVisible") + 1
                },
                s = x.callback || {},
                y = s.scope && s.obj ? s.obj : z;
            x.el.innerHTML = p.isFunction(s.fn) ? s.fn.apply(y, [x.template, t]) : YAHOO.lang.substitute(x.template, t);
        },
        registerPagination: function (s, u, r) {
            var t = this;
            t._pagination.template = s;
            t._pagination.callback = r || {};
            if (!t._pagination.el) {
                t._pagination.el = W("DIV", {
                    className: t.CLASSES.PAGINATION
                });
                if (u == "before") {
                    t._navEl.insertBefore(t._pagination.el, t._navEl.firstChild);
                } else {
                    t._navEl.appendChild(t._pagination.el);
                }
                t.on("itemSelected", t.updatePagination);
                t.on("pageChange", t.updatePagination);
            }
            t.updatePagination();
        },
        toString: function () {
            return P + (this.get ? " (#" + this.get("id") + ")" : "");
        },
        _animateAndSetCarouselOffset: function (w, u, s) {
            var v = this,
                t = v.get("animation"),
                r = null;
            if (v.get("isVertical")) {
                r = new YAHOO.util.Motion(v._carouselEl, {
                    top: {
                        to: w
                    }
                }, t.speed, t.effect);
            } else {
                r = new YAHOO.util.Motion(v._carouselEl, {
                    left: {
                        to: w
                    }
                }, t.speed, t.effect);
            }
            v._isAnimationInProgress = true;
            r.onComplete.subscribe(v._animationCompleteHandler, {
                scope: v,
                item: u,
                last: s
            });
            r.animate();
        },
        _animationCompleteHandler: function (r, s, t) {
            t.scope._isAnimationInProgress = false;
            E.call(t.scope, t.item, t.last);
        },
        _autoScroll: function () {
            var s = this,
                t = s._firstItem,
                r;
            if (t >= s.get("numItems") - 1) {
                if (s.get("isCircular")) {
                    r = 0;
                } else {
                    s.stopAutoPlay();
                }
            } else {
                r = t + s.get("numVisible");
            }
            s._selectedItem = s._getSelectedItem(r);
            s.scrollTo.call(s, r);
        },
        _createCarousel: function (s) {
            var u = this,
                r = u.CLASSES,
                t = e.get(s);
            if (!t) {
                t = W("DIV", {
                    className: r.CAROUSEL,
                    id: s
                });
            }
            if (!u._carouselEl) {
                u._carouselEl = W(u.get("carouselEl"), {
                    className: r.CAROUSEL_EL
                });
            }
            return t;
        },
        _createCarouselClip: function () {
            return W("DIV", {
                className: this.CLASSES.CONTENT
            });
        },
        _createCarouselItem: function (u) {
            var r, t = this,
                s = m.call(t, u.pos);
            return W(t.get("carouselItemEl"), {
                className: u.className,
                styles: u.styles,
                content: u.content,
                id: u.id
            });
        },
        _getValidIndex: function (t) {
            var w = this,
                r = w.get("isCircular"),
                u = w.get("numItems"),
                v = w.get("numVisible"),
                s = u - 1;
            if (t < 0) {
                t = r ? Math.ceil(u / v) * v + t : 0;
            } else {
                if (t > s) {
                    t = r ? 0 : s;
                }
            }
            return t;
        },
        _getSelectedItem: function (v) {
            var u = this,
                r = u.get("isCircular"),
                t = u.get("numItems"),
                s = t - 1;
            if (v < 0) {
                if (r) {
                    v = t + v;
                } else {
                    v = u.get("selectedItem");
                }
            } else {
                if (v > s) {
                    if (r) {
                        v = v - t;
                    } else {
                        v = u.get("selectedItem");
                    }
                }
            }
            return v;
        },
        _itemClickHandler: function (v) {
            var y = this,
                w = y.get("carouselItemEl"),
                s = y.get("element"),
                t, u, x = c.getTarget(v),
                r = x.tagName.toUpperCase();
            if (r === "INPUT" || r === "SELECT" || r === "TEXTAREA") {
                return;
            }
            while (x && x != s && x.id != y._carouselEl) {
                t = x.nodeName;
                if (t.toUpperCase() == w) {
                    break;
                }
                x = x.parentNode;
            }
            if ((u = y.getItemPositionById(x.id)) >= 0) {
                y.set("selectedItem", y._getSelectedItem(u));
                y.focus();
            }
        },
        _keyboardEventHandler: function (t) {
            var v = this,
                s = c.getCharCode(t),
                u = c.getTarget(t),
                r = false;
            if (v.isAnimating() || u.tagName.toUpperCase() === "SELECT") {
                return;
            }
            switch (s) {
            case 37:
            case 38:
                v.selectPreviousItem();
                r = true;
                break;
            case 39:
            case 40:
                v.selectNextItem();
                r = true;
                break;
            case 33:
                v.scrollPageBackward();
                r = true;
                break;
            case 34:
                v.scrollPageForward();
                r = true;
                break;
            }
            if (r) {
                if (v.isAutoPlayOn()) {
                    v.stopAutoPlay();
                }
                c.preventDefault(t);
            }
        },
        _loadItems: function (t) {
            var w = this,
                s = w.get("numItems"),
                u = w.get("numVisible"),
                v = w.get("revealAmount"),
                x = w._itemsTable.items.length,
                r = w.get("lastVisible");
            if (x > t && t + 1 >= u) {
                x = t % u || t == r ? t - t % u : t - u + 1;
            }
            if (v && t < s - 1) {
                t++;
            }
            if (t >= x && (!w.getItem(x) || !w.getItem(t))) {
                w.fireEvent(L, {
                    ev: L,
                    first: x,
                    last: t,
                    num: t - x + 1
                });
            }
        },
        _pagerChangeHandler: function (s) {
            var v = this,
                u = c.getTarget(s),
                t = u.value,
                r;
            if (t) {
                r = v.getFirstVisibleOnPage(t);
                v._selectedItem = r;
                v.scrollTo(r);
                v.focus();
            }
        },
        _pagerClickHandler: function (x) {
            var z = this,
                t = z.CLASSES,
                u = c.getTarget(x),
                s = u.nodeName.toUpperCase(),
                r, w, v, y;
            if (e.hasClass(u, t.PAGER_ITEM) || e.hasClass(u.parentNode, t.PAGER_ITEM)) {
                if (s == "EM") {
                    u = u.parentNode;
                }
                r = u.href;
                w = r.lastIndexOf("#");
                v = parseInt(r.substring(w + 1), 10);
                if (v != -1) {
                    y = z.getFirstVisibleOnPage(v);
                    z._selectedItem = y;
                    z.scrollTo(y);
                    z.focus();
                }
                c.preventDefault(x);
            }
        },
        _parseCarousel: function (t) {
            var w = this,
                x, r, s, v, u;
            r = w.CLASSES;
            s = w.get("carouselEl");
            v = false;
            for (x = t.firstChild; x; x = x.nextSibling) {
                if (x.nodeType == 1) {
                    u = x.nodeName;
                    if (u.toUpperCase() == s) {
                        w._carouselEl = x;
                        e.addClass(w._carouselEl, w.CLASSES.CAROUSEL_EL);
                        v = true;
                    }
                }
            }
            return v;
        },
        _parseCarouselItems: function () {
            var y = this,
                AA = y.CLASSES,
                v = 0,
                z, r, t, u, s, w = y.get("firstVisible"),
                x = y._carouselEl;
            z = y._rows;
            t = y.get("carouselItemEl");
            for (r = x.firstChild; r; r = r.nextSibling) {
                if (r.nodeType == 1) {
                    s = r.nodeName;
                    if (s.toUpperCase() == t) {
                        if (r.id) {
                            u = r.id;
                        } else {
                            u = e.generateId();
                            r.setAttribute("id", u);
                        }
                        y.addItem(r, w);
                        w++;
                    }
                }
            }
        },
        _parseCarouselNavigation: function (x) {
            var y = this,
                w, z = y.CLASSES,
                s, v, u, r, t = false;
            r = e.getElementsByClassName(z.PREV_PAGE, "*", x);
            if (r.length > 0) {
                for (v in r) {
                    if (r.hasOwnProperty(v)) {
                        s = r[v];
                        if (s.nodeName == "INPUT" || s.nodeName == "BUTTON" || s.nodeName == "A") {
                            y._navBtns.prev.push(s);
                        } else {
                            u = s.getElementsByTagName("INPUT");
                            if (p.isArray(u) && u.length > 0) {
                                y._navBtns.prev.push(u[0]);
                            } else {
                                u = s.getElementsByTagName("BUTTON");
                                if (p.isArray(u) && u.length > 0) {
                                    y._navBtns.prev.push(u[0]);
                                }
                            }
                        }
                    }
                }
                w = {
                    prev: r
                };
            }
            r = e.getElementsByClassName(z.NEXT_PAGE, "*", x);
            if (r.length > 0) {
                for (v in r) {
                    if (r.hasOwnProperty(v)) {
                        s = r[v];
                        if (s.nodeName == "INPUT" || s.nodeName == "BUTTON" || s.nodeName == "A") {
                            y._navBtns.next.push(s);
                        } else {
                            u = s.getElementsByTagName("INPUT");
                            if (p.isArray(u) && u.length > 0) {
                                y._navBtns.next.push(u[0]);
                            } else {
                                u = s.getElementsByTagName("BUTTON");
                                if (p.isArray(u) && u.length > 0) {
                                    y._navBtns.next.push(u[0]);
                                }
                            }
                        }
                    }
                }
                if (w) {
                    w.next = r;
                } else {
                    w = {
                        next: r
                    };
                }
            }
            if (w) {
                y.set("navigation", w);
                t = true;
            }
            return t;
        },
        _refreshUi: function () {
            var v = this,
                s, w = v.get("isVertical"),
                y = v.get("firstVisible"),
                t, x, r, u;
            if (v._itemsTable.numItems < 1) {
                return;
            }
            u = O.call(v, w ? "height" : "width");
            t = v._itemsTable.items[y].id;
            u = w ? d(t, "width") : d(t, "height");
            e.setStyle(v._carouselEl, w ? "width" : "height", u + "px");
            v._hasRendered = true;
            v.fireEvent(H);
        },
        _setCarouselOffset: function (t) {
            var r = this,
                s;
            s = r.get("isVertical") ? "top" : "left";
            e.setStyle(r._carouselEl, s, t + "px");
        },
        _setupCarouselNavigation: function () {
            var w = this,
                u, s, r, y, v, x, t;
            r = w.CLASSES;
            v = e.getElementsByClassName(r.NAVIGATION, "DIV", w.get("element"));
            if (v.length === 0) {
                v = W("DIV", {
                    className: r.NAVIGATION
                });
                w.insertBefore(v, e.getFirstChild(w.get("element")));
            } else {
                v = v[0];
            }
            w._pages.el = W("UL");
            v.appendChild(w._pages.el);
            y = w.get("navigation");
            if (p.isString(y.prev) || p.isArray(y.prev)) {
                if (p.isString(y.prev)) {
                    y.prev = [y.prev];
                }
                for (u in y.prev) {
                    if (y.prev.hasOwnProperty(u)) {
                        w._navBtns.prev.push(e.get(y.prev[u]));
                    }
                }
            } else {
                t = W("SPAN", {
                    className: r.BUTTON + r.FIRST_NAV
                });
                e.setStyle(t, "visibility", "visible");
                u = e.generateId();
                t.innerHTML = '<button type="button" ' + 'id="' + u + '" name="' + w.STRINGS.PREVIOUS_BUTTON_TEXT + '">' + w.STRINGS.PREVIOUS_BUTTON_TEXT + "</button>";
                v.appendChild(t);
                u = e.get(u);
                w._navBtns.prev = [u];
                s = {
                    prev: [t]
                };
            }
            if (p.isString(y.next) || p.isArray(y.next)) {
                if (p.isString(y.next)) {
                    y.next = [y.next];
                }
                for (u in y.next) {
                    if (y.next.hasOwnProperty(u)) {
                        w._navBtns.next.push(e.get(y.next[u]));
                    }
                }
            } else {
                x = W("SPAN", {
                    className: r.BUTTON + r.NEXT_NAV
                });
                e.setStyle(x, "visibility", "visible");
                u = e.generateId();
                x.innerHTML = '<button type="button" ' + 'id="' + u + '" name="' + w.STRINGS.NEXT_BUTTON_TEXT + '">' + w.STRINGS.NEXT_BUTTON_TEXT + "</button>";
                v.appendChild(x);
                u = e.get(u);
                w._navBtns.next = [u];
                if (s) {
                    s.next = [x];
                } else {
                    s = {
                        next: [x]
                    };
                }
            }
            if (s) {
                w.set("navigation", s);
            }
            return v;
        },
        _setClipContainerSize: function (r, t) {
            var z = this,
                x = z.get("isVertical"),
                AB = z._rows,
                v = z._cols,
                y = z.get("revealAmount"),
                s = O.call(z, "height"),
                u = O.call(z, "width"),
                AA, w;
            r = r || z._clipEl;
            if (AB) {
                AA = s * AB;
                w = u * v;
            } else {
                t = t || z.get("numVisible");
                if (x) {
                    AA = s * t;
                } else {
                    w = u * t;
                }
            }
            z._recomputeSize = (AA === 0);
            if (z._recomputeSize) {
                z._hasRendered = false;
                return;
            }
            y = N.call(z);
            if (x) {
                AA += (y * 2);
            } else {
                w += (y * 2);
            }
            if (x) {
                AA += M(z._carouselEl, "height");
                e.setStyle(r, "height", AA + "px");
                if (v) {
                    w += M(z._carouselEl, "width");
                    e.setStyle(r, "width", w + (0) + "px");
                }
            } else {
                w += M(z._carouselEl, "width");
                e.setStyle(r, "width", w + "px");
                if (AB) {
                    AA += M(z._carouselEl, "height");
                    e.setStyle(r, "height", AA + "px");
                }
            }
            z._setContainerSize(r);
        },
        _setContainerSize: function (s, t) {
            var w = this,
                r = w.CONFIG,
                z = w.CLASSES,
                v, y, u, x;
            v = w.get("isVertical");
            y = w._rows;
            u = w._cols;
            s = s || w._clipEl;
            t = t || (v ? "height" : "width");
            x = parseFloat(e.getStyle(s, t), 10);
            x = p.isNumber(x) ? x : 0;
            if (v) {
                x += M(w._carouselEl, "height") + d(w._navEl, "height");
            } else {
                x += M(w._carouselEl, "width");
            }
            if (!v) {
                if (x < r.HORZ_MIN_WIDTH) {
                    x = r.HORZ_MIN_WIDTH;
                    w.addClass(z.MIN_WIDTH);
                }
            }
            w.setStyle(t, x + "px");
            if (v) {
                x = O.call(w, "width");
                if (u) {
                    x = x * u;
                }
                e.setStyle(w._carouselEl, "width", x + "px");
                if (x < r.VERT_MIN_WIDTH) {
                    x = r.VERT_MIN_WIDTH;
                    w.addClass(z.MIN_WIDTH);
                }
                w.setStyle("width", x + "px");
            } else {
                if (y) {
                    x = O.call(w, "height");
                    x = x * y;
                    e.setStyle(w._carouselEl, "height", x + "px");
                }
            }
        },
        _setFirstVisible: function (s) {
            var r = this;
            if (s >= 0 && s < r.get("numItems")) {
                r.scrollTo(s);
            } else {
                s = r.get("firstVisible");
            }
            return s;
        },
        _setNavigation: function (r) {
            var s = this;
            if (r.prev) {
                c.on(r.prev, "click", f, s);
            }
            if (r.next) {
                c.on(r.next, "click", k, s);
            }
        },
        _setNumVisible: function (s) {
            var r = this;
            r._setClipContainerSize(r._clipEl, s);
        },
        _numVisibleSetter: function (t) {
            var s = this,
                r = t;
            if (p.isArray(t)) {
                s._cols = t[0];
                s._rows = t[1];
                r = t[0] * t[1];
            }
            return r;
        },
        _selectedItemSetter: function (s) {
            var r = this;
            return (s < r.get("numItems")) ? s : 0;
        },
        _setNumItems: function (t) {
            var s = this,
                r = s._itemsTable.numItems;
            if (p.isArray(s._itemsTable.items)) {
                if (s._itemsTable.items.length != r) {
                    r = s._itemsTable.items.length;
                    s._itemsTable.numItems = r;
                }
            }
            if (t < r) {
                while (r > t) {
                    s.removeItem(r - 1);
                    r--;
                }
            }
            return t;
        },
        _setOrientation: function (t) {
            var s = this,
                r = s.CLASSES;
            if (t) {
                s.replaceClass(r.HORIZONTAL, r.VERTICAL);
            } else {
                s.replaceClass(r.VERTICAL, r.HORIZONTAL);
            }
            this._itemAttrCache = {};
            return t;
        },
        _setRevealAmount: function (s) {
            var r = this;
            if (s >= 0 && s <= 100) {
                s = parseInt(s, 10);
                s = p.isNumber(s) ? s : 0;
                r._setClipContainerSize();
            } else {
                s = r.get("revealAmount");
            }
            return s;
        },
        _setSelectedItem: function (r) {
            this._selectedItem = r;
        },
        _getNumPages: function () {
            return Math.ceil(parseInt(this.get("numItems"), 10) / parseInt(this.get("numVisible"), 10));
        },
        _getLastVisible: function () {
            var r = this;
            return r.get("currentPage") + 1 == r.get("numPages") ? r.get("numItems") - 1 : r.get("firstVisible") + r.get("numVisible") - 1;
        },
        _syncUiForItemAdd: function (u) {
            var v, AA = this,
                x = AA._carouselEl,
                r, AB, t = AA._itemsTable,
                s, w, y, z;
            w = p.isUndefined(u.pos) ? u.newPos || t.numItems - 1 : u.pos;
            if (!s) {
                AB = t.items[w] || {};
                r = AA._createCarouselItem({
                    className: AB.className,
                    styles: AB.styles,
                    content: AB.item,
                    id: AB.id,
                    pos: w
                });
                if (p.isUndefined(u.pos)) {
                    if (!p.isUndefined(t.loading[w])) {
                        s = t.loading[w];
                    }
                    if (s) {
                        x.replaceChild(r, s);
                        delete t.loading[w];
                    } else {
                        x.appendChild(r);
                    }
                } else {
                    if (!p.isUndefined(t.items[u.pos + 1])) {
                        y = e.get(t.items[u.pos + 1].id);
                    }
                    if (y) {
                        x.insertBefore(r, y);
                    } else {}
                }
            } else {
                if (p.isUndefined(u.pos)) {
                    if (!e.isAncestor(AA._carouselEl, s)) {
                        x.appendChild(s);
                    }
                } else {
                    if (!e.isAncestor(x, s)) {
                        if (!p.isUndefined(t.items[u.pos + 1])) {
                            x.insertBefore(s, e.get(t.items[u.pos + 1].id));
                        }
                    }
                }
            }
            if (!AA._hasRendered) {
                AA._refreshUi();
            }
            if (AA.get("selectedItem") < 0) {
                AA.set("selectedItem", AA.get("firstVisible"));
            }
            AA._syncUiItems();
        },
        _syncUiForItemReplace: function (x) {
            var w = this,
                t = w._carouselEl,
                r = w._itemsTable,
                y = x.pos,
                v = x.newItem,
                s = x.oldItem,
                u;
            u = w._createCarouselItem({
                className: v.className,
                styles: v.styles,
                content: v.item,
                id: v.id,
                pos: y
            });
            if (u && s) {
                c.purgeElement(s, true);
                t.replaceChild(u, e.get(s.id));
                if (!p.isUndefined(r.loading[y])) {
                    r.numItems++;
                    delete r.loading[y];
                }
            }
            if (!w._hasRendered) {
                w._refreshUi();
            }
            w._syncUiItems();
        },
        _syncUiForItemRemove: function (w) {
            var v = this,
                r = v._carouselEl,
                t, u, s, x;
            s = v.get("numItems");
            u = w.item;
            x = w.pos;
            if (u && (t = e.get(u.id))) {
                if (t && e.isAncestor(r, t)) {
                    c.purgeElement(t, true);
                    r.removeChild(t);
                }
                if (v.get("selectedItem") == x) {
                    x = x >= s ? s - 1 : x;
                }
            } else {}
            v._syncUiItems();
        },
        _syncUiForLazyLoading: function (v) {
            var z = this,
                x = z._carouselEl,
                t = z._itemsTable,
                w = t.items.length,
                y = t.items[v.last + 1],
                r, s;
            if (!y && v.last < w) {
                s = v.first;
                do {
                    y = t.items[s];
                    s++;
                } while (s < w && !y);
            }
            for (var u = v.first; u <= v.last; u++) {
                if (p.isUndefined(t.loading[u]) && p.isUndefined(t.items[u])) {
                    r = z._createCarouselItem({
                        className: z.CLASSES.ITEM_LOADING,
                        content: z.STRINGS.ITEM_LOADING_CONTENT,
                        id: e.generateId(),
                        pos: u
                    });
                    if (r) {
                        if (y) {
                            y = e.get(y.id);
                            if (y) {
                                x.insertBefore(r, y);
                            } else {}
                        } else {
                            x.appendChild(r);
                        }
                    }
                    t.loading[u] = r;
                }
            }
            z._syncUiItems();
        },
        _syncUiItems: function () {
            var u, y = this,
                w = y.get("numItems"),
                t, s = y._itemsTable,
                v = s.items,
                r = s.loading,
                z, x;
            for (t = 0; t < w; t++) {
                z = v[t] || r[t];
                if (z && z.id) {
                    x = m.call(y, t);
                    z.styles = z.styles || {};
                    for (u in x) {
                        if (x.hasOwnProperty(u)) {
                            z.styles[u] = x[u];
                        }
                    }
                    G(e.get(z.id), x);
                }
            }
        },
        _updateNavButtons: function (v, s) {
            var t, r = this.CLASSES,
                w, u = v.parentNode;
            if (!u) {
                return;
            }
            w = u.parentNode;
            if (v.nodeName.toUpperCase() == "BUTTON" && e.hasClass(u, r.BUTTON)) {
                if (s) {
                    if (w) {
                        t = e.getChildren(w);
                        if (t) {
                            e.removeClass(t, r.FOCUSSED_BUTTON);
                        }
                    }
                    e.addClass(u, r.FOCUSSED_BUTTON);
                } else {
                    e.removeClass(u, r.FOCUSSED_BUTTON);
                }
            }
        },
        _updatePagerButtons: function () {
            var z = this,
                x = z.CLASSES,
                y = z._pages.cur,
                r, w, u, AA, s = z.get("numVisible"),
                v = z._pages.num,
                t = z._pages.el;
            if (v === 0 || !t) {
                return;
            }
            e.setStyle(t, "visibility", "hidden");
            while (t.firstChild) {
                t.removeChild(t.firstChild);
            }
            for (u = 0; u < v; u++) {
                r = document.createElement("LI");
                if (u === 0) {
                    e.addClass(r, x.FIRST_PAGE);
                }
                if (u == y) {
                    e.addClass(r, x.SELECTED_NAV);
                }
                w = "<a class=" + x.PAGER_ITEM + ' href="#' + (u + 1) + '" tabindex="0"><em>' + z.STRINGS.PAGER_PREFIX_TEXT + " " + (u + 1) + "</em></a>";
                r.innerHTML = w;
                t.appendChild(r);
            }
            e.setStyle(t, "visibility", "visible");
        },
        _updatePagerMenu: function () {
            var z = this,
                x = z.CLASSES,
                y = z._pages.cur,
                s, v, AA, t = z.get("numVisible"),
                w = z._pages.num,
                u = z._pages.el,
                r;
            if (w === 0) {
                return;
            }
            r = document.createElement("SELECT");
            if (!r) {
                return;
            }
            e.setStyle(u, "visibility", "hidden");
            while (u.firstChild) {
                u.removeChild(u.firstChild);
            }
            for (v = 0; v < w; v++) {
                s = document.createElement("OPTION");
                s.value = v + 1;
                s.innerHTML = z.STRINGS.PAGER_PREFIX_TEXT + " " + (v + 1);
                if (v == y) {
                    s.setAttribute("selected", "selected");
                }
                r.appendChild(s);
            }
            s = document.createElement("FORM");
            if (!s) {} else {
                s.appendChild(r);
                u.appendChild(s);
            }
            c.addListener(r, "change", z._pagerChangeHandler, this, true);
            e.setStyle(u, "visibility", "visible");
        },
        _updateTabIndex: function (r) {
            var s = this;
            if (r) {
                if (s._focusableItemEl) {
                    s._focusableItemEl.tabIndex = -1;
                }
                s._focusableItemEl = r;
                r.tabIndex = 0;
            }
        },
        _validateAnimation: function (r) {
            var s = true;
            if (p.isObject(r)) {
                if (r.speed) {
                    s = s && p.isNumber(r.speed);
                }
                if (r.effect) {
                    s = s && p.isFunction(r.effect);
                } else {
                    if (!p.isUndefined(YAHOO.util.Easing)) {
                        r.effect = YAHOO.util.Easing.easeOut;
                    }
                }
            } else {
                s = false;
            }
            return s;
        },
        _validateFirstVisible: function (t) {
            var s = this,
                r = s.get("numItems");
            if (p.isNumber(t)) {
                if (r === 0 && t == r) {
                    return true;
                } else {
                    return (t >= 0 && t < r);
                }
            }
            return false;
        },
        _validateNavigation: function (r) {
            var s;
            if (!p.isObject(r)) {
                return false;
            }
            if (r.prev) {
                if (!p.isArray(r.prev)) {
                    return false;
                }
                for (s in r.prev) {
                    if (r.prev.hasOwnProperty(s)) {
                        if (!p.isString(r.prev[s].nodeName)) {
                            return false;
                        }
                    }
                }
            }
            if (r.next) {
                if (!p.isArray(r.next)) {
                    return false;
                }
                for (s in r.next) {
                    if (r.next.hasOwnProperty(s)) {
                        if (!p.isString(r.next[s].nodeName)) {
                            return false;
                        }
                    }
                }
            }
            return true;
        },
        _validateNumItems: function (r) {
            return p.isNumber(r) && (r >= 0);
        },
        _validateNumVisible: function (r) {
            var s = false;
            if (p.isNumber(r)) {
                s = r > 0 && r <= this.get("numItems");
            } else {
                if (p.isArray(r)) {
                    if (p.isNumber(r[0]) && p.isNumber(r[1])) {
                        s = r[0] * r[1] > 0 && r.length == 2;
                    }
                }
            }
            return s;
        },
        _validateRevealAmount: function (r) {
            var s = false;
            if (p.isNumber(r)) {
                s = r >= 0 && r < 100;
            }
            return s;
        },
        _validateScrollIncrement: function (r) {
            var s = false;
            if (p.isNumber(r)) {
                s = (r > 0 && r < this.get("numItems"));
            }
            return s;
        }
    });
})();
YAHOO.register("carousel", YAHOO.widget.Carousel, {
    version: "2.8.1",
    build: "19"
});
