var Letters="ABCCDEFFDFEGAHDBBFGAAIJ";
var Solution="78449166961370988637725";
var Runner = "   ";
var timerID;
var numOfScrolls = 0;
var Stack;

var nullStack = new StackEl(-1);

// function init()
//
function init()
{
    Stack = new StackEl(Letters);
    restore();
}

// function StackEl(str)
//
function StackEl(str)
{
    this.str = str;
    this.next = nullStack;
    return this;
}

// function push()
//
function push()
{
    var value = "";
    var form = document.game;

    var N = Letters.length;
    for (i = 0; i < N; i++)
        value += form.elements[i].value;

    tmp = Stack;
    Stack = new StackEl(value);
    Stack.next = tmp;
}
 
// function change(n)
//
// keeps relationship between digits:
// when one changes - all change
// checks, if digit already used
//
function change(n)
{
    var form = document.game;

    if (form.elements[n].value.length == 0)
        form.elements[n].value = Stack.str.substring(n, n+1);

    var c = Letters.substring(n, n+1);
    var N = Letters.length;

    for (i = 0; i < N; i++)
        if (form.elements[i].value == form.elements[n].value)
        if (i != n)
            form.elements[n].value = Stack.str.substring(n,n+1);

    for (i = 0; i < N; i++)
        if (Letters.substring(i, i+1) == c)
            form.elements[i].value = form.elements[n].value;

    KillTimer();
}

// function restore()
//
// puts back original teaser
//
function restore()
{
    var form = document.game;

    str = Stack.str;
    if (Stack.next != nullStack)
        Stack = Stack.next;

    var N = str.length;

    for (i = 0; i < N; i++)
        form.elements[i].value = str.substring(i, i+1);

    KillTimer();
}

// function finished()
//
// checks if the teaser has been solved
//
function finished()
{
    var form = document.game;
    var N = Letters.length;
    
    for (i = 0; i < N; i++)
        if (form.elements[i].value != Solution.substring(i, i+1))
        {
            Runner = "                  Leider falsch. Versuchen Sie's nochmal!";
            timerID = window.setTimeout( "TimerResponse()", 200 );
            return;
        }

    Runner = "                      Gratuliere! Sie haben's geschafft!.";
    timerID = window.setTimeout( "TimerResponse()", 200 );
}

// function TimerResponse()
//
function TimerResponse()
{
    if (numOfScrolls > 100)
    {
        KillTimer();
        return;
    }

    c = Runner.substring(0, 1);
    s = Runner.substring(1, Runner.length);
    Runner = s + c;

    document.game.marquee.value = Runner;

    timerID = window.setTimeout( "TimerResponse()", 200 );
    numOfScrolls++;
}

// function KillTimer()
//
function KillTimer()
{
    clearTimeout(timerID);
    timerID = "";
    document.game.marquee.value = " ";
    return;
}
