kdata = 
<knowledgebase>
   <questions>
       <question id="1">
          <display>Is it animal, vegetable, or mineral?</display>
          <answerOption>Animal</answerOption>
          <answerOption>Vegetable</answerOption>
          <answerOption>Mineral</answerOption>
       </question>
       <question id="2">
          <display>Does it bark?</display>
          <answerOption>Yes</answerOption>
          <answerOption>No</answerOption>
       </question>    
   </questions>
   <targets>
      <target id="1">
         <display>a house cat</display>
         <answer questionid="1"><answerValue1>Animal</answerValue1></answer>
         <answer questionid="2"><answerValue2>No</answerValue2></answer>
      </target>
       <target id="4">
         <display>a dog</display>
         <answer questionid="1"><answerValue1>Animal</answerValue1></answer>
         <answer questionid="2"><answerValue2>Yes</answerValue2></answer>
      </target>       
      <target id="2">
         <display>a carrot</display>
         <answer questionid="1"><answerValue1>Vegetable</answerValue1></answer>
      </target>
      <target id="3">
         <display>a ruby</display>
         <answer questionid="1"><answerValue1>Mineral</answerValue1></answer>
      </target>
   </targets>
</knowledgebase>;

knowledgeBase = new XML(kdata);    

var currentQuestion = 1;
var currentTargetSet = knowledgeBase.targets;


//******************************
//   BEGIN FUNCTIONS HERE
//******************************
function ask_question(){
    
   //alert("Current question is "+currentQuestion);
    
   show_form("questionFormDiv");

   var questionElement = knowledgeBase.questions.question.(@id == currentQuestion)
   
   var questionDisplay = questionElement.display;
   $("displayQuestion").innerHTML = questionDisplay ;
	
   var answerOptions = new XMLList();
   answerOptions = questionElement.answerOption;

   var answerCounter = 0;
   $("answer3Text").innerHTML = "";
   for each( var answerText in answerOptions) {
       answerCounter++;
       $("answer"+answerCounter+"Text").innerHTML = answerText;
   }
}

function answer_question(answerSpan){
  hide_form("questionFormDiv");  
    
  var theAnswer = answerSpan.innerHTML;
  var remainingTargets = 
         currentTargetSet..target.(answer["answerValue"+currentQuestion] == theAnswer);
  //alert("There are "+remainingTargets.length()+" targets remaining: \n" + 
  //           remainingTargets);      
           
  var targetContainer = <targets/>;
  currentTargetSet = new XML(targetContainer);
  currentTargetSet.targets = remainingTargets;    
           
  if (remainingTargets.length() == 1){
    currentGuessText = currentTargetSet.target.display;
    currentGuessId = currentTargetSet.target.@id;
    guess();
  } else {
    var remainingAnswers = currentTargetSet..answer.(@questionid > currentQuestion);
    //alert("Original remaining: \n"+remainingAnswers);
    
    mostPopularQuestionCount = 0;
    mostPopularQuestionId = 0;
    
    get_most_popular_question(remainingAnswers);
    currentQuestion = mostPopularQuestionId;
    ask_question();
  }
}

var currentGuessText = "";
var currentGuessId = "";

function guess(){
    $("guessSpan").innerHTML = currentGuessText;
    show_form("guessDiv");    
}

var mostPopularQuestionId = 0;
var mostPopularQuestionCount = 0;

function get_most_popular_question(answersToCheck){

    //alert("ansersToCheck is now \n"+answersToCheck);
    
    var answersToCheckElement  = <answersToCheckRoot/>;
    var checkElement = new XML(answersToCheckElement);
    checkElement.appendChild(answersToCheck);
    var firstId = checkElement..answer[0].@questionid;
    
    var thisQuestionCount = checkElement.answer.(@questionid == firstId).length();
    if (thisQuestionCount > mostPopularQuestionCount){
        mostPopularQuestionCount = thisQuestionCount;
        mostPopularQuestionId = firstId;
    }
    answersToCheck = checkElement..answer.(@questionid != firstId);
    
    if (answersToCheck.length() > 0){
        get_most_popular_question(answersToCheck);
    } else {
//        alert("Most popular question is "+mostPopularQuestionId+", with "+mostPopularQuestionCount+" answers.")
    }
}

