// -*- java -*-

//
// google.js
// Google Highlighter
//
// Copyright(C)2001 - 2003
// Cal Henderson <cal@iamcal.com>
//
// Thanks to Ian Beveridge for bugfixes
//
// This code may be freely redistributed,
// providing this message remains intact.
//

// modified by swithun@swithun.servebeer.com
// to remove check for google and
// to change value name from q to query
// Sun Jan 29 18:18:15 GMT 2006

// added init_google_self
// to parse document location
// rather than referrer
// swithun@swithun.servebeer.com
// Thu Feb  9 09:24:27 GMT 2006

var google_text_color = '#000000';

var google_link_colors = new Array('#ffff66','#a0ffff','#99ff99','#ff9999','#ff66ff');

function init_google(){
	 /*	var pattern = /google\./i;
		if (pattern.exec(document.referrer) != null){*/
	 var url_parts = document.referrer.split('?');
	 if (url_parts[1]){ 
			var url_args = url_parts[1].split('&');
			for(var i=0; i<url_args.length; i++){
				 var keyval = url_args[i].split('=');
				 if (keyval[0] == 'query' || keyval[0] == 'variants'){
						go_google(decode_url(keyval[1]));
				 }
			}
			return;
	 }
	 /*	}*/
}

function init_google_self(){
	 /*	var pattern = /google\./i;
		if (pattern.exec(document.referrer) != null){*/
	 var url_parts = document.location.href.split('?');
	 if (url_parts[1]){ 
			var url_args = url_parts[1].split('&');
			for(var i=0; i<url_args.length; i++){
				 var keyval = url_args[i].split('=');
				 if (keyval[0] == 'query' || keyval[0] == 'variants'){
						go_google(decode_url(keyval[1]));
				 }
			}
			return;
	 }
	 /*	}*/
}

function decode_url(url){
	return unescape(url.replace(/\+/g,' '));
}

function go_google(terms){
	 terms = terms.replace(/\"/g,"");
	 var terms_split = terms.split('|'); // changed space to pipe
	 var c = -1;
	 var old_term = "";
	 var new_term = "";
	 for(var i=0; i<terms_split.length; i++) {
			new_term = terms_split[i].toLowerCase();
			c = (new_term == old_term) ? c : (c == google_link_colors.length-1) ? 0 : c+1;
			highlight_goolge(terms_split[i], document.body, google_link_colors[c]);
			old_term = new_term;
	 }
}

function highlight_goolge(term, container, color){
	var term_low = term;

	for(var i=0; i<container.childNodes.length; i++){
		var node = container.childNodes[i];

		if (node.nodeType == 3){
			var data = node.data;
			var data_low = data;
			if (data_low.indexOf(term_low) != -1){
				//term found!
				var new_node = document.createElement('span');
				node.parentNode.replaceChild(new_node,node);
				var result;
				while((result = data_low.indexOf(term_low)) != -1){
					new_node.appendChild(document.createTextNode(data.substr(0,result)));
					new_node.appendChild(create_node_google(document.createTextNode(data.substr(result,term.length)),color));
					data = data.substr(result + term.length);
					data_low = data_low.substr(result + term.length);
				}
				new_node.appendChild(document.createTextNode(data));
			}
		}else{
			//recurse
			highlight_goolge(term, node, color);
		}
	}
}

function create_node_google(child, color){
	var node = document.createElement('span');
	node.style.backgroundColor = color;
	node.style.color = google_text_color;
	node.appendChild(child);
	return node;
}

