var keywords = new Array();
var synonyms = new Array();
var keyind = new Array();

function fill_keys()
{
  keywords = add_key(keywords,"age");
  keywords = add_key(keywords,"brother");
  keywords = add_key(keywords,"creator");
  keywords = add_key(keywords,"drink");
  keywords = add_key(keywords,"food");
  keywords = add_key(keywords,"friend");
  keywords = add_key(keywords,"girlfriend");
  keywords = add_key(keywords,"hobby");
  keywords = add_key(keywords,"job");
  keywords = add_key(keywords,"location");
  keywords = add_key(keywords,"mother");
  keywords = add_key(keywords,"operative");
  keywords = add_key(keywords,"skill");
  keywords = add_key(keywords,"trainer");
  keywords = add_key(keywords,"transportation");
  keywords = add_key(keywords,"wear");
}

function fill_synonyms()
{
  add_relation("age", "year");
  add_relation("age", "old");
  add_relation("brother", "sibling");
  add_relation("brother", "relative");
  add_relation("brother", "kin");
  add_relation("brother", "twin");
  add_relation("creator","owner");
  add_relation("creator","made");
  add_relation("creator","maker");
  add_relation("creator","author");
  add_relation("creator","designer");
  add_relation("creator","producer");
  add_relation("creator","inventor");
  add_relation("drink","beverage");
  add_relation("drink","refreshment");
  add_relation("food","eat");
  add_relation("food","meal");
  add_relation("food","aliment");
  add_relation("food","diet");
  add_relation("food","feast");
  add_relation("food","nourishment");
  add_relation("food","nutrition");
  add_relation("food","snack");
  add_relation("food","sustenance");
  add_relation("friend","acquaintance");
  add_relation("friend","buddy");
  add_relation("friend","chum");
  add_relation("friend","pal");
  add_relation("friend","companion");
  add_relation("girlfriend","baby");
  add_relation("girlfriend","crush");
  add_relation("girlfriend","babe");
  add_relation("girlfriend","partner");
  add_relation("girlfriend","date");
  add_relation("girlfriend","escort");
  add_relation("girlfriend","lover");
  add_relation("girlfriend","sweetheart");
  add_relation("girlfriend","true love");
  add_relation("hobby","pastime");
  add_relation("hobby","distraction");
  add_relation("hobby","interest");
  add_relation("hobby","leisure");
  add_relation("job", "activity");
  add_relation("job", "career");
  add_relation("job", "employment");
  add_relation("job", "employed");
  add_relation("job", "function");
  add_relation("job", "gig");
  add_relation("job", "occupation");
  add_relation("job", "place");
  add_relation("job", "position");
  add_relation("job", "post");
  add_relation("job", "profession");
  add_relation("job", "situation");
  add_relation("job", "task");
  add_relation("job", "vocation");
  add_relation("job", "work");
  add_relation("location","place");
  add_relation("location","area");
  add_relation("location","locus");
  add_relation("location","position");
  add_relation("location","post");
  add_relation("location","region");
  add_relation("location","spot");
  add_relation("location","station");
  add_relation("location","turf");
  add_relation("location","where");
  add_relation("mother","ma");
  add_relation("mother","mamma");
  add_relation("mother","mama");
  add_relation("mother","mom");
  add_relation("mother","mum");
  add_relation("mother","momma");
  add_relation("mother","moma");
  add_relation("operative","agent");
  add_relation("operative","op");
  add_relation("skill","talent");
  add_relation("skill","aptitude");
  add_relation("skill","know");
  add_relation("skill","craft");
  add_relation("skill","expertise");
  add_relation("skill","competence");
  add_relation("skill","cunning");
  add_relation("skill","dexterity");
  add_relation("skill","know-how");
  add_relation("skill","technique");
  add_relation("skill","mastery");
  add_relation("skill","prowess");
  add_relation("skill","savvy");
  add_relation("trainer","coach");
  add_relation("trainer","instructor");
  add_relation("trainer","mentor");
  add_relation("trainer","teacher");
  add_relation("trainer","tutor");
  add_relation("transportation","transport");
  add_relation("transportation","car");
  add_relation("transportation","vehicle");
  add_relation("transportation","transit");
  add_relation("wear","clothes");
  add_relation("wear","attire");
  add_relation("wear","dress");
  add_relation("wear","rag");
  add_relation("wear","have on");
  add_relation("wear","show");
}

