(function( $ ){

    $.fn.lbSlider = function() {

        if(this.size()>0){

            var animDuration = 600;
            var slideCount = this.find('li').size();
            var timerId = null;
            var slides = [];
            var currentSlide = 0;
            var isAnimating = false;
            var slideContainer = this;
            var slideWidth = 643;

            if(slideCount){

                slideContainer.find('li').each(function() {
                    var i = [];

                    i[0] = $(this).find('a').attr('href');
                    i[1] = $(this).find('img').attr('src');
                    i[2] = $(this).find('img').attr('title');
                    i[3] = $(this).find('img').attr('alt');
                    i[4] = $(this).find('img').attr('rel');

                    slides.push(i);
                    $(this).remove();
                });

                slideContainer.html(generateSlide(0));

                if(slideCount>1){
                    slideContainer.parent().append('<a href="#" class="prev"></a><a href="#" class="next"></a>');
                    slideContainer.parent().find('.prev, .next').click(function(){ changeSlide($(this).attr('class')); return false; });

                    clearTimeout(timerId);
                    timerId = setTimeout(function(){changeSlide('next');}, slides[0][4]*1000);

                }

            }

        }

        function changeSlide(direction){

            if(!isAnimating){

                isAnimating = true;
                clearTimeout(timerId);
                var changeTo;

                if(direction=='next'){
                    changeTo = currentSlide+1;
                    if(changeTo>=slideCount){
                        changeTo=0;
                    }

                    slideContainer.append(generateSlide(changeTo)).animate({marginLeft: -slideWidth+'px'}, animDuration, function(){
                        slideContainer.find('li:first').remove();
                        slideContainer.css('margin-left', '0px');
                        currentSlide = changeTo;
                        isAnimating = false;
                        timerId = setTimeout(function(){changeSlide('next');}, slides[changeTo][4]*1000);
                    });

                }else{
                    changeTo = currentSlide-1;
                    if(changeTo<0){
                        changeTo=slideCount-1;
                    }

                    slideContainer.prepend(generateSlide(changeTo)).css('margin-left', -slideWidth + 'px').animate({marginLeft: 0}, animDuration, function(){
                        slideContainer.find('li:last').remove();
                        currentSlide = changeTo;
                        isAnimating = false;
                        timerId = setTimeout(function(){changeSlide('next');}, slides[changeTo][4]*1000);
                    });
                }
            }

        }

        function generateSlide(slideID){

            var slide = '';

            slide = '<li><img src="' + slides[slideID][1] + '" alt="" />';

            if(slides[slideID][2].length || slides[slideID][3].length){
                slide = slide + '<div class="description">';

                if(slides[slideID][2].length){
                    slide = slide + '<h3>' + slides[slideID][2] + '</h3>';
                }

                if(slides[slideID][3].length){
                    slide = slide + slides[slideID][3];
                }

                slide = slide + '</div>';
            }

            if(slides[slideID][0].length){
                slide = slide + '<a href="'+ slides[slideID][0] +'"></a>';
            }

            return slide;
        }


  };
})( jQuery );

