function doHighlight(bodyText, searchTerm, highlightStartTag, highlightEndTag) {
  // the highlightStartTag and highlightEndTag parameters are optional
  if ((!highlightStartTag) || (!highlightEndTag)) {
    highlightStartTag = "<span class='xmlhighlight'>";
    highlightEndTag = "</span>";
  }

  var newText = "";
  var i = -1;
  var wildcard = "";
  var lcSearchTerm = searchTerm.toLowerCase();
  if (lcSearchTerm.substr(lcSearchTerm.length -1, 1) == "*") {
    wildcard = "*";
    lcSearchTerm = lcSearchTerm.substr(0, lcSearchTerm.length -1);
  }
  var lcBodyText = bodyText.toLowerCase();

  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)) {
          if ((bodyText.substring(i-1,i) == " ") || (bodyText.substring(i-1,i) == ">") || (bodyText.substring(i-1,i) == "(") || (bodyText.substring(i-1,i) == "-")) {
            var nextChar = bodyText.substring(i + lcSearchTerm.length, i + lcSearchTerm.length + 1);
            if ((nextChar == " ") || (nextChar == ",") || (nextChar == ".") || (nextChar == "<") || (nextChar == ")") || (nextChar == "-") || (wildcard == "*") || (nextChar == "!") || (nextChar == ";")) {
              newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, lcSearchTerm.length) + highlightEndTag;
              bodyText = bodyText.substr(i + lcSearchTerm.length);
              lcBodyText = bodyText.toLowerCase();
              i = -1;
            }
          }
        }
      }
    }
  }

  return newText;
}

function highlightSearchTerms(searchText, treatAsPhrase, highlightStartTag, highlightEndTag) {
  if (treatAsPhrase || searchText.indexOf("\"") > -1) {
    searchArray = [searchText.replace("\"","","g")];
  } else {
    searchArray = searchText.split(" ");
  }

  var bodyText = $("#page").html();
  for (var i = 0; i < searchArray.length; i++) {
      if(searchArray[i] != "") {
          bodyText = doHighlight(bodyText, searchArray[i], highlightStartTag, highlightEndTag);
      }
  }

  $("#page").html(bodyText);
  return true;
}
