(function($){
        $.fn.aCarousel = function(options) {
                // дефолтные настройки
                var settings = {
                        visible: 3,
                        rotateBy: 1,
                        speed: 500,
                        btnNext: null,
                        btnPrev: null,
                        auto: null,
                        height: 150,
                        minHeight: 320
                };

                return this.each(function() {
                        if (options) {
                                $.extend(settings, options);
                        }
                        // определяем "глобальные" переменные
                        var $this = $(this);
                        var $carousel = $this.children(':first');
                        var itemHeight = $carousel.children().outerHeight()+10;
                        var carouselHeight = $carousel.outerHeight();
                        var itemsTotal = $carousel.children().length;
                        var galleryHeight = (settings.height > settings.minHeight)? settings.height: settings.minHeight;
                        var running = false;
                        var intID = null;
                        var stopScrollTop = false;
                        var stopScrollDown = false;


                        // присваиваем необходимые стили для элементов карусели
                        // сначала для контейнера
                        $this.css({
                                'position': 'relative', // необходимо для нормального отображения в ИЕ6(7)
                                'dispaly': 'block', 
                                'overflow': 'hidden', // прячем все, что не влезает в контейнер
                                'width': '150px', // ширину контейнера ставим равной ширине всех видимых элементов
                                'height': galleryHeight+'px'
                        });

                        // потом для внутреннего элемента (в нашем случае <ul>)
                        $carousel.css({
                                'position': 'relative', // относительное позиционирование нужно для того, чтобы можно было использовать сдвиг влево
                                'height': 9999 + 'px', // ставим ширину побольше, чтобы точно влезли все элементы
                                'top': 0 // устанавливаем нулевой девый сдвиг
//                                ,'border' : '#000 solid 1px'
                        });

                        $carousel.wrap("<div class='acarousel-main'></div>");
                        var $cwrapper = $this.children(':first');
                        $cwrapper.css({
                            'height': (galleryHeight-40)+'px',
                            'position': 'relative',
                            'top': '20px',
                            'overflow': 'hidden'
//                            ,'border' : 'green solid 1px'
                        });
                        // Вставляем кнопки
                        $this.prepend('<a href="#" class="acarousel-go-top acarousel-gt-active"></a>');
                        $this.append('<a href="#" class="acarousel-go-down acarousel-gd-active"></a>');

                        init();
                        // параметр dir(boolean) - false(сдедующий), true(предыдущий)
                        function slide(dir) {
                                var direction = !dir ? 1 : -1; // выбираем направление в зависимости от переданного параметра (влево или вправо)
                                var topIndent = 0; //верхнее смещение (для <ul>)

                                if(stopScrollTop && !dir) return false;
                                if(stopScrollDown && dir) return false;

                                if (!running) {
                                        running = true;

                                        topIndent = parseInt($carousel.css('top')) + (itemHeight * settings.rotateBy * direction);
                                        // запускаем анимацию
                                        $carousel.animate({'top': topIndent}, {queue: false, duration: settings.speed, complete: function() {
                                            init();
                                            running = false; // отмечаем, что анимация завершена
                                        }});
                                }

                                return false; // возвращаем false для того, чтобы не было перехода по ссылке
                        }

                        function init(){
                                 if($carousel.position().top >=0){
                                     stopScrollTop = true;
                                     $('.acarousel-go-top', $this).addClass('acarousel-gt-notactive').removeClass('acarousel-gt-active');
                                } else {
                                    stopScrollTop = false;
                                    $('.acarousel-go-top', $this).removeClass('acarousel-gt-notactive').addClass('acarousel-gt-active');
                                }

                                if(carouselHeight+$carousel.position().top-galleryHeight-40<=0){
                                    stopScrollDown = true;
                                    $('.acarousel-go-down', $this).addClass('acarousel-gd-notactive').removeClass('acarousel-gd-active');
                                } else {
                                    stopScrollDown = false;
                                    $('.acarousel-go-down', $this).removeClass('acarousel-gd-notactive').addClass('acarousel-gd-active');
                                }
                        }

                        // назначаем обработчик на событие click для кнопки next
                        $('.acarousel-go-top').click(function() {
                                return slide(false);
                        });

                        // назначаем обработчик на событие click для кнопки previous
                        $('.acarousel-go-down').click(function() {
                                return slide(true);
                        });
                        
                });
        };
})(jQuery);



