function RandomImageSelector(list)
{        
    this.list = list;
    this.available = this.list.slice(0);
    
    // Method to get a random image out of the available options.
    this.getRandomImage = function() {
        // If no more options are available, then reset the list of available options.
        if (0 == this.available.length) {
            this.available = this.list.slice(0);
        }
        
        // Select and return a random image, removing it from the list of available options.
        var item = Math.floor(Math.random()*this.available.length);            
        var src = this.available[item];
        
        // Move the last item in where the taken item was, and then remove the last item.
        this.available[item] = this.available[this.available.length - 1];
        this.available.pop();
        
        return src;
    }
};

function fadeInRandomImage(imgDiv, randomImages, rotateDelay)
{
    var img = imgDiv.find("img");
    var src = randomImages.getRandomImage();
    
    var oldSrc = img.attr("src");
    imgDiv.css("background-image", "url("+oldSrc+")");
    
    img.attr("src", src);
    
    img.hide().fadeIn('slow', 
        function() {
            setTimeout(function() { fadeInRandomImage(imgDiv, randomImages, rotateDelay); }, rotateDelay);
        }
    );
}

function initRandomImageCycle(imgDiv, images, initialDelay, rotateDelay) {
    var randomImages = new RandomImageSelector(images);
    imgDiv.find("img").attr("src", randomImages.getRandomImage());
    setTimeout (
        function() {
            fadeInRandomImage(imgDiv, randomImages, rotateDelay);
        },
        initialDelay
    );
}