function markKeyword(element, keyword)
{
	var child = element.firstChild;
	while (child) {
		if (child.nodeType == 3) { // Node.TEXT_NODE
			from = child.data.indexOf(keyword);
			if (0 <= from) {
				child.splitText(from + keyword.length);
				child.splitText(from);
				bolded = document.createElement("span");
				bolded.setAttribute("class", "hits");
				bolded.appendChild(document.createTextNode(keyword));
				child.parentNode.replaceChild(bolded, child.nextSibling);
				child = child.nextSibling;
			}
		} else if (child.nodeType == 1) {	// Node.NODE_ELEMENT
			if (child.hasChildNodes()) {
				markKeyword(child, keyword);
			}
		}
		child = child.nextSibling;
	}
}

function hiliteDOM1()
{
	if (parent.keywords.length == 0) return;
	var keys = parent.keywords;
	var divs = document.getElementsByTagName("div");
	var divChild;
	for (i=0; i<divs.length; i++) {
		if ((divs.item(i).className != "honmon") 
			&& (divs.item(i).className != "zuhyomei")) continue;
		for (k=0; k<keys.length; k++) {
			if (keys[k] != "") {
				markKeyword(divs.item(i), keys[k]);
			}
		}
	}
	parent.keywords = [];
}

function hiliteIE()
{
	var keys = parent.keywords;
	var keyCount = keys.length;
	var checked = new Array(keyCount);
	var changed = new Array(keyCount);
	for (i=0;i<keyCount;i++){
		checked[i] = new RegExp(keys[i], "g");
		changed[i] = "<span class=\"hits\">" + keys[i] + "</span>";
	}
	var divs = document.all.tags("div");
	for (d=0; d < divs.length; d++) {
		var cls = divs[d].className;
		if (cls == "honmon" || cls == "zuhyomei") {
			var wp = divs[d].innerHTML;
			var strs = new Array(keyCount+1);
			strs[0] = wp;
				
			for ( i = 0; i < keyCount; i++ ){
				var str = "";
				var flg = 0;
				strs[i+1] = "";

				var s_pos = strs[i].indexOf(">")+1;
				var e_pos = strs[i].indexOf("<", s_pos-1 );

				if ( strs[i].indexOf("<") != 0 ){
					str = strs[i].substring( 0, strs[i].indexOf("<"));
					str = str.replace( checked[i], changed[i] );
				}

				strs[i+1] += str;
				strs[i+1] += strs[i].substring( strs[i].indexOf("<"), s_pos );

				while( flg == 0 && e_pos != -1){
					str = strs[i].substring( s_pos, e_pos );
					str = str.replace( checked[i], changed[i] );

					s_pos = strs[i].indexOf(">", e_pos )+1;

					strs[i+1] += str;
					strs[i+1] += strs[i].substring( e_pos, s_pos );

					e_pos = strs[i].indexOf("<", s_pos);
					if( e_pos < 0 ){
						flg = 1;
					}
				}

				if ( s_pos < strs[i].length ){
					str = strs[i].substring( s_pos, strs[i].length );
					strs[i+1] += str.replace( checked[i], changed[i] );
				}
			}
			divs[d].innerHTML = strs[keyCount];
			for(i=0;i<keyCount;i++)
				strs[i] = "";
		}
	}
}

function hiliteNN()
{
	//	search.html
}

if (parent && parent.keywords) {

	if (document.all) {
		window.onload = hiliteIE;
		//window.onload = hiliteDOM1;
	} else if (document.getElementsByTagName) {
		window.onload = hiliteDOM1;
	} else if (document.layers) {
		//window.onload = hiliteNN;
	} else {
	}
}

