var letters = new Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")


// This resets all the spaces in the puzzle back to blanks.
function reset() {
	location = "dwarfs.html";
}


// This function returns an array of letter/number assignments.
function getLetters() {

	// Create an array containing all the letters.
	var letter_values = new Array();
	for (loop=0; loop < letters.length; loop++) {

		// An array is set up for each letter -> 
		// letter[letter,number]
		letter_values[loop] = new Array();

		// Assign the letter to 0.
		letter_values[loop][0] = letters[loop];

		// If this letter already has a number assigned to it
		// in the puzzle, fill it into 1 in the array.
		this_letter = "document.puzzle." + letters[loop] + ".value";
		if (eval(this_letter)) {
		  letter_values[loop][1] = eval(this_letter);
		}

		// Otherwise, assign "" to 1.
		else {
			letter_values[loop][1] = "";
		}
	}
	return letter_values;
}


// This fills in the letter in every position that
// has this number.
function fillIn(letter,number) {

  // Search the name_values array for any that are associated with this number.
  // Fill in this letter for that position on the puzzle.
  for (loop=27; loop < document.puzzle.elements.length; loop++) {
    if (document.puzzle.elements[loop].name == number) {
      document.puzzle.elements[loop].value = letter;
    }
  }
}


// This gets called when a new letter is entered into the puzzle.
function checkvalue(this_value, number, name) {

  // Check to see if this this letter has already been 
  // assigned a different number.  If it has been, 
  // remove the letter that was just entered into the
  // puzzle and pop-up alert.

  puzzle_value = "document.puzzle." + name + ".value";
  letter_value = "document.puzzle." + this_value.value + ".value";
  real_letter_value = eval(letter_value);

  if ((real_letter_value) && (real_letter_value != number)) {
    alert ("You've already got the number "+ eval(letter_value) + " assigned to "+ this_value.value);
    this_value.value = "";
  }

  // Otherwise, fill in this number under the corresponding
  // letter at the top of the puzzle.
  else {
    if (this_value.value == "A") {document.puzzle.A.value = number;}
    else if (this_value.value == "B") {document.puzzle.B.value = number;}
    else if (this_value.value == "C") {document.puzzle.C.value = number;}
    else if (this_value.value == "D") {document.puzzle.D.value = number;}
    else if (this_value.value == "E") {document.puzzle.E.value = number;}
    else if (this_value.value == "F") {document.puzzle.F.value = number;}
    else if (this_value.value == "G") {document.puzzle.G.value = number;}
    else if (this_value.value == "H") {document.puzzle.H.value = number;}
    else if (this_value.value == "I") {document.puzzle.I.value = number;}
    else if (this_value.value == "J") {document.puzzle.J.value = number;}
    else if (this_value.value == "K") {document.puzzle.K.value = number;}
    else if (this_value.value == "L") {document.puzzle.L.value = number;}
    else if (this_value.value == "M") {document.puzzle.M.value = number;}
    else if (this_value.value == "N") {document.puzzle.N.value = number;}
    else if (this_value.value == "O") {document.puzzle.O.value = number;}
    else if (this_value.value == "P") {document.puzzle.P.value = number;}
    else if (this_value.value == "Q") {document.puzzle.Q.value = number;}
    else if (this_value.value == "R") {document.puzzle.R.value = number;}
    else if (this_value.value == "S") {document.puzzle.S.value = number;}
    else if (this_value.value == "T") {document.puzzle.T.value = number;}
    else if (this_value.value == "U") {document.puzzle.U.value = number;}
    else if (this_value.value == "V") {document.puzzle.V.value = number;}
    else if (this_value.value == "W") {document.puzzle.W.value = number;}
    else if (this_value.value == "X") {document.puzzle.X.value = number;}
    else if (this_value.value == "Y") {document.puzzle.Y.value = number;}
    else if (this_value.value == "Z") {document.puzzle.Z.value = number;}

    // Create an array containing all the letters.
    letter_values = getLetters();
    for (loop = 0; loop < letters.length; loop++) {
      if ((letter_values[loop][1] == number) && (letter_values[loop][0] != this_value.value)) {
	document.puzzle.elements[letter_values[loop][0]].value="";
      }
    }
    fillIn(this_value.value,number);
  }	
}


// This gets called when a new number is entered at the top.
function checkforchange(this_value, name) {

  // Check to see if this number has already been used at the top.

  for (loop=0; loop < 26; loop++) {
    if ((document.puzzle.elements[loop].value == this_value)&&(document.puzzle.elements[loop].name != name)&&(this_value != "")) {
      document.puzzle.elements[loop].value = "";
    }
  }

  // Check to see if this name already has a letter
  // assigned to it in the puzzle.

  for (loop=27; loop < document.puzzle.elements.length; loop++) {

    if (document.puzzle.elements[loop].value) {

      // Check to see if the letter assigned to it
      // matches the letter being checked.

      if (document.puzzle.elements[loop].value == name) {

	// If it does match, then check whether
	// the number also matches.  If it doesn't,
	// the letter is removed from this position
	// in the puzzle.  (Meaning the top over-rides
	// the bottom.)

	if (document.puzzle.elements[loop].name != this_value.value) {
	  document.puzzle.elements[loop].value = "";
	}
      }
    }
  }

  fillIn(name,this_value);

}
