function keywordNoteProcess(modules,groups,oId)
{
    this.Modules = modules;
    this.Groups = groups;
    this.OID = oId;
    this.process=function()
    {
        var oNoteArrayObject={};
        if(this.Groups!=null && this.Groups!="")
        {
            var groupIds = this.Groups.split(" ");
            for(var i =0;i<groupIds.length;i++)
            {
                try
                {
                    var groupArray = eval("keywordsNoteArray"+groupIds[i]);
                    for(var obj in groupArray)
                    {
                        oNoteArrayObject[obj] = groupArray[obj];
                    }
                }
                catch(e)
                {
                    return;
                }
                
            }
        }
        else
        {
            try
            {
                oNoteArrayObject = eval("keywordsNoteArray");
            }
            catch(e)
            {
                return;
            }
            
        }
        if(oNoteArrayObject == null) return;
        this.NoteArrayObject = oNoteArrayObject;
        var moduleIds = this.Modules.split(" ");
        for(var i =0;i<moduleIds.length;i++)
        {
            keywordNoteProcess.addNote(moduleIds[i],this.NoteArrayObject,this.OID);
        }
    }
    this.showNoteContainer=function(evt,keyword)
    {
        if(!keywordNoteProcess.NoteContainer)
        {
            keywordNoteProcess.NoteContainer = document.createElement("SPAN");
            keywordNoteProcess.NoteContainer.id = "NoteContainer";
            keywordNoteProcess.NoteContainer.className = "KeyWordsNoteContainer";
            //document.forms[0].appendChild(oNoteContainer);
            //keywordNoteProcess.NoteContainer = document.getElementById("NoteContainer");
        }
        var myEvent = evt?evt:(window.event?window.event:null);
        var eventSrc = myEvent.srcElement?myEvent.srcElement:myEvent.target;
        while(eventSrc.className != "KeyWordsNoteSpan" && eventSrc.id != "NoteContainer" && eventSrc.parentNode) eventSrc = eventSrc.parentNode;
        
        if(eventSrc.className == "KeyWordsNoteSpan")
        {
            if(!keywordNoteProcess.NoteContainer.parentNode || eventSrc != keywordNoteProcess.NoteContainer.parentNode)
            {
                if(keywordNoteProcess.NoteContainer.parentNode) keywordNoteProcess.NoteContainer.parentNode.removeChild(keywordNoteProcess.NoteContainer);
			    try
			    {
				    keywordNoteProcess.NoteContainer.innerHTML = this.NoteArrayObject[keyword].dt;				
			    }
			    catch (e)
			    {
				    keywordNoteProcess.NoteContainer.innerHTML = "";
				    var ofragement = document.createElement("DIV");
				    ofragement.innerHTML = this.NoteArrayObject[keyword].dt;
				    for(var i = 0;i<ofragement.childNodes.length;i++)
				    {
					    keywordNoteProcess.NoteContainer.appendChild(ofragement.childNodes[i]);
				    }
				    ofragement = null;
			    }
                eventSrc.appendChild(keywordNoteProcess.NoteContainer);
            }
            var myX = myEvent.x ? myEvent.x : myEvent.pageX; 
            var myY = myEvent.y ? myEvent.y : myEvent.pageY;
            if(navigator.userAgent.toLowerCase().indexOf("msie")!=-1)
            {
                keywordNoteProcess.NoteContainer.style.left = myX -1 + document.body.scrollLeft + "px";
                keywordNoteProcess.NoteContainer.style.top = myY -1 + document.body.scrollTop + "px";
            }
            else
            {
                //keywordNoteProcess.NoteContainer.style.left = myX + "px";
                keywordNoteProcess.NoteContainer.style.top = myY + "px";                
            }	
            keywordNoteProcess.NoteContainer.style.display = '';
        }
        else if(eventSrc.id == "NoteContainer")
        { 
            myEvent.cancelBubble = true;
            myEvent.returnValue = false;
            keywordNoteProcess.NoteContainer.style.display = '';            
        }
    }
}
keywordNoteProcess.addNote=function(moduleId,groups,oId)
{
    var sClientZoneId = "ess_ctr"+moduleId+"_ModuleContent";
    var oClientZoneElement = document.getElementById(sClientZoneId);
    if(oClientZoneElement == null) return;
    keywordNoteProcess.addNoteByDom(oClientZoneElement,groups,oId);        
}
keywordNoteProcess.addNoteByDom=function(oEle,groups,oId)
{
    for(var i = 0;i<oEle.childNodes.length;i++)
    {
        var oNode = oEle.childNodes[i];
        if(oNode.nodeType==3 && /\S/.test(oNode.nodeValue))
        {
			var hasKeyword = false;
			var newHtml = oNode.nodeValue;
            for(var objNote in groups)
            {
                if(!groups[objNote].noteCount && oNode.nodeValue.indexOf(objNote) != -1)
                {
					var replaceBy;
					if(groups[objNote].nt == 1)
					{                             
						replaceBy = "<span class=\"KeyWordsNoteSpan\" onmouseout=\"javascript:keywordNoteProcess.hideNoteContainer()\" onmouseover=\"javascript:"+oId+".showNoteContainer(event,'"+objNote+"')\">"+objNote+"</span>";
					}
					else if(groups[objNote].nt == 2)
					{
						replaceBy = "<a class=\"KeyWordsNoteA\" target=\"_blank\" href=\""+groups[objNote].dt+"\">"+objNote+"</a>";
					}
					newHtml = newHtml.replace(objNote,replaceBy);
					groups[objNote].noteCount = 1;
					hasKeyword = true;
			    }
			}
			if(hasKeyword)
			{
				var newNode = document.createElement("SPAN");
				newNode.innerHTML = newHtml;
				oEle.insertBefore(newNode,oNode);
				oEle.removeChild(oNode);
			}
        }
        else if(oNode.nodeType==1 && oNode.hasChildNodes && 
        (oNode.tagName=="DIV" || oNode.tagName=="SPAN" || oNode.tagName=="P" 
		|| oNode.tagName=="TABLE" || oNode.tagName=="TBODY" || oNode.tagName=="TR" || oNode.tagName=="TD"
        || oNode.tagName=="UL" || oNode.tagName=="OL" || oNode.tagName=="LI"
		|| oNode.tagName=="FONT" || oNode.tagName=="STRONG" || oNode.tagName=="CENTER" || oNode.tagName=="B" || oNode.tagName=="PRE" || oNode.tagName=="EM" || oNode.tagName=="BIG" || oNode.tagName=="SMALL"
		|| oNode.tagName=="Q" || oNode.tagName=="CODE" || oNode.tagName=="CITE" || oNode.tagName=="BLOCKQUOTE"))
        {
            keywordNoteProcess.addNoteByDom(oNode,groups,oId);
        }
    }
}

keywordNoteProcess.hideNoteContainer=function()
{
    if(keywordNoteProcess.NoteContainer)
    {
        keywordNoteProcess.NoteContainer.style.display = 'none';
    }
}

