function generateRandomIndex(allowed)
{
    return allowed[Math.floor(Math.random() * allowed.length)] || 0;
}

function calculateAllowed(firstGroup)
{
    var allowed = $A($R(0, 8));
    allowed.delete_value = function(value)
    {
        var index = this.indexOf(value);
        while (index != -1)
        {
            this.splice(index, 1);
            index = this.indexOf(value);
        }
    }
    
    for (var i = 0; i < 3; i++)
    {
        var img = getImage(firstGroup, i);
        if (img.currentImage)
        {
            allowed.delete_value(img.currentImage);
        }
    }
    return allowed;
}

function updateImageGroup(firstGroup)
{
    var allowed = calculateAllowed(!firstGroup)
    for (var i = 0; i < 3; i++)
    {
        var img = getImage(firstGroup, i);
        var index = generateRandomIndex(allowed);
        allowed.delete_value(index);
        img.currentImage = index;
        img.src = getImageUrl(index);
    }
}

function doCrossfade(firstGroup)
{
    for (var i = 0; i < 3; i++)
    {
        new Effect.Appear(getImage(firstGroup, i),
            { duration: 1, from: 0, to: 1 });
        new Effect.Fade(getImage(!firstGroup, i),
            { duration: 1.5, from: 1, to: 0 });
    }
}

function reloadImages()
{
    var firstGroup = Element.visible(getImage(0, 0));
    updateImageGroup(firstGroup);
    doCrossfade(firstGroup);
}

