(function($) {
    
    $.slider = function() {
        
        
        
        function slideObj($elem, data, settings, position) {
            
            
            var current = data.marks;
            current = current.filter('.animate-nav-active');
            
            var ci = data.marks.index(current);

            if(position == 'prev') {
                
                if(ci != 0) {
                    data.marks.removeClass('animate-nav-active');
                    data.marks.eq(ci-1).addClass('animate-nav-active');
                    
                    data.obj_div.animate({ 
                        left: '+='+data.width
                    }, settings.speed);
                }
                
            }
            else if (position == 'next') {
                
                if(ci != data.objs.length-1) {
                    data.marks.removeClass('animate-nav-active');
                    data.marks.eq(ci+1).addClass('animate-nav-active');
                    
                    data.obj_div.animate({ 
                        left: '-='+data.width
                    }, settings.speed);
                }
            }
            else if (ci != position ) {
                var coef = Math.abs(ci-position);
                var direction = (ci>position) ? '+' : '-';
                

                
                data.marks.removeClass('animate-nav-active');
                data.marks.eq(position).addClass('animate-nav-active');
                
                data.obj_div.animate({ 
                    left: direction+'='+data.width*coef
                }, settings.speed);
            }
        
        };
        return {
            init: function($elem, settings) {
                var data = {};
                data.obj_div = $elem.find('.animate-objs');
                data.objs = $elem.find('.animate-object');
                data.marks = $elem.find('.animate-nav-mark');
                data.btn_prev = $elem.find('.animate-nav-prev');
                data.btn_next = $elem.find('.animate-nav-next');
                data.width = data.objs.outerWidth(true);
                
                //setting last object margin 
                var $lastObj = data.objs.eq(data.objs.length-1);
                if($.browser.msie && $.browser.version < 7){
                    $lastObj.css('margin-right','-3px');
                }
                else {
                    $lastObj.css('margin-right','0px');
                }
                
                //setting width of objects container
                var w = data.width*data.objs.length;
                data.obj_div.width(w);
                
                // events
                data.marks.click(function() {
                    var index = data.marks.index($(this));
                    slideObj($elem, data, settings, index);
                });
                data.btn_prev.click(function() {
                    slideObj($elem, data, settings,'prev');
                });
                data.btn_next.click(function() {
                    slideObj($elem,data,settings,'next');
                });
            }
        };
    }();
    
    $.fn.extend({
        slider: function(options) {
            this.each(function() {
                var settings = $.extend({speed: 500}, options);
                $.slider.init($(this), settings); 
            });
            return this;
        }
    });
    
})(jQuery);