(function($){

    $.fn.imageroller = function(settings) {

        var defaults = {
            appearTime: 2000,
            disappearTime: 2000,
            displayTime: 3000
        };
        
        if (typeof settings == 'undefined') {
            settings = {
                appearTime: null,
                disappearTime: null,
                displayTime: null
            };
        }
        
        var appearTime          = (settings.appearTime ? settings.appearTime : defaults.appearTime);
        var disappearTime       = (settings.disappearTime ? settings.disappearTime : defaults.disappearTime);
        var displayTime         = (settings.displayTime ? settings.displayTime : defaults.displayTime);
        
        var co = [];
        
        this.each(function(i) {
            
            var _cntnr = this;
            $('img', _cntnr).shuffle();
            
            co[i] = new function() {
                this._ci = null;
            }
            
            co[i].roll = function() {
                    
                if (this._ci == null) {
                    this._ci = 0;
                }

                var images = $('img', _cntnr).toArray();
                
                if (!images.length) return;
                
                var cImg = images[this._ci];
                
                if (images.length == 1) {
                    $(cImg).fadeIn(appearTime);
                    return;
                }
                
                if (typeof images[this._ci + 1] == 'undefined') {
                    this._ci = 0;
                } else {
                    this._ci += 1;
                }
                
                var _this = this;
                
                $(cImg).fadeIn(appearTime, function() {
                    setTimeout(function() {
                        $(cImg).fadeOut(disappearTime, function() {
                            _this.roll();
                        });
                    }, displayTime);
                });
            }
            
        });
        
        for (var i in co) {
            co[i].roll();
        }

    };

})( jQuery );
