--- /dev/null
+var gsSK2=null;\r
+var gsSK=null;\r
+var gsFtsBreakChars="\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\x85\x92\x93\x94\x95\x96\x97\x99\xA9\xAE\xB7";\r
+var gnCLF=0;\r
+var gsHelpCannotSearch="Cannot search for that phrase.";\r
+var gsNoTopics="No Topics Found.";\r
+var gsLoadingDivID="LoadingDiv";\r
+var gsLoadingMsg="Loading data, please wait...";\r
+var gsSearchMsg="Searching...";\r
+var gsResultDivID="ResultDiv";\r
+var gaaFCD=new Array();\r
+var gaaFTCD=new Array();\r
+var goCF=null;\r
+var goCTF=null;\r
+var gaTI=null;\r
+var gnCurrentOp=0;\r
+var gbNot=false;\r
+var gbReady=false;\r
+var gnLoadFts=1;\r
+var gnCacheLimits=5;\r
+var gaCCD=new Array();\r
+var gbXML=false;\r
+var gaData=new Array();\r
+var gsBgColor="#ffffff";\r
+var gsBgImage="";\r
+var gsMargin="0pt";\r
+var gsIndent="0pt";\r
+var gsCheckKey=null;\r
+var gnIndexNum=0;\r
+var gaFtsContentsCon=null;\r
+var gaTopicCheckInfo=null;\r
+var gnTopicCheck=0;\r
+var goFont=null;\r
+var goErrFont=null;\r
+var goHoverFont=null;\r
+var gsABgColor="#cccccc";\r
+var gbWhFHost=false;\r
+\r
+function setBackground(sBgImage)\r
+{\r
+ gsBgImage=sBgImage;\r
+}\r
+\r
+function setBackgroundcolor(sBgColor)\r
+{\r
+ gsBgColor=sBgColor;\r
+}\r
+\r
+function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
+{\r
+ var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
+ if(sType=="Normal")\r
+ goFont=vFont;\r
+ else if(sType=="Error")\r
+ goErrFont=vFont;\r
+ else if(sType=="Hover")\r
+ goHoverFont=vFont;\r
+}\r
+\r
+function setActiveBgColor(sBgColor)\r
+{\r
+ gsABgColor=sBgColor;\r
+}\r
+\r
+function setMargin(sMargin)\r
+{\r
+ gsMargin=sMargin;\r
+}\r
+\r
+function setIndent(sIndent)\r
+{\r
+ gsIndent=sIndent;\r
+}\r
+\r
+function updateCache(oCF)\r
+{\r
+ var len=gaCCD.length;\r
+ if(len<gnCacheLimits*gnCLF)\r
+ gaCCD[len]=oCF;\r
+ else{\r
+ gaCCD[0].aTopics=null;\r
+ gaCCD[0].aFtsKeys=null;\r
+ removeItemFromArray(gaCCD,0);\r
+ gaCCD[len-1]=oCF;\r
+ }\r
+}\r
+\r
+function addFtsInfo(sPPath,sDPath,sFtsFile)\r
+{\r
+ gaData[gaData.length]=new ftsInfo(sPPath,sDPath,sFtsFile);\r
+}\r
+\r
+function putDataXML(xmlDoc,sDocPath)\r
+{\r
+ if(gnLoadFts==1)\r
+ {\r
+ var node=xmlDoc.lastChild;\r
+ if(node)\r
+ {\r
+ var oChild=node.firstChild;\r
+ var aFCD=new Array();\r
+ var aFTCD=new Array();\r
+ while(oChild)\r
+ {\r
+ if(oChild.nodeName=="chunkinfo")\r
+ {\r
+ var sURL=oChild.getAttribute("url");\r
+ var sFirst=oChild.getAttribute("first");\r
+ var sLast=oChild.getAttribute("last");\r
+ if(sURL&&sFirst&&sLast)\r
+ {\r
+ item=new Object();\r
+ item.sStartKey=sFirst;\r
+ item.sEndKey=sLast;\r
+ item.sFileName=sURL;\r
+ aFCD[aFCD.length]=item;\r
+ }\r
+ }\r
+ else if(oChild.nodeName=="tchunkinfo")\r
+ {\r
+ var sURL=oChild.getAttribute("url");\r
+ var nB=parseInt(oChild.getAttribute("first"));\r
+ var nE=parseInt(oChild.getAttribute("last"));\r
+ if(sURL&&sFirst&&sLast)\r
+ {\r
+ item=new Object();\r
+ item.nBegin=nB;\r
+ item.nEnd=nE;\r
+ item.sFileName=sURL;\r
+ aFTCD[aFTCD.length]=item;\r
+ }\r
+\r
+ }\r
+ oChild=oChild.nextSibling;\r
+ }\r
+ ftsReady(aFCD,aFTCD);\r
+ }\r
+ }\r
+ else if(gnLoadFts==3)\r
+ {\r
+ var node=xmlDoc.lastChild;\r
+ if(node)\r
+ {\r
+ var oChild=node.firstChild;\r
+ var aTopics=new Array();\r
+ while(oChild)\r
+ {\r
+ if(oChild.nodeName=="topic")\r
+ {\r
+ var name=oChild.getAttribute("name");\r
+ var sURL=oChild.getAttribute("url");\r
+ if(name&&name.length>0&&sURL)\r
+ {\r
+ var topic=new Object();\r
+ topic.sTopicTitle=name;\r
+ topic.sTopicURL=sURL;\r
+ aTopics[aTopics.length]=topic;\r
+ }\r
+ }\r
+ oChild=oChild.nextSibling;\r
+ }\r
+ putFtsTData(aTopics);\r
+ }\r
+ }\r
+ else if(gnLoadFts==2)\r
+ {\r
+ var node=xmlDoc.lastChild;\r
+ if(node)\r
+ {\r
+ var oChild=node.firstChild;\r
+ var aFtsContents=new Array();\r
+ while(oChild)\r
+ {\r
+ if(oChild.nodeName=="key")\r
+ {\r
+ var name=oChild.getAttribute("name");\r
+ if(name&&name.length>0)\r
+ {\r
+ var item=new Object();\r
+ item.sItemName=name;\r
+ aFtsContents[aFtsContents.length]=item;\r
+ var oChildChild=oChild.firstChild;\r
+ while(oChildChild)\r
+ {\r
+ if(oChildChild.nodeName=="#text")\r
+ {\r
+ var sIDs=oChildChild.nodeValue;\r
+ if(sIDs)\r
+ {\r
+ var nBPos=0;\r
+ do\r
+ {\r
+ var nPos=sIDs.indexOf(",",nBPos);\r
+ var sID=null;\r
+ if(nPos!=-1)\r
+ sID=sIDs.substring(nBPos,nPos);\r
+ else\r
+ sID=sIDs.substring(nBPos);\r
+\r
+ if(sID)\r
+ {\r
+ var id=parseInt(sID);\r
+ if(!isNaN(id))\r
+ {\r
+ if(!item.aTopics)\r
+ item.aTopics=new Array();\r
+ item.aTopics[item.aTopics.length]=id;\r
+ }\r
+ }\r
+ nBPos=nPos+1;\r
+ }while(nBPos!=0&&nBPos<sIDs.length);\r
+ }\r
+ }\r
+ oChildChild=oChildChild.nextSibling;\r
+ }\r
+ }\r
+ }\r
+ oChild=oChild.nextSibling;\r
+ }\r
+ putFtsWData(aFtsContents);\r
+ }\r
+ }\r
+}\r
+\r
+function ftsInfo(sPPath,sDPath,sFtsFile)\r
+{\r
+ this.sPPath=sPPath;\r
+ this.sDPath=sDPath;\r
+ this.sFtsFile=sFtsFile;\r
+}\r
+\r
+function window_OnLoad()\r
+{\r
+ if(gsBgImage&&gsBgImage.length>0)\r
+ {\r
+ document.body.background=gsBgImage;\r
+ }\r
+ if(gsBgColor&&gsBgColor.length>0)\r
+ {\r
+ document.body.bgColor=gsBgColor;\r
+ }\r
+ writeResultDiv();\r
+ loadFts();\r
+ var oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null)\r
+ SendMessage(oMsg);\r
+}\r
+\r
+function writeResultDiv()\r
+{\r
+ var sHTML="<div id=\""+gsResultDivID+"\" style=\"POSITION:absolute;\"></div>";\r
+ document.body.insertAdjacentHTML("beforeEnd",sHTML);\r
+}\r
+\r
+function loadFts()\r
+{\r
+ if(!gbReady)\r
+ {\r
+ var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);\r
+ if(SendMessage(oResMsg)&&oResMsg.oParam)\r
+ {\r
+ gbReady=true;\r
+ var oProj=oResMsg.oParam;\r
+ var aProj=oProj.aProj;\r
+ gbXML=oProj.bXML;\r
+ if(aProj.length>0)\r
+ {\r
+ var sLangId=aProj[0].sLangId;\r
+ for(var i=0;i<aProj.length;i++)\r
+ {\r
+ if(aProj[i].sFts!=null&&aProj[i].sFts!=""&&aProj[i].sLangId==sLangId)\r
+ {\r
+ addFtsInfo(aProj[i].sPPath,aProj[i].sDPath,aProj[i].sFts);\r
+ }\r
+ }\r
+ }\r
+ loadFD();\r
+\r
+ } \r
+ }\r
+}\r
+\r
+function loadFD()\r
+{\r
+ if(gnCLF<gaData.length)\r
+ {\r
+ gnLoadFts=1;\r
+ loadData2(gaData[gnCLF].sPPath+gaData[gnCLF].sDPath+gaData[gnCLF].sFtsFile);\r
+ }\r
+ else \r
+ {\r
+ var oMsg = new whMessage(WH_MSG_BACKUPSEARCH, this, 1, null);\r
+ if (SendMessage(oMsg))\r
+ {\r
+ if (oMsg.oParam)\r
+ {\r
+ gsSK=oMsg.oParam.toLowerCase();\r
+ findFTSKey();\r
+ }\r
+ }\r
+ RegisterListener2(this, WH_MSG_SEARCHFTSKEY);\r
+ }\r
+}\r
+\r
+function loadData2(sFile)\r
+{\r
+ if(gbXML)\r
+ loadDataXML(sFile);\r
+ else\r
+ loadData(sFile);\r
+}\r
+\r
+function findFTSKey()\r
+{\r
+ gaTI=new Array();\r
+ gnCurrentOp=0;\r
+ gbNot=false;\r
+ displayMsg(gsSearchMsg);\r
+ if(gsSK!="")\r
+ findOneKey();\r
+}\r
+\r
+function findOneKey()\r
+{\r
+ if(gsSK && gsSK!="")\r
+ {\r
+ var sInput=gsSK;\r
+ var sCW="";\r
+ var nS=-1;\r
+ var nSep=-1;\r
+ for(var nChar=0;nChar<gsFtsBreakChars.length;nChar++){\r
+ var nFound=sInput.indexOf(gsFtsBreakChars.charAt(nChar));\r
+ if((nFound!=-1)&&((nS==-1)||(nFound<nS))){\r
+ nS=nFound;\r
+ nSep=nChar;\r
+ }\r
+ }\r
+ if(nS==-1){\r
+ sCW=sInput;\r
+ sInput="";\r
+ }else{\r
+ sCW=sInput.substring(0,nS);\r
+ sInput=sInput.substring(nS+1);\r
+ }\r
+\r
+ gsSK=sInput;\r
+ \r
+ if((sCW=="or")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="|"))){\r
+ gnCurrentOp=0;\r
+ gbNot=false;\r
+ }else if((sCW=="and")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="&"))){\r
+ gnCurrentOp=1;\r
+ gbNot=false;\r
+ }else if((sCW=="not")||\r
+ ((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="~"))){\r
+ gbNot=!gbNot;\r
+ }else if(sCW!=""&&!IsStopWord(sCW,gaFtsStop)){\r
+ var sCurrentStem=GetStem(sCW);\r
+ gsCW=sCurrentStem;\r
+ ftsFindKeyword();\r
+ return;\r
+ }\r
+ findOneKey();\r
+ return;\r
+ }\r
+ else{\r
+ displayTopics();\r
+ checkAgain();\r
+ }\r
+}\r
+\r
+function checkAgain()\r
+{\r
+ gsSK=gsSK2;\r
+ gsSK2=null;\r
+ if(gsSK!=null)\r
+ setTimeout("findFTSKey();",1);\r
+}\r
+\r
+function displayTopics()\r
+{\r
+ var sHTML="";\r
+ var sLine="";\r
+ for(var i=0;i<gaTI.length;i++){\r
+ sLine+="<dt><nobr><a href='"+_textToHtml(gaTI[i].sTopicURL)+"'>"+_textToHtml(gaTI[i].sTopicTitle)+"</a></nobr></dt>";\r
+ if(i>>4<<4==i)\r
+ {\r
+ sHTML+=sLine;\r
+ sLine="";\r
+ }\r
+ }\r
+ if(sLine.length>0)\r
+ sHTML+=sLine;\r
+\r
+ if(sHTML.length==0)\r
+ sHTML="<P>"+gsNoTopics+"</P>"\r
+ else\r
+ sHTML="<dl>"+sHTML+"</dl>";\r
+\r
+ var resultDiv=getElement(gsResultDivID);\r
+ if(resultDiv)\r
+ resultDiv.innerHTML=sHTML;\r
+}\r
+\r
+function displayMsg(sErrorMsg)\r
+{\r
+ var sHTML="<P>"+sErrorMsg+"</P>";\r
+\r
+ var resultDiv=getElement(gsResultDivID);\r
+ if(resultDiv)\r
+ resultDiv.innerHTML=sHTML;\r
+}\r
+\r
+function ftsFindKeyword()\r
+{\r
+ var sKey=gsCW;\r
+ var bNeedLoad=false;\r
+ var aFtsContentsCon=null;\r
+ var s=0;\r
+ if(sKey==null) return;\r
+ if(!gsCheckKey||sKey!=gsCheckKey||gnIndexNum==0)\r
+ {\r
+ aFtsContentsCon=new Array();\r
+ gnCheck=0;\r
+ gsCheckKey=sKey;\r
+ gnTopicCheck=0;\r
+ gaTopicCheckInfo=null;\r
+ }\r
+ else{\r
+ s=gnIndexNum;\r
+ aFtsContentsCon=gaFtsContentsCon;\r
+ }\r
+ for(var i=gnCheck;i<gaaFCD.length;i++)\r
+ {\r
+ var oCF=getChunkedFts(i,sKey);\r
+ if(oCF)\r
+ {\r
+ if(!oCF.aFtsKeys&&oCF.sFileName!=null)\r
+ {\r
+ bNeedLoad=true;\r
+ oCF.nProjId=i;\r
+ goCF=oCF;\r
+ gnIndexNum=s;\r
+ gnCheck=i;\r
+ gaFtsContentsCon=aFtsContentsCon;\r
+ gnLoadFts=2;\r
+ beginLoading();\r
+ loadData2(gaData[i].sPPath+gaData[i].sDPath+oCF.sFileName);\r
+ break;\r
+ }\r
+ else{\r
+ aFtsContentsCon[s++]=oCF;\r
+ }\r
+ }\r
+ }\r
+ if(!bNeedLoad)\r
+ {\r
+ var aTI=gaTopicCheckInfo;\r
+ for(var m=gnTopicCheck;m<aFtsContentsCon.length;m++)\r
+ {\r
+ var aTIPart=getTopics(aFtsContentsCon[m],sKey);\r
+ if(aTIPart==null)\r
+ {\r
+ gnCheck=gaaFCD.length;\r
+ gnTopicCheck=m;\r
+ gaTopicCheckInfo=aTI;\r
+ gaFtsContentsCon=aFtsContentsCon;\r
+ return;\r
+ }\r
+ if(m==0)\r
+ aTI=aTIPart;\r
+ else\r
+ aTI=mergeTopics(aTI,aTIPart);\r
+ }\r
+ if(mergewithPreviousResult(aTI))\r
+ findOneKey();\r
+ else\r
+ checkAgain();\r
+ }\r
+}\r
+\r
+function mergewithPreviousResult(aTI)\r
+{\r
+ if(aTI!=null&&aTI.length!=0)\r
+ {\r
+ var nNumTopics=aTI.length;\r
+ if(gnCurrentOp==0){\r
+ if(gbNot){\r
+ displayMsg(gsHelpCannotSearch);\r
+ return false;\r
+ }else{\r
+ var aLS,aSS;\r
+ if(gaTI.length>=aTI.length)\r
+ {\r
+ aLS=gaTI;\r
+ aSS=aTI;\r
+ }\r
+ else\r
+ {\r
+ aLS=aTI;\r
+ aSS=gaTI;\r
+ }\r
+ var s=0;\r
+ for(var i=0;i<aSS.length;i++)\r
+ {\r
+ var bAlreadyThere=false;\r
+ for(var j=s;j<aLS.length;j++)\r
+ {\r
+ if(aSS[i].equalTo(aLS[j]))\r
+ {\r
+ bAlreadyThere=true;\r
+ s=j;\r
+ break;\r
+ }\r
+ }\r
+ if(!bAlreadyThere)\r
+ {\r
+ insertTopic(aLS,aSS[i]);\r
+ }\r
+ }\r
+ gaTI=aLS;\r
+ }\r
+ }else if(gnCurrentOp==1){\r
+ if(gbNot){\r
+ var s=0;\r
+ for(var i=0;i<aTI.length;i++)\r
+ {\r
+ for(var j=s;j<gaTI.length;j++)\r
+ {\r
+ if(aTI[i].equalTo(gaTI[j]))\r
+ {\r
+ removeItemFromArray(gaTI,j);\r
+ s=j;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }else{\r
+ var s=0;\r
+ for(var i=0;i<gaTI.length;i++)\r
+ {\r
+ var bFound=false;\r
+ for(var j=s;j<aTI.length;j++)\r
+ {\r
+ if(gaTI[i].equalTo(aTI[j]))\r
+ {\r
+ bFound=true;\r
+ s=j;\r
+ }\r
+ }\r
+ if(!bFound)\r
+ {\r
+ removeItemFromArray(gaTI,i);\r
+ i--;\r
+ }\r
+ } \r
+ }\r
+ }\r
+ }else{\r
+ if((gnCurrentOp==1)&&(!gbNot)){\r
+ gaTI.length=0;\r
+ }else if((gnCurrentOp==0)&&(gbNot)){\r
+ displayMsg(gsHelpCannotSearch);\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+}\r
+\r
+function insertTopic(aTI,oTI)\r
+{\r
+ var nB=0;\r
+ var nE=aTI.length-1;\r
+ if(nE>=0)\r
+ {\r
+ var nM;\r
+ var bFound=false;\r
+ do{\r
+ nM=(nB+nE)>>1;\r
+ if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)>0)\r
+ nE=nM-1;\r
+ else if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0)\r
+ nB=nM+1;\r
+ else\r
+ {\r
+ bFound=true;\r
+ break;\r
+ }\r
+ }while(nB<=nE);\r
+ if(bFound)\r
+ insertItemIntoArray(aTI,nM,oTI);\r
+ else\r
+ {\r
+ if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0)\r
+ insertItemIntoArray(aTI,nM+1,oTI);\r
+ else\r
+ insertItemIntoArray(aTI,nM,oTI);\r
+ }\r
+ }\r
+ else\r
+ aTI[0]=oTI;\r
+}\r
+\r
+function mergeTopics(aTI1,aTI2)\r
+{\r
+ var i1=0;\r
+ var i2=0;\r
+ var len1=aTI1.length;\r
+ var len2=aTI2.length;\r
+ var aTopicNew=new Array();\r
+ var i=0;\r
+ while(i1<len1||i2<len2)\r
+ {\r
+ if(i1<len1&&i2<len2)\r
+ {\r
+ if(compare(aTI1[i1].sTopicTitle,aTI2[i2].sTopicTitle)<0)\r
+ aTopicNew[i++]=aTI1[i1++];\r
+ else\r
+ aTopicNew[i++]=aTI2[i2++];\r
+ }\r
+ else if(i1<len1)\r
+ aTopicNew[i++]=aTI1[i1++];\r
+ else if(i2<len2)\r
+ aTopicNew[i++]=aTI2[i2++];\r
+ }\r
+ return aTopicNew;\r
+}\r
+\r
+function getTopics(oCF,sKey)\r
+{\r
+ var aTIPart=new Array();\r
+ if(oCF&&oCF.aFtsKeys)\r
+ {\r
+ var keys=oCF.aFtsKeys;\r
+ var nB=0;\r
+ var nE=keys.length-1;\r
+ var nM=-1;\r
+ var bFound=false;\r
+ do{\r
+ nM=(nB+nE)>>1;\r
+ if(compare(keys[nM].sItemName,sKey)>0)\r
+ nE=nM-1;\r
+ else if(compare(keys[nM].sItemName,sKey)<0)\r
+ nB=nM+1;\r
+ else{\r
+ bFound=true;\r
+ break;\r
+ }\r
+ }while(nB<=nE);\r
+ if(bFound)\r
+ {\r
+ if(keys[nM].aTopics)\r
+ {\r
+ for(var i=0;i<keys[nM].aTopics.length;i++)\r
+ {\r
+ var oTC=getTopicChunk(gaaFTCD[oCF.nProjId],keys[nM].aTopics[i]);\r
+ if(oTC.aTopics)\r
+ {\r
+ aTIPart[aTIPart.length]=\r
+ new topicInfo(oTC.aTopics[keys[nM].aTopics[i]-oTC.nBegin].sTopicTitle,\r
+ gaData[oCF.nProjId].sPPath+oTC.aTopics[keys[nM].aTopics[i]-oTC.nBegin].sTopicURL);\r
+ }\r
+ else{\r
+ goCTF=oTC;\r
+ gnLoadFts=3;\r
+ beginLoading();\r
+ loadData2(gaData[oCF.nProjId].sPPath+gaData[oCF.nProjId].sDPath+oTC.sFileName);\r
+ return null;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return aTIPart;\r
+}\r
+\r
+function getTopicChunk(aFTCD,nTopicId)\r
+{\r
+ if(aFTCD&&aFTCD.length)\r
+ {\r
+ var nB=0;\r
+ var nE=aFTCD.length-1;\r
+ var nM=-1;\r
+ var bFound=false;\r
+ do{\r
+ nM=(nB+nE)>>1;\r
+ if(aFTCD[nM].nBegin>nTopicId)\r
+ nE=nM-1;\r
+ else if(aFTCD[nM].nEnd<nTopicId)\r
+ nB=nM+1;\r
+ else{\r
+ bFound=true;\r
+ break;\r
+ }\r
+ }while(nB<=nE);\r
+ if(bFound)\r
+ return aFTCD[nM];\r
+ }\r
+ return null;\r
+}\r
+\r
+function endLoading()\r
+{\r
+ var oDiv=getElement(gsLoadingDivID);\r
+ if(oDiv)\r
+ oDiv.style.visibility="hidden";\r
+}\r
+\r
+function beginLoading()\r
+{\r
+ var oDiv=getElement(gsLoadingDivID);\r
+ if(!oDiv)\r
+ {\r
+ document.body.insertAdjacentHTML("afterBegin",writeLoadingDiv());\r
+ oDiv=getElement(gsLoadingDivID);\r
+ }\r
+ \r
+ if(oDiv)\r
+ {\r
+ oDiv.style.top=document.body.scrollTop;\r
+ oDiv.style.visibility="visible";\r
+ }\r
+}\r
+\r
+function writeLoadingDiv(nIIdx)\r
+{\r
+ return "<div id=\""+gsLoadingDivID+"\" style=\"position:absolute;top:0;left:0;z-index:600;visibility:hidden;padding-left:4px;background-color:ivory;border-width:1;border-style:solid;border-color:black;width:150px;\">"+gsLoadingMsg+"</div>";\r
+}\r
+\r
+function topicInfo(sTopicTitle,sTopicURL)\r
+{\r
+ this.sTopicTitle=sTopicTitle;\r
+ this.sTopicURL=sTopicURL;\r
+ this.equalTo=function(oTI)\r
+ {\r
+ return ((this.sTopicTitle==oTI.sTopicTitle)&&\r
+ (this.sTopicURL==oTI.sTopicURL));\r
+ }\r
+}\r
+\r
+function getChunkedFts(nIndex,sKey)\r
+{\r
+ var oCF=null;\r
+ if(nIndex<gaaFCD.length)\r
+ {\r
+ var len=gaaFCD[nIndex].length;\r
+ if(len>0)\r
+ {\r
+ var nB=0;\r
+ var nE=len-1;\r
+ var bFound=false;\r
+ do{\r
+ var nM=(nB+nE)>>1;\r
+ if(compare(sKey,gaaFCD[nIndex][nM].sEndKey)>0)\r
+ {\r
+ nB=nM+1;\r
+ }\r
+ else if(compare(sKey,gaaFCD[nIndex][nM].sStartKey)<0)\r
+ {\r
+ nE=nM-1;\r
+ }\r
+ else{\r
+ bFound=true;\r
+ break;\r
+ }\r
+ }while(nE>=nB);\r
+ if(bFound)\r
+ oCF=gaaFCD[nIndex][nM];\r
+ }\r
+ }\r
+ return oCF;\r
+}\r
+\r
+function ftsReady(aFCD,aFTCD)\r
+{\r
+ endLoading();\r
+ gaaFTCD[gnCLF]=aFTCD;\r
+ gaaFCD[gnCLF++]=aFCD;\r
+ setTimeout("loadFD();",1);\r
+}\r
+\r
+function putFtsTData(aTopics)\r
+{\r
+ endLoading();\r
+ var oCTF=goCTF;\r
+ if(oCTF)\r
+ {\r
+ oCTF.aTopics=aTopics;\r
+ setTimeout("ftsFindKeyword();",1);\r
+ }\r
+}\r
+\r
+function putFtsWData(aFtsContents)\r
+{\r
+ endLoading();\r
+ var oCF=goCF;\r
+ if(oCF)\r
+ {\r
+ updateCache(oCF);\r
+ oCF.aFtsKeys=aFtsContents;\r
+ setTimeout("ftsFindKeyword();",1);\r
+ }\r
+}\r
+\r
+function IsStopWord(sCW,aFtsStopArray)\r
+{\r
+ var nStopArrayLen=aFtsStopArray.length;\r
+ var nB=0;\r
+ var nE=nStopArrayLen-1;\r
+ var nM=0;\r
+ var bFound=false;\r
+ var sStopWord="";\r
+ while(nB<=nE){\r
+ nM=(nB+nE);\r
+ nM>>=1;\r
+ sStopWord=aFtsStopArray[nM];\r
+ if(compare(sCW,sStopWord)>0){\r
+ nB=(nB==nM)?nM+1:nM;\r
+ }else{\r
+ if(compare(sCW,sStopWord)<0){\r
+ nE=(nE==nM)?nM-1:nM;\r
+ }else{\r
+ bFound=true;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ return bFound;\r
+}\r
+\r
+function GetStem(szWord)\r
+{\r
+ if(gaFtsStem==null||gaFtsStem.length==0)return szWord;\r
+ var aStems=gaFtsStem;\r
+\r
+ var nStemPos=0;\r
+ var csStem="";\r
+ for(var iStem=0;iStem<aStems.length;iStem++){\r
+\r
+ if(aStems[iStem].length>=szWord.length-1) break;\r
+ nStemPos=szWord.lastIndexOf(aStems[iStem]);\r
+ if(nStemPos>0){\r
+ var cssub=szWord.substring(nStemPos);\r
+ if(cssub==aStems[iStem]){\r
+ csStem=szWord;\r
+ if(szWord.charAt(nStemPos-2)==szWord.charAt(nStemPos-1)){\r
+ csStem=csStem.substring(0,nStemPos-1);\r
+ }else{\r
+ csStem=csStem.substring(0,nStemPos);\r
+ }\r
+ return csStem;\r
+ }\r
+ }\r
+ }\r
+ return szWord;\r
+}\r
+\r
+function FtsWriteClassStyle()\r
+{\r
+ var sStyle="<STYLE TYPE='text/css'>\n";\r
+ if (gsBgImage)\r
+ sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
+ else\r
+ sStyle+="body {border-top:black 1px solid;}\n";\r
+ sStyle+="P {"+getFontStyle(goErrFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";\r
+ sStyle+="dl {"+getFontStyle(goFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";\r
+ sStyle+="A:link {"+getFontStyle(goFont)+"}\n";\r
+ sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";\r
+ sStyle+="A:active {background-color:"+gsABgColor+";}\n";\r
+ sStyle+="A:hover {"+getFontStyle(goHoverFont)+"}\n";\r
+ sStyle+="</STYLE>";\r
+ document.write(sStyle);\r
+}\r
+\r
+function window_Unload()\r
+{\r
+ UnRegisterListener2(this,WH_MSG_PROJECTREADY);\r
+ UnRegisterListener2(this, WH_MSG_SEARCHFTSKEY);\r
+}\r
+\r
+\r
+function onSendMessage(oMsg)\r
+{\r
+ var nMsgId=oMsg.nMessageId;\r
+ if(nMsgId==WH_MSG_SEARCHFTSKEY)\r
+ {\r
+ if(oMsg.oParam)\r
+ {\r
+ if(gsSK==null||gsSK=="")\r
+ {\r
+ gsSK=oMsg.oParam.toLowerCase();\r
+ findFTSKey();\r
+ }\r
+ else\r
+ gsSK2=oMsg.oParam.toLowerCase();\r
+ }\r
+ }\r
+ else if(nMsgId==WH_MSG_PROJECTREADY)\r
+ {\r
+ loadFts();\r
+ }\r
+ return true;\r
+}\r
+\r
+if (window.gbWhUtil&&window.gbWhLang&&window.gbWhProxy&&window.gbWhVer&&window.gbWhMsg)\r
+{\r
+ goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
+ goErrFont=new whFont("Verdana","8pt","#000000","normal","bold","none");\r
+ goHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");\r
+ window.onload=window_OnLoad;\r
+ window.onbeforeunload=window_BUnload;\r
+ window.onunload=window_Unload;\r
+ RegisterListener2(this,WH_MSG_PROJECTREADY);\r
+ gbWhFHost=true;\r
+}\r
+else\r
+ document.location.reload();
\ No newline at end of file