var maxRunes=125
var currentText=""

var replacements=new Object
replacements["!"]="."
replacements["?"]="."
replacements[","]=" "
replacements[":"]=" "
replacements[";"]="."
replacements["\r"]="\n"
replacements["'"]=""
replacements["\""]=""
replacements["-"]=""

var contractions=new Object
contractions["  "]=" "
contractions[". "]="."
contractions[" ."]="."
contractions[".."]="."
contractions["\n "]="\n"
contractions[" \n"]="\n"
contractions["\n\n"]="\n"
contractions["\n."]="\n"

var conversions=new Object
conversions["a"]="a"
conversions["b"]="b"
conversions["c"]="c"
conversions["d"]="d"
conversions["e"]="e"
conversions["f"]="f"
conversions["g"]="g"
conversions["h"]="h"
conversions["i"]="i"
conversions["j"]="i"
conversions["k"]="k"
conversions["l"]="l"
conversions["m"]="m"
conversions["n"]="n"
conversions["o"]="o"
conversions["p"]="p"
conversions["q"]="c|w"
conversions["r"]="r"
conversions["s"]="s"
conversions["t"]="t"
conversions["u"]="u"
conversions["v"]="u"
conversions["w"]="w"
conversions["x"]="x"
conversions["y"]="y"
conversions["z"]="z"
conversions["ee"]="ee"
conversions["oo"]="o"
conversions["th"]="th"
conversions["ng"]="ng"
conversions["wh"]="h|w"
conversions[" "]="word"
conversions["."]="sentence"
conversions["\n"]="sentence"

var runeImages=new Object
runeImages["a"]=new Image
runeImages["b"]=new Image
runeImages["c"]=new Image
runeImages["d"]=new Image
runeImages["e"]=new Image
runeImages["f"]=new Image
runeImages["g"]=new Image
runeImages["h"]=new Image
runeImages["i"]=new Image
runeImages["k"]=new Image
runeImages["l"]=new Image
runeImages["m"]=new Image
runeImages["n"]=new Image
runeImages["o"]=new Image
runeImages["p"]=new Image
runeImages["r"]=new Image
runeImages["s"]=new Image
runeImages["t"]=new Image
runeImages["u"]=new Image
runeImages["w"]=new Image
runeImages["x"]=new Image
runeImages["y"]=new Image
runeImages["z"]=new Image
runeImages["ee"]=new Image
runeImages["th"]=new Image
runeImages["ng"]=new Image
runeImages["word"]=new Image
runeImages["sentence"]=new Image
runeImages["blank"]=new Image
runeImages["unknown"]=new Image

function prepareText()
{
  var charIndex
  var newCharacters

  charIndex=0
  while (charIndex<currentText.length)
  {
    newCharacters=replacements[currentText.charAt(charIndex)]
    if (newCharacters==undefined)
      charIndex++
    else
    {
      currentText=currentText.substring(0,charIndex)+newCharacters+currentText.substring(charIndex+1)
      charIndex+=newCharacters.length
    }
  }
  charIndex=0
  while (charIndex<currentText.length-1)
  {
    newCharacters=contractions[currentText.substring(charIndex,charIndex+2)]
    if (newCharacters==undefined)
      charIndex++
    else
      currentText=currentText.substring(0,charIndex)+newCharacters+currentText.substring(charIndex+2)
  }
}

function createRunes()
{
  var charIndex
  var runeIndex
  var runesArray=new Array(maxRunes)
  var charIncrement
  var runeSubIndex

  charIndex=0
  runeIndex=0
  while ((charIndex<currentText.length)&&(runeIndex<maxRunes))
  {
    runesArray[runeIndex]=conversions[currentText.substring(charIndex,charIndex+2)]
    if (runesArray[runeIndex]!=undefined)
      charIncrement=2
    else
    {
      runesArray[runeIndex]=conversions[currentText.substring(charIndex,charIndex+1)]
      if (runesArray[runeIndex]==undefined)
      {
        runesArray[runeIndex]="unknown"
        currentText=currentText.substring(0,charIndex)+"\x7F"+currentText.substring(charIndex+1)
      }
      charIncrement=1
    }
    var runesSubArray=runesArray[runeIndex].split("|")
    if (runeIndex+runesSubArray.length>maxRunes)
      currentText=currentText.substr(0,charIndex)
    else
    {
      for (runeSubIndex=0;runeSubIndex<runesSubArray.length;runeSubIndex++)
      {
        runesArray[runeIndex]=runesSubArray[runeSubIndex]
        runeIndex++
      }
      charIndex+=charIncrement
    }
    delete runesSubArray
  }
  currentText=currentText.substr(0,charIndex)
  while (runeIndex<maxRunes)
  {
    runesArray[runeIndex]="blank"
    runeIndex++
  }
  for (runeIndex=0;runeIndex<maxRunes;runeIndex++)
    document.images["rune"+runeIndex].src=runeImages[runesArray[runeIndex]].src
}

function doTranslate()
{
  currentText=document.form.text.value.toLowerCase()
  prepareText()
  createRunes()
  document.form.text.value=currentText
}

function doResetText()
{
  document.form.text.value=currentText
}

function doClearText()
{
  document.form.text.value=""
}

function initialise()
{
  var element

  document.form.text.value="Stand by the grey stone when the thrush knocks and the setting sun with the last light of Durin's day will shine upon the key-hole."
  for (element in runeImages)
    runeImages[element].src="rune_"+element+".gif"
}
