;(function($) {
    $.preloadImages = function(images, func) {        
        var i = 0;
        var cache = [];
        var loaded = 0;
        var num = images.length;
        
        for ( ; i < num; i++ ) (function(i) {
            var new_image = $('<img/>').attr('src', images[i]).load(function(){
                loaded++;
                
                if(loaded == num)
                {                                                
                    func();                   
                }
            });						
            cache.push(new_image);
        })(i);
        
        return true;
    };
    
    $.fn.imgSlider = function(images) {        
        if (!$(this).length || $(this).length>1) {            
            return this;
        }
        
        var direction = 'right';
        var e = this;
        var timeout_id = 0;
        var in_progress = false
        var i = 0;
        var num_slides = $(e).find('.holder > li').length;
        var slide_widths = $(e).find('.holder > li:first').width();
        var speed = 400;
        var current=0;
        
		
        for ( ; i < num_slides; i++ ) (function(i) {            
            $(e).find('.holder > li').eq(i).css('background', 'url('+images[i]+') no-repeat');
        })(i);
        
        function slider_animate(to)
        {
            clearTimeout(timeout_id);
            timeout_id = setTimeout(auto_animate, 6000);
            in_progress = true;            
           
            var toMove = $(e).find('.holder');
            current = to;
            
            $(toMove).animate({'margin-left':'-'+(slide_widths*to)+'px'}, speed, null, function(){                
                in_progress = false;
            });          
        }
        
        function auto_animate()
        {
            if(direction == 'right')
            {
                var to = current+1;
                if(to<num_slides)
                {
                    slider_animate(to);
                }
                else
                {
                    slider_animate(0);
                    direction = 'left';
                }
            }
            else
            {
                var to = current-1;
                if(to>=0)
                {
                    slider_animate(to);
                }
                else
                {
                    slider_animate(1);
                    direction = 'right';
                }
            }
        }
        
        $(e).find('.next').click(function(){
            if(!in_progress)
            {
                var to = current+1;
                
                if(to<num_slides)
                {
                    slider_animate(to);
                }
                else
                {
                    slider_animate(0);
                }
            }
            
            return false;
        });
        
        $(e).find('.prev').click(function(){
            if(!in_progress)
            {
                var to = current-1;
                
                if(to>=0)
                {
                    slider_animate(to);
                }
                else
                {
                    slider_animate(num_slides-1);
                }
            }
            
            return false;
        });
        
        timeout_id = setTimeout(auto_animate, 6000);
      
        return true;
    };
})(jQuery);
