/* http://www.kryogenix.org/code/browser/searchhi/
   Modified 20021006 to fix query string parsing and add case insensitivity
   Modified 20041114 to add more search engines by RAF
   Modified 20041116 to add hint text by RAF
   Modified 20050209 to add remove highlighting by RAF */   

function highlightWord(node,word) {
	// Iterate into this nodes childNodes
	if (node.hasChildNodes) {
		var hi_cn;
		for (hi_cn=0;hi_cn<node.childNodes.length;hi_cn++) {
			highlightWord(node.childNodes[hi_cn],word);
		}
	}

	// And do this node itself
	if (node.nodeType == 3) { // text node
		tempNodeVal = node.nodeValue.toLowerCase();
		tempWordVal = word.toLowerCase();
		if (tempNodeVal.indexOf(tempWordVal) != -1) {
			pn = node.parentNode;
			if (pn.className != "searchword") {
				// word has not already been highlighted!
				nv = node.nodeValue;
				ni = tempNodeVal.indexOf(tempWordVal);
				// Create a load of replacement nodes
				before = document.createTextNode(nv.substr(0,ni));
				docWordVal = nv.substr(ni,word.length);
				after = document.createTextNode(nv.substr(ni+word.length));
				hiwordtext = document.createTextNode(docWordVal);
				hiword = document.createElement("span");
				hiword.className = "searchword";
				hiword.appendChild(hiwordtext);
				pn.insertBefore(before,node);
				pn.insertBefore(hiword,node);
				pn.insertBefore(after,node);
				pn.removeChild(node);
			}
		}
	}
}

function googleSearchHighlight() {
	if (!document.createElement) return;
	ref = document.referrer;
	if (ref.indexOf('?') == -1) return;

    hint = "Your search terms have been highlighted:";
    hint2 = " &nbsp;&nbsp;&nbsp;[ <a href=\"" + this.location + "\">remove highlighting</a> ]"
    
	if (ref.indexOf('yaccess.') != -1) {
        qs = ref.substr(ref.indexOf('&')+1);
        qsa = qs.split('&');
        for (i=0;i<qsa.length;i++) {
            qsip = qsa[i].split('=');
            if (qsip.length == 5) continue;
            if (qsip[0] == 'terms') {
            words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);
                    for (w=0;w<words.length;w++) {
                        highlightWord(document.getElementsByTagName("body")[0],words[w]);
                        hint = hint + " <span class=\"searchword\">" + words[w] + "</span>";
                    }
            hint = hint + hint2        
            if (document.getElementById('hints'))
             	document.getElementById('hints').innerHTML = hint;
            }
        }
    return;
	}

    if (ref.indexOf('google.') != -1
    	|| ref.indexOf('msn.') != -1
    	|| ref.indexOf('teoma.') != -1
    	|| ref.indexOf('aol.') != -1
    	|| ref.indexOf('altavista.') != -1
    	|| ref.indexOf('alltheweb.') != -1
    	|| ref.indexOf('fireball.') != -1) {
        qs = ref.substr(ref.indexOf('?')+1);
        qsa = qs.split('&');
        for (i=0;i<qsa.length;i++) {
            qsip = qsa[i].split('=');
            if (qsip.length == 1) continue;
            if (qsip[0] == 'q') {
            words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);
                    for (w=0;w<words.length;w++) {
                        highlightWord(document.getElementsByTagName("body")[0],words[w]);
                        hint = hint + " <span class=\"searchword\">" + words[w] + "</span>";
                    }
            hint = hint + hint2        
            if (document.getElementById('hints'))
             	document.getElementById('hints').innerHTML = hint;
            }
        }
    return;
	}

	if (ref.indexOf('yahoo.') != -1) {
        qs = ref.substr(ref.indexOf('?')+1);
        qsa = qs.split('&');
        for (i=0;i<qsa.length;i++) {
            qsip = qsa[i].split('=');
            if (qsip.length == 1) continue;
            if (qsip[0] == 'p') {
            words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);
                    for (w=0;w<words.length;w++) {
                        highlightWord(document.getElementsByTagName("body")[0],words[w]);
                        hint = hint + " <span class=\"searchword\">" + words[w] + "</span>";
                    }
            hint = hint + hint2        
            if (document.getElementById('hints'))
             	document.getElementById('hints').innerHTML = hint;
            }
        }
    return;
	}

	if (ref.indexOf('lycos.') != -1
	    || ref.indexOf('hotbot.') != -1) {
        qs = ref.substr(ref.indexOf('?')+1);
        qsa = qs.split('&');
        for (i=0;i<qsa.length;i++) {
            qsip = qsa[i].split('=');
            if (qsip.length == 5) continue;
            if (qsip[0] == 'query') {
            words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);
                    for (w=0;w<words.length;w++) {
                        highlightWord(document.getElementsByTagName("body")[0],words[w]);
                        hint = hint + " <span class=\"searchword\">" + words[w] + "</span>";
                    }
            hint = hint + hint2        
            if (document.getElementById('hints'))
             	document.getElementById('hints').innerHTML = hint;
            }
        }
    return;
	}
}

window.onload = googleSearchHighlight;
