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.slider = function(options){

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


        var $prev = $(settings.prev);
        var $next = $(settings.next);
        var $items = $(settings.item);
        var $container = $(settings.container);
        var $slider = $(settings.slider);
        var orientation = settings.orientation;


        if( orientation== 'vertical')
        {

            $prev.click(function(){

                if( $items.filter('.slided').length > 0 )
                {

                    var $last_invisible_item = $items.filter('.slided').eq(0).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.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_Width = $last_invisible_item.outerWidth(true);
                    $slider.animate({ left : '+='+item_Width+'px' });

                }

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

                if( $items.filter('*:not(.slided)').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' });

                }

                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');

            });



    });

};

