/*
 * Name: FadeImageOut.js
 *
 * Author: Bruce Polmear
 */

var m_delayTime = 2000;
var m_blendSpeed = 50; // Larger number is slower, smaller number is higher
var m_blendStep = 2;   // Larger number is faster but jumpier
var m_blend1Parent;
var m_blend2Parent;
var m_blend1Image;
var m_blend2Image;
var m_index = 1;
var m_started = false;
var m_inProgress = false;

var m_debugBox;

function addImageSection( imageParentId, index )
{
    if ( index == 1 )
    {
        m_blend1Parent = document.getElementById(imageParentId);
    }
    else if ( index == 2 )
    {
        m_blend2Parent = document.getElementById(imageParentId);
    }
}

function setBlendSpeed( time )
{
    m_blendSpeed = time;
}

function setBlendStep( step )
{
    m_blendStep = step;
}

function setDelay( delay )
{
    m_delayTime = delay;
}

function start()
{
    if ( m_blend1Parent && m_blend2Parent )
    {
        m_blend1Image = getFirstChildImage( m_blend1Parent );
        m_blend2Image = getFirstChildImage( m_blend2Parent );
        m_started = true;
        m_inProgress = true;
        clearTextBox();
        setTimeout(function() {blendingWorker()}, m_delayTime);
    }
}

function stop()
{
    m_started = false;
}

function blendingWorker()
{
    writeToTextBox( 'blendingWorker( ' + m_index + ', ' );

    var currentImage;
    if ( m_index == 1 )
    {
        currentImage = m_blend1Image;
        writeToTextBox(m_blend1Image.name + ') ');
        currentImage = blendImage( m_blend1Parent, currentImage );
        m_blend1Image = currentImage;
        m_index = 2;
    }
    else if ( m_index == 2 )
    {
        currentImage = m_blend2Image;
        writeToTextBox(m_blend1Image.name + ') ');
        currentImage = blendImage( m_blend2Parent, currentImage );
        m_blend2Image = currentImage;
        m_index = 1;
    }
}

function blendImage(imageParent, currentImage)
{
    var nextImage;
    if ( imageParent )
    {
        if ( !currentImage )
        {
            currentImage = getFirstChildImage( imageParent );
        }
        else
        {
            nextImage = getNextChildImage( currentImage );
            if ( ! nextImage )
            {
                nextImage = getFirstChildImage( imageParent );
            }
            currentImage.style.zIndex = 100;
            setOpacity( nextImage, 100 );
            nextImage.style.zIndex = 50;
            nextImage.style.visibility = "visible";
        
            fadeImage( currentImage, 100 );
        }
    }
    return nextImage;
}

function fadeImage( image, opacity )
{
    opacity = opacity - m_blendStep;
    if ( opacity > 0 )
    {
        setOpacity( image, opacity );
        setTimeout( function() { fadeImage( image, opacity ) }, m_blendSpeed );
    }
    else
    {
        image.style.zIndex = 0;
        setTimeout( function() { blendingWorker() }, m_delayTime );
    }
}

function setOpacity( image, opacity )
{
    if ( opacity <= 0 )
    {
        opacity = 0;
    }
    image.style.opacity = (opacity / 100);
    image.style.MozOpacity = (opacity / 100);
    image.style.KhtmlOpacity = (opacity / 100);
    image.style.filter = 'alpha(opacity=' + opacity + ')';
}

function getFirstChildImage(imageParent)
{
    var firstChildImage;
    firstChildImage = imageParent.firstChild;
    while ( firstChildImage && firstChildImage.tagName != 'IMG' )
    {
        firstChildImage = firstChildImage.nextSibling;
    }
    return firstChildImage;
}

function getNextChildImage(currentImage)
{
    var nextImage;
    if ( currentImage )
    {
        nextImage = currentImage;
        do nextImage = nextImage.nextSibling;
        while ( nextImage && nextImage.tagName != 'IMG' )
    }
    return nextImage;
}

function writeToTextBox(text)
{
    if ( !m_debugBox )
    {
        m_debugBox = document.getElementById("debuggingText");
    }
    if ( m_debugBox )
    {
        m_debugBox.value += text;
    }
}

function clearTextBox()
{
    if ( !m_debugBox )
    {
        m_debugBox = document.getElementById("debuggingText");
    }
    if ( m_debugBox )
    {
        m_debugBox.value = '';
    }
}

