if (typeof(AC) == "undefined") {
    AC = {}
}
AC.Slider = Class.create();
AC.Slider.prototype = {
    orientation: "horizontal",
    container: null,
    items: null,
    currentPage: 1,
    itemsPerPage: null,
    totalPages: null,
    maskInnerDimension: null,
    isAnimating: false,
    _isCarousel: true,
    initialize: function (a, c, b) {
        this.items = new Array();
        this.itemsPerPage = b;
        this.container = $(a);
        this.populate(c)
    },
    setCarousel: function (a) {
        this._isCarousel = a
    },
    populate: function () {
        this.container.innerHTML = "The slider requires population with data. You need to call this.render(itemsPerPage) from your custom this.populate() function."
    },
    render: function (b) {
        this.container.innerHTML = "";
        if (!b) {
            b = this.itemsPerPage
        }
        this.itemsPerPage = b;
        this.list = Builder.node("ul", this.renderItems());
        var a = Builder.node("div", {
            "class": "ACSliderMaskDiv"
        }, [this.list]);
        this.container.appendChild(a);
        this.totalPages = Math.ceil(this.items.length / this.itemsPerPage);
        if (this.items.length > this.itemsPerPage) {
            this.positionWithinMask(a);
            this.createArrows();
            this.createDots()
        }
    },
    positionWithinMask: function (a) {
        if (this.orientation == "horizontal") {
            this.maskInnerDimension = Element.getInnerDimensions(a).width;
            this.list.style.left = -this.maskInnerDimension * this.currentPage + "px"
        } else {
            this.maskInnerDimension = Element.getInnerDimensions(a).height;
            this.list.style.top = -this.maskInnerDimension * this.currentPage + "px"
        }
    },
    renderItems: function () {
        var f = [];
        var b = this.items.length - this.items.length % this.itemsPerPage;
        if (b == this.items.length) {
            b = this.items.length - this.itemsPerPage
        }
        var d = this.itemsPerPage - this.items.length % this.itemsPerPage;
        if (d == this.itemsPerPage) {
            d = 0
        }
        var e = this.items.length > this.itemsPerPage;
        if (e) {
            f.push(this.renderPlaceholderItems(b, this.items.length));
            for (var a = 0; a < d; a++) {
                var c = Builder.node("li", {
                    "class": "empty"
                });
                f.push(c)
            }
        }
        for (var a = 0;
        a < this.items.length; a++) {
            var c = this.items[a].render().cloneNode(true);
            f.push(c)
        }
        if (e) {
            for (var a = 0; a < d; a++) {
                var c = Builder.node("li", {
                    "class": "empty"
                });
                f.push(c)
            }
            f.push(this.renderPlaceholderItems(0, this.itemsPerPage))
        }
        return f
    },
    renderPlaceholderItems: function (g, c) {
        var e = [];
        for (var b = g; b < c; b++) {
            var d = this.items[b].render().cloneNode(true);
            if (d.id) {
                d.removeAttribute("id")
            }
            for (var a = 0, f; f = d.childNodes[a]; a++) {
                if (f.getAttribute("id")) {
                    f.removeAttribute("id")
                }
            }
            $(d).addClassName("cloned");
            e.push(d)
        }
        return e
    },
    createArrows: function () {
        this.prevArrow = Builder.node("a", {
            "class": "ACSliderPreviousArrow"
        }, "&lt;");
        Event.observe(this.prevArrow, "click", function (a) {
            Event.stop(a);
            if (this._isCarousel === true || (this._isCarousel === false && this.currentPage != 1)) {
                this.getPrevious()
            }
        }.bind(this));
        this.container.appendChild(this.prevArrow);
        this.nextArrow = Builder.node("a", {
            "class": "ACSliderNextArrow"
        }, "&gt;");
        Event.observe(this.nextArrow, "click", function (a) {
            Event.stop(a);
            if (this._isCarousel === true || (this._isCarousel === false && this.currentPage != this.totalPages)) {
                this.getNext()
            }
        }.bind(this));
        this.container.appendChild(this.nextArrow)
    },
    createDots: function () {
        this.pageNav = Builder.node("ul", {
            "class": "ACSliderPageNav"
        });
        for (var b = 1; b <= this.totalPages; b++) {
            var a = (b == this.currentPage) ? Builder.node("a", {
                "class": "active"
            }, b) : Builder.node("a", b);
            $(a).observe("click", function (e, d) {
                Event.stop(e);
                this.scrolltoPageNumber(d)
            }.bindAsEventListener(this, b));
            var c = Builder.node("li", [a]);
            this.pageNav.appendChild(c)
        }
        this.container.appendChild(this.pageNav)
    },
    getPrevious: function () {
        var a = this.currentPage - 1;
        this.scrolltoPageNumber(a, 1)
    },
    getNext: function () {
        var a = this.currentPage + 1;
        this.scrolltoPageNumber(a, -1)
    },
    scrolltoPageNumber: function (f, e) {
        if (this.currentPage != f && !this.isAnimating) {
            if (!e) {
                var e = this.currentPage - f
            }
            this.isAnimating = true;
            this.currentPage = f;
            this.resetPages();
            var d = this.pageNav.getElementsByTagName("a");
            for (var c = 0, b; b = d[c]; c++) {
                if (Element.hasClassName(b, "active")) {
                    Element.removeClassName(b, "active")
                }
                if (b.innerHTML == this.currentPage) {
                    Element.addClassName(b, "active")
                }
            }
            var a = {
                duration: 0.5,
                queue: {
                    position: "end",
                    scope: "sliderQueue",
                    limit: 1
                },
                afterFinish: this.afterScroll.bind(this)
            };
            if (!this.maskInnerDimension) {
                this.positionWithinMask(this.container)
            }
            if (this.orientation == "horizontal") {
                new Effect.MoveBy(this.list, 0, this.maskInnerDimension * e, a)
            } else {
                new Effect.MoveBy(this.list, this.maskInnerDimension * e, 0, a)
            }
        }
    },
    jumptoPageNumber: function (f) {
        if (this.currentPage != f && !this.isAnimating) {
            var e = this.currentPage - f;
            this.currentPage = f;
            this.resetPages();
            if (this.pageNav) {
                var d = this.pageNav.getElementsByTagName("a");
                for (var c = 0, b; b = d[c]; c++) {
                    if (Element.hasClassName(b, "active")) {
                        Element.removeClassName(b, "active")
                    }
                    if (b.innerHTML == this.currentPage) {
                        Element.addClassName(b, "active")
                    }
                }
            }
            var a = {
                duration: 0
            };
            if (this.orientation == "horizontal") {
                new Effect.MoveBy(this.list, 0, this.maskInnerDimension * e, a)
            } else {
                new Effect.MoveBy(this.list, this.maskInnerDimension * e, 0, a)
            }
        }
    },
    resetArrows: function () {
        if (this.prevArrow) {
            this.prevArrow.removeClassName("inactive")
        }
        if (this.nextArrow) {
            this.nextArrow.removeClassName("inactive")
        }
        if (this.currentPage == 1) {
            this.prevArrow.addClassName("inactive")
        } else {
            if (this.currentPage == this.totalPages) {
                this.nextArrow.addClassName("inactive")
            }
        }
    },
    resetPages: function () {
        this.resetArrows();
        if (this.currentPage == 0) {
            this.currentPage = this.totalPages;
            this.positionOffset = -this.maskInnerDimension * this.totalPages + "px";
            if (this.prevArrow) {
                this.prevArrow.addClassName("inactive")
            }
        } else {
            if (this.currentPage == this.totalPages + 1) {
                this.currentPage = 1;
                this.positionOffset = -this.maskInnerDimension + "px";
                if (this.nextArrow) {
                    this.nextArrow.addClassName("inactive")
                }
            } else {
                this.positionOffset = false
            }
        }
    },
    afterScroll: function () {
        if (this.positionOffset) {
            if (this.orientation == "horizontal") {
                this.list.style.left = this.positionOffset
            } else {
                this.list.style.top = this.positionOffset
            }
        }
        this.isAnimating = false
    },
    jumpToPage: function (a) {}
};
AC.SliderItem = Class.create();
AC.SliderItem.prototype = {
    html: "List items must be populated with data; it can be an HTML object or HTML as a string.",
    initialize: function (a) {
        if (a) {
            this.html = a
        }
    },
    render: function () {
        if (typeof(this.html) == "string") {
            var a = Builder.node("li");
            a.innerHTML = this.html
        } else {
            var a = Builder.node("li", [this.html])
        }
        return a
    }
};