function start_over(){
    hide_form("guessDiv");  
    currentQuestion = 1;
    currentTargetSet = knowledgeBase.targets;
    ask_question();
}

function get_new_target(){
     hide_form("guessDiv");
     show_form("targetFormDiv");
}

var newTarget;
function submit_new_target(){
    
    newTarget = $F("newTargetDisplay");
    
    $("newTarget").innerHTML = newTarget;
    $("oldTarget").innerHTML = currentGuessText;
    
    hide_form("targetFormDiv");
    show_form("answerFormDiv");    
}

var nextQuestionId = 3;
var nextTargetId = 5;
function add_new_question(){
    
    var newQuestion = document.getElementById("answerForm").elements[0].value;
    var newAnswer = document.getElementById("answerForm").elements[1].value;

    thisQuestionId = nextQuestionId;
    nextQuestionId++;
    var newQuestionXML = <question id={thisQuestionId}>
          <display>{newQuestion}</display>
          <answerOption>Yes</answerOption>
          <answerOption>No</answerOption>
       </question>;
       
    var newQuestionElement = new XML(newQuestionXML);
    knowledgeBase.questions.appendChild(newQuestionElement);

    //Add new answer to old target
    var oldAnswer = "Yes";
    if (newAnswer == "Yes"){
        oldAnswer = "No";
    }
    
    var oldTargetNewAnswer = <answer questionid={thisQuestionId}></answer>;
    oldTargetNewAnswer["answerValue"+thisQuestionId] = oldAnswer;
    knowledgeBase..target.(@id==currentGuessId).appendChild(oldTargetNewAnswer);
        
    var oldTargetElement = new XML();
    oldTargetElement = knowledgeBase..target.(@id==currentGuessId);

    //Clone old target
    var newTargetElement = oldTargetElement.copy();
    newTargetElement.@id = nextTargetId;
    nextTargetId++;
    newTargetElement.display = newTarget;
    var newAnswerElement = newTargetElement.answer.(@questionid == thisQuestionId);
    newAnswerElement["answerValue"+thisQuestionId] = newAnswer;
    knowledgeBase.targets.appendChild(newTargetElement);
    
    hide_form("answerFormDiv");  
    
    start_over();
       
}

function get_knowledge_base(){
 
  new Ajax.Request("knowledgebase.php",
      {method: "get",
       parameters: {getkb: 'YES'},
       onSuccess: function(transport){
           kstring = transport.responseText;
           knowledgeBase = new XML(kstring);
           start_over();
       }
      })    
}

function add_new_question(){
    
    var newQuestion = $F('newQuestion');//  document.getElementById("answerForm").elements[0].value;
    var newAnswer = $F('newAnswer');// document.getElementById("answerForm").elements[1].value;
    
    var thisQuestionId;
    
      new Ajax.Request("knowledgebase.php",
      {method: "get",
       parameters: {getkb: 'NO', question: newQuestion},
       onSuccess: function(transport){
           thisQuestionId = transport.responseText;
           finish_adding_new_question(newQuestion, newAnswer, thisQuestionId);
       }
      })
    
}

//*************************
//  function finish_adding_new_question()
//*************************
function finish_adding_new_question(newQuestion, newAnswer, thisQuestionId){    
    var newQuestionXML = <question id={thisQuestionId}>
          <display>{newQuestion}</display>
          <answerOption>Yes</answerOption>
          <answerOption>No</answerOption>
       </question>;
       
    var oldAnswer = "Yes";
    if (newAnswer == "Yes"){
        oldAnswer = "No";
    }

    new Ajax.Request("knowledgebase.php",
      {method: "get",
       parameters: {addAnswers: 'YES', 
                    old_target_id: currentGuessId,
                    old_answer: oldAnswer,
                    target_display: newTarget,
                    question_id: thisQuestionId,
                    new_answer: newAnswer},
       onSuccess: function(transport){
           get_knowledge_base();
       }
      })
      hide_form("answerFormDiv");
}


function hide_form(divName){
    document.getElementById(divName).style.visibility = "hidden" ;
}
function show_form(divName){
    document.getElementById(divName).style.visibility = "visible" ;
}
