//Hilite = {};
hilite = function() {
  
    var q = document.URL;
 //   q = 'file:///C:/Users/JavaScript/Test/mha_hilite_test.htm#in+amet'
    var e = null;
    q = decodeReferrer(q);
    if (q)
   hiliteElement(document.getElementById('book'), q);
//	hiliteElement(document.corpus, q);
  };

/* Find keywords after ".htm#" */

decodeReferrer = function(referrer) {
    var query = null;
    var regex = new RegExp('');
  var re = new RegExp("^.*\.htm#(.*$)","ig");
  var arr = re.exec(referrer);
  var result = RegExp.$1
            
            if (result) {
                result = decodeURIComponent(result);
//              result = result.replace(/\'|"/g, '');
                result = result.split(/[\s,\+\.]+/);
                return result;
            }
				else {return null;}
};

/* Highlight a DOM element with a list of keywords. */

hiliteElement = function(elm, query) {
    if (!query || elm.childNodes.length == 0)
	return;

    var qre = new Array();
    for (var i = 0; i < query.length; i ++) {
        query[i] = query[i].toLowerCase();
        qre.push('\\b'+query[i]+'\\b');
         }

    qre = new RegExp(qre.join("|"), "i");

    var textproc = function(node) {
        var match = qre.exec(node.data);
        if (match) {
            var val = match[0];
            var k = '';
            var node2 = node.splitText(match.index);
            var node3 = node2.splitText(val.length);
            var span = node.ownerDocument.createElement('SPAN');
            node.parentNode.replaceChild(span, node2);
            span.className = 'hilite';            
            span.appendChild(node2);
            return span;
        } else {
            return node;
        }
    };
    walkElements(elm.childNodes[0], 1, textproc);
};

/* Highlight a HTML document using keywords extracted from document.referrer. */

walkElements = function(node, depth, textproc) {
    var skipre = /^(script|style|textarea)/i;
    var count = 0;
    while (node && depth > 0) {
        count ++;
        if (count >= 1000) {
            var handler = function() {
                walkElements(node, depth, textproc);
            };
            setTimeout(handler, 50);
            return;
        }

        if (node.nodeType == 1) { // ELEMENT_NODE
            if (!skipre.test(node.tagName) && node.childNodes.length > 0) {
                node = node.childNodes[0];
                depth ++;
                continue;
            }
        } else if (node.nodeType == 3) { // TEXT_NODE
            node = textproc(node);
        }

        if (node.nextSibling) {
            node = node.nextSibling;
        } else {
            while (depth > 0) {
                node = node.parentNode;
                depth --;
                if (node.nextSibling) {
                    node = node.nextSibling;
                    break;
                }
            }
        }
    }
};

// Trigger the highlight using the onload handler.

 
    if (window.attachEvent) {
        window.attachEvent('onload', hilite);
    } else if (window.addEventListener) {
        window.addEventListener('load', hilite, false);
    } else {
        var __onload = window.onload;
        window.onload = function() {
            hilite();
            __onload();
        };
    }

