function highlightSearchTerms() {
  if(document.referrer) {
    /* page has a referrer */
    //highlightRefererParameter("text");
    /*highlightRefererParameter("author");
    highlightRefererParameter("title"); */

    highlightReferrerParameters();

    // search results pages > 1 have different urls
    //highlightTermsType2();

  }
}


function highlightReferrerParameters() {
    var refURL = document.referrer.toString();

    if (refURL.indexOf("?") > 0)  {

        var arrParams = refURL.split("?");
        var arrURLParams = arrParams[1].split("&");

        var arrParamNames = new Array(arrURLParams.length);
        var arrParamValues = new Array(arrURLParams.length);

        var i = 0;
        for (i=0; i < arrURLParams.length; i++) {
            var splitParam =  arrURLParams[i].split("=");
            if (splitParam[0] == "text" || splitParam[0] == "author" || splitParam[0] == "title" || splitParam[0] == "subject") {
                splitAndHighlight(splitParam[1], "+");
            } else if (splitParam[0] == "queryString")  {
                //queryString=body:(%22maori%20AND%20people%22)&startIndex=25&pageLength=25
                splitParam[1].match(/body:\(([^\)]+)\)/);
                splitAndHighlight(RegExp.$1, "AND");

                splitParam[1].match(/name:\(([^\)]+)\)/);
                splitAndHighlight(RegExp.$1, "AND");

                splitParam[1].match(/head:\(([^\)]+)\)/);
                splitAndHighlight(RegExp.$1, "AND");

                splitParam[1].match(/subject:\(([^\)]+)\)/);
                splitAndHighlight(RegExp.$1, "AND");

            }
        }
    }

    return "";
}

function splitAndHighlight(terms, separator)  {

    // remove double and single quotes (%22 and %27)
    // Are there any other characters we want to remove ?
    // if string contains two " ", don't split 
    // text=%22those+bearing%22
    // %22maori%20AND%20people%22
    var arrTerms;
    if (terms.search(/^\%22(.*)\%22$/) != -1)  {
        var re;
        if (separator == "+")  {
            re = new RegExp(/\+/g);
        } else  {
            re = new RegExp(separator, "g");
        }
        arrTerms = new Array(terms.replace(/\%2(2|7|0)/g, "").replace(re, " "));
    } else {
        arrTerms = terms.replace(/\%2(2|7|0)/g, "").split(separator);
    }

    var i = 0;
    for (i = 0; i < arrTerms.length; i++)  {

        // don't highlight boolean operators
        //text=maori+and+people
        // probably should not highlight stop words
        var termLowerCase = arrTerms[i].toLowerCase();
        if (termLowerCase.search(/^(a|an|and|are|as|at|be|but|by|for|if|in|into|is|it|no|not|of|on|or|s|such|t|that|the|their|then|there|these|they|this|to|was|will|with)$/) == -1)  {
            //alert("highlinghiting" + termLowerCase);
            highlightTermInPage(arrTerms[i], document);
        } else  {
            //alert("not highlinghiting" + termLowerCase + "sep is " + separator);
        }
    }

}

function highlightTermInPage(term, container) {

    if (term == "")  {
        return;
    }

    var termLength = term.length;

    var termLowerCase = term.toLowerCase();
    // ? = %3f
    termLowerCase = termLowerCase.replace(/\%3f/, "[a-zA-Z]?");
    termLowerCase = termLowerCase.replace(/\*$/, "[a-zA-Z]*");

    // ? changed to %3f, need to subtract 2 to length
    if (term.search("%3F") != -1)  {
        termLength = termLength - 2;
    }

    for(var i=0; i < container.childNodes.length; i++) {
        var node = container.childNodes[i];
        if (node.nodeType == 3)  {
            var data = node.data;
            var dataLowerCase = data.toLowerCase();

            if (dataLowerCase.search("\\b" + termLowerCase + "\\b") != -1)  {
                
                var newNode = document.createElement('span');
                node.parentNode.replaceChild(newNode,node);
                var result;
                while((result = dataLowerCase.search("\\b" + termLowerCase + "\\b")) != -1)  {
                    newNode.appendChild(document.createTextNode(data.substr(0,result)));
                    newNode.appendChild(createHighlightedTerm(document.createTextNode(data.substr(result,termLength))));
                    data = data.substr(result + termLength);
                    dataLowerCase = dataLowerCase.substr(result + termLength);
                }
                newNode.appendChild(document.createTextNode(data));
            }
        }  else  {
            highlightTermInPage(term, node);
        }
    }
}

function createHighlightedTerm(attachToNode)  {
    var node = document.createElement('span');
    node.className = "highlightedTerm";
    node.appendChild(attachToNode);
    return node;
}
