// 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.
// slightly modified by steelpandrummer 2004

var google_text_color = '#000000';

var google_link_colors = new Array('#ffff66','#99ffff','#99ff99','#ff9999','#ff66ff','#990000','#009900');

function init_google(){
	if(!document.createElement)
		return;
	var url_parts = document.referrer.split('?');
	var ss = '';
	if((typeof parent.frames[0]) != 'undefined') {
		if(typeof parent.frames[0].document.forms[0] != 'undefined')
			if(typeof parent.frames[0].document.forms[0]['_search_'] != 'undefined')
				ss = parent.frames[0].document.forms[0]['_search_'].value;
	}
	else if((typeof document.forms[0]) != 'undefined')
		if(typeof document.forms[0]['_search_'] != 'undefined')
			ss = document.forms[0]['_search_'].value;
	if(ss != '') url_parts[1] = 'q=' + escape(ss.replace(/\"/g,''));
	if (url_parts[1]){
		var url_args = url_parts[1].split('&');
		for(var i in url_args){
			var keyval = url_args[i].split('=');
			if (keyval[0] == 'q' || keyval[0] == 'as_q' || keyval[0] == 'p' || keyval[0] == 'text'){
				go_google(decode_url(keyval[1]));
				return;
			}
		}
	}
}

function decode_url(url){
	return unescape(url.replace(/\+/g,' '));
}

function go_google(terms){
	terms = terms.replace(/[\"\'\[\]]/g,'');	// phrases and brackets
	terms = terms.replace(/(\s)[\+\-]/g,'$1');	// '+' && '-' preceeded by space
	var terms_split = terms.split(' ');
	var c = 0;
	for(var i in terms_split){
		highlight_google(terms_split[i], document.body,google_link_colors[c]);
		c = (c == google_link_colors.length-1)? 0 : c + 1;
	}
}

function highlight_google(term, container, color){
	var term_low = term.toLowerCase();
	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.toLowerCase();
			if (data_low.indexOf(term_low) != -1){
				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 {
			highlight_google(term, node, color);	/*recurse*/
		}
	}
}

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;
}
