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 / _84BF028EFDFDF06667F9EF392A01CC70 < prev    next >
Text File  |  2014-03-12  |  31KB  |  1,358 lines

  1. ∩╗┐//    WebHelp 5.10.005
  2. var gsPPath="";
  3. var gaPaths=new Array();
  4. var gaAvenues=new Array();
  5. var gaSearchTerms = new Array();
  6.  
  7. var goFrame=null;
  8. var gsStartPage="";
  9. var gsRelCurPagePath="";
  10. var gsSearchFormHref="";
  11. var gnTopicOnly=-1;
  12. var gnOutmostTopic=-1;
  13. var gsFtsBreakChars="\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\x85\x92\x93\x94\x95\x96\x97\x99\xA9\xAE\xB7";
  14.  
  15. var gsHiliteSearchSetting = "disable,#b2b4bf,black";
  16. var gsBkgndColor="";
  17. var gsTextColor="";
  18. var BTN_TEXT=1;
  19. var BTN_IMG=2;
  20.  
  21. var goSync=null;
  22.  
  23. var goShow=null;
  24. var goHide=null;
  25.  
  26. var goPrev=null;
  27. var goNext=null;
  28. var gnForm=0;
  29. var goShowNav=null;
  30. var goHideNav=null;
  31.  
  32. var goWebSearch=null;
  33.  
  34. var gsBtnStyle="";
  35. var gaButtons=new Array();
  36. var gaTypes=new Array();
  37. var whtopic_foldUnload=null;
  38. var gbWhTopic=false;
  39. var gbCheckSync=false;
  40. var gbSyncEnabled=false;
  41. var gaBreadcrumbsTrail = new Array();
  42. var gnYPos = -1;
  43.  
  44. function AddMasterBreadcrumbs(relHomePage, styleInfo, separator, strHome, strHomePath)
  45. {
  46.     delete gaBreadcrumbsTrail;
  47.     gaBreadcrumbsTrail = new Array();
  48.     var sTopicFullPath = _getPath(document.location.href);
  49.     var sXmlFullPath = _getFullPath(sTopicFullPath, relHomePage);
  50.     var sXmlFolderPath = _getPath(sXmlFullPath);
  51.     var sdocPath = _getFullPath(sXmlFolderPath, "MasterData.xml");
  52.  
  53.     try
  54.     {
  55.         GetMasterBreadcrumbs(sdocPath, styleInfo, separator);
  56.     }
  57.     catch(err)
  58.     {
  59.         var i = gaBreadcrumbsTrail.length;
  60.         if(i == 0)
  61.         {
  62.             var strTrail = "<a style=\""+ styleInfo + "\"" + " href=\"" + strHomePath + "\">" + strHome + "</a> " + separator + " ";
  63.             document.write(strTrail);
  64.         }
  65.         else
  66.         {
  67.             while(i > 0)
  68.             {
  69.                 document.write(gaBreadcrumbsTrail[i-1]);
  70.                 i--;
  71.             }
  72.         }
  73.     }
  74.     return;
  75. }
  76.  
  77. var xmlHttp1;
  78. function GetMasterBreadcrumbs(masterFullPath, styleInfo, separator)
  79. {    
  80.     if(gbIE5)
  81.     {
  82.         xmlDoc1=new ActiveXObject("Microsoft.XMLDOM");
  83.         xmlDoc1.async="false";
  84.         xmlDoc1.load(masterFullPath);
  85.     }
  86.     else if(gbNav6)
  87.     {
  88.         var req=new XMLHttpRequest();
  89.              req.open("GET", masterFullPath, false);   
  90.         req.send(null);   
  91.         xmlDoc1 = req.responseXML;
  92.     }
  93.     else if(gbSafari3)
  94.     {
  95.         if(window.XMLHttpRequest && !(window.ActiveXObject)) 
  96.         {
  97.             xmlHttp1 = new XMLHttpRequest();
  98.             if(xmlHttp1)
  99.             {
  100.                 xmlHttp1.onreadystatechange=onXMLResponse;
  101.                 xmlHttp1.open("GET", masterFullPath, true);
  102.                 xmlHttp1.send(null);
  103.             }
  104.         }
  105.     }
  106.  
  107.     if(xmlDoc1 == null) throw "error";
  108.  
  109.     var root = xmlDoc1.documentElement;
  110.     var masterProj = xmlDoc1.getElementsByTagName("MasterProject");
  111.     var masterName="";
  112.     var masterRelPath="";
  113.  
  114.     if(masterProj)
  115.     {
  116.         masterName = masterProj[0].getAttribute("name");
  117.         masterRelPath = masterProj[0].getAttribute("url");        
  118.     }
  119.  
  120.     var x = xmlDoc1.getElementsByTagName("item");
  121.     var i = 0;
  122.     var strTrail = "";
  123.  
  124.     for(i=0; i< x.length; i++)
  125.     {
  126.         var name= x[i].getAttribute("name");
  127.         var path = x[i].getAttribute("url");
  128.  
  129.         name = name.replace(/\\\\/g, '\\'); 
  130.         
  131.         if(path == "")
  132.         {
  133.             strTrail += name + " " + separator + " ";
  134.         }
  135.         else
  136.         {
  137.             var sHrefRelPath = _getPath(masterFullPath) + masterRelPath;
  138.             var sHrefFullPath = _getFullPath(sHrefRelPath, path); 
  139.              strTrail += "<a style=\""+ styleInfo + "\"" + " href=\"" + sHrefFullPath + "\">" + name + "</a> " + separator + " ";
  140.         }
  141.  
  142.     }    
  143.  
  144.     gaBreadcrumbsTrail[gaBreadcrumbsTrail.length] = strTrail;
  145.  
  146.     // call for master breadcrumbs
  147.     masterFullPath = _getPath(masterFullPath)
  148.     masterFullPath += masterRelPath;
  149.     masterFullPath = _getFullPath(masterFullPath, "MasterData.xml");
  150.  
  151.     GetMasterBreadcrumbs(masterFullPath);
  152.     
  153. }
  154.  
  155.  
  156. /////////highlight Search Routines /////////
  157. function ClosedRange( a_nStart, a_nEnd )
  158. {
  159.     this.nStart = a_nStart;
  160.     this.nEnd = a_nEnd;
  161. }
  162.  
  163. ////////generic functions //////////
  164.  
  165. var g_RunesWordBreaks=gsFtsBreakChars;
  166. var g_RunesWhiteSpaces="\x20\x09\x0D\x0A\xA0";
  167.  
  168. function _isWordBreak( a_ch )
  169. {
  170.     return ( g_RunesWordBreaks.indexOf( a_ch ) >= 0 );
  171. }
  172.  
  173. function _isWhiteSpace( a_ch )
  174. {
  175.     return ( g_RunesWhiteSpaces.indexOf( a_ch ) >= 0 );
  176. }
  177.  
  178. function _getLengthOfWordBreak( a_str, a_nFrom )
  179. {
  180.     var i = a_nFrom, nLen = a_str.length;
  181.     while ( i < nLen && _isWordBreak( a_str.charAt( i ) ) )
  182.         ++i;
  183.     return i - a_nFrom;
  184. }
  185.  
  186. function _getLengthOfWord( a_str, a_nFrom )
  187. {
  188.     var i = a_nFrom, nLen = a_str.length;
  189.     while ( i < nLen &&    !_isWordBreak( a_str.charAt( i ) ) )
  190.         ++i;
  191.     return i - a_nFrom;
  192. }
  193.  
  194. function _getWord( a_str, a_nFrom )
  195. {
  196.     var nLen = _getLengthOfWord( a_str, a_nFrom );
  197.     return a_str.substr( a_nFrom, nLen );
  198. }
  199.  
  200. function _getPositionInc( a_str, a_nFrom )
  201. {
  202.     var i = a_nFrom, nLen = a_str.length, nInc = 1;
  203.     while ( i < nLen && _isWordBreak( a_str.charAt( i ) ) )
  204.     {
  205.         if ( !_isWhiteSpace( a_str.charAt( i ) ) )
  206.             nInc++;
  207.  
  208.         i++;
  209.     }
  210.     return nInc;
  211. }
  212.  
  213. function _getNormalizedWord( a_strWord )
  214. {
  215.     var strLower = a_strWord.toLowerCase();
  216.     
  217.     return strLower;
  218. }
  219.  
  220. function DolWord( a_strWord, a_nPosition, a_nCharLocation )
  221. {
  222.     this.strWord = a_strWord;
  223.     this.nPosition = a_nPosition;
  224.     this.nCharLocation = a_nCharLocation;
  225. }
  226.  
  227. function dolSegment( a_strSrc )
  228. {
  229.     var nLen = a_strSrc.length;
  230.     var nCur = 0;
  231.     var nPosition = 1;
  232.     var strWord = "";
  233.     var aRslt = new Array();
  234.  
  235.     nCur += _getLengthOfWordBreak( a_strSrc, nCur );
  236.     while ( nCur < nLen )
  237.     {
  238.         strWord = _getNormalizedWord( _getWord( a_strSrc, nCur ) );
  239.         aRslt[aRslt.length] = new DolWord( strWord, nPosition, nCur );
  240.         
  241.         nCur += strWord.length;
  242.         nPosition += _getPositionInc( a_strSrc, nCur );
  243.         nCur += _getLengthOfWordBreak( a_strSrc, nCur );
  244.     }
  245.     return aRslt;
  246. }
  247.  
  248. /////////// Dom Text node ///////////////
  249. var s_strHlStart=null;
  250. var s_strHlEnd =null;
  251.  
  252. function DomTextNode( a_Node, a_nFrom )
  253. {
  254.     this.node = a_Node;
  255.     this.nFrom = a_nFrom;
  256.     
  257.     this.aClosedRanges = new Array();
  258.  
  259.     this.getClosedRanges = function( a_aRanges, a_nStart )
  260.     {
  261.         var nTo = this.nFrom + a_Node.data.length;            
  262.         for ( var i = a_nStart; i < a_aRanges.length; i++ )
  263.         {
  264.             if ( a_aRanges[i].nStart <= nTo &&
  265.                  a_aRanges[i].nEnd >= this.nFrom )
  266.             {
  267.                 this.aClosedRanges[this.aClosedRanges.length] = new ClosedRange( a_aRanges[i].nStart > this.nFrom ? a_aRanges[i].nStart : this.nFrom,
  268.                                                                                  a_aRanges[i].nEnd < nTo ? a_aRanges[i].nEnd : nTo );
  269.             }
  270.             if ( a_aRanges[i].nEnd > nTo )
  271.             {
  272.                 return i;
  273.             }
  274.         }
  275.         return i;
  276.     }
  277.  
  278.     this.doHighlight = function( a_aRanges, a_nStart )
  279.     {
  280.         s_strHlStart = "<font style='color:" + gsTextColor + "; background-color:" + gsBkgndColor + "'>";
  281.         s_strHlEnd = "</font>";
  282.  
  283.         if ( a_nStart >= a_aRanges.length )
  284.             return a_nStart;
  285.  
  286.         var nEnd = this.getClosedRanges( a_aRanges, a_nStart );
  287.         if ( this.aClosedRanges.length == 0 )
  288.             return nEnd;
  289.         var strText = this.node.data;
  290.         var strHTML = "";
  291.         var nLastStart = 0;
  292.         for ( var i = 0; i < this.aClosedRanges.length; i++ )
  293.         {
  294.             strHTML += strText.substring( nLastStart, this.aClosedRanges[i].nStart - this.nFrom );
  295.             strHTML += s_strHlStart;
  296.             strHTML += strText.substring( this.aClosedRanges[i].nStart - this.nFrom,
  297.                                           this.aClosedRanges[i].nEnd - this.nFrom );
  298.             strHTML += s_strHlEnd;
  299.  
  300.             nLastStart = this.aClosedRanges[i].nEnd - this.nFrom;
  301.         }
  302.         strHTML += strText.substr( nLastStart );
  303.         
  304.         var spanElement = document.createElement( "span" );
  305.         spanElement.innerHTML = strHTML;
  306.         this.node.parentNode.replaceChild( spanElement, this.node );
  307.         if(gnYPos == -1)
  308.         {
  309.             var elemObj = spanElement;
  310.             var curtop = 0;
  311.                 if (elemObj.offsetParent)
  312.                 {
  313.                     while (elemObj.offsetParent)
  314.                     {
  315.                             curtop += elemObj.offsetTop
  316.                             elemObj = elemObj.offsetParent;
  317.                     }
  318.                 }
  319.                 else if (elemObj.y)
  320.                     curtop += elemObj.y;
  321.             
  322.             gnYPos = curtop;
  323.         }
  324.         return nEnd;
  325.     };
  326. }
  327.  
  328. function DomTexts()
  329. {
  330.     this.strText = "";
  331.     this.aNodes = new Array();
  332.     this.aRanges = new Array();
  333.  
  334.     this.addElementNode = function( a_Node )
  335.     {
  336.         if ( a_Node == null || a_Node.childNodes == null )
  337.             return;
  338.  
  339.         var nLen = a_Node.childNodes.length;
  340.         for ( var i = 0; i < nLen; i++ )
  341.         {
  342.             var node = a_Node.childNodes.item( i );
  343.             if ( node != null )
  344.             {
  345.                 if ( node.nodeType == 3 )
  346.                 {
  347.                     this.addTextNode( node );
  348.                 }
  349.                 else if ( node.nodeType == 1 )
  350.                 {
  351.                     this.addElementNode( node );
  352.                 }
  353.             }
  354.         }
  355.     }
  356.  
  357.     this.addTextNode = function( a_Node )
  358.     {
  359.         if ( a_Node == null )
  360.             return;
  361.  
  362.         var strInnerText = a_Node.data;
  363.         if ( strInnerText.length != 0 )
  364.         {
  365.             var nFrom = this.strText.length;
  366.             this.strText += strInnerText;
  367.             this.aNodes[this.aNodes.length] = new DomTextNode( a_Node, nFrom );
  368.         }
  369.     }
  370.  
  371.     this.isWordMatch = function( a_strHlWord, a_strTextWord )
  372.     {
  373.         return a_strTextWord.indexOf(a_strHlWord.toLowerCase()) != -1;
  374.     }
  375.                      
  376.     this.makeHighlightRanges = function()
  377.     {
  378.         if(typeof(gaSearchTerms[0]) == "undefined")
  379.             return;
  380.  
  381.         var str = gaSearchTerms[0].toLowerCase();
  382.         for(var j = 1; j < gaSearchTerms.length; j++)
  383.         {
  384.             str += "|" + gaSearchTerms[j].toLowerCase();
  385.             
  386.         }
  387.  
  388.         var regexp = new RegExp(str, "i");
  389.  
  390.         var aWords = dolSegment( this.strText );
  391.         for ( var i = 0; i < aWords.length; i++ )
  392.         {
  393.             var n = new Object;
  394.             n.index = 0;
  395.             var prevLen = 0;
  396.             var tmpStr1 = aWords[i].strWord.toLowerCase();
  397.  
  398.             while(n != null && n.index > -1)
  399.             {
  400.                 n = regexp.exec(tmpStr1);
  401.  
  402.                 if (n != null &&  n.index > -1 )
  403.                 {
  404.                     var strWord = n[0];
  405.                     this.aRanges[this.aRanges.length] = new ClosedRange( aWords[i].nCharLocation + prevLen + n.index,
  406.                                 aWords[i].nCharLocation + prevLen + n.index + strWord.length);
  407.                     prevLen = prevLen + n.index + strWord.length;                            
  408.                     tmpStr1 = tmpStr1.substring(n.index + strWord.length, tmpStr1.length);
  409.                 }
  410.             }
  411.         }
  412.     }
  413.     
  414.     this.highlightNodes = function()
  415.     {
  416.         var nFrom = 0;
  417.         for ( var i = 0; i < this.aNodes.length; i++ )
  418.             nFrom = this.aNodes[i].doHighlight( this.aRanges, nFrom );
  419.     }
  420.  
  421.     this.jump2FirstHighlightedWord = function()
  422.     {
  423.         if (gnYPos > 51)
  424.             window.scrollTo(0, gnYPos-50);
  425.     }
  426. }
  427.  
  428. function processSuspendNodes( a_aNodes )
  429. {
  430.     if ( a_aNodes.length == 0 )
  431.         return false;
  432.  
  433.     var dt = new DomTexts();
  434.  
  435.     //build dom texts...
  436.     for ( var i = 0; i < a_aNodes.length; i++ )
  437.     {
  438.         var node = a_aNodes[i];
  439.         if ( node.nodeType == 1 )
  440.         {
  441.             dt.addElementNode( node );
  442.         }
  443.         else if ( node.nodeType == 3 )
  444.         {
  445.             dt.addTextNode( node );
  446.         }
  447.     }
  448.     
  449.     dt.makeHighlightRanges();
  450.     dt.highlightNodes();
  451.     dt.jump2FirstHighlightedWord();
  452. }
  453.  
  454. var s_strRecursiveTags = "sub sup img applet object br iframe embed noembed param area input " +
  455.                          "select textarea button option hr frame noframes marquee label p dl " +
  456.                          "div center noscript blockquote form isindex table fieldset address layer " +
  457.                          "dt dd caption thead tfoot tbody tr th td lengend h1 h2 h3 h4 h5 h6 " +
  458.                          "ul ol dir menu li pre xmp listing plaintext ins del";
  459.  
  460. function doesTagRecursiveProcess( a_Node )
  461. {
  462.     if ( a_Node == null )
  463.         return false;
  464.  
  465.     var strTagName = a_Node.tagName.toLowerCase();
  466.     var rg = "\\b" + strTagName + "\\b";
  467.     var ss = s_strRecursiveTags.match( rg );
  468.     return ss != null;
  469. }
  470.  
  471. function doHighLightDomElement( a_aSuspendedNodes, a_Node )
  472. {
  473.     var childNodes = a_Node.childNodes;
  474.     
  475.     if ( childNodes == null || childNodes.length == 0 )
  476.         return;
  477.  
  478.     var nLen = childNodes.length;
  479.     for ( var i = 0; i < nLen; i++ )
  480.     {
  481.         var node = childNodes.item( i );
  482.         if ( node == null )
  483.             continue;
  484.  
  485.         if ( node.nodeType == 1 )
  486.         {    //element
  487.             if ( doesTagRecursiveProcess( node ) )
  488.             {
  489.                 if ( a_aSuspendedNodes.length > 0 )
  490.                 {
  491.                     processSuspendNodes( a_aSuspendedNodes );
  492.                     a_aSuspendedNodes.length = 0;
  493.                 }
  494.             }
  495.             doHighLightDomElement( a_aSuspendedNodes, node );
  496.         }
  497.         else if ( node.nodeType == 3 )
  498.         {    //text
  499.             a_aSuspendedNodes[a_aSuspendedNodes.length] = node;
  500.         }
  501.     }
  502. }
  503.  
  504. function highlightDocument()
  505. {
  506.     if ( !document.body || document.body == null )
  507.         return;
  508.         
  509.     var aSuspendedNodes = new Array();
  510.     doHighLightDomElement( aSuspendedNodes, document.body );
  511.     processSuspendNodes( aSuspendedNodes );
  512. }
  513.  
  514. /////// start routine /////////
  515.  
  516. function highlightSearch()
  517. {
  518.     var searchSetting = gsHiliteSearchSetting.match( "^(.+),(.+),(.*)$" );
  519.  
  520.     if(searchSetting == null)
  521.         return;
  522.  
  523.     if(searchSetting[1] != "enable")
  524.         return;
  525.  
  526.     gsBkgndColor = searchSetting[2];
  527.     gsTextColor = searchSetting[3];
  528.  
  529.     //check pane in focus is Search pane.
  530.     var oMsg=new whMessage(WH_MSG_GETPANEINFO,this,1,null);
  531.     if(SendMessage(oMsg)) {
  532.         if (oMsg.oParam != "fts") 
  533.             return;
  534.     }
  535.  
  536.     //check highlight result is enabled.
  537.     var oMsg=new whMessage(WH_MSG_HILITESEARCH,this,1,null);
  538.     if(SendMessage(oMsg))
  539.     {
  540.         if(oMsg.oParam == false)
  541.             return;
  542.     }
  543.     
  544.     //get string in search box.
  545.     var oMsg = new whMessage(WH_MSG_GETSEARCHSTR, this, 1, null);
  546.     var strTerms = "";
  547.     if (SendMessage(oMsg))
  548.     {
  549.         strTerms = oMsg.oParam;        
  550.     }
  551.  
  552.     findSearchTerms(strTerms, false);
  553.  
  554.     highlightDocument();
  555.  
  556. }
  557.  
  558. //////// common with FTS routines to identify stop word etc. ////////////
  559.  
  560. function findSearchTerms(searchTerms, bSkip)
  561. {
  562.     if(searchTerms != "")
  563.     {
  564.         var sInput=searchTerms;
  565.         var sCW="";
  566.         var nS=-1;
  567.         var nSep=-1;
  568.         for(var nChar=0;nChar<gsFtsBreakChars.length;nChar++){
  569.             var nFound=sInput.indexOf(gsFtsBreakChars.charAt(nChar));
  570.             if((nFound!=-1)&&((nS==-1)||(nFound<nS))){
  571.                 nS=nFound;
  572.                 nSep=nChar;
  573.             }
  574.         }
  575.         if(nS==-1){
  576.             sCW=sInput;
  577.             sInput="";
  578.         }
  579.         else
  580.         {
  581.             sCW=sInput.substring(0,nS);
  582.             sInput=sInput.substring(nS+1);
  583.         }
  584.  
  585.         searchTerms=sInput;
  586.         
  587.         var bAdd = true;
  588.         if((sCW=="or")||(sCW=="|"))
  589.         {
  590.             bSkip = false;
  591.             bAdd = false;
  592.         }
  593.         else if((sCW=="and")||(sCW=="&"))
  594.         {
  595.             bSkip = false;
  596.             bAdd = false;
  597.         }
  598.         else if((sCW=="not")||(sCW=="~"))
  599.         {
  600.             bSkip = true;
  601.             bAdd = false;
  602.         }
  603.  
  604.         if(bAdd && !bSkip && sCW!="" && sCW!=" " && !IsStopWord(sCW,gaFtsStop)){
  605.             gaSearchTerms[gaSearchTerms.length] = sCW;
  606.             var stemWord = GetStem(sCW);
  607.             if(stemWord != sCW)
  608.                 gaSearchTerms[gaSearchTerms.length] = stemWord;
  609.         }
  610.         findSearchTerms(searchTerms, bSkip);
  611.     }
  612.     
  613. }
  614.  
  615. function GetStem(szWord)
  616. {
  617.     if(gaFtsStem==null||gaFtsStem.length==0)return szWord;
  618.     if(IsNonAscii(szWord))             return szWord;
  619.     var aStems=gaFtsStem;
  620.  
  621.     var nStemPos=0;
  622.     var csStem="";
  623.     for(var iStem=0;iStem<aStems.length;iStem++){
  624.  
  625.         if(aStems[iStem].length>=szWord.length-1)    continue;
  626.         nStemPos=szWord.lastIndexOf(aStems[iStem]);
  627.         if(nStemPos>0){
  628.             var cssub=szWord.substring(nStemPos);
  629.             if(cssub==aStems[iStem]){
  630.                 csStem=szWord;
  631.                 if(szWord.charAt(nStemPos-2)==szWord.charAt(nStemPos-1)){
  632.                     csStem=csStem.substring(0,nStemPos-1);
  633.                 }else{
  634.                     csStem=csStem.substring(0,nStemPos);
  635.                 }
  636.                 return csStem;
  637.             }
  638.         }
  639.     }
  640.     return szWord;
  641. }
  642.  
  643. function IsStopWord(sCW,aFtsStopArray)
  644. {
  645.     var nStopArrayLen=aFtsStopArray.length;
  646.     var nB=0;
  647.     var nE=nStopArrayLen-1;
  648.     var nM=0;
  649.     var bFound=false;
  650.     var sStopWord="";
  651.     while(nB<=nE){
  652.         nM=(nB+nE);
  653.         nM>>=1;
  654.         sStopWord=aFtsStopArray[nM];
  655.         if(compare(sCW,sStopWord)>0){
  656.             nB=(nB==nM)?nM+1:nM;
  657.         }else{
  658.             if(compare(sCW,sStopWord)<0){
  659.                 nE=(nE==nM)?nM-1:nM;
  660.             }else{
  661.                 bFound=true;
  662.                 break;
  663.             }
  664.         }
  665.     }
  666.     return bFound;
  667. }
  668.  
  669. /////// end highlight search rountines /////////////
  670.  
  671. function setButtonFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)
  672. {
  673.     var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);
  674.     gsBtnStyle+=".whtbtn"+sType+"{"+getFontStyle(vFont)+"}";
  675. }
  676.  
  677. function writeBtnStyle()
  678. {
  679.     if(gaButtons.length>0)
  680.     {
  681.         if(gsBtnStyle.length>0)
  682.         {
  683.             var sStyle="<style type='text/css'>";
  684.             sStyle+=gsBtnStyle+"</style>";
  685.             document.write(sStyle);
  686.         }
  687.     }
  688. }
  689.  
  690. function button(sText,nWidth,nHeight)
  691. {
  692.     this.sText=sText;
  693.     this.nWidth=nWidth;
  694.     this.nHeight=nHeight;
  695.     
  696.     this.aImgs=new Array();
  697.     var i=0;
  698.     while(button.arguments.length>i+3)
  699.     {
  700.         this.aImgs[i]=button.arguments[3+i];
  701.         i++;
  702.     }
  703. }
  704.  
  705. //project info
  706. function setRelStartPage(sPath)
  707. {
  708.     if(gsPPath.length==0)
  709.     {
  710.         gsPPath=_getFullPath(_getPath(document.location.href),_getPath(sPath));
  711.         gsStartPage=_getFullPath(_getPath(document.location.href),sPath);
  712.         gsRelCurPagePath=_getRelativeFileName(gsStartPage,document.location.href);
  713.     }
  714. }
  715.  
  716. function getImage(oImage,sType)
  717. {
  718.     var sImg="";
  719.     if(oImage&&oImage.aImgs&&(oImage.aImgs.length>0))
  720.     {
  721.         sImg+="<img alt=\""+sType+"\" src=\""+oImage.aImgs[0]+"\"";
  722.         if(oImage.nWidth>0)
  723.             sImg+=" width="+oImage.nWidth;
  724.         if(oImage.nHeight>0)
  725.             sImg+=" height="+oImage.nHeight;
  726.         sImg+=" border=0>";
  727.     }
  728.     return sImg;
  729. }
  730.  
  731. function addTocInfo(sTocPath)
  732. {
  733.     gaPaths[gaPaths.length]=sTocPath;
  734. }
  735.  
  736. function addAvenueInfo(sName,sPrev,sNext)
  737. {
  738.     gaAvenues[gaAvenues.length]=new avenueInfo(sName,sPrev,sNext);    
  739. }
  740.  
  741. function addButton(sType,nStyle,sText,sHref,sOnClick,sOnMouseOver,sOnLoad,nWidth,nHeight,sImg1,sImg2,sImg3)
  742. {
  743.     var sButton="";
  744.     var nBtn=gaButtons.length;
  745.     if(sType=="prev")
  746.     {
  747.         if(canGo(false))
  748.         {
  749.             var sTitle="Previous Topic";
  750.             goPrev=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);
  751.             sButton="<a title=\""+sTitle+"\" class=\"whtbtnprev\" href=\"javascript:void(0);\" onclick=\"goAvenue(false);return false;\">";
  752.             if(nStyle==BTN_TEXT)
  753.                 sButton+=goPrev.sText;
  754.             else
  755.                 sButton+=getImage(goPrev,sTitle);
  756.             sButton+="</a>";
  757.         }
  758.     }
  759.     else if(sType=="next")
  760.     {
  761.         if(canGo(true))
  762.         {
  763.             var sTitle="Next Topic";
  764.             goNext=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);
  765.             sButton="<a title=\""+sTitle+"\" class=\"whtbtnnext\" href=\"javascript:void(0);\" onclick=\"goAvenue(true);return false;\">";
  766.             if(nStyle==BTN_TEXT)
  767.                 sButton+=goNext.sText;
  768.             else
  769.                 sButton+=getImage(goNext,sTitle);
  770.             sButton+="</a>";
  771.         }
  772.     }
  773.     else if(sType=="show")
  774.     {
  775.         if(isTopicOnly()&&(!gbOpera6||gbOpera7))
  776.         {
  777.             var sTitle="Show Navigation Component";
  778.             goShow=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);
  779.             sButton="<a title=\""+sTitle+"\" class=\"whtbtnshow\" href=\"javascript:void(0);\" onclick=\"show();return false;\">";
  780.             if(nStyle==BTN_TEXT)
  781.                 sButton+=goShow.sText;
  782.             else
  783.                 sButton+=getImage(goShow,sTitle);
  784.             sButton+="</a>";
  785.         }
  786.     }
  787.     else if(sType=="hide")
  788.     {
  789.         if(!isTopicOnly()&&!gbOpera6)
  790.         {
  791.             var sTitle="Hide Navigation Component";
  792.             goHide=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);
  793.             sButton="<a title=\""+sTitle+"\" class=\"whtbtnhide\" href=\"javascript:void(0);\" onclick=\"hide();return false;\">";
  794.             if(nStyle==BTN_TEXT)
  795.                 sButton+=goHide.sText;
  796.             else
  797.                 sButton+=getImage(goHide,sTitle);
  798.             sButton+="</a>";
  799.         }
  800.     }
  801.     else if(sType=="shownav")
  802.     {
  803.         if(isShowHideEnable())
  804.         {
  805.             var sTitle="Show Navigation Component";
  806.             goShowNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);
  807.             sButton="<a title=\""+sTitle+"\" class=\"whtbtnshownav\" href=\"javascript:void(0);\" onclick=\"showHidePane(true);return false;\">";
  808.             if(nStyle==BTN_TEXT)
  809.                 sButton+=goShowNav.sText;
  810.             else
  811.                 sButton+=getImage(goShowNav,sTitle);
  812.             sButton+="</a>";
  813.         }
  814.     }
  815.     else if(sType=="hidenav")
  816.     {
  817.         if(isShowHideEnable())
  818.         {
  819.             var sTitle="Hide Navigation Component";
  820.             goHideNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);
  821.             sButton="<a title=\""+sTitle+"\" class=\"whtbtnhidenav\" href=\"javascript:void(0);\" onclick=\"showHidePane(false);return false;\">";
  822.             if(nStyle==BTN_TEXT)
  823.                 sButton+=goHideNav.sText;
  824.             else
  825.                 sButton+=getImage(goHideNav,sTitle);
  826.             sButton+="</a>";
  827.         }
  828.     }
  829.     else if(sType=="synctoc")
  830.     {
  831.         if(gaPaths.length>0)
  832.         {
  833.             var sTitle="Sync TOC";
  834.             goSync=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);
  835.             sButton="<a title=\""+sTitle+"\" class=\"whtbtnsynctoc\" href=\"javascript:void(0);\" onclick=\"syncWithShow();return false;\">";
  836.             if(nStyle==BTN_TEXT)
  837.                 sButton+=goSync.sText;
  838.             else
  839.                 sButton+=getImage(goSync,sTitle);
  840.             sButton+="</a>";
  841.         }
  842.     }
  843.     else if(sType=="websearch")
  844.     {
  845.         if(gsSearchFormHref.length>0)
  846.         {
  847.             var sTitle="WebSearch";
  848.             goWebSearch=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);
  849.             sButton="<a title=\""+sTitle+"\" class=\"whtbtnwebsearch\" href=\""+gsSearchFormHref+"\">";
  850.             if(nStyle==BTN_TEXT)
  851.                 sButton+=goWebSearch.sText;
  852.             else
  853.                 sButton+=getImage(goWebSearch,sTitle);
  854.             sButton+="</a>";
  855.         }
  856.     }
  857.     else if(sType=="searchform")
  858.     {
  859.         gaButtons[nBtn]="NeedSearchForm";
  860.         gaTypes[nBtn]=sType;
  861.     }
  862.     if(sButton.length!=0)
  863.     {
  864.         if(nStyle==BTN_TEXT)
  865.             sButton+=" ";
  866.         gaButtons[nBtn]="<td>"+sButton+"</td>";
  867.         gaTypes[nBtn]=sType;
  868.     }
  869. }
  870.  
  871. function isSyncEnabled()
  872. {
  873.     if(!gbCheckSync)
  874.     {
  875.         var oMsg=new whMessage(WH_MSG_ISSYNCSSUPPORT,this,1,null);
  876.         if(SendMessage(oMsg))
  877.         {
  878.             gbSyncEnabled=oMsg.oParam;
  879.         }
  880.         gbCheckSync=true;
  881.     }
  882.     return gbSyncEnabled;
  883. }
  884.  
  885. function isInPopup()
  886. {
  887.     return (window.name.indexOf("BSSCPopup")!=-1);
  888. }
  889.  
  890. function getIntopicBar(sAlign)
  891. {
  892.     var sHTML="";
  893.     if(gaButtons.length>0)
  894.     {
  895.         sHTML+="<div align="+sAlign+">";
  896.  
  897.         sHTML+="<table cellpadding=\"2\" cellspacing=\"0\" border=\"0\"><tr>";
  898.         for(var i=0;i<gaButtons.length;i++)
  899.         {
  900.             if(gaTypes[i]!="synctoc"||isSyncEnabled())
  901.             {
  902.                 if(gaButtons[i]=="NeedSearchForm")
  903.                     sHTML+=getSearchFormHTML();
  904.                 else
  905.                     sHTML+=gaButtons[i];
  906.             }
  907.         }
  908.         sHTML+="</tr></table>";
  909.  
  910.         sHTML+="</div>";
  911.     }
  912.     return sHTML;
  913. }
  914.  
  915.  
  916. function writeIntopicBar(nAligns)
  917. {
  918.     if(isInPopup()) return;
  919.     if(gaButtons.length>0)
  920.     {
  921.         var sHTML="";
  922.         if(nAligns!=0)
  923.         {
  924.             sHTML+="<table width=100%><tr>"
  925.             if(nAligns&1)
  926.                 sHTML+="<td width=33%>"+getIntopicBar("left")+"</td>";
  927.             if(nAligns&2)
  928.                 sHTML+="<td width=34%>"+getIntopicBar("center")+"</td>";
  929.             if(nAligns&4)
  930.                 sHTML+="<td width=33%>"+getIntopicBar("right")+"</td>";
  931.             sHTML+="</tr></table>";
  932.             document.write(sHTML);
  933.         }
  934.     }
  935. }
  936.  
  937. function sendAveInfoOut()
  938. {
  939.     if(!isInPopup())
  940.         setTimeout("sendAveInfo();",100);
  941. }
  942.  
  943. function sendAveInfo()
  944. {
  945.     var oMsg=new whMessage(WH_MSG_AVENUEINFO,this,1,gaAvenues);
  946.     SendMessage(oMsg);
  947. }
  948.  
  949.  
  950. function onNext()
  951. {
  952.     var oMsg=new whMessage(WH_MSG_NEXT,this,1,null);
  953.     SendMessage(oMsg);
  954. }
  955.  
  956. function onPrev()
  957. {
  958.     var oMsg=new whMessage(WH_MSG_PREV,this,1,null);
  959.     SendMessage(oMsg);
  960. }
  961.  
  962. function createSyncInfo()
  963. {
  964.     var oParam=new Object();
  965.     if(gsPPath.length==0)
  966.         gsPPath=_getPath(document.location.href);
  967.     oParam.sPPath=gsPPath;
  968.     oParam.sTPath=document.location.href;
  969.     oParam.aPaths=gaPaths;
  970.     return oParam;
  971. }
  972.  
  973. function syncWithShow()
  974. {
  975.     if(isTopicOnly())
  976.         show();
  977.     else
  978.     {
  979.         sync();
  980.         showTocPane();
  981.     }
  982. }
  983.  
  984. function showTocPane()
  985. {
  986.     var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null);
  987.     SendMessage(oMsg);
  988. }
  989.  
  990. function sendSyncInfo()
  991. {
  992.     if(!isInPopup())
  993.     {
  994.         var oParam=null;
  995.         if(gaPaths.length>0)
  996.         {
  997.             oParam=createSyncInfo();
  998.         }
  999.         var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,oParam);
  1000.         SendMessage(oMsg);
  1001.     }
  1002. }
  1003.  
  1004. function sendInvalidSyncInfo()
  1005. {
  1006.     if(!isInPopup())
  1007.     {
  1008.         var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,null);
  1009.         SendMessage(oMsg);
  1010.     }
  1011. }
  1012.  
  1013. function enableWebSearch(bEnable)
  1014. {
  1015.     if(!isInPopup())
  1016.     {
  1017.         var oMsg=new whMessage(WH_MSG_ENABLEWEBSEARCH,this,1,bEnable);
  1018.         SendMessage(oMsg);
  1019.     }
  1020. }
  1021.  
  1022. function autoSync(nSync)
  1023. {
  1024.     if(nSync==0) return;
  1025.     if(isInPopup()) return;
  1026.     if(isOutMostTopic())
  1027.         sync();
  1028. }
  1029.  
  1030. function isOutMostTopic()
  1031. {
  1032.     if(gnOutmostTopic==-1)
  1033.     {
  1034.         var oMessage=new whMessage(WH_MSG_ISINFRAMESET,this,1,null);
  1035.         if(SendMessage(oMessage))
  1036.             gnOutmostTopic=0;
  1037.         else
  1038.             gnOutmostTopic=1;
  1039.     }
  1040.     return (gnOutmostTopic==1);
  1041. }
  1042.  
  1043. function sync()
  1044. {
  1045.     if(gaPaths.length>0)
  1046.     {
  1047.         var oParam=createSyncInfo();
  1048.         var oMessage=new whMessage(WH_MSG_SYNCTOC,this,1,oParam);
  1049.         SendMessage(oMessage);
  1050.     }
  1051. }
  1052.  
  1053.  
  1054. function avenueInfo(sName,sPrev,sNext)
  1055. {
  1056.     this.sName=sName;
  1057.     this.sPrev=sPrev;
  1058.     this.sNext=sNext;
  1059. }
  1060.  
  1061. function getCurrentAvenue()
  1062. {
  1063.     var oParam=new Object();
  1064.     oParam.sAvenue=null;
  1065.     var oMessage=new whMessage(WH_MSG_GETCURRENTAVENUE,this,1,oParam);
  1066.     SendMessage(oMessage);
  1067.     return oParam.sAvenue;
  1068. }
  1069.  
  1070. function unRegisterListener()
  1071. {
  1072.     sendInvalidSyncInfo();
  1073.     enableWebSearch(false);
  1074.     if(whtopic_foldUnload)
  1075.         whtopic_foldUnload();
  1076. }
  1077.  
  1078. function onSendMessage(oMsg)
  1079. {
  1080.     var nMsgId=oMsg.nMessageId;
  1081.     if(nMsgId==WH_MSG_GETAVIAVENUES)
  1082.     {
  1083.         oMsg.oParam.aAvenues=gaAvenues;
  1084.         return false;
  1085.     }
  1086.     else if(nMsgId==WH_MSG_GETTOCPATHS)
  1087.     {
  1088.         if(isOutMostTopic())
  1089.         {
  1090.             oMsg.oParam.oTocInfo=createSyncInfo();
  1091.             return false;        
  1092.         }
  1093.         else
  1094.             return true;
  1095.     }
  1096.     else if(nMsgId==WH_MSG_NEXT)
  1097.     {
  1098.         goAvenue(true);
  1099.     }
  1100.     else if(nMsgId==WH_MSG_PREV)
  1101.     {
  1102.         goAvenue(false);
  1103.     }
  1104.     else if(nMsgId==WH_MSG_WEBSEARCH)
  1105.     {
  1106.         websearch();
  1107.     }
  1108.     return true;
  1109. }
  1110.  
  1111. function goAvenue(bNext)
  1112. {
  1113.     var sTopic=null;
  1114.     var sAvenue=getCurrentAvenue();
  1115.     var nAvenue=-1;
  1116.     if(sAvenue!=null&&sAvenue!="")
  1117.     {
  1118.         for(var i=0;i<gaAvenues.length;i++)
  1119.         {
  1120.             if(gaAvenues[i].sName==sAvenue)
  1121.             {
  1122.                 nAvenue=i;
  1123.                 break;
  1124.             }
  1125.         }
  1126.         if(nAvenue!=-1)
  1127.         {
  1128.             if(bNext)
  1129.                 sTopic=gaAvenues[nAvenue].sNext;
  1130.             else
  1131.                 sTopic=gaAvenues[nAvenue].sPrev;
  1132.         }
  1133.     }
  1134.     else
  1135.     {
  1136.         for(var i=0;i<gaAvenues.length;i++)
  1137.         {
  1138.             if(gaAvenues[i].sNext!=null&&gaAvenues[i].sNext.length>0&&bNext)
  1139.             {
  1140.                 sTopic=gaAvenues[i].sNext;
  1141.                 break;
  1142.             }
  1143.             else if(gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext)
  1144.             {
  1145.                 sTopic=gaAvenues[i].sPrev;
  1146.                 break;
  1147.             }
  1148.         }
  1149.     }
  1150.     
  1151.     if(sTopic!=null&&sTopic!="")
  1152.     {
  1153.         if(gsPPath!=null&&gsPPath!="")
  1154.         {
  1155.             sFullTopicPath=_getFullPath(gsPPath,sTopic);
  1156.             document.location=sFullTopicPath;
  1157.         }
  1158.     }
  1159. }
  1160.  
  1161. function canGo(bNext)
  1162. {
  1163.     for(var i=0;i<gaAvenues.length;i++)
  1164.     {
  1165.         if((gaAvenues[i].sNext!=null&&gaAvenues[i].sNext.length>0&&bNext)||
  1166.             (gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext))
  1167.             return true;
  1168.     }
  1169.     return false;
  1170. }
  1171.  
  1172. function show()
  1173. {
  1174.     if(gsStartPage!="")
  1175.         window.location=gsStartPage+"#"+gsRelCurPagePath;
  1176. }
  1177.  
  1178. function hide()
  1179. {
  1180.     if(goFrame!=null)
  1181.     {
  1182.         goFrame.location=window.location;
  1183.     }
  1184. }
  1185.  
  1186. function isTopicOnly()
  1187. {
  1188.     if(gnTopicOnly==-1)
  1189.     {
  1190.         var oParam=new Object();
  1191.         oParam.oFrame=null;
  1192.         var oMsg=new whMessage(WH_MSG_GETSTARTFRAME,this,1,oParam);
  1193.         if(SendMessage(oMsg))
  1194.         {
  1195.             goFrame=oParam.oFrame;
  1196.             gnTopicOnly=0;
  1197.         }
  1198.         else
  1199.             gnTopicOnly=1;
  1200.     }
  1201.     if(gnTopicOnly==1)
  1202.         return true;
  1203.     else
  1204.         return false;
  1205. }
  1206.  
  1207. function websearch()
  1208. {
  1209.     if(gbNav4)
  1210.     {
  1211.         if(document.ehelpform)
  1212.             document.ehelpform.submit();
  1213.     }
  1214.     else
  1215.     {
  1216.         if(window.ehelpform)
  1217.             window.ehelpform.submit();
  1218.     }
  1219. }
  1220.  
  1221. function addSearchFormHref(sHref)
  1222. {
  1223.     gsSearchFormHref=sHref;
  1224.     enableWebSearch(true);
  1225. }
  1226.  
  1227. function searchB(nForm)
  1228. {
  1229.     var sValue=eval("document.searchForm"+nForm+".searchString.value");
  1230.     var oMsg=new whMessage(WH_MSG_SEARCHTHIS,this,1,sValue);
  1231.     SendMessage(oMsg);
  1232. }
  1233.  
  1234. function getSearchFormHTML()
  1235. {
  1236.     var sHTML="";
  1237.     gnForm++;
  1238.     var sFormName="searchForm"+gnForm;
  1239.     var sButton="<form name=\""+sFormName+"\" method=\"POST\" action=\"javascript:searchB("+gnForm+")\">"
  1240.     sButton+="<input type=\"text\" name=\"searchString\" value=\"- Full Text search -\" size=\"20\"/>";
  1241.     if(""=="text")
  1242.     {
  1243.         sButton+="<a class=\"searchbtn\" href=\"javascript:void(0);\" onclick=\""+sFormName+".submit();return false;\"></a>";
  1244.     }
  1245.     else if(""=="image")
  1246.     {
  1247.         sButton+="<a class=\"searchbtn\" href=\"javascript:void(0);\" onclick=\""+sFormName+".submit();return false;\">"
  1248.         sButton+="<img src=\"\" border=0></a>";
  1249.     }
  1250.     sButton+="</form>";
  1251.     sHTML="<td align=\"center\">"+sButton+"</td>";
  1252.     return sHTML;
  1253. }
  1254.  
  1255. function showHidePane(bShow)
  1256. {
  1257.     var oMsg=null;
  1258.     if(bShow)
  1259.         oMsg=new whMessage(WH_MSG_SHOWPANE,this,1,null);
  1260.     else
  1261.         oMsg=new whMessage(WH_MSG_HIDEPANE,this,1,null);
  1262.     SendMessage(oMsg);
  1263. }
  1264.  
  1265. function isShowHideEnable()
  1266. {
  1267.     if(gbIE4)
  1268.         return true;
  1269.     else
  1270.         return false;
  1271. }
  1272.  
  1273.  
  1274. function PickupDialog_Invoke()
  1275. {
  1276.     if(!gbIE4||gbMac)
  1277.     {
  1278.         if(typeof(_PopupMenu_Invoke)=="function")
  1279.             return _PopupMenu_Invoke(PickupDialog_Invoke.arguments);
  1280.     }
  1281.     else
  1282.     {
  1283.         if(PickupDialog_Invoke.arguments.length>2)
  1284.         {
  1285.             var sPickup="whskin_pickup.htm";
  1286.             var sPickupPath=gsPPath+sPickup;
  1287.             if(gbIE4)
  1288.             {
  1289.                 var sFrame=PickupDialog_Invoke.arguments[1];
  1290.                 var aTopics=new Array();
  1291.                 for(var i=2;i<PickupDialog_Invoke.arguments.length;i+=2)
  1292.                 {
  1293.                     var j=aTopics.length;
  1294.                     aTopics[j]=new Object();
  1295.                     aTopics[j].m_sName=PickupDialog_Invoke.arguments[i];
  1296.                     aTopics[j].m_sURL=PickupDialog_Invoke.arguments[i+1];
  1297.                 }
  1298.  
  1299.                 if(aTopics.length>1)
  1300.                 {
  1301.                     var nWidth=300;
  1302.                     var nHeight=180;
  1303.                     var    nScreenWidth=screen.width;
  1304.                     var    nScreenHeight=screen.height;
  1305.                     var nLeft=(nScreenWidth-nWidth)/2;
  1306.                     var nTop=(nScreenHeight-nHeight)/2;
  1307.                     if(gbIE4)
  1308.                     {
  1309.                         var vRet=window.showModalDialog(sPickupPath,aTopics,"dialogHeight:"+nHeight+"px;dialogWidth:"+nWidth+"px;resizable:yes;status:no;scroll:no;help:no;center:yes;");
  1310.                         if(vRet)
  1311.                         {
  1312.                             var sURL=vRet.m_url;
  1313.                             if(sFrame)
  1314.                                 window.open(sURL,sFrame);
  1315.                             else
  1316.                                 window.open(sURL,"_self");
  1317.                         }
  1318.                     }
  1319.                 }
  1320.                 else if(aTopics.length==1)
  1321.                 {
  1322.                     var sURL=aTopics[0].m_sURL
  1323.                     if(sFrame)
  1324.                         window.open(sURL,sFrame);
  1325.                     else
  1326.                         window.open(sURL,"_self");
  1327.                 }
  1328.             }
  1329.         }
  1330.     }
  1331. }
  1332.  
  1333. if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy)
  1334. {
  1335.     RegisterListener("bsscright",WH_MSG_GETAVIAVENUES);
  1336.     RegisterListener("bsscright",WH_MSG_GETTOCPATHS);
  1337.     RegisterListener("bsscright",WH_MSG_NEXT);
  1338.     RegisterListener("bsscright",WH_MSG_PREV);
  1339.     RegisterListener("bsscright",WH_MSG_WEBSEARCH);
  1340.     if(gbMac&&gbIE4)
  1341.     {
  1342.         if(typeof(window.onunload)!="unknown")
  1343.             if(window.onunload.toString!=unRegisterListener.toString)
  1344.                 whtopic_foldUnload=window.onunload;
  1345.     }
  1346.     else
  1347.     {
  1348.         if(window.onunload)
  1349.             if(window.onunload.toString!=unRegisterListener.toString)
  1350.                 whtopic_foldUnload=window.onunload;
  1351.     }
  1352.     window.onunload=unRegisterListener;
  1353.     setButtonFont("show","","10pt","","","","");
  1354.  
  1355.     gbWhTopic=true;
  1356. }
  1357. else
  1358.     document.location.reload();