function add_relation(word1, word2)
{
  term1 = strip_affixes(word1);
  term2 = strip_affixes(word2);
  if (synonyms[term1])
    synonyms[term1] = synonyms[term1].concat(term2);
  else 
    synonyms[term1] = [term2];
  if (synonyms[term2])
    synonyms[term2] = synonyms[term2].concat(term1);
  else 
    synonyms[term2] = [term1];
}

function add_key(keyw, word)
{
  w = strip_affixes(word);
  keyind[w] = keyw.length;
  return keyw.concat(w);
}

var key_quest = ["are you", "do you", "is your","did you"];

function find_data(question)
{
  var r=new Result(false, 0, "");
  var answer=false;
  var res=substr_array(question, key_quest);
  if (res[0] == -1)
    return r;
  if (res[1] == 0)
    return decide_prop(question, res[0]);
  else {
     words = question.split(" ");
     for (var i=0; i<words.length; i++) {
       answer = find_by_syn(words[i]);
       if (answer != -1) {
         r.state = true;
         r.number = 1000 + answer;
         r.string = birky_facts[answer];
         return r;
       }
     }
  }
  return r;
}

function find_by_syn(word) 
{
  var i = find_syn(word);
  if (i >= 0)
    return rand_answer(birky_char[i]);
  else
    return -1;
}

var decision = ["yes", "no", "maybe", "not sure yet", "what do you think?"];
function decide_prop(question, number)
{
  var what, whatto = "any", which, r;
  var words = question.split(" ");
  if ((number == 1) || (number == 3)) {
    if (words.length == 3)
      what = words[2];
    else {
      if (words[2] == "know" || words[2] == "like" || words[2] == "need") 
        whatto = "any";
      else if (words[2] == "love" || words[2] == "dig" || words[2] == "want")
        whatto = "love";
      else
        whatto = words[2];
      which = 3;
      if (words.length > 4) {
        if (words[3] == "how")
          which ++;
        if (words[which] == "to" || words[which] == "the" || 
            words[which] == "a" || words[which] == "some") 
          which++;
      }
      what = words[which];
      if (whatto == "any" || whatto == "love") {
        which = locate_fact(what);
        if (which >= 0) {
          if (whatto == "any")
            return new Result(true, which+1000, "yes");
          else if (!(which in birky_char[keyind["job"]] ||
                     which in birky_char[keyind["operative"]]))
            return new Result(true, which+1000, "yes");
          else 
            return new Result(true, which+1000, "no");
        }
        else
          return new Result(true, which+1000, "no");
      }
      else {
        whatto = find_syn(whatto);
        if (whatto >= 0) {
          which = 3;
          if (words[which] == "to" || words[which] == "the" || 
              words[which] == "a" || words[which] == "some") 
            which++;
          which = locate_fact(words[which]);
          if (which in birky_char[keyind[whatto]])
            return new Result(true, which+1000, "yes");
          else 
            return new Result(true, which+1000, "no");
        }
      }
    }
  }
  r = intRandLim(0,decision.length-1);
  return  new Result(true, 1001+r+birky_char.length, decision[r]);
}

function find_syn(word) 
{
  var i, j, w = strip_affixes(word);
  if (w in synonyms) {
    r = w;
    j = in_array(keywords, r);
    if (j == -1)
      r = synonyms[r][0];
    i = keyind[r];
    return i;
  }
  else
    return -1;
} 

// Finds out if str is a substring of any of the elements of the
// array. It returns an array with two elements, the first being the
// index of element of array that str is a substring of, and the second
// being the index of str in that element of the array.
function substr_array(str, array)
{
  var i, j;
  var res = [-1,-1];
  for (i=0; i<array.length; i++) {
    j=str.indexOf(array[i], 0);
    if (j >= 0) {
      res[0] = i;
      res[1] = j;
      return res;
    }
  }
  return res;
}
