var _sl = null, bodyLoadWasFaster = false, upperLimits = [], maxUpperLimit = 0, currentLimitIndex = 0, nodeCount = 0,
    setVisible = [];

function $(id) {
    return document.getElementById(id);
}






function mouseenter(sender, eventArgs)
{
    var id = sender.Name.substr(2,6);
    sender.findName('esg'+id).begin();
}

function mouseleave(sender, eventArgs)
{
    var id = sender.Name.substr(2,6);
    sender.findName('ess'+id).begin();
}

function findUpperLimit(afterShowSetId)
{
    var maxIndex = -1;
    for (var i = 0; i < upperLimits.length; ++i) {
        if (setVisible[i] || afterShowSetId == i) {
            if (-1 == maxIndex || upperLimits[i] > upperLimits[maxIndex]) {
                maxIndex = i;
            }
        }
    }
    if (maxIndex > -1) {
        changeGraphUpperLimit(maxIndex);
    }
}

function showSet(setId)
{
    var nodeCount = 40;

    var oldLimitIndex = currentLimitIndex;

    findUpperLimit(setId);

    setVisible[setId] = true;

    for (i = 1; i < nodeCount; ++i) {
        _sl.findName('moveTo_' + setId + '_' + i + '_' + oldLimitIndex).pause();
        _sl.findName('hideSet1_' + setId + '_' + i + '_' + oldLimitIndex).pause();
        _sl.findName('hideSet2_' + setId + '_' + i + '_' + oldLimitIndex).pause();
        _sl.findName('hideSet3_' + setId + '_' + i + '_' + oldLimitIndex).pause();
        _sl.findName('showSet1_' + setId + '_' + i + '_' + currentLimitIndex).begin();
    }
}


function showSet2(sender, eventArgs)
{
    sender.findName('showSet2'+sender.Name.substr(8,7)).begin();
}

function showSet3(sender, eventArgs)
{
    sender.findName('showSet3'+sender.Name.substr(8,7)).begin();
}

function hideSet(setId)
{
    var nodeCount = 40;

    setVisible[setId] = false;

    for (i = 1; i < nodeCount; ++i) {
        _sl.findName('moveTo_' + setId + '_' + i + '_' + currentLimitIndex).pause();
        _sl.findName('showSet1_' + setId + '_' + i + '_' + currentLimitIndex).pause();
        _sl.findName('showSet2_' + setId + '_' + i + '_' + currentLimitIndex).pause();
        _sl.findName('showSet3_' + setId + '_' + i + '_' + currentLimitIndex).pause();
        _sl.findName('hideSet1_' + setId + '_' + i + '_' + currentLimitIndex).begin();
    }

    findUpperLimit();
}

function hideSet2(sender, eventArgs)
{
    sender.findName('hideSet2'+sender.Name.substr(8,7)).begin();
}

function hideSet3(sender, eventArgs)
{
    sender.findName('hideSet3'+sender.Name.substr(8,7)).begin();
}

function updateYValues(limitIndex, oldLimitIndex)
{
    for (var setId = 0; setId < 4; ++setId) {
        if (setVisible[setId]) {
            var nodeCount = 40;
            for (i = 1; i < nodeCount; ++i) {
                _sl.findName('showSet1_' + setId + '_' + i + '_' + oldLimitIndex).pause();
                _sl.findName('showSet2_' + setId + '_' + i + '_' + oldLimitIndex).pause();
                _sl.findName('showSet3_' + setId + '_' + i + '_' + oldLimitIndex).pause();
                _sl.findName('moveTo_' + setId + '_' + i + '_' + oldLimitIndex).pause();
                _sl.findName('moveTo_' + setId + '_' + i + '_' + limitIndex).begin();
            }
        }
    }
}

var _showStarted = false;
function setShowMode(flag)
{
    if (flag) {
        if (!_showStarted) {
            _showStarted = true;
            showStep();
        }
    } else {
        _showStarted = false;
    }
}
function showStep() {
    var setId = parseInt(Math.random() * 4);
    if (setVisible[setId]) {
        hideSet(setId);
        $('hide' + (setId+1)).style.display = 'none';
        $('show' + (setId+1)).style.display = '';
    } else {
        showSet(setId);
        $('hide' + (setId+1)).style.display = '';
        $('show' + (setId+1)).style.display = 'none';
    }
    if (_showStarted) {
        setTimeout('showStep()', 500);
    }
}