home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 May / CHIPCD200305.iso / super / altn / md_en.exe / WHTHOST.JS < prev    next >
Encoding:
JavaScript  |  2003-04-14  |  29.5 KB  |  1,490 lines

  1. //    WebHelp 5.10.006
  2. var gaHSLoad=new Array();
  3. var gnMinIdx=0;
  4. var gnInsIdx=-1;
  5. var gsLoadingDivID="LoadingDiv";
  6. var gsLoadingMsg="Loading, click here to cancel...";
  7. var gaProj=null;
  8. var gaTocs=new Array();
  9. var goChunk=null;
  10. var gbReady=false;
  11. var gbToc=false;
  12. var gbXML=false;
  13. var gaRoot=new Array();
  14. var gnCC=-1;
  15. var gsTP="";
  16. var gaBTPs="";
  17. var gsCTPath="";
  18. var gnLT=-1;
  19. var gsPathSplit="\n";
  20. var gsBgColor="#ffffff";
  21. var gsBgImage="";
  22. var goFont=null;
  23. var goHFont=null;
  24.  
  25. var gsMargin="0pt";
  26. var gsIndent="15pt";
  27. var gsABgColor="#cccccc";
  28.  
  29. var giBookClose="";
  30. var giBookOpen="";
  31. var giBookItem="";
  32. var giURLItem="";
  33. var giNewBookClose="";
  34. var giNewBookOpen="";
  35. var giNewBookItem="";
  36. var giNewURLItem="";
  37. var gnImages=0;
  38. var gnLoadedImages=0;
  39. var gaImgs=new Array();
  40. var gbLoadData=false;
  41. var gobj=null;
  42. var gaTocsNs61Fix=null;
  43. var gbWhTHost=false;
  44. var gBookItems=new Array();
  45. var gInSync=false;
  46. var gbLData=false;
  47. var gbNeedFillStub=false;
  48. var gbLoadToc=false;
  49.  
  50. function chunkInfoQueue()
  51. {
  52.     this.aContent=new Array();
  53.     this.inQueue=function(cInfo)
  54.     {
  55.         this.aContent[this.aContent.length]=cInfo;
  56.     }
  57.     this.deQueue=function()
  58.     {
  59.         var cInfo=null;
  60.         if(this.aContent.length>0)
  61.         {
  62.             cInfo=this.aContent[0];
  63.             for(var i=1;i<this.aContent.length;i++)
  64.                 this.aContent[i-1]=this.aContent[i];
  65.             this.aContent.length--;
  66.         }
  67.         return cInfo;
  68.     }
  69.     this.length=function()
  70.     {
  71.         return this.aContent.length;
  72.     }
  73. }
  74.  
  75. var gchunkRequestQueue=new chunkInfoQueue();
  76.  
  77. function chunkInfo(nIdx, bLocal)
  78. {
  79.     this.nIdx=nIdx;
  80.     this.bLocal=bLocal;
  81. }
  82.  
  83. function setBackground(sBgImage)
  84. {
  85.     gsBgImage=sBgImage;
  86. }
  87.  
  88. function setBackgroundcolor(sBgColor)
  89. {
  90.     gsBgColor=sBgColor;
  91. }
  92.  
  93. function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)
  94. {
  95.     var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);
  96.     if(sType=="Normal") goFont=vFont;
  97.     else if(sType=="Hover") goHFont=vFont;
  98. }
  99.  
  100. function setActiveBgColor(sBgColor){gsABgColor=sBgColor;}
  101.  
  102. function setMargin(sMargin){gsMargin=sMargin;}
  103.  
  104. function setIndent(sIndent){gsIndent=sIndent;}
  105.  
  106. function setIcon(sType,sURL)
  107. {
  108.     if(sType=="BookOpen")
  109.         giBookOpen=sURL;
  110.     else if(sType=="BookClose")
  111.         giBookClose=sURL;
  112.     else if(sType=="Item")
  113.         giBookItem=sURL;
  114.     else if(sType=="RemoteItem")
  115.         giURLItem=sURL;
  116.     else if(sType=="NewBookClose")
  117.         giNewBookClose=sURL;
  118.     else if(sType=="NewBookOpen")
  119.         giNewBookOpen=sURL;
  120.     else if(sType=="NewItem")
  121.         giNewBookItem=sURL;
  122.     else if(sType=="NewRemoteItem")
  123.         giNewURLItem=sURL;        
  124. }
  125.  
  126. function bookItem(sTarget,sURL)
  127. {
  128.     if(sTarget)
  129.         this.sTarget=sTarget;
  130.     else
  131.         this.sTarget="bsscright";
  132.     this.sURL=sURL;
  133. }
  134.  
  135. function addBookItem(sBookId,sTarget,sURL)
  136. {
  137.     gBookItems[sBookId]=new bookItem(sTarget,sURL);        
  138. }
  139.  
  140. function tocChunk(sPPath,sDPath)
  141. {
  142.     this.sPPath=sPPath;
  143.     this.sDPath=sDPath;
  144.     this.nMI=-1;
  145.     this.aTocs=null;
  146. }
  147.  
  148. function addTocChunk(sPPath,sDPath)
  149. {
  150.     var oChunk=new tocChunk(sPPath,sDPath);
  151.     gaTocs[gaTocs.length]=oChunk;
  152.     return oChunk;
  153. }
  154.  
  155. function isHSLoad(nIdx)
  156. {
  157.     for(var i=0;i<gaHSLoad.length;i++)
  158.         if(gaHSLoad[i]==nIdx)
  159.             return true;
  160.     return false;
  161. }
  162.  
  163. function setHSLoad(nIdx)
  164. {
  165.     if(!isHSLoad(nIdx))
  166.     {
  167.         var len=gaHSLoad.length;
  168.         for(var i=0;i<len;i++)
  169.             if(gaHSLoad[i]==-1)
  170.             {
  171.                 gaHSLoad[i]=nIdx;
  172.                 return;
  173.             }
  174.         gaHSLoad[len]=nIdx;
  175.     }
  176. }
  177.  
  178. function setHSUnLoad(nIdx)
  179. {
  180.     if(isHSLoad(nIdx))
  181.     {
  182.         for(var i=0;i<gaHSLoad.length;i++)
  183.             if(gaHSLoad[i]==nIdx)
  184.             {
  185.                 gaHSLoad[i]=-1;
  186.                 return;
  187.             }
  188.     }
  189. }
  190.  
  191. function removeLoadingDiv()
  192. {
  193.     var eLoadingDiv=getElement(gsLoadingDivID);
  194.     if(eLoadingDiv)
  195.         removeThis(eLoadingDiv);
  196. }
  197.  
  198. function checkBookItem(nIdx)
  199. {
  200.     if(!gInSync)
  201.     {
  202.         var sBookId=getBookId(nIdx);
  203.         if(gBookItems[sBookId])
  204.         {
  205.             window.open(gBookItems[sBookId].sURL,gBookItems[sBookId].sTarget);
  206.         }
  207.     }
  208. }
  209.  
  210. function insertBookItems(nIdx,num)
  211. {
  212.     checkBookItem(nIdx);
  213.     var sChildBookId=getCBId(nIdx);
  214.     var eChildDiv=getElement(sChildBookId);
  215.     if(eChildDiv){
  216.         if((eChildDiv.childNodes&&eChildDiv.childNodes.length==0)||
  217.             (eChildDiv.all&&eChildDiv.all.length==0)){
  218.             var sHTML=writeBookItems(nIdx,num);
  219.             eChildDiv.innerHTML=sHTML;
  220.             setTimeout("syncInit()",1);
  221.         }
  222.     }
  223.     ExpandIt(nIdx);
  224. }
  225.  
  226. function isBookEmpty(nIdx)
  227. {
  228.     var num=getItemContentsNum(nIdx);
  229.     if (num>0)
  230.     {
  231.         var nCIdx=0;
  232.         do {
  233.             nCIdx++;
  234.             var i=nIdx+nCIdx;
  235.             var nItemType=getItemType(i);
  236.             if(nItemType==1){
  237.                 if (!isBookEmpty(i))
  238.                     return false;
  239.             }
  240.             else if(nItemType==4){
  241.                 var    sSrc=getRefURL(i);
  242.                 var nProj=getProject(sSrc);
  243.                 if(nProj!=-1){
  244.                     sSrc=gaRoot[nProj].sToc;
  245.                     if(sSrc)
  246.                         return false;
  247.                 }
  248.             }
  249.             else if(nItemType==2||nItemType==16||nItemType==8)
  250.                 return false;
  251.         } while(nCIdx<num);
  252.     }
  253.     return true;
  254. }
  255.  
  256. function writeBook(nIdx)
  257. {
  258.     var sIcon=getBookImage(nIdx,true);
  259.     var sName=_textToHtml(getItemName(nIdx));
  260.     sIcon=_textToHtml_nonbsp(sIcon);
  261.     
  262.     var nType=getItemType(nIdx);
  263.     var bLocal=(nType==1);
  264.     var bLocalProject=(nType!=4);
  265.     
  266.     var sHTML="<div id=\""+getPBId(nIdx)+"\" class=";
  267.     if(bLocal)
  268.     {
  269.         if (!isBookEmpty(nIdx))
  270.         {
  271.             sHTML+="parent><p><nobr><a id=\""+getBookId(nIdx)+"\" href=\"javascript:void(0);\" onfocus=\"markBook("+nIdx+");\" onclick=\"";
  272.             sHTML+="insertBookItems("+nIdx+", "+getItemContentsNum(nIdx);
  273.             sHTML+=");return false;\" title=\""+sName+"\"><img alt=\"Book\" name=\""+getBId(nIdx)+"\" src=\""+sIcon+"\" border=0 align=\"absmiddle\">";
  274.             sHTML+=" "+sName+"</a></nobr></p></div>";
  275.             var sURL=_textToHtml_nonbsp(getItemURL(nIdx));
  276.             if(sURL!="")
  277.                 addBookItem(getBookId(nIdx),_textToHtml_nonbsp(getTopicTarget(nIdx)),sURL);
  278.             sHTML+="<div id=\""+getCBId(nIdx)+"\" class=child></div>";
  279.         }
  280.         else
  281.             sHTML="";
  282.     }
  283.     else
  284.     {
  285.         sHTML+="stub></div>";
  286.         gbNeedFillStub=true;
  287.         setTimeout("fillStub("+nIdx+","+bLocalProject+");",100);
  288.     }
  289.     return sHTML;
  290. }
  291.  
  292. function checkFillStub()
  293. {
  294.     if(!gbLData)
  295.     {
  296.         if(gchunkRequestQueue.length()>0)
  297.         {
  298.             var cInfo=gchunkRequestQueue.deQueue();
  299.             if(cInfo)
  300.             {
  301.                 fillStub(cInfo.nIdx,cInfo.bLocal);
  302.                 return;
  303.             }
  304.         }
  305.     }
  306.     if(gbNeedFillStub)
  307.     {
  308.         gbNeedFillStub=false;
  309.         setTimeout("syncInit()",1);
  310.     }
  311. }
  312.  
  313. function fillStub(nIdx,bLocalProject)
  314. {
  315.     if(!gbLData)
  316.     {
  317.         gbLData=true;
  318.         var sObj=getElement(getPBId(nIdx));
  319.         if(sObj!=null)
  320.         {
  321.             tocExpandHelpSet(nIdx,bLocalProject);
  322.             gbNeedFillStub=false;
  323.             setTimeout("syncInit()",1);
  324.         }
  325.         else
  326.             setTimeout("fillStub("+nIdx+","+bLocalProject+");",100);
  327.     }
  328.     else
  329.         gchunkRequestQueue.inQueue(new chunkInfo(nIdx,bLocalProject));
  330. }
  331.  
  332. function getBookId(nIdx){return "B_"+nIdx;}
  333.  
  334. function getItemId(nIdx){return "I_"+nIdx;}
  335.  
  336. function markBook(nIdx)
  337. {
  338.     var obj=getElement(getItemId(nIdx));
  339.     if(obj==null)
  340.         obj=getElement(getBookId(nIdx));
  341.     if(gbNav6)
  342.     {
  343.         gobj=obj;
  344.         setTimeout("delayMarkObj();",1);
  345.     }
  346.     else
  347.         markObj(obj);
  348. }
  349.  
  350. function delayMarkObj()
  351. {
  352.     if(gobj)
  353.     {
  354.         markObj(gobj);
  355.         gobj=null;
  356.     }
  357. }
  358.  
  359. function markObj(obj)
  360. {
  361.     if(obj!=null)
  362.     {
  363.         HighLightElement(obj,gsABgColor,"transparent");
  364.         var sPath=calTocPath(obj);
  365.         if(gsCTPath!=sPath)
  366.             gsCTPath=sPath;
  367.     }
  368. }
  369.  
  370. function markItem(nIdx)
  371. {
  372.     var obj=getElement(getItemId(nIdx));
  373.     if(gbNav6)
  374.     {
  375.         gobj=obj;
  376.         setTimeout("delayMarkObj();",1);
  377.     }
  378.     else
  379.         markObj(getElement(getItemId(nIdx)));
  380. }
  381.  
  382. function calTocPath(obj)
  383. {
  384.     var sPath=getInnerText(obj).substring(1);
  385.     var pObj=getParentNode(obj);
  386.     do
  387.     {
  388.         while(pObj!=null&&!isCBId(pObj.id)) pObj=getParentNode(pObj);
  389.         if(pObj!=null)
  390.         {
  391.             var nId=getIdByCBId(pObj.id);
  392.             var sObj=getElement(getPBId(nId));
  393.             if(sObj!=null)
  394.             {
  395.                 var objs=getItemsByBook(sObj);
  396.                 for(var i=0;i<objs.length;i++)
  397.                 {
  398.                     var sText=getInnerText(objs[i]);
  399.                     
  400.                     if(sText.length!=0)
  401.                     {
  402.                         sPath=sText.substring(1)+gsPathSplit+sPath;
  403.                         break;
  404.                     }
  405.                 }
  406.             }
  407.             pObj=getParentNode(pObj);
  408.         }
  409.     }while(pObj!=null);
  410.     return sPath;
  411. }
  412.  
  413. function writeAnItem(nIdx)
  414. {
  415.     var sTarget=_textToHtml_nonbsp(getTopicTarget(nIdx));
  416.     var sIcon=getItemIcon(nIdx,0);
  417.     if(sIcon=="")
  418.     {
  419.         var nItemType=getItemType(nIdx);
  420.         if(nItemType&2)
  421.             sIcon=getItemImage(nIdx,false);
  422.         else
  423.             sIcon=getItemImage(nIdx,true);
  424.     }
  425.     sIcon=_textToHtml_nonbsp(sIcon);
  426.     var sName=_textToHtml(getItemName(nIdx));
  427.     var sHTML="<p><nobr><a id=\""+getItemId(nIdx)+"\" onfocus=\"markItem("+nIdx+");\""
  428.     var sAltString="";
  429.     if(nItemType&2)
  430.         sAltString="Page";
  431.     else
  432.         sAltString="Remote Page";
  433.     if(sTarget!="")
  434.         sHTML+="target=\""+sTarget+"\" ";
  435.     sHTML+="href=\""+_textToHtml_nonbsp(getItemURL(nIdx))+"\" title=\""+sName+"\"><img alt=\""+sAltString+"\" src=\""+sIcon+"\" border=0 align=\"absmiddle\"> "+sName+"</a></nobr></p>";
  436.     return sHTML;
  437. }
  438.  
  439. function writeBookItems(nIdx,num)
  440. {
  441.     var sHTML="";
  442.     if(num>0){
  443.         var nCIdx=0;
  444.         do{
  445.             nCIdx++;
  446.             var i=nIdx+nCIdx;
  447.             var nItemType=getItemType(i);
  448.             if(nItemType==1||nItemType==4||nItemType==8){
  449.                 sHTML+=writeBook(i);    
  450.                 nCIdx+=getItemContentsNum(i);        
  451.             }
  452.             else if(nItemType==2||nItemType==16){
  453.                 sHTML+=writeAnItem(i);
  454.             }
  455.         }
  456.         while(nCIdx<num);
  457.     }
  458.     return sHTML;
  459. }
  460.  
  461. function tocExpandHelpSet(nIdx,bLocal)
  462. {
  463.     checkBookItem(nIdx);
  464.     removeLoadingDiv();
  465.     if(!isHSLoad(nIdx))
  466.     {
  467.         setHSLoad(nIdx);
  468.         var sSrc="";
  469.         if(bLocal){
  470.             var oChunk=getChunk(nIdx);
  471.             if(oChunk)
  472.             {
  473.                 goChunk=addTocChunk(oChunk.sPPath,oChunk.sDPath);
  474.                 sSrc=oChunk.aTocs[nIdx-oChunk.nMI].sRefURL;
  475.             }
  476.         }
  477.         else{
  478.             sSrc=getRefURL(nIdx);
  479.             var nProj=getProject(sSrc);
  480.             if(nProj!=-1)
  481.             {
  482.                 sSrc=gaRoot[nProj].sToc;
  483.                 if(sSrc)
  484.                     goChunk=addTocChunk(gaProj[nProj].sPPath,gaProj[nProj].sDPath);
  485.                 else
  486.                     goChunk=null;
  487.             }
  488.             else
  489.                 goChunk=null;
  490.         }
  491.         if(goChunk)
  492.         {
  493.             PrepareLoading(nIdx);
  494.             gbToc=false;
  495.             loadData2(goChunk.sPPath+goChunk.sDPath+sSrc);
  496.         }
  497.         else
  498.         {
  499.             gbLData=false;
  500.             checkFillStub();
  501.         }
  502.     }
  503. }
  504.  
  505. function getProject(sSrc)
  506. {
  507.     for(var i=0;i<gaProj.length;i++)
  508.         if(isSamePath(getPath(sSrc),gaProj[i].sPPath))
  509.             return i;
  510.     return -1;
  511. }
  512.  
  513. function getPath(sPath)
  514. {
  515.     if(sPath!="")
  516.     {
  517.         sPath=_replaceSlash(sPath);
  518.         var nPosFile=sPath.lastIndexOf("/");
  519.         sPath=sPath.substring(0,nPosFile+1);
  520.     }
  521.     return sPath;
  522. }
  523.  
  524. function isSamePath(sPath1,sPath2)
  525. {
  526.     return (sPath1.toLowerCase()==sPath2.toLowerCase());
  527. }
  528.  
  529. function PrepareLoading(nIdx)
  530. {
  531.     gnInsIdx=nIdx;
  532.     if(!gsTP)
  533.     {
  534.         var oObj=getElement(getPBId(gnInsIdx));
  535.         if(oObj)
  536.             oObj.insertAdjacentHTML("afterEnd",writeLoadingDiv(nIdx));
  537.     }
  538. }
  539.  
  540. function writeLoadingDiv(nIdx)
  541. {
  542.     return"<div id=\""+gsLoadingDivID+"\" class=parent onclick=\"removeLoadingDiv();\" style=\"padding-left:4px;background-color:ivory;border-width:1;border-style:solid;border-color:black;width:150px;\">"+gsLoadingMsg+"</div>";
  543. }
  544.  
  545. function getItemName(nIdx)
  546. {
  547.     var oChunk=getChunk(nIdx);
  548.     if(oChunk)
  549.         return oChunk.aTocs[nIdx-oChunk.nMI].sItemName;
  550.     else
  551.         return null;
  552. }
  553.  
  554. function getItemContentsNum(nIdx)
  555. {
  556.     var oChunk=getChunk(nIdx);
  557.     if(oChunk)
  558.         return oChunk.aTocs[nIdx-oChunk.nMI].nContents;
  559.     else
  560.         return null;
  561. }
  562.  
  563. function getItemType(nIdx)
  564. {
  565.     var oChunk=getChunk(nIdx);
  566.     if(oChunk)
  567.         return oChunk.aTocs[nIdx-oChunk.nMI].nType;
  568.     else
  569.         return 0;
  570. }
  571.  
  572. function getItemURL(nIdx)
  573. {
  574.     var oChunk=getChunk(nIdx);
  575.     if(oChunk)
  576.     {
  577.         var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sItemURL;
  578.         if(!(sPath==null||sPath==""))
  579.         {
  580.             return _getFullPath(oChunk.sPPath,sPath);
  581.         }
  582.     }
  583.     return "";
  584. }
  585.  
  586. function getRefURL(nIdx)
  587. {
  588.     var oChunk=getChunk(nIdx);
  589.     if(oChunk)
  590.     {
  591.         var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sRefURL;
  592.         if(!(sPath==null||sPath==""))
  593.         {
  594.             return _getFullPath(oChunk.sPPath,sPath)
  595.         }
  596.     }
  597.     return "";
  598. }
  599.  
  600. function getTopicTarget(nIdx)
  601. {
  602.     var oChunk=getChunk(nIdx);
  603.     if(oChunk)
  604.     {
  605.         if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sTarget)!="undefined")
  606.             return oChunk.aTocs[nIdx-oChunk.nMI].sTarget;
  607.     }
  608.     return "";
  609. }
  610.  
  611. function getItemIcon(nIdx,nIconIdx)
  612. {
  613.     var oChunk=getChunk(nIdx);
  614.     if(oChunk)
  615.     {
  616.         if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sIconRef)!="undefined")
  617.         {
  618.             var sIconRef=oChunk.aTocs[nIdx-oChunk.nMI].sIconRef;
  619.             var nIndex=sIconRef.indexOf(";");
  620.             while(nIconIdx-->0&&nIndex!=-1)
  621.             {
  622.                 sIconRef=sIconRef.substring(nIndex+1);
  623.                 nIndex=sIconRef.indexOf(";");
  624.             }
  625.             if(nIconIdx<0)
  626.             {
  627.                 if(nIndex!=-1)
  628.                     sIconRef=sIconRef.substring(0,nIndex);
  629.                 return _getFullPath(oChunk.sPPath,sIconRef)
  630.             }
  631.         }
  632.     }
  633.     return "";
  634. }
  635.  
  636. function TocWriteClassStyle()
  637. {
  638.     var sStyle="<STYLE TYPE='text/css'>\n";
  639.     if(gsBgImage)
  640.         sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";
  641.     else
  642.         sStyle+="body {border-top:black 1px solid;}\n";
  643.     sStyle+="P {"+getFontStyle(goFont)+"margin-top:"+gsMargin+";margin-bottom:"+gsMargin+";}\n";
  644.     sStyle+="DIV {margin-top:"+gsMargin+";margin-bottom:"+gsMargin+";}\n";
  645.     sStyle+=".parent {margin-left:0pt;}\n";
  646.     sStyle+=".stub {margin-left:0pt;display:none}\n";
  647.     sStyle+=".child {display:none;margin-left:"+gsIndent+";}\n";
  648.     sStyle+="A:link {"+getFontStyle(goFont)+"}\n";
  649.     sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";
  650.     sStyle+="A:active {background-color:"+gsABgColor+";}\n";
  651.     sStyle +="A:hover {"+getFontStyle(goHFont)+"}\n";
  652.     sStyle+="</STYLE>";
  653.     document.write(sStyle);
  654. }
  655.  
  656. function TocWriteFixedWidth(bBegin,nWidth)
  657. {
  658.     if((gbIE4)&&(gbMac)&&(!gbIE5)){
  659.         if(bBegin)
  660.             document.write("<table width="+nWidth+" border=0><tr><td>");
  661.         else
  662.             document.write("</td></tr></table>");
  663.     }
  664. }
  665.  
  666. function TocInitPage()
  667. {
  668.     var tempColl=getItemsByBook(document.body);
  669.     if(tempColl.length>0)
  670.         tempColl[0].focus();
  671. }
  672.  
  673. function getItemsFromObj(obj)
  674. {
  675.     var aAnchor=new Array();
  676.     var tempColl=getChildrenByTag(obj,"P");
  677.     if(tempColl&&tempColl.length>0)
  678.     {
  679.         var anobr=new Array();
  680.         for(var i=0;i<tempColl.length;i++)
  681.         {
  682.             var tempNobr=getChildrenByTag(tempColl[i],"NOBR");
  683.             if(tempNobr&&tempNobr.length>0)
  684.                 for(var j=0;j<tempNobr.length;j++)
  685.                     anobr[anobr.length]=tempNobr[j];
  686.         }
  687.         for(var s=0;s<anobr.length;s++)
  688.         {
  689.             var tempAnchor=getChildrenByTag(anobr[s],"A");
  690.             if(tempAnchor&&tempAnchor.length>0)
  691.                 for(var u=0;u<tempAnchor.length;u++)
  692.                     aAnchor[aAnchor.length]=tempAnchor[u];
  693.         }
  694.     }
  695.     return aAnchor;
  696. }
  697.  
  698. function getItemsByBook(obj)
  699. {
  700.     var aAnchor=new Array();
  701.     var aTAnchor=getItemsFromObj(obj);
  702.     for(var i=0;i<aTAnchor.length;i++)
  703.         aAnchor[aAnchor.length]=aTAnchor[i];
  704.     var tempBook=getChildrenByTag(obj,"DIV");
  705.     if(tempBook&&tempBook.length>0)
  706.         for(var j=0;j<tempBook.length;j++)
  707.         {
  708.             var aTAnchorDiv=getItemsFromObj(tempBook[j]);
  709.             for(var s=0;s<aTAnchorDiv.length;s++)
  710.                 aAnchor[aAnchor.length]=aTAnchorDiv[s];
  711.         }
  712.     return aAnchor;
  713. }
  714.  
  715. function ExpandIt(nId)
  716. {
  717.     if(!gsTP)
  718.         ExpandIt2(nId,false);
  719. }
  720.  
  721. function ExpandIt2(nId,bForceOpen)
  722. {
  723.     if(gbIE4||gbNav6){
  724.         var oC=TocExpand(nId,true,bForceOpen);
  725.         var nNewScroll=document.body.scrollTop;
  726.         if(oC.style.display=="block"){
  727.             var nTop=oC.offsetTop;
  728.             var nBottom=nTop+oC.offsetHeight;
  729.             if(document.body.scrollTop+document.body.clientHeight<nBottom){
  730.                 nNewScroll=nBottom-document.body.clientHeight;
  731.             }
  732.             if(nBottom-nTop>document.body.clientHeight){
  733.                 nNewScroll=nTop-20;
  734.             }
  735.         }
  736.         document.body.scrollTop=nNewScroll;
  737.     }
  738. }
  739.  
  740. function TocExpand(nId,bChangeImg,bForceOpen)
  741. {
  742.     var oDiv=getElement(getCBId(nId));
  743.     if(oDiv==null) return null;
  744.  
  745.     var whichIm=document.images[getBId(nId)];
  746.     if((oDiv.style.display!="block")||bForceOpen){
  747.         oDiv.style.display="block";
  748.         if(bChangeImg){
  749.             var sPath=getPath(whichIm.src);
  750.             sPath=_getFullPath(sPath,getBookImage(nId,false));
  751.             whichIm.src=sPath;        
  752.         }
  753.     }else{
  754.         oDiv.style.display="none";
  755.         if(bChangeImg){
  756.             var sPath=getPath(whichIm.src);
  757.             sPath=_getFullPath(sPath,getBookImage(nId,true));
  758.             whichIm.src=sPath;
  759.         }
  760.         if(gbMac&&gbIE5){
  761.             this.parent.document.getElementById("tocIFrame").style.width="101%";
  762.             this.parent.document.getElementById("tocIFrame").style.width="100%";
  763.         }
  764.     }
  765.     return oDiv;
  766. }
  767.  
  768. function getChunkId(n)
  769. {
  770.     var nCan=-1;
  771.     for(var i=0;i<gaTocs.length;i++)
  772.         if(gaTocs[i].nMI<=n&&gaTocs[i].nMI!=-1)
  773.         {
  774.             if(nCan==-1)
  775.                 nCan=i;
  776.             else
  777.                 if(gaTocs[i].nMI>=gaTocs[nCan].nMI)
  778.                     nCan=i;
  779.         }
  780.     if(nCan!=-1)
  781.         return nCan;
  782.     else
  783.         return -1;
  784. }
  785.  
  786. function getChunk(n)
  787. {
  788.     if(gnCC!=-1&&gaTocs[gnCC].nMI<=n&&(gnCC==gaTocs.length-1||
  789.         gaTocs[gnCC+1].nMI>n))
  790.     {    
  791.         return gaTocs[gnCC];
  792.     }
  793.     else{
  794.         gnCC=getChunkId(n);
  795.         if(gnCC!=-1)
  796.             return gaTocs[gnCC];
  797.         else
  798.             return null;
  799.     }
  800. }
  801.  
  802. function getBookImage(nIdx,bClosed)
  803. {
  804.     var nIdx=bClosed?0:1;
  805.     var sIcon=getItemIcon(nIdx,nIdx);
  806.     if(sIcon=="")
  807.         if(bClosed)
  808.             sIcon=giBookClose;
  809.         else
  810.             sIcon=giBookOpen;
  811.     return _getFullPath(gaProj[0].sPPath,sIcon);
  812. }
  813.  
  814. function getItemImage(nIdx,bRemote)
  815. {
  816.     var sIcon=getItemIcon(nIdx,0);
  817.     if(sIcon=="")
  818.         if(bRemote)
  819.             sIcon=giURLItem;
  820.         else
  821.             sIcon=giBookItem;
  822.     return _getFullPath(gaProj[0].sPPath,sIcon);
  823. }
  824.  
  825. function expandToc(oObj,sRest,aIdList)
  826. {
  827.     var len=aIdList.length;
  828.     var nPos=sRest.indexOf(gsPathSplit);
  829.     if(nPos!=-1)
  830.     {
  831.         sPart=sRest.substring(0,nPos);
  832.         sRest=sRest.substring(nPos+1);
  833.     }
  834.     else
  835.     {
  836.         sPart=sRest;
  837.         var aTagAs=getItemsByBook(oObj);
  838.         for(var s=0;s<aTagAs.length;s++)
  839.         {
  840.             var sText=getInnerText(aTagAs[s]);
  841.             if(sText.length>0)
  842.                 sText=sText.substring(1);
  843.             if(sText==sPart)
  844.             {
  845.                 aIdList[len]=aTagAs[s];
  846.                 return 1;
  847.             }
  848.         }
  849.         return 0;
  850.     }
  851.         
  852.     var aChildren=getChildrenByTag(oObj,"DIV");
  853.     for(var i=0;i<aChildren.length;i++)
  854.     {
  855.         var sPId=aChildren[i].id;
  856.         if(!isPBId(sPId))
  857.             continue;
  858.         var sText=getInnerText(aChildren[i]);
  859.         if(sText.substring(1)!=sPart)
  860.             continue;
  861.         aIdList[len]=getIdByPBId(sPId);
  862.         var sCId=getCBId(aIdList[len]);
  863.         var oCObj=getElement(sCId);
  864.         if(oCObj)
  865.         {
  866.             if(oCObj.innerHTML=="")
  867.             {
  868.                 var obj=getItemsByBook(aChildren[i]);
  869.                 if(obj.length>0)
  870.                 {
  871.                     if(gbNav6)
  872.                     {
  873.                         var sCommand=obj[0].getAttribute("onClick");
  874.                         var nCommand=sCommand.indexOf(";");
  875.                         sCommand=sCommand.substring(0,nCommand);
  876.                         setTimeout(sCommand,1);
  877.                     }
  878.                     else
  879.                         obj[0].click();
  880.                 }
  881.                 return -1;
  882.             }
  883.             var nRet=expandToc(oCObj,sRest,aIdList);
  884.             if(nRet)
  885.                 return nRet;
  886.         }
  887.     }
  888.     aIdList.length=len;
  889.     return 0;
  890. }
  891.  
  892. function getIdByPBId(sPId)
  893. {
  894.     return parseInt(sPId.substring(2,sPId.length-1));
  895. }
  896.  
  897. function getIdByCBId(sCId)
  898. {
  899.     return parseInt(sCId.substring(2,sCId.length-1));
  900. }
  901.  
  902. function isPBId(sId)
  903. {
  904.     return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("P")==sId.length-1);
  905. }
  906.  
  907. function isCBId(sId)
  908. {
  909.     return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("C")==sId.length-1);
  910. }
  911.  
  912. function getBId(nIdx)
  913. {
  914.     return "B_"+nIdx;
  915. }
  916.  
  917. function getPBId(nIdx)
  918. {
  919.     return getBId(nIdx)+"P";
  920. }
  921.  
  922. function getCBId(nIdx)
  923. {
  924.     return getBId(nIdx)+"C";
  925. }
  926.  
  927. function getClosestTocPath(aPaths)
  928. {
  929.     var nMaxSimilarity=0;
  930.     var nThatIndex=-1;
  931.     var sPath=null;
  932.     if(aPaths.length==0) return sPath;
  933.     for(var i=0;i<aPaths.length;i++)
  934.     {
  935.         var nSimilarity=comparePath(gsCTPath,aPaths[i]);
  936.         if(nSimilarity>nMaxSimilarity)
  937.         {
  938.             nMaxSimilarity=nSimilarity;
  939.             nThatIndex=i;
  940.         }
  941.     }
  942.     if(nThatIndex!=-1)
  943.         sPath=aPaths[nThatIndex];
  944.     else
  945.         sPath=aPaths[0];
  946.     return sPath;
  947. }
  948.  
  949. function comparePath(sPath1,sPath2)
  950. {
  951.     var nMaxSimilarity=0;
  952.     var nStartPos1=0;
  953.     var nPos1=-1;
  954.     var nStartPos2=0;
  955.     var nPos2=-1;
  956.     do{
  957.         var sCheck1=null;
  958.         var sCheck2=null;
  959.         nPos1=sPath1.indexOf(gsPathSplit,nStartPos1);
  960.         if(nPos1!=-1)
  961.         {
  962.             sCheck1=sPath1.substring(nStartPos1,nPos1);
  963.             nStartPos1=nPos1+1;
  964.         }
  965.         else
  966.         {
  967.             sCheck1=sPath1.substring(nStartPos1);
  968.             nStartPos1=-1;
  969.         }
  970.         nPos2=sPath2.indexOf(gsPathSplit,nStartPos2);
  971.         if(nPos1!=-1)
  972.         {
  973.             sCheck2=sPath2.substring(nStartPos2,nPos2);
  974.             nStartPos2=nPos2+1;
  975.         }
  976.         else
  977.         {
  978.             sCheck2=sPath2.substring(nStartPos2);
  979.             nStartPos2=-1;
  980.         }
  981.         if(sCheck1==sCheck2)
  982.             nMaxSimilarity++;
  983.         else
  984.             break;
  985.     }while(nStartPos1!=-1&&nStartPos2!=-1);
  986.     return nMaxSimilarity;
  987. }
  988.  
  989. function getTocPaths(oTopicParam)
  990. {
  991.     var aRelTocPaths=oTopicParam.aPaths;
  992.     var aPaths=new Array();
  993.     for(var i=0;i<gaProj.length;i++)
  994.         if(isSamePath(gaProj[i].sPPath,oTopicParam.sPPath))
  995.         {
  996.             for(var j=0;j<aRelTocPaths.length;j++)
  997.                 for (var k=0;k<gaRoot[i].aRPath.length;k++)
  998.                 {
  999.                     var sPath=gaRoot[i].aRPath[k]+aRelTocPaths[j];
  1000.                     aPaths[aPaths.length]=sPath.substring(1);
  1001.                 }
  1002.             break;
  1003.         }
  1004.     return aPaths;
  1005. }
  1006.  
  1007. function syncInit()
  1008. {
  1009.     if(gsTP&&!gbNeedFillStub)
  1010.     {
  1011.         gInSync=true;
  1012.         var obj=document.body;
  1013.         var aIdList=new Array();
  1014.         var nRet=expandToc(obj,gsTP,aIdList);
  1015.         if(nRet!=-1)
  1016.         {
  1017.             if(nRet==1)
  1018.             {
  1019.                 if(aIdList.length)
  1020.                     for(var i=0;i<aIdList.length-1;i++)
  1021.                         ExpandIt2(aIdList[i],true);
  1022.                 gsCTPath=gsTP;
  1023.                 if(!gbIE55)
  1024.                     aIdList[aIdList.length-1].focus();
  1025.                 else
  1026.                     HighLightElement(aIdList[aIdList.length-1],gsABgColor,"transparent");
  1027.             }
  1028.             var aPaths=gaBTPs;
  1029.             gsTP=null;
  1030.             gaBTPs=null;
  1031.             if(aPaths!=null)
  1032.             {
  1033.                 var sPath=getClosestTocPath(aPaths);
  1034.                 if(sPath!=null)
  1035.                 {    
  1036.                     gsTP=sPath;        
  1037.                     setTimeout("syncInit()",1);
  1038.                 }
  1039.             }
  1040.         }
  1041.         gInSync=false;
  1042.     }
  1043. }
  1044.  
  1045. function loadToc()
  1046. {
  1047.     if(!gbLoadToc)
  1048.     {
  1049.         var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);
  1050.         if(SendMessage(oResMsg)&&oResMsg.oParam)
  1051.         {
  1052.             gbLoadToc=true;
  1053.             var oProj=oResMsg.oParam;
  1054.             gaProj=oProj.aProj;
  1055.             gbXML=oProj.bXML;
  1056.             load1B1();
  1057.         }
  1058.     }
  1059. }
  1060.  
  1061. function load1B1()
  1062. {
  1063.     if(gnLT+1<gaProj.length)
  1064.         for(var i=gnLT+1;i<gaProj.length;i++)
  1065.             if(gaProj[i].sToc)
  1066.             {
  1067.                 gbToc=true;
  1068.                 gnLT=i;
  1069.                 setTimeout("loadTocInfo()",1);
  1070.                 return true;
  1071.             }
  1072.     return false;
  1073. }
  1074.  
  1075. function loadTocInfo()
  1076. {
  1077.     loadData2(gaProj[gnLT].sPPath+gaProj[gnLT].sDPath+gaProj[gnLT].sToc);
  1078. }
  1079.  
  1080. function loadData2(sFile)
  1081. {
  1082.     if(gbXML)
  1083.         loadDataXML(sFile);
  1084.     else
  1085.         loadData(sFile);
  1086. }
  1087.  
  1088. function projReady(sRoot,aProj)
  1089. {
  1090.     if(gaRoot.length<=gnLT||!gaRoot[gnLT])
  1091.         gaRoot[gnLT]=new Object();
  1092.     gaRoot[gnLT].sToc=sRoot;
  1093.     
  1094.     if(gnLT==0)
  1095.     {
  1096.         gaRoot[gnLT].aRPath=new Array();
  1097.         gaRoot[gnLT].aRPath[0]=gsPathSplit;
  1098.     }
  1099.  
  1100.     updatePTPath(gnLT,aProj);
  1101.  
  1102.     if(!((gnLT+1<gaProj.length)&&load1B1()))
  1103.     {
  1104.         gbReady=true;
  1105.         if(gbIE4)
  1106.             setTimeout("loadImages();",1);
  1107.         else
  1108.             setTimeout("loadTData();",1);
  1109.     }
  1110. }
  1111.  
  1112. function loadTData()
  1113. {
  1114.     if(gaProj[0].sToc!="")
  1115.     {
  1116.         gbLData=true;
  1117.         goChunk=addTocChunk(gaProj[0].sPPath,gaProj[0].sDPath);
  1118.         gbToc=false;
  1119.         loadData2(gaProj[0].sPPath+gaProj[0].sDPath+gaRoot[0].sToc);
  1120.     }
  1121. }
  1122.  
  1123. function updatePTPath(n,aProj)
  1124. {
  1125.     if(aProj)
  1126.         for(var i=0;i<aProj.length;i++)
  1127.         {
  1128.             var sFullPath=_getFullPath(gaProj[n].sPPath,aProj[i].sPPath);
  1129.             for(var j=0;j<gaProj.length;j++)
  1130.                 if(isSamePath(sFullPath,gaProj[j].sPPath))
  1131.                 {
  1132.                     if(gaRoot.length<=j||!gaRoot[j])
  1133.                         gaRoot[j]=new Object();
  1134.                     if(!gaRoot[j].aRPath)
  1135.                         gaRoot[j].aRPath=new Array();
  1136.  
  1137.                     if(gaRoot[n].aRPath)
  1138.                         for(var k=0;k<gaRoot[n].aRPath.length;k++)
  1139.                         {
  1140.                             var bDup=false;
  1141.                             var sTFPath=gaRoot[n].aRPath[k]+aProj[i].sRPath;
  1142.                             for(var l=0;l<gaRoot[j].aRPath.length;l++)
  1143.                                 if(gaRoot[j].aRPath[l]==sTFPath)
  1144.                                 {
  1145.                                     bDup=true;
  1146.                                     break;
  1147.                                 }
  1148.                             if(!bDup)
  1149.                                 gaRoot[j].aRPath[gaRoot[j].aRPath.length]=sTFPath;
  1150.                         }
  1151.                     else
  1152.                         gaRoot[j].aRPath[gaRoot[j].aRPath.length]=aProj[i].sRPath;
  1153.                     break;
  1154.                 }
  1155.         }
  1156. }
  1157.  
  1158. function onLoadXMLError()
  1159. {
  1160.     if(gbToc)
  1161.     {
  1162.         var sRoot="";
  1163.         var aRProj=new Array();
  1164.         projReady(sRoot,aRProj);
  1165.     }
  1166.     else
  1167.     {
  1168.         var aToc=new Array();
  1169.         putData(aToc)
  1170.     }
  1171. }
  1172.  
  1173. function putDataXML(xmlDoc,sDocPath)
  1174. {
  1175.     if(gbToc)
  1176.     {
  1177.         var tocNode=xmlDoc.getElementsByTagName("toc")[0];
  1178.         if(tocNode)
  1179.         {
  1180.             var sRoot=tocNode.getAttribute("root");
  1181.             var rmtProject=tocNode.getElementsByTagName("project");
  1182.             var aRProj=new Array();
  1183.             if(rmtProject.length>0)
  1184.             {
  1185.                 for(var i=0;i<rmtProject.length;i++)
  1186.                 {
  1187.                     aRProj[i]=new Object();
  1188.                     var sURL=rmtProject[i].getAttribute("url");
  1189.                     if(sURL)
  1190.                     {
  1191.                         if(sURL.lastIndexOf("/")!=sURL.length-1)
  1192.                             sURL+="/";                        
  1193.                     }
  1194.                     aRProj[i].sPPath=sURL;
  1195.                     aRProj[i].sRPath=rmtProject[i].getAttribute("path");
  1196.                 }
  1197.             }
  1198.             projReady(sRoot,aRProj);
  1199.         }
  1200.     }
  1201.     else
  1202.     {
  1203.         var chunkNode=xmlDoc.getElementsByTagName("tocdata")[0];
  1204.         if(chunkNode)
  1205.         {
  1206.             var aToc=new Array();
  1207.             processBook(chunkNode,aToc);
  1208.             putData(aToc);
  1209.         }
  1210.     }
  1211. }
  1212.  
  1213. function processBook(node,aToc)
  1214. {
  1215.     var i=0;
  1216.     var entry=null;
  1217.     var prevEntry=null;
  1218.     var oChild=node.firstChild;
  1219.     do{
  1220.         if(oChild)
  1221.         {
  1222.             if(oChild.nodeName.indexOf("#")!=0)
  1223.             {
  1224.                 var sName=oChild.getAttribute("name");
  1225.                 var sURL=oChild.getAttribute("url");
  1226.                 var sRef=oChild.getAttribute("ref");
  1227.                 var sTarget=oChild.getAttribute("target");
  1228.                 var sIcons=oChild.getAttribute("images");
  1229.                 var item=new Object();
  1230.                 item.sItemName=sName;
  1231.                 if(sTarget)
  1232.                     item.sTarget=sTarget;
  1233.                 if(sIcons)
  1234.                     item.sIconRef=sIcons;
  1235.                 if(sURL==null) sURL="";
  1236.  
  1237.                 item.sItemURL=sURL;
  1238.                 
  1239.                 if(oChild.nodeName=="book")
  1240.                 {
  1241.                     item.nType=1;
  1242.                     aToc[aToc.length]=item;
  1243.                     var nCurrPos=aToc.length;
  1244.                     processBook(oChild,aToc);
  1245.                     item.nContents=aToc.length-nCurrPos;
  1246.                 }
  1247.                 else if(oChild.nodeName=="item")
  1248.                 {
  1249.                     item.nType=2;
  1250.                     item.nContents=0;
  1251.                     aToc[aToc.length]=item;
  1252.                 }
  1253.                 else if(oChild.nodeName=="remoteitem")
  1254.                 {
  1255.                     item.nType=16;
  1256.                     item.nContents=0;
  1257.                     aToc[aToc.length]=item;
  1258.                 }
  1259.                 else if(oChild.nodeName=="project")
  1260.                 {
  1261.                     if(sRef)
  1262.                     {
  1263.                         if(sRef.lastIndexOf("/")!=sRef.length-1)
  1264.                             sRef+="/";                        
  1265.                     }
  1266.                     item.nType=4;
  1267.                     item.sRefURL=sRef;
  1268.                     item.nContents=0;
  1269.                     aToc[aToc.length]=item;
  1270.                 }
  1271.                 else if(oChild.nodeName=="chunk")
  1272.                 {
  1273.                     item.nType=8;
  1274.                     item.sRefURL=sRef;
  1275.                     item.nContents=0;
  1276.                     aToc[aToc.length]=item;
  1277.                 }
  1278.             }
  1279.         }
  1280.         else
  1281.             break;
  1282.         oChild=oChild.nextSibling;
  1283.     }while(true);
  1284. }
  1285.  
  1286. function putData(aTocs)
  1287. {
  1288.     gaTocsNs61Fix=aTocs;
  1289.     setTimeout("realPutData();",1);
  1290. }
  1291.  
  1292. function realPutData()
  1293. {
  1294.     removeLoadingDiv();
  1295.     var aTocs=gaTocsNs61Fix;
  1296.     if(!aTocs) return;
  1297.     if(goChunk)
  1298.     {
  1299.         var n=gnMinIdx;
  1300.         goChunk.nMI=gnMinIdx;
  1301.         goChunk.aTocs=aTocs;
  1302.         gnMinIdx+=aTocs.length;
  1303.         if(gnInsIdx!=-1)
  1304.         {
  1305.             var oObj=getElement(getPBId(gnInsIdx));
  1306.             if(oObj)
  1307.             {
  1308.                 oObj.insertAdjacentHTML("afterEnd",writeBookItems(n-1,aTocs.length));
  1309.                 setTimeout("syncInit()",1);
  1310.             }
  1311.         }
  1312.         else{
  1313.             document.body.insertAdjacentHTML("beforeEnd",writeBookItems(n-1,aTocs.length));
  1314.             var oParam=new Object();
  1315.             oParam.oTocInfo=null;
  1316.             var oMsg=new whMessage(WH_MSG_GETTOCPATHS,this,1,oParam);
  1317.             if(SendMessage(oMsg))
  1318.             {
  1319.                 if(oMsg.oParam.oTocInfo)
  1320.                     syncWithPaths(oMsg.oParam.oTocInfo);
  1321.             }
  1322.         }    
  1323.     }
  1324.     gbLData=false;
  1325.     checkFillStub();
  1326. }
  1327.  
  1328. function syncWithPaths(oTopicParam)
  1329. {
  1330.     var aPaths=getTocPaths(oTopicParam);
  1331.     if(gsTP)
  1332.         gaBTPs=aPaths;
  1333.     else{
  1334.         var sPath=getClosestTocPath(aPaths);
  1335.         if(sPath!=null)
  1336.         {
  1337.             gsTP=sPath;
  1338.             setTimeout("syncInit()",1);
  1339.         }
  1340.     }
  1341. }
  1342.  
  1343. function window_OnLoad()
  1344. {
  1345.     if(gsBgImage&&gsBgImage.length>0)
  1346.     {
  1347.         document.body.background=gsBgImage;
  1348.     }
  1349.     if(gsBgColor&&gsBgColor.length>0)
  1350.     {
  1351.         document.body.bgColor=gsBgColor;
  1352.     }
  1353.     loadToc();
  1354.     var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null)
  1355.     SendMessage(oMsg);
  1356. }
  1357.  
  1358. function loadImages()
  1359. {
  1360.     if(giBookClose)
  1361.     {
  1362.         gaImgs[gnImages]=giBookClose;
  1363.         gnImages++;
  1364.     }        
  1365.     if(giBookOpen)
  1366.     {
  1367.         gaImgs[gnImages]=giBookOpen;
  1368.         gnImages++;
  1369.     }        
  1370.     if(giBookItem)
  1371.     {
  1372.         gaImgs[gnImages]=giBookItem;
  1373.         gnImages++;
  1374.     }        
  1375.     if(giURLItem)
  1376.     {
  1377.         gaImgs[gnImages]=giURLItem;
  1378.         gnImages++;
  1379.     }        
  1380.     if(giNewBookClose)
  1381.     {
  1382.         gaImgs[gnImages]=giNewBookClose;
  1383.         gnImages++;
  1384.     }        
  1385.     if(giNewBookOpen)
  1386.     {
  1387.         gaImgs[gnImages]=giNewBookOpen;
  1388.         gnImages++;
  1389.     }        
  1390.     if(giNewBookItem)
  1391.     {
  1392.         gaImgs[gnImages]=giNewBookItem;
  1393.         gnImages++;
  1394.     }        
  1395.     if(giNewURLItem)
  1396.     {
  1397.         gaImgs[gnImages]=giNewURLItem;
  1398.         gnImages++;
  1399.     }
  1400.     if(gnImages>0)
  1401.     {
  1402.         setTimeout("loadDataAfter();",1000);
  1403.         loadImage(gaImgs[0]);
  1404.     }
  1405.     else
  1406.         loadDataAfter();
  1407. }
  1408.  
  1409. function loadImage(sURL)
  1410. {
  1411.     var oImg=new Image();
  1412.     oImg.onload=checkImageLoading;
  1413.     oImg.onerror=errorImageLoading;
  1414.     oImg.src=_getFullPath(gaProj[0].sPPath,sURL);
  1415. }
  1416.  
  1417. function loadDataAfter()
  1418. {
  1419.     if(!gbLoadData)
  1420.     {
  1421.         gbLoadData=true;
  1422.         loadTData();
  1423.     }
  1424. }
  1425.  
  1426. function errorImageLoading()
  1427. {
  1428.     gnLoadedImages++;
  1429.     if(gnImages==gnLoadedImages)
  1430.         loadDataAfter();
  1431.     else
  1432.         loadImage(gaImgs[gnLoadedImages]);    
  1433. }
  1434.  
  1435. function checkImageLoading()
  1436. {
  1437.     gnLoadedImages++;
  1438.     if(gnImages==gnLoadedImages)
  1439.         loadDataAfter();
  1440.     else
  1441.         loadImage(gaImgs[gnLoadedImages]);    
  1442. }
  1443.  
  1444. function window_unload()
  1445. {
  1446.     UnRegisterListener2(this,WH_MSG_PROJECTREADY);
  1447.     UnRegisterListener2(this,WH_MSG_SYNCTOC);
  1448.     UnRegisterListener2(this,WH_MSG_SHOWTOC);
  1449. }
  1450.  
  1451. function onSendMessage(oMsg)
  1452. {
  1453.     if(oMsg)
  1454.     {
  1455.         var nMsgId=oMsg.nMessageId;
  1456.         if(nMsgId==WH_MSG_PROJECTREADY)
  1457.         {
  1458.             loadToc();
  1459.         }
  1460.         else if(nMsgId==WH_MSG_SYNCTOC)
  1461.         {
  1462.             if(gbReady)
  1463.             {
  1464.                 syncWithPaths(oMsg.oParam);
  1465.             }
  1466.         }
  1467.         else if(nMsgId==WH_MSG_SHOWTOC)
  1468.         {
  1469.             if(!gbNav6)
  1470.                 document.body.focus();
  1471.         }
  1472.     }
  1473.     return true;
  1474. }
  1475.  
  1476. if(window.gbWhUtil&&window.gbWhVer&&window.gbWhMsg&&window.gbWhProxy)
  1477. {
  1478.     RegisterListener2(this,WH_MSG_PROJECTREADY);
  1479.     RegisterListener2(this,WH_MSG_SYNCTOC);
  1480.     RegisterListener2(this,WH_MSG_SHOWTOC);
  1481.     goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");
  1482.     goHFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");
  1483.  
  1484.     window.onload=window_OnLoad;
  1485.     window.onbeforeunload=window_BUnload;
  1486.     window.onunload=window_unload;
  1487.     gbWhTHost=true;
  1488. }
  1489. else
  1490.     document.location.reload();