home *** CD-ROM | disk | FTP | other *** search
/ ftp.rsa.com / 2014.05.ftp.rsa.com.tar / ftp.rsa.com / pub / agents / RSASecurIDTokenAuto412x64.msi / Data1.cab / _014BD8403D19FEB3903EE0DEB90EB2C9 next >
Text File  |  2014-03-12  |  19KB  |  957 lines

  1. ∩╗┐//    WebHelp 5.10.003
  2. var gsSK2=null;
  3. var gsSK=null;
  4. var gsFtsBreakChars="\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\x85\x92\x93\x94\x95\x96\x97\x99\xA9\xAE\xB7";
  5. var gnCLF=0;
  6. var gsHelpCannotSearch="Cannot search for that phrase.";
  7. var gsNoTopics="No Topics Found.";
  8. var gsLoadingDivID="LoadingDiv";
  9. var gsLoadingMsg="Loading data, please wait...";
  10. var gsSearchMsg="Searching...";
  11. var gsResultDivID="ResultDiv";
  12. var gaaFCD=new Array();
  13. var gaaFTCD=new Array();
  14. var goCF=null;
  15. var goCTF=null;
  16. var gaTI=null;
  17. var gnCurrentOp=0;
  18. var gbNot=false;
  19. var gbReady=false;
  20. var gnLoadFts=1;
  21. var gnCacheLimits=5;
  22. var gaCCD=new Array();
  23. var gbXML=false;
  24. var gaData=new Array();
  25. var gsBgColor="#ffffff";
  26. var gsBgImage="";
  27. var gsMargin="0pt";
  28. var gsIndent="0pt";
  29. var gsCheckKey=null;
  30. var gnIndexNum=0;
  31. var gaFtsContentsCon=null;
  32. var gaTopicCheckInfo=null;
  33. var gnTopicCheck=0;
  34. var goFont=null;
  35. var goErrFont=null;
  36. var goHoverFont=null;
  37. var gsABgColor="#cccccc";
  38. var gbWhFHost=false;
  39. var gbFirst=false;
  40.  
  41. function setBackground(sBgImage)
  42. {
  43.     gsBgImage=sBgImage;
  44. }
  45.  
  46. function setBackgroundcolor(sBgColor)
  47. {
  48.     gsBgColor=sBgColor;
  49. }
  50.  
  51. function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)
  52. {
  53.     var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);
  54.     if(sType=="Normal")
  55.         goFont=vFont;
  56.     else if(sType=="Error")
  57.         goErrFont=vFont;
  58.     else if(sType=="Hover")
  59.         goHoverFont=vFont;
  60. }
  61.  
  62. function setActiveBgColor(sBgColor)
  63. {
  64.     gsABgColor=sBgColor;
  65. }
  66.  
  67. function setMargin(sMargin)
  68. {
  69.     gsMargin=sMargin;
  70. }
  71.  
  72. function setIndent(sIndent)
  73. {
  74.     gsIndent=sIndent;
  75. }
  76.  
  77. function updateCache(oCF)
  78. {
  79.     var len=gaCCD.length;
  80.     if(len<gnCacheLimits*gnCLF)
  81.         gaCCD[len]=oCF;
  82.     else{
  83.         gaCCD[0].aTopics=null;
  84.         gaCCD[0].aFtsKeys=null;
  85.         removeItemFromArray(gaCCD,0);
  86.         gaCCD[len-1]=oCF;
  87.     }
  88. }
  89.  
  90. function addFtsInfo(sPPath,sDPath,sFtsFile)
  91. {
  92.     gaData[gaData.length]=new ftsInfo(sPPath,sDPath,sFtsFile);
  93. }
  94.  
  95. function onLoadXMLError()
  96. {
  97.     if(gnLoadFts==1)
  98.     {
  99.         var aFCD=new Array();
  100.         var aFTCD=new Array();
  101.         ftsReady(aFCD,aFTCD);
  102.     }
  103.     else if(gnLoadFts==3)
  104.     {
  105.         var aTopics=new Array();
  106.         putFtsTData(aTopics);
  107.     }
  108.     else if(gnLoadFts==2)
  109.     {
  110.         putFtsWData(aFtsContents);
  111.         var aFtsContents=new Array();
  112.     }
  113. }
  114.  
  115. function putDataXML(xmlDoc,sDocPath)
  116. {
  117.     if(gnLoadFts==1)
  118.     {
  119.         var node=xmlDoc.lastChild;
  120.         if(node)
  121.         {
  122.             var oChild=node.firstChild;
  123.             var aFCD=new Array();
  124.             var aFTCD=new Array();
  125.             while(oChild)
  126.             {
  127.                 if(oChild.nodeName=="chunkinfo")
  128.                 {
  129.                     var sURL=oChild.getAttribute("url");
  130.                     var sFirst=oChild.getAttribute("first");
  131.                     var sLast=oChild.getAttribute("last");
  132.                     if(sURL&&sFirst&&sLast)
  133.                     {
  134.                         item=new Object();
  135.                         item.sStartKey=sFirst;
  136.                         item.sEndKey=sLast;
  137.                         item.sFileName=sURL;
  138.                         aFCD[aFCD.length]=item;
  139.                     }
  140.                 }
  141.                 else if(oChild.nodeName=="tchunkinfo")
  142.                 {
  143.                     var sURL=oChild.getAttribute("url");
  144.                     var nB=parseInt(oChild.getAttribute("first"));
  145.                     var nE=parseInt(oChild.getAttribute("last"));
  146.                     if(sURL&&sFirst&&sLast)
  147.                     {
  148.                         item=new Object();
  149.                         item.nBegin=nB;
  150.                         item.nEnd=nE;
  151.                         item.sFileName=sURL;
  152.                         aFTCD[aFTCD.length]=item;
  153.                     }
  154.  
  155.                 }
  156.                 oChild=oChild.nextSibling;
  157.             }
  158.             ftsReady(aFCD,aFTCD);
  159.         }
  160.     }
  161.     else if(gnLoadFts==3)
  162.     {
  163.         var node=xmlDoc.lastChild;
  164.         if(node)
  165.         {
  166.             var oChild=node.firstChild;
  167.             var aTopics=new Array();
  168.             while(oChild)
  169.             {
  170.                 if(oChild.nodeName=="topic")
  171.                 {
  172.                     var name=oChild.getAttribute("name");
  173.                     var sURL=oChild.getAttribute("url");
  174.                     if(name&&name.length>0&&sURL)
  175.                     {
  176.                         var topic=new Object();
  177.                         topic.sTopicTitle=name;
  178.                         topic.sTopicURL=sURL;
  179.                         aTopics[aTopics.length]=topic;
  180.                     }
  181.                 }
  182.                 oChild=oChild.nextSibling;
  183.             }
  184.             putFtsTData(aTopics);
  185.         }
  186.     }
  187.     else if(gnLoadFts==2)
  188.     {
  189.         var node=xmlDoc.lastChild;
  190.         if(node)
  191.         {
  192.             var oChild=node.firstChild;
  193.             var aFtsContents=new Array();
  194.             while(oChild)
  195.             {
  196.                 if(oChild.nodeName=="key")
  197.                 {
  198.                     var name=oChild.getAttribute("name");
  199.                     if(name&&name.length>0)
  200.                     {
  201.                         var item=new Object();
  202.                         item.sItemName=name;
  203.                         aFtsContents[aFtsContents.length]=item;
  204.                         var oChildChild=oChild.firstChild;
  205.                         while(oChildChild)
  206.                         {
  207.                             if(oChildChild.nodeName=="#text")
  208.                             {
  209.                                 var sIDs=oChildChild.nodeValue;
  210.                                 if(sIDs)
  211.                                 {
  212.                                     var nBPos=0;
  213.                                     do
  214.                                     {
  215.                                         var nPos=sIDs.indexOf(",",nBPos);
  216.                                         var sID=null;
  217.                                         if(nPos!=-1)
  218.                                             sID=sIDs.substring(nBPos,nPos);
  219.                                         else
  220.                                             sID=sIDs.substring(nBPos);
  221.  
  222.                                         if(sID)
  223.                                         {
  224.                                             var id=parseInt(sID);
  225.                                             if(!isNaN(id))
  226.                                             {
  227.                                                 if(!item.aTopics)
  228.                                                     item.aTopics=new Array();
  229.                                                 item.aTopics[item.aTopics.length]=id;
  230.                                             }
  231.                                         }
  232.                                         nBPos=nPos+1;
  233.                                     }while(nBPos!=0&&nBPos<sIDs.length);
  234.                                 }
  235.                             }
  236.                             oChildChild=oChildChild.nextSibling;
  237.                         }
  238.                     }
  239.                 }
  240.                 oChild=oChild.nextSibling;
  241.             }
  242.             putFtsWData(aFtsContents);
  243.         }
  244.     }
  245. }
  246.  
  247. function ftsInfo(sPPath,sDPath,sFtsFile)
  248. {
  249.     this.sPPath=sPPath;
  250.     this.sDPath=sDPath;
  251.     this.sFtsFile=sFtsFile;
  252. }
  253.  
  254. function window_OnLoad()
  255. {
  256.     if(gsBgImage&&gsBgImage.length>0)
  257.     {
  258.         document.body.background=gsBgImage;
  259.     }
  260.     if(gsBgColor&&gsBgColor.length>0)
  261.     {
  262.         document.body.bgColor=gsBgColor;
  263.     }
  264.     writeResultDiv();
  265.     loadFts();
  266.     var oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null)
  267.     SendMessage(oMsg);
  268. }
  269.  
  270. function writeResultDiv()
  271. {
  272.     var sHTML="<div id=\""+gsResultDivID+"\" style=\"POSITION:absolute;\"></div>";
  273.     document.body.insertAdjacentHTML("beforeEnd",sHTML);
  274. }
  275.  
  276. function loadFts()
  277. {
  278.     if(!gbReady)
  279.     {
  280.         var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);
  281.         if(SendMessage(oResMsg)&&oResMsg.oParam)
  282.         {
  283.             gbReady=true;
  284.             var oProj=oResMsg.oParam;
  285.             var aProj=oProj.aProj;
  286.             gbXML=oProj.bXML;
  287.             if(aProj.length>0)
  288.             {
  289.                 var sLangId=aProj[0].sLangId;
  290.                 for(var i=0;i<aProj.length;i++)
  291.                 {
  292.                     if(aProj[i].sFts&&aProj[i].sLangId==sLangId)
  293.                     {
  294.                         addFtsInfo(aProj[i].sPPath,aProj[i].sDPath,aProj[i].sFts);
  295.                     }
  296.                 }
  297.             }
  298.             loadFD();
  299.  
  300.         }                
  301.     }
  302. }
  303.  
  304. function loadFD()
  305. {
  306.     if(gnCLF<gaData.length)
  307.     {
  308.         gnLoadFts=1;
  309.         loadData2(gaData[gnCLF].sPPath+gaData[gnCLF].sDPath+gaData[gnCLF].sFtsFile);
  310.     }
  311.     else 
  312.     {
  313.         var oMsg = new whMessage(WH_MSG_BACKUPSEARCH, this, 1, null);
  314.         if (SendMessage(oMsg))
  315.         {
  316.             if (oMsg.oParam)
  317.             {
  318.                 gsSK=oMsg.oParam.toLowerCase();
  319.                 findFTSKey();
  320.             }
  321.         }
  322.         RegisterListener2(this, WH_MSG_SEARCHFTSKEY);
  323.     }
  324. }
  325.  
  326. function loadData2(sFile)
  327. {
  328.     if(gbXML)
  329.         loadDataXML(sFile);
  330.     else
  331.         loadData(sFile);
  332. }
  333.  
  334. function findFTSKey()
  335. {
  336.     gaTI=new Array();
  337.     gnCurrentOp=1;
  338.     gbNot=false;
  339.     displayMsg(gsSearchMsg);
  340.     if(gsSK!="")
  341.     {
  342.         gbFirst=true;
  343.         findOneKey();
  344.     }
  345. }
  346.  
  347. function findOneKey()
  348. {
  349.     if(gsSK && gsSK!="")
  350.     {
  351.         var sInput=gsSK;
  352.         var sCW="";
  353.         var nS=-1;
  354.         var nSep=-1;
  355.         for(var nChar=0;nChar<gsFtsBreakChars.length;nChar++){
  356.             var nFound=sInput.indexOf(gsFtsBreakChars.charAt(nChar));
  357.             if((nFound!=-1)&&((nS==-1)||(nFound<nS))){
  358.                 nS=nFound;
  359.                 nSep=nChar;
  360.             }
  361.         }
  362.         if(nS==-1){
  363.             sCW=sInput;
  364.             sInput="";
  365.         }else{
  366.             sCW=sInput.substring(0,nS);
  367.             sInput=sInput.substring(nS+1);
  368.         }
  369.  
  370.         gsSK=sInput;
  371.         
  372.         if((sCW=="or")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="|"))){
  373.             gnCurrentOp=0;
  374.             gbNot=false;
  375.         }else if((sCW=="and")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="&"))){
  376.             gnCurrentOp=1;
  377.             gbNot=false;
  378.         }else if((sCW=="not")||
  379.             ((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="~"))){
  380.             gbNot=!gbNot;
  381.         }else if(sCW!=""&&!IsStopWord(sCW,gaFtsStop)){
  382.             var sCurrentStem=GetStem(sCW);
  383.             gsCW=sCurrentStem;
  384.             ftsFindKeyword();
  385.             return;
  386.         }
  387.         findOneKey();
  388.     }
  389.     else{
  390.         displayTopics();
  391.         checkAgain();
  392.     }
  393. }
  394.  
  395. function checkAgain()
  396. {
  397.     gsCheckKey = "";
  398.     gnIndexNum = 0;
  399.     gsSK=gsSK2;
  400.     gsSK2=null;
  401.     if(gsSK!=null)
  402.         setTimeout("findFTSKey();",1);
  403. }
  404.  
  405. function displayTopics()
  406. {
  407.     var sHTML="";
  408.     var sLine="";
  409.     for(var i=0;i<gaTI.length;i++){
  410.         sLine+="<dt><nobr><a href='"+gaTI[i].sTopicURL+"'>"+_textToHtml(gaTI[i].sTopicTitle)+"</a></nobr></dt>";
  411.         if(i>>4<<4==i)
  412.         {
  413.             sHTML+=sLine;
  414.             sLine="";
  415.         }
  416.     }
  417.     if(sLine.length>0)
  418.         sHTML+=sLine;
  419.  
  420.     if(sHTML.length==0)
  421.         sHTML="<P>"+gsNoTopics+"</P>"
  422.     else
  423.         sHTML="<dl>"+sHTML+"</dl>";
  424.  
  425.     var resultDiv=getElement(gsResultDivID);
  426.     if(resultDiv)
  427.         resultDiv.innerHTML=sHTML;
  428. }
  429.  
  430. function displayMsg(sErrorMsg)
  431. {
  432.     var sHTML="<P>"+sErrorMsg+"</P>";
  433.  
  434.     var resultDiv=getElement(gsResultDivID);
  435.     if(resultDiv)
  436.         resultDiv.innerHTML=sHTML;
  437. }
  438.  
  439. function ftsFindKeyword()
  440. {
  441.     var sKey=gsCW;
  442.     var bNeedLoad=false;
  443.     var aFtsContentsCon=null;
  444.     var s=0;
  445.     if(sKey==null) return;
  446.     if(!gsCheckKey||sKey!=gsCheckKey||gnIndexNum==0)
  447.     {
  448.         aFtsContentsCon=new Array();
  449.         gnCheck=0;
  450.         gsCheckKey=sKey;
  451.         gnTopicCheck=0;
  452.         gaTopicCheckInfo=null;
  453.     }
  454.     else{
  455.         s=gnIndexNum;
  456.         aFtsContentsCon=gaFtsContentsCon;
  457.     }
  458.     for(var i=gnCheck;i<gaaFCD.length;i++)
  459.     {
  460.         var oCF=getChunkedFts(i,sKey);
  461.         if(oCF)
  462.         {
  463.             if(!oCF.aFtsKeys&&oCF.sFileName!=null)
  464.             {
  465.                 bNeedLoad=true;
  466.                 oCF.nProjId=i;
  467.                 goCF=oCF;
  468.                 gnIndexNum=s;
  469.                 gnCheck=i;
  470.                 gaFtsContentsCon=aFtsContentsCon;
  471.                 gnLoadFts=2;
  472.                 beginLoading();
  473.                 loadData2(gaData[i].sPPath+gaData[i].sDPath+oCF.sFileName);
  474.                 break;
  475.             }
  476.             else{
  477.                 aFtsContentsCon[s++]=oCF;
  478.             }
  479.         }
  480.     }
  481.     if(!bNeedLoad)
  482.     {
  483.         var aTI=gaTopicCheckInfo;
  484.         for(var m=gnTopicCheck;m<aFtsContentsCon.length;m++)
  485.         {
  486.             var aTIPart=getTopics(aFtsContentsCon[m],sKey);
  487.             if(aTIPart==null)
  488.             {
  489.                 gnCheck=gaaFCD.length;
  490.                 gnTopicCheck=m;
  491.                 gaTopicCheckInfo=aTI;
  492.                 gaFtsContentsCon=aFtsContentsCon;
  493.                 return;
  494.             }
  495.             if(m==0)
  496.                 aTI=aTIPart;
  497.             else
  498.                 aTI=mergeTopics(aTI,aTIPart);
  499.         }
  500.         if(mergewithPreviousResult(aTI))
  501.         {
  502.             gbFirst=false;
  503.             findOneKey();
  504.         }
  505.         else
  506.             checkAgain();
  507.     }
  508. }
  509.  
  510. function mergewithPreviousResult(aTI)
  511. {
  512.     if(aTI!=null&&aTI.length!=0)
  513.     {
  514.         var nNumTopics=aTI.length;
  515.         if(gnCurrentOp==0||gbFirst){
  516.             if(gbNot){
  517.                 displayMsg(gsHelpCannotSearch);
  518.                 return false;
  519.             }else{
  520.                 var aLS,aSS;
  521.                 if(gaTI.length>=aTI.length)
  522.                 {
  523.                     aLS=gaTI;
  524.                     aSS=aTI;
  525.                 }
  526.                 else
  527.                 {
  528.                     aLS=aTI;
  529.                     aSS=gaTI;
  530.                 }
  531.                 var s=0;
  532.                 for(var i=0;i<aSS.length;i++)
  533.                 {
  534.                     var bAlreadyThere=false;
  535.                     for(var j=s;j<aLS.length;j++)
  536.                     {
  537.                         if(aSS[i].equalTo(aLS[j]))
  538.                         {
  539.                             bAlreadyThere=true;
  540.                             s=j;
  541.                             break;
  542.                         }
  543.                     }
  544.                     if(!bAlreadyThere)
  545.                     {
  546.                         insertTopic(aLS,aSS[i]);
  547.                     }
  548.                 }
  549.                 gaTI=aLS;
  550.             }
  551.         }else if(gnCurrentOp==1){
  552.             if(gbNot){
  553.                 var s=0;
  554.                 for(var i=0;i<aTI.length;i++)
  555.                 {
  556.                     for(var j=s;j<gaTI.length;j++)
  557.                     {
  558.                         if(aTI[i].equalTo(gaTI[j]))
  559.                         {
  560.                             removeItemFromArray(gaTI,j);
  561.                             s=j;
  562.                             break;
  563.                         }
  564.                     }
  565.                 }
  566.             }else{
  567.                 var s=0;
  568.                 for(var i=0;i<gaTI.length;i++)
  569.                 {
  570.                     var bFound=false;
  571.                     for(var j=s;j<aTI.length;j++)
  572.                     {
  573.                         if(gaTI[i].equalTo(aTI[j]))
  574.                         {
  575.                             bFound=true;
  576.                             s=j;
  577.                         }
  578.                     }
  579.                     if(!bFound)
  580.                     {
  581.                         removeItemFromArray(gaTI,i);
  582.                         i--;
  583.                     }
  584.                 }                
  585.             }
  586.         }
  587.     }else{
  588.         if((gnCurrentOp==1)&&(!gbNot)){
  589.             gaTI.length=0;
  590.         }else if((gnCurrentOp==0)&&(gbNot)){
  591.             displayMsg(gsHelpCannotSearch);
  592.             return false;
  593.         }
  594.     }
  595.     return true;
  596. }
  597.  
  598. function insertTopic(aTI,oTI)
  599. {
  600.     var nB=0;
  601.     var nE=aTI.length-1;
  602.     if(nE>=0)
  603.     {
  604.         var nM;
  605.         var bFound=false;
  606.         do{
  607.             nM=(nB+nE)>>1;
  608.             if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)>0)
  609.                 nE=nM-1;
  610.             else if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0)
  611.                 nB=nM+1;
  612.             else
  613.             {
  614.                 bFound=true;
  615.                 break;
  616.             }
  617.         }while(nB<=nE);
  618.         if(bFound)
  619.             insertItemIntoArray(aTI,nM,oTI);
  620.         else
  621.         {
  622.             if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0)
  623.                 insertItemIntoArray(aTI,nM+1,oTI);
  624.             else
  625.                 insertItemIntoArray(aTI,nM,oTI);
  626.         }
  627.     }
  628.     else
  629.         aTI[0]=oTI;
  630. }
  631.  
  632. function mergeTopics(aTI1,aTI2)
  633. {
  634.     var i1=0;
  635.     var i2=0;
  636.     var len1=aTI1.length;
  637.     var len2=aTI2.length;
  638.     var aTopicNew=new Array();
  639.     var i=0;
  640.     while(i1<len1||i2<len2)
  641.     {
  642.         if(i1<len1&&i2<len2)
  643.         {
  644.             if(compare(aTI1[i1].sTopicTitle,aTI2[i2].sTopicTitle)<0)
  645.                 aTopicNew[i++]=aTI1[i1++];
  646.             else
  647.                 aTopicNew[i++]=aTI2[i2++];
  648.         }
  649.         else if(i1<len1)
  650.             aTopicNew[i++]=aTI1[i1++];
  651.         else if(i2<len2)
  652.             aTopicNew[i++]=aTI2[i2++];
  653.     }
  654.     return aTopicNew;
  655. }
  656.  
  657. function getTopics(oCF,sKey)
  658. {
  659.     var aTIPart=new Array();
  660.     if(oCF&&oCF.aFtsKeys)
  661.     {
  662.         var keys=oCF.aFtsKeys;
  663.         var nB=0;
  664.         var nE=keys.length-1;
  665.         var nM=-1;
  666.         var bFound=false;
  667.         do{
  668.             nM=(nB+nE)>>1;
  669.             if(compare(keys[nM].sItemName,sKey)>0)
  670.                 nE=nM-1;
  671.             else if(compare(keys[nM].sItemName,sKey)<0)
  672.                 nB=nM+1;
  673.             else{
  674.                 bFound=true;
  675.                 break;
  676.             }
  677.         }while(nB<=nE);
  678.         if(bFound)
  679.         {
  680.             if(keys[nM].aTopics)
  681.             {
  682.                 for(var i=0;i<keys[nM].aTopics.length;i++)
  683.                 {
  684.                     var oTC=getTopicChunk(gaaFTCD[oCF.nProjId],keys[nM].aTopics[i]);
  685.                     if(oTC.aTopics)
  686.                     {
  687.                         aTIPart[aTIPart.length]=
  688.                             new topicInfo(oTC.aTopics[keys[nM].aTopics[i]-oTC.nBegin].sTopicTitle,
  689.                                 gaData[oCF.nProjId].sPPath+oTC.aTopics[keys[nM].aTopics[i]-oTC.nBegin].sTopicURL);
  690.                     }
  691.                     else{
  692.                         goCTF=oTC;
  693.                         gnLoadFts=3;
  694.                         beginLoading();
  695.                         loadData2(gaData[oCF.nProjId].sPPath+gaData[oCF.nProjId].sDPath+oTC.sFileName);
  696.                         return null;
  697.                     }
  698.                 }
  699.             }
  700.         }
  701.     }
  702.     return aTIPart;
  703. }
  704.  
  705. function getTopicChunk(aFTCD,nTopicId)
  706. {
  707.     if(aFTCD&&aFTCD.length)
  708.     {
  709.         var nB=0;
  710.         var nE=aFTCD.length-1;
  711.         var nM=-1;
  712.         var bFound=false;
  713.         do{
  714.             nM=(nB+nE)>>1;
  715.             if(aFTCD[nM].nBegin>nTopicId)
  716.                 nE=nM-1;
  717.             else if(aFTCD[nM].nEnd<nTopicId)
  718.                 nB=nM+1;
  719.             else{
  720.                 bFound=true;
  721.                 break;
  722.             }
  723.         }while(nB<=nE);
  724.         if(bFound)
  725.             return aFTCD[nM];
  726.     }
  727.     return null;
  728. }
  729.  
  730. function endLoading()
  731. {
  732.     var oDiv=getElement(gsLoadingDivID);
  733.     if(oDiv)
  734.         oDiv.style.visibility="hidden";
  735. }
  736.  
  737. function beginLoading()
  738. {
  739.     var oDiv=getElement(gsLoadingDivID);
  740.     if(!oDiv)
  741.     {
  742.         document.body.insertAdjacentHTML("afterBegin",writeLoadingDiv());
  743.         oDiv=getElement(gsLoadingDivID);
  744.     }
  745.     
  746.     if(oDiv)
  747.     {
  748.         oDiv.style.top=document.body.scrollTop;
  749.         oDiv.style.visibility="visible";
  750.     }
  751. }
  752.  
  753. function writeLoadingDiv(nIIdx)
  754. {
  755.     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>";
  756. }
  757.  
  758. function topicInfo(sTopicTitle,sTopicURL)
  759. {
  760.     this.sTopicTitle=sTopicTitle;
  761.     this.sTopicURL=sTopicURL;
  762.     this.equalTo=function(oTI)
  763.     {
  764.         return ((this.sTopicTitle==oTI.sTopicTitle)&&
  765.             (this.sTopicURL==oTI.sTopicURL));
  766.     }
  767. }
  768.  
  769. function getChunkedFts(nIndex,sKey)
  770. {
  771.     var oCF=null;
  772.     if(nIndex<gaaFCD.length)
  773.     {
  774.         var len=gaaFCD[nIndex].length;
  775.         if(len>0)
  776.         {
  777.             var nB=0;
  778.             var nE=len-1;
  779.             var bFound=false;
  780.             do{
  781.                 var nM=(nB+nE)>>1;
  782.                 if(compare(sKey,gaaFCD[nIndex][nM].sEndKey)>0)
  783.                 {
  784.                     nB=nM+1;
  785.                 }
  786.                 else if(compare(sKey,gaaFCD[nIndex][nM].sStartKey)<0)
  787.                 {
  788.                     nE=nM-1;
  789.                 }
  790.                 else{
  791.                     bFound=true;
  792.                     break;
  793.                 }
  794.             }while(nE>=nB);
  795.             if(bFound)
  796.                 oCF=gaaFCD[nIndex][nM];
  797.         }
  798.     }
  799.     return oCF;
  800. }
  801.  
  802. function ftsReady(aFCD,aFTCD)
  803. {
  804.     endLoading();
  805.     gaaFTCD[gnCLF]=aFTCD;
  806.     gaaFCD[gnCLF++]=aFCD;
  807.     setTimeout("loadFD();",1);
  808. }
  809.  
  810. function putFtsTData(aTopics)
  811. {
  812.     endLoading();
  813.     var oCTF=goCTF;
  814.     if(oCTF)
  815.     {
  816.         oCTF.aTopics=aTopics;
  817.         setTimeout("ftsFindKeyword();",1);
  818.     }
  819. }
  820.  
  821. function putFtsWData(aFtsContents)
  822. {
  823.     endLoading();
  824.     var oCF=goCF;
  825.     if(oCF)
  826.     {
  827.         updateCache(oCF);
  828.         oCF.aFtsKeys=aFtsContents;
  829.         setTimeout("ftsFindKeyword();",1);
  830.     }
  831. }
  832.  
  833. function IsStopWord(sCW,aFtsStopArray)
  834. {
  835.     var nStopArrayLen=aFtsStopArray.length;
  836.     var nB=0;
  837.     var nE=nStopArrayLen-1;
  838.     var nM=0;
  839.     var bFound=false;
  840.     var sStopWord="";
  841.     while(nB<=nE){
  842.         nM=(nB+nE);
  843.         nM>>=1;
  844.         sStopWord=aFtsStopArray[nM];
  845.         if(compare(sCW,sStopWord)>0){
  846.             nB=(nB==nM)?nM+1:nM;
  847.         }else{
  848.             if(compare(sCW,sStopWord)<0){
  849.                 nE=(nE==nM)?nM-1:nM;
  850.             }else{
  851.                 bFound=true;
  852.                 break;
  853.             }
  854.         }
  855.     }
  856.     return bFound;
  857. }
  858. function IsNonAscii(szWord)
  859. {
  860.     var temp;
  861.     for(var iCount=0; iCount<szWord.length;iCount++)
  862.     {
  863.         temp = szWord.charCodeAt(iCount);
  864.         if(temp>128)
  865.             return true;
  866.     }
  867.     return false;
  868.  
  869. }
  870. function GetStem(szWord)
  871. {
  872.     if(gaFtsStem==null||gaFtsStem.length==0)return szWord;
  873.     if(IsNonAscii(szWord))             return szWord;
  874.     var aStems=gaFtsStem;
  875.  
  876.     var nStemPos=0;
  877.     var csStem="";
  878.     for(var iStem=0;iStem<aStems.length;iStem++){
  879.  
  880.         if(aStems[iStem].length>=szWord.length-1)    continue;
  881.         nStemPos=szWord.lastIndexOf(aStems[iStem]);
  882.         if(nStemPos>0){
  883.             var cssub=szWord.substring(nStemPos);
  884.             if(cssub==aStems[iStem]){
  885.                 csStem=szWord;
  886.                 if(szWord.charAt(nStemPos-2)==szWord.charAt(nStemPos-1)){
  887.                     csStem=csStem.substring(0,nStemPos-1);
  888.                 }else{
  889.                     csStem=csStem.substring(0,nStemPos);
  890.                 }
  891.                 return csStem;
  892.             }
  893.         }
  894.     }
  895.     return szWord;
  896. }
  897.  
  898. function FtsWriteClassStyle()
  899. {
  900.     var sStyle="<STYLE TYPE='text/css'>\n";
  901.     if (gsBgImage)
  902.         sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";
  903.     else
  904.         sStyle+="body {border-top:black 1px solid;}\n";
  905.     sStyle+="P {"+getFontStyle(goErrFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";
  906.     sStyle+="dl {"+getFontStyle(goFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";
  907.     sStyle+="A:link {"+getFontStyle(goFont)+"}\n";
  908.     sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";
  909.     sStyle+="A:active {background-color:"+gsABgColor+";}\n";
  910.     sStyle+="A:hover {"+getFontStyle(goHoverFont)+"}\n";
  911.     sStyle+="</STYLE>";
  912.     document.write(sStyle);
  913. }
  914.  
  915. function window_Unload()
  916. {
  917.     UnRegisterListener2(this,WH_MSG_PROJECTREADY);
  918.     UnRegisterListener2(this, WH_MSG_SEARCHFTSKEY);
  919. }
  920.  
  921.  
  922. function onSendMessage(oMsg)
  923. {
  924.     var nMsgId=oMsg.nMessageId;
  925.     if(nMsgId==WH_MSG_SEARCHFTSKEY)
  926.     {
  927.         if(oMsg.oParam)
  928.         {
  929.             if(gsSK==null||gsSK=="")
  930.             {
  931.                 gsSK=oMsg.oParam.toLowerCase();
  932.                 findFTSKey();
  933.             }
  934.             else
  935.                 gsSK2=oMsg.oParam.toLowerCase();
  936.         }
  937.     }
  938.     else if(nMsgId==WH_MSG_PROJECTREADY)
  939.     {
  940.         loadFts();
  941.     }
  942.     return true;
  943. }
  944.  
  945. if (window.gbWhUtil&&window.gbWhLang&&window.gbWhProxy&&window.gbWhVer&&window.gbWhMsg)
  946. {
  947.     goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");
  948.     goErrFont=new whFont("Verdana","8pt","#000000","normal","bold","none");
  949.     goHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");
  950.     window.onload=window_OnLoad;
  951.     window.onbeforeunload=window_BUnload;
  952.     window.onunload=window_Unload;
  953.     RegisterListener2(this,WH_MSG_PROJECTREADY);
  954.     gbWhFHost=true;
  955. }
  956. else
  957.     document.location.reload();