$ = jQuery;

var Carousel = {
    init : function () {
        Carousel.total = $('#carousel ul.reel li').length;

        Carousel.position = 0;
        Carousel.visible = 5;

        if (Carousel.total <= Carousel.visible) return;

        Carousel.total = $('#carousel ul.reel li').length;

        Carousel.position = 0;
        Carousel.visible = 5;


        $('#carousel').append('<div id="status"><ul></ul></div>');
        
        for (i = 0; i< Carousel.total; i++) {
            $('#carousel #status ul').append('<li class="status">&nbsp;</li>');   
        }

        $('#carousel #status ul').append('<li class="next">&nbsp;</li>');   
        $('#carousel #status ul').prepend('<li class="prev">&nbsp;</li>');   

        $('#carousel #status ul li.next').click(Carousel.next);    
        $('#carousel #status ul li.prev').click(Carousel.prev);    


        $('#carousel').mouseenter(function(){Carousel.mouseIn = true; Carousel.clearTimeout();});
        $('#carousel').mouseleave(function(){Carousel.mouseIn = false; Carousel.setTimeout();});

        Carousel.setStatus();
        Carousel.setTimeout();
    }, 

    setTimeout : function() {
      clearTimeout(Carousel.timer);
      if (Carousel.mouseIn) return;
      Carousel.timer = setTimeout(Carousel.next, 3000);
    },

    clearTimeout : function() {
      clearTimeout(Carousel.timer);
    },
    
    setStatus : function () {
        d = $('#carousel #status li.status');
        d.removeClass('selected');   
        
        for (i = 0; i< Carousel.visible; i++) {
            $(d[(Carousel.position + i)%(Carousel.total)]).addClass('selected');
        }
    },
    
    next : function () {
        if (Carousel.animating) return;
        Carousel.animating = true;
   	Carousel.position = (Carousel.position+1)%Carousel.total;
    	Carousel.setStatus();
        $("#carousel ul.reel").animate({'margin-left':'-120px'}, 1000, 'swing', function () {
            s = $("#carousel .reel");
            s.css({'margin-left': 0});
            n = $("#carousel .reel li").first().remove();
            s.append(n);
            Carousel.setTimeout();
            Carousel.animating = false;
        });
        return false;
    },
    
    prev : function () {
        if (Carousel.animating) return;
        Carousel.animating = true;
        Carousel.position = (Carousel.position-1+Carousel.total)%Carousel.total;
	    Carousel.setStatus();
        s = $("#carousel ul.reel");
        s.css({'margin-left':'-120px'});
        n = $("#carousel ul.reel li").last().remove();
        s.prepend(n);
        $("#carousel .reel").animate({'margin-left':0}, 1000, 'swing', function() {        Carousel.setTimeout();
            Carousel.animating = false;
        });
        return false;
    }

};

$(Carousel.init);
