var alphabet="abcdefghijklmnopqrstuvwxyz";
var prev_input_string="";
var letters=new Array(26);
var min_size;
var max_size;
var str_len;

function loader() {
  document.form.reset();
  alert('This program finds anagrams of the input string in the dictionary.\nThe dictionary contains words of lengths 3-9 letters long.\nThe longer the word, the longer it takes to find all the anagrams.');
  min_size=document.form.min_size;
  max_size=document.form.max_size;
  str_len=document.form.str_len;
}

function init() {
  for(var i=0;i<26;i++)
    letters[i]=0;
}

function update() {
  init();
  var total_letters=0;
  var input_string=document.form.input_text.value.toLowerCase();
  for(var i=0;i<input_string.length;i++) {
    var loc=alphabet.indexOf(input_string.charAt(i));
    if(loc!=-1) {
      letters[loc]++;
      total_letters++;
    }
  }
  if(total_letters>=20) {
    document.form.input_text.value=prev_input_string;
    str_len.value=19;
    alert('The input string must be fewer than 20 letters long.');
  } else {
    str_len.value=total_letters;
    prev_input_string=document.form.input_text.value;
  }
}

function fix() {
  if(parseInt(min_size.value)<3)
    min_size.value=3;
  if(parseInt(min_size.value)>9)
    min_size.value=9;
  if(parseInt(max_size.value)<parseInt(min_size.value))
    max_size.value=min_size.value;
  else if(parseInt(max_size.value)>9)
    max_size.value=9;
}

function createWords(current_word,output_words) {
  if(current_word.length>parseInt(max_size.value) || (current_word.length>1 && searchPrefix(current_word)==-1))
    return;
  if(current_word.length>=parseInt(min_size.value) && search(current_word)!=-1)
    output_words[output_words.length]=current_word;
  for(var i=0;i<26;i++)
    if(letters[i]>0) {
      letters[i]--;
      createWords(current_word+alphabet.charAt(i),output_words);
      letters[i]++;
    }
}

function scramble() {
  if(parseInt(str_len.value)<parseInt(min_size.value)) {
    alert('The input string must be more than '+(parseInt(min_size.value)-1)+' letters long.');
    return;
  }

  var output_words=new Array();
  document.form.output.value='Thinking...';

  //create words
  var beg=new Date();
  createWords("",output_words);
  var end=new Date();

  document.form.output.value=output_words.join(", ");
  alert("Found "+output_words.length+" words in "+((end.getTime()-beg.getTime())/1000)+" seconds.");
}

