var totalWordsCount = words.length;
var correctAnswerCount = new Array(totalWordsCount);
var pendingWordsCount = totalWordsCount;
var pendingWords = new Array(totalWordsCount);
for (var i = 0; i < pendingWordsCount; ++i)
{
  correctAnswerCount[i] = 0;
  pendingWords[i] = i;
}
var glossary = new Array();

glossary["es"] = new Array();
glossary["es"]["all_words_known"]
= "Ya te sabes todas las palabras en este nivel. ;)";
glossary["es"]["next_level"]
= "Nivel siguiente";
glossary["es"]["this_is_the_last_level"]
= "No hay más niveles disponibles.";
glossary["es"]["level_finished"]
= "Has contestado correctamente todas las preguntas. ¡Buen trabajo!";
glossary["es"]["dictionary"]
= "Diccionario";
glossary["es"]["dictionary_url_prefix"]
= "http://dict.tu-chemnitz.de/dings.cgi?glossary=&noframes=1&query=";
glossary["es"]["dictionary_url_suffix"]
= "&service=de-es&optword=1&optcase=1&opterrors=1&optpro=0&dlink=self";

glossary["en"] = new Array();
glossary["en"]["all_words_known"]
= "You already know all the words in this level. ;)";
glossary["en"]["next_level"]
= "Next level";
glossary["en"]["this_is_the_last_level"]
= "There are no more available levels.";
glossary["en"]["level_finished"]
= "You have answered correctly all the questions. Well done!";
glossary["en"]["dictionary"]
= "Dictionary";
glossary["en"]["dictionary_url_prefix"]
= "http://dict.tu-chemnitz.de/dings.cgi?glossary=&noframes=1&query=";
glossary["en"]["dictionary_url_suffix"]
= "&service=de-en&optword=1&optcase=1&opterrors=1&optpro=0&dlink=self";

function updatePendingWords(object)
{
  pendingWordsCount = 0;
  pendingWords.length = pendingWordsCount;
  for (var i = 0; i < totalWordsCount; ++i)
    {
      if (correctAnswerCount[i] < 2)
        {
          pendingWords[pendingWordsCount] = i;
          ++pendingWordsCount;
        }
    }
  object.ownerDocument.getElementById("pending_words").innerHTML
    = pendingWordsCount;
  if (0 == pendingWordsCount)
    {
      if (nextLevel > 0)
        {
          if ("es" == lang)
            {
              object.ownerDocument.getElementById("continue").innerHTML
                = "<a href='deutsche_kurs_genus_level_" + nextLevel
                + ".html'>" + glossary[lang]["next_level"] + "</a>";
            }
          else
            {
              object.ownerDocument.getElementById("continue").innerHTML
                = "<a href='deutsche_kurs_genus_level_" + nextLevel
                + "." + lang
                + ".html'>" + glossary[lang]["next_level"] + "</a>";
            }
        }
      else
        {
          object.ownerDocument.getElementById("continue").innerHTML
            = glossary[lang]["this_is_the_last_level"];
        }
      alert(glossary[lang]["level_finished"]);
    }
}

function correct(object, index)
{
  if (object.style.backgroundColor) return false;
  object.style.backgroundColor="#33FF33";
  ++correctAnswerCount[index];
  updatePendingWords(object);
  return false;
}

function incorrect(object, index)
{
  if (object.style.backgroundColor) return false;
  object.style.backgroundColor="#FF3333";
  object.style.textDecoration="line-through";
  --correctAnswerCount[index];
  updatePendingWords(object);
  return false;
}

function newQuestions(questionsPerPage, object)
{
  object.innerHTML = makeButtonList(questionsPerPage);
}

function makeButton(index)
{
  if (index < 0 || index >= words.length)
    {
      alert("Internal problem: index="+index+", words.length="+words.length+". Continuing.");
      index = 0;
    }
  var word;
  var gender;
  word   = words[index][0];
  gender = words[index][1];
  var genderMask;
  var button = "";
  button += "<tr>";
  genderMask = 1;// 001
  if (optionPrefixes == null)
    {
      button += "<th>" + word + "</th>";
      for (var i = 0; i < options; ++i)
        {
          if (gender & genderMask)
            {
              button += "<td><button"
                + " onclick='javascript:return correct(this, "
                + index
                + ");'> "
                + optionLabels[i] + " </button></td>";
            }
          else
            {
              button += "<td><button"
                + " onclick='javascript:return incorrect(this, "
                + index
                + ");'> "
                + optionLabels[i] + " </button></td>";
            }
          genderMask = genderMask << 1;
        }
    }
  else
    {
      for (var i = 0; i < options; ++i)
        {
          if (gender & genderMask)
            {
              button += "<td><button"
                + " onclick='javascript:return correct(this, "
                + index
                + ");'> "
                + optionPrefixes[i] + " " + word + " </button></td>";
            }
          else
            {
              button += "<td><button"
                + " onclick='javascript:return incorrect(this, "
                + index
                + ");'> "
                + optionPrefixes[i] + " " + word + " </button></td>";
            }
          genderMask = genderMask << 1;
        }
    }
  button += "<td><a href='" + glossary[lang]["dictionary_url_prefix"] + word + glossary[lang]["dictionary_url_suffix"] +"'>" + glossary[lang]["dictionary"] + "</a></td>";
  button += "</tr>";

  return button;
}


function makeButtonList(questionsPerPage)
{
  var i;
  var now;
  now = new Date();
  var index;
  var buttons = "";
  var eligibleWords = pendingWords.slice(0);

  if (eligibleWords.length > 0)
    {
      if (questionsPerPage > eligibleWords.length)
        {
          questionsPerPage = eligibleWords.length;
        }
      buttons += "<table>";
      for (i = 0; i < questionsPerPage; ++i)
        {
          index = Math.round(Math.random() * (eligibleWords.length - 0.6));
          buttons += makeButton(eligibleWords[index]);
          if (eligibleWords["splice"])
            {
              eligibleWords.splice(index, 1);
            }
          else
            {
              // Crappy old browsers like IE 5.5 in the Mac.
              for (var j = index; j < eligibleWords.length - 1; ++j)
                {
                  eligibleWords[j] = eligibleWords[j+1];
                }
              eligibleWords.length = eligibleWords.length - 1;
            }
        }
      buttons += "</table>";
    }
  else
    {
      buttons = "<b>" + glossary[lang]["all_words_known"] + "</b>";
    }

  return buttons;
}

