var Slideshow = {

    init: function() {
        Slideshow.slideshows = [];
        $(".slideshow-container").each(function(i) {
            Slideshow.slideshows.push($(this));
            var slideshow = Slideshow.slideshows[i];
            slideshow.items = slideshow.children(".slideshow-item");
            // Don't bother doing anything unless there is more than one item

            if (slideshow.items.length > 1) {
                slideshow.itemWidth     = slideshow.items.outerWidth();
                slideshow.addControls   = function() { Slideshow.addControls(slideshow); }
                slideshow.selectItem    = function(i) { Slideshow.selectItem(slideshow, i); }
                slideshow.selectPrev    = function() { Slideshow.selectPrev(slideshow); }
                slideshow.selectNext    = function() { Slideshow.selectNext(slideshow); }
                slideshow.isAtEdge      = function(side) { return Slideshow.isAtEdge(slideshow, side); }
                slideshow.isAnimated    = function() { return Slideshow.isAnimated(slideshow); }

                $(window).load(function() {
                    //slideshow.timeoutID = 0;
                    slideshow.intervalID = window.setInterval(function() { slideshow.selectNext(); }, 7500);
                    slideshow.find(".slideshow-controls a").click(function() {
                        window.clearTimeout(slideshow.timeoutID);
                        window.clearInterval(slideshow.intervalID);
                        slideshow.timeoutID = window.setTimeout(function() {
                            slideshow.intervalID = window.setInterval(function() { slideshow.selectNext(); }, 7500);
                        }, 12500);
                    });
                });

                slideshow.addControls();
            }
        });
    },

    addControls: function(slideshow) {
        slideshow.wrapInner('<div class="slideshow-sliding-container"></div>');
        slideshow.append('<div class="slideshow-controls"><div class="immediate"></div><div class="incremental"></div></div>');

        slideshow.slider = slideshow.children(".slideshow-sliding-container");
        slideshow.immediateNav = slideshow.find(".slideshow-controls .immediate");
        slideshow.incrementalNav = slideshow.find(".slideshow-controls .incremental");

        slideshow.items.each(function(i) {
            $('<a href="./#">' + (i+1) + '</a>').click(function() { slideshow.selectItem(i); return false; }).appendTo(slideshow.immediateNav);
        });

        slideshow.immediateLinks = slideshow.immediateNav.children();
        slideshow.immediateLinks.filter(":first-child").addClass("selected");

        $('<a class="prev" href="./#"></a>').click(function() { slideshow.selectPrev(); return false; }).appendTo(slideshow.incrementalNav);
        $('<a class="next" href="./#"></a>').click(function() { slideshow.selectNext(); return false; }).appendTo(slideshow.incrementalNav);
    },

    selectItem: function(slideshow, i) {
        if (!slideshow.isAnimated()) {
            if (slideshow.items.filter(".first").is(":not(:first-child)")) {
                slideshow.items.filter(".first").nextAll().insertBefore(slideshow.items.filter(":first-child"));
                slideshow.items.filter(".first").insertBefore(slideshow.items.filter(":first-child"));
                slideshow.slider.css("marginLeft", -((slideshow.immediateNav.children(".selected").text() - 1) * slideshow.itemWidth));
            }
            slideshow.immediateNav.children(".selected").removeClass("selected");
            slideshow.immediateNav.children().eq(i).addClass("selected");
            slideshow.slider.animate({ marginLeft: -i * slideshow.itemWidth });
        }
    },

    selectPrev: function(slideshow) {
        if (!slideshow.isAnimated()) {
            // Allow for "circular" scrolling
            if (slideshow.isAtEdge("left")) {
                slideshow.items.filter(":last-child").insertBefore(slideshow.items.filter(":first-child"));
                slideshow.slider.css({ marginLeft: parseInt(slideshow.slider.css("marginLeft")) - slideshow.itemWidth });
            }
            // Animate, then select the previous numbered link
            slideshow.slider.animate({ marginLeft: "+=" + slideshow.itemWidth }, function() {
                slideshow.immediateLinks.filter(".selected").removeClass("selected").prev().addClass("selected");
                if (!slideshow.immediateLinks.filter(".selected").length) {
                    slideshow.immediateLinks.filter(":last-child").addClass("selected");
                }
            });
        }
    },

    selectNext: function(slideshow) {
        if (!slideshow.isAnimated()) {
            // Allow for "circular" scrolling
            if (slideshow.isAtEdge("right")) {
                slideshow.items.filter(":first-child").insertAfter(slideshow.items.filter(":last-child"));
                slideshow.slider.css({ marginLeft: parseInt(slideshow.slider.css("marginLeft")) + slideshow.itemWidth });
            }
            // Animate, then select the previous numbered link
            slideshow.slider.animate({ marginLeft: "-=" + slideshow.itemWidth }, function() {
                slideshow.immediateLinks.filter(".selected").removeClass("selected").next().addClass("selected");
                if (!slideshow.immediateLinks.filter(".selected").length) {
                    slideshow.immediateLinks.filter(":first-child").addClass("selected");
                }
            });
        }
    },

    isAtEdge: function(slideshow, side) {
        if (side == "left") {
            return (parseInt(slideshow.slider.css("marginLeft")) == 0);
        } else if (side == "right") {
            return (parseInt(slideshow.slider.css("marginLeft")) == -(slideshow.itemWidth * (slideshow.items.length - 1)));
        }
    },

    isAnimated: function(slideshow) {
        return (slideshow.find(":animated").length)
    }

}

$(document).ready(function() {
    Slideshow.init();
    // Drop Downs for ie 6
     $('#navigation li').hover(function() {
        $(this).addClass('over');
    },
    function() {
        $(this).removeClass('over');
    });
});