//Дополненная версия слайдера
//когда одной пагинацией скролятся несколько областей, например на странице акций http://simplewine.ru/akcii/scroll.php
//.filter('*:not(.not_calculate_this)')  - нужен если одной пагинацией скролятся несколько областей, тогда области помеченные этим классом не будут учитываться при подсчёте ширины



jQuery.fn.allHeight = function(options){ //сумма высот элементов

    var allHeight = 0;

    this.each(function(){
        allHeight += $(this).outerHeight(true);
    });

    return allHeight;
}
jQuery.fn.allWidth = function(options){ //сумма длин элементов

    var allWidth = 0;

    this.each(function(){
        allWidth += $(this).outerWidth(true);
    });

    return allWidth;
}


jQuery.fn.content_slider = function(options){

        // определяем параметры по умолчанию и прописываем указанные при обращении
        var settings = jQuery.extend({}, options);


        var $prev = $(settings.prev);
        var $next = $(settings.next);
        var $pager = $(settings.pager);
        var $items = $(settings.item); $items.removeClass('slided');
        var $container = $(settings.container);
        var $slider = $(settings.slider); $slider.css('left','0');
        var orientation = settings.orientation;


        if( orientation== 'vertical')
        {

            $prev.click(function(){

                if( $items.filter('.slided').length > 0 )
                {
                    var $invisible_items = $items.filter('.slided');
                    var count_invisible_items = $invisible_items.length;
                    var $last_invisible_item = $invisible_items.eq( count_invisible_items - 1 ).removeClass('slided');
                    var item_Height = $last_invisible_item.outerHeight(true);
                    $slider.animate({ top : '+='+item_Height+'px' });

                }

                return false;
            });
            $next.click(function(){

                if( $items.filter('*:not(.slided)').allHeight() > $container.outerHeight(true) )
                {

                    var $first_visible_item = $items.filter('*:not(.slided)').eq(0).addClass('slided');
                    var item_Height = $first_visible_item.outerHeight(true);
                    $slider.animate({ top : '-='+item_Height+'px' });

                }

                return false;
            });
        }


        if( orientation== 'horizontal')
        {

            $prev.unbind('click').click(function(){
                if( $slider.attr('animating') == 'y' ) return false; else $slider.attr('animating','y');

                //.filter('*:not(.not_calculate_this)')  - нужен если одной пагинацией скролятся несколько областей, тогда области помеченные этим классом не будут учитываться при подсчёте ширины
                if( $items.filter('.slided').filter('*:not(.not_calculate_this)').length > 0 ) //если есть сдвинутые элементы
                {

                    var $invisible_items = $items.filter('.slided').filter('*:not(.not_calculate_this)'); //все свдинутые элементы
                    var count_invisible_items = $invisible_items.length; //оличество свдинутых элементов
                    var $last_invisible_item = $invisible_items.eq( count_invisible_items - 1 ).removeClass('slided'); //выбираем последний сдвинутый элемент и убираем у него пометку, что он сдвинут
                    var item_Width = $last_invisible_item.outerWidth(true); //узнаём ширину последнегоэлемента
                    $slider.animate({ left : '+='+item_Width+'px' },{duration: 360, complete: function(){ $slider.attr('animating','n') }}); //сдвигаем слайдер на ширину последнегоэлемента

                }
                else //если нету сдвинутых элементов, тогда перекручиваем слайдер в самый конец
                {
                    var width_end_items = 0;
                    var count_end_items = 0;
                    for( var i=$items.filter('*:not(.not_calculate_this)').length-1; i >= 0; i-- ) //вычисляем количество элементов с конца, которые которые помещаются в контейнере
                    {
                        if( (width_end_items + $items.filter('*:not(.not_calculate_this)').eq( i ).outerWidth(true)) <= $container.outerWidth(true) )
                        {
                            width_end_items += $items.filter('*:not(.not_calculate_this)').eq( i ).outerWidth(true)
                            count_end_items += 1;
                        }
                        else
                            break;
                    }

                    var width_slided_items = 0;
                    for( var i=0; i < $items.filter('*:not(.not_calculate_this)').length-count_end_items; i++ ) //вычисляем суммарную ширину элементов "с начала", на которую нужно сдвинуть слайдер
                    {
                        width_slided_items += $items.filter('*:not(.not_calculate_this)').eq( i ).addClass('slided').outerWidth(true);
                    }

                    //console.log(width_slided_items);

                    $slider.animate({ left : '-='+width_slided_items+'px' },{duration: 360, complete: function(){ $slider.attr('animating','n') }}); //сдвигаем слайдер на ширину начальных элементов
                }

                var count_slided_items = $items.filter('.slided').filter('*:not(.not_calculate_this)').length; //количество сдвинутых элементов
                $pager.removeClass('active').eq(count_slided_items).addClass('active'); //пагинацию устанавливаем в соответствии с количеством сдвинутых элементов

                if( settings.on_after_scroll ) settings.on_after_scroll.apply(this);//событие вызывается после скролла

                return false;
            });
            $next.unbind('click').click(function(){
                if( $slider.attr('animating') == 'y' ) return false; else $slider.attr('animating','y');

                //.filter('*:not(.not_calculate_this)')  - нужен если одной пагинацией скролятся несколько областей, тогда области помеченные этим классом не будут учитываться при подсчёте ширины
                if( $items.filter('*:not(.slided)').filter('*:not(.not_calculate_this)').allWidth() > $container.outerWidth(true) ) //если суммарная ширина оставшихся(не сдвинутых) элементов больше ширины контейнера(т.е. ещё можно сдвинуть), тогда сдвигаем
                {

                    var $first_visible_item = $items.filter('*:not(.slided)').eq(0).addClass('slided'); //выбираем первый элемент и помечаем его как сдвинутый
                    var item_Width = $first_visible_item.outerWidth(true); //узнаём ширину первогоэлемента
                    $slider.animate({ left : '-='+item_Width+'px' },{duration: 360, complete: function(){ $slider.attr('animating','n') }}); //сдвигаем слайдер на ширину первогоэлемента

                }
                else //если сдвигать дальше некуда, тогда возвращаем слайдер в начало
                {
                    $items.removeClass('slided');
                    $slider.animate({ left : '0px' },{duration: 360, complete: function(){ $slider.attr('animating','n') }}); //сдвигаем слайдер на ширину начальных элементов
                }

                var count_slided_items = $items.filter('.slided').length; //количество сдвинутых элементов
                $pager.removeClass('active').eq(count_slided_items).addClass('active'); //пагинацию устанавливаем в соответствии с количеством сдвинутых элементов

                if( settings.on_after_scroll ) settings.on_after_scroll.apply(this);//событие вызывается после скролла

                return false;
            });
            var pager_counter = 0;
            $pager.each(function(){ $(this).attr('data-slider-page-count', pager_counter++); });
            $pager.unbind('click').click(function(){
                if( $slider.attr('animating') == 'y' ) return false; else $slider.attr('animating','y');

                $pager.removeClass('active');
                $(this).addClass('active');


                    var to_slide_length = $items.removeClass('slided').slice( 0, $(this).attr('data-slider-page-count') ).addClass('slided').allWidth()

                    $slider.animate({ left : '-'+to_slide_length+'px' },{duration: 360, complete: function(){ $slider.attr('animating','n') }}); //сдвигаем слайдер на ширину первогоэлемента

                if( settings.on_after_scroll ) settings.on_after_scroll.apply(this);//событие вызывается после скролла

                return false;
            });
        } return this;



        function calculate_sum_images_length( $items_containers )//считаем суммарную длинну всех картинок
        {
            length_all_container_images = 0;
            $items_containers.each(function(){

                length_all_container_images += $(this).outerWidth(true);
                //console.log($(this).attr('class') + ' ' + length_all_container_images);

            });
            return length_all_container_images;
        }
        function slider_update( container_width, length_slider, $slider, null_position_relative ) //( картинки, смещение начала координат)
        {
             if( length_slider > container_width)
             {

                var delta_Width = Math.abs( container_width - length_slider ); //дельта ширин
                var length_to_move_Slider = null_position_relative * delta_Width;
                $slider.css('left', '-' + parseInt( length_to_move_Slider ) + 'px');//сдвигаем слайдер

             }
        }


    // выполняем плагин для каждого объекта
    this.each(function() {


        //////////////////////////////////////////////////////////////////////////////////////
        //
            var length_slider; //длинна слайдера ( обновляется в galery_update() )
            var length_slider; //суммарная длинна всех картинок
            var container_width; //ширина контэйнера
            var container_height;//высота контэйнера
            var $items_containers; //$картинки
            var $slider;         //$слайдер
            var null_position_relative;  //смещение курсора (начала координат)

            var posX_in_Container;//Х координата курсора внутри контейнера

            var offset_container;//координаты контейнера
        //
        //////////////////////////////////////////////////////////////////////////////////////

        // определяем объект
        var $gallery_container = $(this);
        $gallery_container.css('overflow','hidden');

        $items_containers = $(settings.items);

        $slider = $(settings.slider);
        $slider.css('position','relative');
        $slider.css('width','40000px');

        container_width = $gallery_container.outerWidth(true);  //ширина контейнера
        container_height = $gallery_container.outerHeight(true);//высота контейнера

        length_slider = calculate_sum_images_length( $items_containers );

        offset_container = $gallery_container.offset();





            $gallery_container.mousemove(function(e){

                container_width = $(this).outerWidth(true);
                length_slider = calculate_sum_images_length( $items_containers );
                offset_container = $gallery_container.offset();


                if( length_slider > container_width )
                {
                    posX_in_Container = e.pageX - offset_container.left;//позиция курсора внутри контейнера


                    //сужаем область активности курсора на 40px с каждой стороны/////////////////////////////////////////////////
                    //
                        if( posX_in_Container < 40) posX_in_Container = 40;
                        if( posX_in_Container + 40 > container_width) posX_in_Container = container_width - 40;
                        posX_in_Container = container_width * ( posX_in_Container - 40 ) / ( container_width - 80 );
                    //
                    //сужаем область активности курсора на 40px с каждой стороны/////////////////////////////////////////////////


                    null_position_relative = posX_in_Container / container_width;//относительная позиция курсора внтри контейнера

                    slider_update( container_width, length_slider, $slider, null_position_relative );
                }
                else
                {
                    $slider.css('left','0');
                }

            });

    });


    $(window).resize(function(){

        $slider.css('left','0');

    });




};
