text: // Copyright © Elnaz Abolahrar and Thomas Hallgren, 2011
  
  function hide_element(elem_id)
  {
    document.getElementById(elem_id).style.display="none";
  }
  
  function show_element(elem_id)
  {
    document.getElementById(elem_id).style.display="";
  }
  
  function toggle_info()
  { 
    if ( info_hidden == true )
      {
       show_element("info");
  	 hide_element("toggle_show");
  	 show_element("toggle_hide");
  	 info_hidden = false;
       }
    else
      {
       hide_element("info");
  	 show_element("toggle_show");
  	 hide_element("toggle_hide");
  	 info_hidden = true;
       }
  }
  
  function show_word_magnets()
  { 
    if ( words_hidden == true )
      {
       show_element("words");
       words_hidden= false;
  	 var buttons_bar=element("buttons_bar");
       buttons_bar.removeChild(buttons_bar.lastChild);
  	 } 
  }
  
  function hide_word_magnets()
  { 
    if ( words_hidden == false )
      {
        hide_element("words");
        words_hidden= true;
    
       //add "Show magnets" button
  	 var buttons_bar=element("buttons_bar");
       appendChildren(buttons_bar,
  		   [ button("Show Magnets","show_word_magnets()","M", "show_magnets")]);
  	 }
  }		   
  
  function popUp(newPage, pageName) 
  {
    window.open(newPage, pageName, "dependent = 1, scrollbars=1, location=1, statusbar=1, width=540, height=650, left = 10, top = 20");
  }
  
  
  function disable_all()
  {
    //disables the "Hint", "Check Answer", "Next Question" and "Previous Question" buttons + user answer area	
      document.getElementById('check_answer').disabled = true;
      document.getElementById('next_question').disabled = true;
      document.getElementById('previous_question').disabled = true;
      document.getElementById('hint').disabled = true;
      document.getElementById('user_answer').disabled = true;
  }
  
  function set_mode()
  {	
      //disable the grammar - To - From languages, and mode menubar
        document.getElementById('grammar_menu').disabled = true;	
        document.getElementById('from_menu').disabled = true;
        document.getElementById('to_menu').disabled = true;
        document.getElementById('quiz_mode').disabled = true;
      	
  	
      selected_mode = element("quiz_mode").value;
  		
      //sets the Quiz mode displayed
        document.getElementById('mode').value = selected_mode;
  	  
  /*-------------------------------------- Modes Settings --------------------------------------*/	  
      switch (selected_mode)
  	 {
  	  case "Easy Study Mode":
  	        have_minibar = true;
  			have_prevQuestion = true;
  			have_checkAns = true;
  			max_hint_times = 100;
  			break;
  	         
  	  case "Medium Study Mode":
  			have_minibar = false;
  			have_prevQuestion = true;
  			have_checkAns = true;
  			max_hint_times = 3;
  			break;
  			
  	  case "Hard Study Mode":
  			have_minibar = false;
  			have_prevQuestion = false;
  			have_checkAns = true;
  			max_hint_times = 1;
  			break;
  			
  	  case "Exam Mode":
  			have_minibar = false;
  			have_prevQuestion = false;
  			have_checkAns = false;
  			max_hint_times = 0;
  			break;
  	  }
  }
  
  function reset_mode()
  {		 	  
      //enable the grammar - To - From languages, and mode menubar
        document.getElementById('grammar_menu').disabled = false;	
        document.getElementById('from_menu').disabled = false;
        document.getElementById('to_menu').disabled = false;
        document.getElementById('quiz_mode').disabled = false;
  			 
      //clears the Quiz mode displayed
        document.getElementById('mode').value = "";
  }
  
  function remove_minibar()
  {
    if (have_minibar && is_ended == false )
  	{
  	    //hide the minibar word magnets
          hide_element("minibar_contin");
  		   
  	   //hide the delete and clear buttons
  	    hide_element("minibar_buttons");
  	 }
  }
  
  function remove_unwanted_characters(txt)
  {
    //removes digits, special characters and extra spaces from user's answer 
      txt =  txt.replace(/[\u0021-\u0026 \u0028-\u0040 \u005b-\u0060 \u007b-\u007e]+/g,' ').replace(/^\s+|\s+$/g,'').replace(/\s+/g,' ');
    
    //changes the first character to lowercase 
      txt= txt.replace(txt.charAt(0),txt.charAt(0).toLowerCase());
   
    return txt;
  }
  
  function split_to_words(str)
  {
    if (!(str == "" || str == null))
  	str = str.split(" ");
    else 
  	str = "";
  	
    return str;
  }
  
  function string_matching(serv_answer,use_answer)
  {
    var result = new Array();
    
    //for empty answers
    if ( use_answer== "" || use_answer== null)
  	  result= "";	
    else
      {
  	  var min_length = Math.min(serv_answer.length, use_answer.length);
  	  
  	  var i=0;   
  	  for (i= 0; i < min_length; i++)
          {
  	      if (serv_answer[i] == use_answer[i])
  		     result[i] = 1;
  		  else
             	 result[i] = 0;
  		 }
  	  //for answers with extra words (more than the number of words in the right answer)   
  	    while ( i < use_answer.length)
  	        {
  		    	result[i] = 0;
  		 	    i++;
  		     } 
  	 }
  	 
     return result;
  }
  
  function sum_all(arr) {
    var s = 0;
    for (var i = 0; i < arr.length; i++) 
    {
      s += arr[i];
    }
    return s;
  }
  
  function find_closest(all_ans)
  { 
    var best_match = new Array();
    var comp = new Array();
    var server_answer2  = new Array();
    var max=0;
    var k = 0;
    for (k= 0; k < all_ans.length; k++)
        {
  	    server_answer = remove_unwanted_characters(all_ans[k]);
  		server_answer2 = split_to_words(server_answer);
  		
  		comp = string_matching(server_answer2, user_answer_splited);
          var sum = sum_all(comp);
  		if (sum >= max)
  		  {
  		    best_match = server_answer2;
  			max= sum;
  			}	
  		}
  	return best_match;
  }
  
  function clearing()
  {
    //clears the question, answer and the explanation and hint display areas
  	document.question.question_text.value= "...";
  	document.answer.answer_text.value = "";
  	document.explanation.explanation_text.value= "";	
  	document.getElementById("hint_txt").innerHTML = ""; 
  }
  
  //checks that the answer field is not empty
  function check_notEmpty()
  {
    if (document.answer.answer_text.value == null || document.answer.answer_text.value =="")
      {
  	  alert(" You have to write something first!");	
  	  //sets the focus on the answer area
          document.answer.answer_text.focus();
  	   
  	  return false; 
        }
    else
        return true;
  }