home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 October / CHIP1002.ISO / exe / COMPUGUI.exe / whthost.js < prev    next >
Encoding:
Text File  |  2002-04-23  |  26.9 KB  |  1,373 lines

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