function hl_text(container_id,dict) {
	var el = document.getElementById(container_id);
	if(!el)
		return;
	var re_array = [];
	for( x in dict) {
		var re_dict = {};
		re_dict['pattern']=RegExp(x+"([ .,:])","gi");
		re_dict['replacement']='<a href="' + dict[x] + '" target="_blank" >' +x+"</a>$1";
		re_array.push(re_dict);
	}
	_hl(el,re_array);
	
}

function gettext(el) {
	if(el.textContent)
		return el.textContent;
	if(el.nodeValue)
		return el.nodeValue;
}
function settext(el,value) {
	if(!el.parentNode) {
		return;
	}

	var new_el = document.createElement("span");
	var pnode = el.parentNode;
	new_el.innerHTML=value;
	pnode.replaceChild(new_el,el);
	return;
	if(el.textContent)
		return el.textContent=value;
	if(el.nodeValue)
		return el.nodeValue = value;
}

function _hl(el,re_array) {
	for(var i=0; i<el.childNodes.length;i++) {
		var inner_el = el.childNodes[i];
		if(inner_el.nodeType== 3/*Node.TEXT_NODE */) {
			//console.log("///////////////////////");
			//console.log(inner_el);
			var nodeText = gettext(inner_el);
			for(var j=0;j<re_array.length;j++) {
				if(gettext(inner_el)!='\n'){
						nodeText = nodeText.replace(re_array[j]['pattern'] ,re_array[j]['replacement'])
				}
			}
			settext(inner_el,nodeText);
		};
		if(inner_el.nodeType== 1 /*Node.ELEMENT_NODE */ ) {
			//! FIXME: if we need capitalized version here ?
			//console.log(inner_el.tagName );
			if((inner_el.tagName !='a') && (inner_el.tagName !='A'))
				_hl(inner_el,re_array);
		};
	}
}
