
CMS.define('CMS_Highlighter',{initialize:function()
{this.foundCount=0;this.highlights={};},highlight:function(node,terms)
{if(!node)
{return;}
var tt=new Array();if(!typeof terms=='Array')
{return;}
for(var i=0,len=terms.length;i<len;i++)
{var t={term:terms[i],pattern:new RegExp(terms[i],'i'),CSS_CLASS_PREFIX:'highlight',found:false};tt.push(t);this.highlightTerm($(node),t);}
this.highlights[node.id]=tt;},highlightTerm:function(node,term)
{if(node.nodeType==1)
{if(node.getAttribute("sth_x")==term.term)return;else node.setAttribute("sth_x",term.term);}
if(node.hasChildNodes())
{for(var i=0,len=node.childNodes.length;i<len;i++)
{this.highlightTerm(node.childNodes[i],term);}}
if(node.nodeType==3)
{var p=node.parentNode;if(p.nodeName!='TEXTAREA'&&p.nodeName!='SCRIPT'&&p.className.substr(0,term.CSS_CLASS_PREFIX.length)!=term.CSS_CLASS_PREFIX)
{var result=term.pattern.exec(node.nodeValue);if(result!=null)
{term.found=true;this.foundCount++;var v=node.nodeValue;var lt=document.createTextNode(v.substr(0,result.index));var rt=document.createTextNode(v.substr(result.index+result[0].length));var span=new Element('SPAN',{'class':term.CSS_CLASS_PREFIX});span.appendChild(document.createTextNode(result[0]));p.insertBefore(lt,node);p.insertBefore(span,node);p.replaceChild(rt,node);}}}}});CMS.create('CMS_Highlighter');
