/*
 * This is the function that actually highlights a text string by
 * adding HTML tags before and after all occurrences of the search
 * term. You can pass your own tags if you'd like, or if the
 * highlightStartTag or highlightEndTag parameters are omitted or
 * are empty strings then the default <font> tags will be used.
 */
function doHighlight(bodyText, searchTerm, highlightStartTag, highlightEndTag) 
{
  // the highlightStartTag and highlightEndTag parameters are optional
  if ((!highlightStartTag) || (!highlightEndTag)) {
    highlightStartTag = "<font style='color:blue; background-color:yellow;'>";
    highlightEndTag = "</font>";
  }
  
  // find all occurences of the search term in the given text,
  // and add some "highlight" tags to them (we're not using a
  // regular expression search, because we want to filter out
  // matches that occur within HTML tags and script blocks, so
  // we have to do a little extra validation)
  var newText = "";
  var i = -1;
  //var lcSearchTerm = searchTerm.toLowerCase();
  //var lcBodyText = bodyText.toLowerCase();
  var lcSearchTerm = searchTerm;
  var lcBodyText = bodyText;
  
  while (bodyText.length > 0) {
    i = lcBodyText.indexOf(lcSearchTerm, i+1);
    if (i < 0) {
      newText += bodyText;
      bodyText = "";
    } else {
      // skip anything inside an HTML tag
      if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i)) {
        // skip anything inside a <script> block
        if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i)) {
          newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, searchTerm.length) + highlightEndTag;
          bodyText = bodyText.substr(i + searchTerm.length);
          lcBodyText = bodyText.toLowerCase();
          i = -1;
        }
      }
    }
  }
  
  return newText;
}


/*
 * This is sort of a wrapper function to the doHighlight function.
 * It takes the searchText that you pass, optionally splits it into
 * separate words, and transforms the text on the current web page.
 * Only the "searchText" parameter is required; all other parameters
 * are optional and can be omitted.
 */
function highlightSearchTerms(warnOnFailure)
{
  // if the treatAsPhrase parameter is true, then we should search for 
  // the entire phrase that was entered; otherwise, we will split the
  // search string so that each word is searched for and highlighted
  // individually
  //if (treatAsPhrase) {
    searchText = "congenital heart disease~catheter procedure~therapeutic cardiac catheterisation~reintervention";
    
    highlightStartTag = "<a title='Congenital Heart Disease: refers to any defect of the heart present from birth'>~ \
<a title='Catheter Procedure: refers to any procedure in which a long, thin flexible plastic tube (Catheter) is inserted into the body. Catheter procedures can both diagnose and treat heart and blood vessel conditions.'>~ \
<a title='Theraputic Cardiac Catheterisation: a procedure performed to treat heart defects using special techniques in which a thin tube or catheter is placed into the heart from blood vessels in the leg or neck. These procedures allow repairs to be done without surgically opening the chest and heart.'>~\
<a title='Reintervention: refers to performing additional procedures to prevent serious injury or correct complications from a previous procedure.'>";

    highlightEndTag = "</a>"
  //} else {
   searchArray = searchText.split("~");
   highlightArray =highlightStartTag.split("~");
  //}
  
  if (!document.body || typeof(document.body.innerHTML) == "undefined") {
    if (warnOnFailure) {
      alert("Sorry, for some reason the text of this page is unavailable. Searching will not work.");
    }
    return false;
  }
  
  var bodyText = document.body.innerHTML;
  for (var i = 0; i < searchArray.length; i++) {
    bodyText = doHighlight(bodyText, searchArray[i], highlightArray[i], highlightEndTag);
  }
  
  document.body.innerHTML = bodyText;
  return true;
}
