Salome HOME
*** empty log message ***
[modules/smesh.git] / doc / salome / gui / SMESH / whthost.js
index 80806d7c72807d53523b7668fdf4d965e6bbc21a..54ddc9aacf72aa8b858677bb56a2074f645ae4e0 100755 (executable)
@@ -1,3 +1,4 @@
+//     WebHelp 5.10.007\r
 var gaHSLoad=new Array();\r
 var gnMinIdx=0;\r
 var gnInsIdx=-1;\r
@@ -7,7 +8,7 @@ var gaProj=null;
 var gaTocs=new Array();\r
 var goChunk=null;\r
 var gbReady=false;\r
-var gbLoadToc=false;\r
+var gbToc=false;\r
 var gbXML=false;\r
 var gaRoot=new Array();\r
 var gnCC=-1;\r
@@ -42,6 +43,42 @@ var gaTocsNs61Fix=null;
 var gbWhTHost=false;\r
 var gBookItems=new Array();\r
 var gInSync=false;\r
+var gbLData=false;\r
+var gbNeedFillStub=false;\r
+var gbLoadToc=false;\r
+\r
+function chunkInfoQueue()\r
+{\r
+       this.aContent=new Array();\r
+       this.inQueue=function(cInfo)\r
+       {\r
+               this.aContent[this.aContent.length]=cInfo;\r
+       }\r
+       this.deQueue=function()\r
+       {\r
+               var cInfo=null;\r
+               if(this.aContent.length>0)\r
+               {\r
+                       cInfo=this.aContent[0];\r
+                       for(var i=1;i<this.aContent.length;i++)\r
+                               this.aContent[i-1]=this.aContent[i];\r
+                       this.aContent.length--;\r
+               }\r
+               return cInfo;\r
+       }\r
+       this.length=function()\r
+       {\r
+               return this.aContent.length;\r
+       }\r
+}\r
+\r
+var gchunkRequestQueue=new chunkInfoQueue();\r
+\r
+function chunkInfo(nIdx, bLocal)\r
+{\r
+       this.nIdx=nIdx;\r
+       this.bLocal=bLocal;\r
+}\r
 \r
 function setBackground(sBgImage)\r
 {\r
@@ -86,18 +123,18 @@ function setIcon(sType,sURL)
                giNewURLItem=sURL;              \r
 }\r
 \r
-function bookItem(sTarget, sURL)\r
+function bookItem(sTarget,sURL)\r
 {\r
-       if (sTarget)\r
+       if(sTarget)\r
                this.sTarget=sTarget;\r
        else\r
                this.sTarget="bsscright";\r
        this.sURL=sURL;\r
 }\r
 \r
-function addBookItem(sBookId, sTarget, sURL)\r
+function addBookItem(sBookId,sTarget,sURL)\r
 {\r
-       gBookItems[sBookId] = new bookItem(sTarget, sURL);              \r
+       gBookItems[sBookId]=new bookItem(sTarget,sURL);         \r
 }\r
 \r
 function tocChunk(sPPath,sDPath)\r
@@ -117,10 +154,9 @@ function addTocChunk(sPPath,sDPath)
 \r
 function isHSLoad(nIdx)\r
 {\r
-       for(var i=0;i<gaHSLoad.length;i++){\r
+       for(var i=0;i<gaHSLoad.length;i++)\r
                if(gaHSLoad[i]==nIdx)\r
                        return true;\r
-       }\r
        return false;\r
 }\r
 \r
@@ -129,13 +165,12 @@ function setHSLoad(nIdx)
        if(!isHSLoad(nIdx))\r
        {\r
                var len=gaHSLoad.length;\r
-               for(var i=0;i<len;i++){\r
+               for(var i=0;i<len;i++)\r
                        if(gaHSLoad[i]==-1)\r
                        {\r
                                gaHSLoad[i]=nIdx;\r
                                return;\r
                        }\r
-               }\r
                gaHSLoad[len]=nIdx;\r
        }\r
 }\r
@@ -144,44 +179,20 @@ function setHSUnLoad(nIdx)
 {\r
        if(isHSLoad(nIdx))\r
        {\r
-               for(var i=0;i<gaHSLoad.length;i++){\r
+               for(var i=0;i<gaHSLoad.length;i++)\r
                        if(gaHSLoad[i]==nIdx)\r
                        {\r
                                gaHSLoad[i]=-1;\r
                                return;\r
                        }\r
-               }\r
        }\r
 }\r
 \r
-function cancelLoading(nIdx)\r
-{\r
-       var oObj=getElement(getCBId(nIdx));\r
-       if(oObj)\r
-       {\r
-               oObj.innerHTML="";\r
-               setHSUnLoad(nIdx)\r
-               ExpandIt(nIdx);\r
-       }\r
-}\r
-\r
-function cancelAll()\r
-{\r
-       var eLoadingDivs=getElement(gsLoadingDivID);\r
-       if(eLoadingDivs)\r
-               cancelHSLoading(eLoadingDivs);\r
-}\r
-\r
-function cancelHSLoading(eLoadingDiv)\r
+function removeLoadingDiv()\r
 {\r
-       var eParent=eLoadingDiv.parentElement;\r
-       if(eParent){\r
-               var sId=eParent.id;\r
-               sId=sId.substring(5);\r
-               var nIdx=parseInt(sId);\r
-               if(!isNaN(nIdx))\r
-                       cancelLoading(nIdx)\r
-       }\r
+       var eLoadingDiv=getElement(gsLoadingDivID);\r
+       if(eLoadingDiv)\r
+               removeThis(eLoadingDiv);\r
 }\r
 \r
 function checkBookItem(nIdx)\r
@@ -212,27 +223,112 @@ function insertBookItems(nIdx,num)
        ExpandIt(nIdx);\r
 }\r
 \r
-function writeBook(nIdx,bLocal)\r
+function isBookEmpty(nIdx)\r
+{\r
+       var num=getItemContentsNum(nIdx);\r
+       if (num>0)\r
+       {\r
+               var nCIdx=0;\r
+               do {\r
+                       nCIdx++;\r
+                       var i=nIdx+nCIdx;\r
+                       var nItemType=getItemType(i);\r
+                       if(nItemType==1){\r
+                               if (!isBookEmpty(i))\r
+                                       return false;\r
+                       }\r
+                       else if(nItemType==4){\r
+                               var     sSrc=getRefURL(i);\r
+                               var nProj=getProject(sSrc);\r
+                               if(nProj!=-1){\r
+                                       sSrc=gaRoot[nProj].sToc;\r
+                                       if(sSrc)\r
+                                               return false;\r
+                               }\r
+                       }\r
+                       else if(nItemType==2||nItemType==16||nItemType==8)\r
+                               return false;\r
+               } while(nCIdx<num);\r
+       }\r
+       return true;\r
+}\r
+\r
+function writeBook(nIdx)\r
 {\r
        var sIcon=getBookImage(nIdx,true);\r
        var sName=_textToHtml(getItemName(nIdx));\r
        sIcon=_textToHtml_nonbsp(sIcon);\r
        \r
-       var sHTML="<div id=\""+getPBId(nIdx)+"\" class=parent>";\r
-       sHTML+="<p><nobr><a id=\""+getBookId(nIdx)+"\" href=\"javascript:void(0);\" onfocus=\"markBook("+nIdx+");\" onclick=\"";\r
-\r
-       if(getItemType(nIdx)==1)\r
-               sHTML+="insertBookItems("+nIdx+", "+getItemContentsNum(nIdx);\r
+       var nType=getItemType(nIdx);\r
+       var bLocal=(nType==1);\r
+       var bLocalProject=(nType!=4);\r
+       \r
+       var sHTML="<div id=\""+getPBId(nIdx)+"\" class=";\r
+       if(bLocal)\r
+       {\r
+               if (!isBookEmpty(nIdx))\r
+               {\r
+                       sHTML+="parent><p><nobr><a id=\""+getBookId(nIdx)+"\" href=\"javascript:void(0);\" onfocus=\"markBook("+nIdx+");\" onclick=\"";\r
+                       sHTML+="insertBookItems("+nIdx+", "+getItemContentsNum(nIdx);\r
+                       sHTML+=");return false;\" title=\""+sName+"\"><img alt=\"Book\" name=\""+getBId(nIdx)+"\" src=\""+sIcon+"\" border=0 align=\"absmiddle\">";\r
+                       sHTML+="&nbsp;"+sName+"</a></nobr></p></div>";\r
+                       var sURL=_textToHtml_nonbsp(getItemURL(nIdx));\r
+                       if(sURL!="")\r
+                               addBookItem(getBookId(nIdx),_textToHtml_nonbsp(getTopicTarget(nIdx)),sURL);\r
+                       sHTML+="<div id=\""+getCBId(nIdx)+"\" class=child></div>";\r
+               }\r
+               else\r
+                       sHTML="";\r
+       }\r
        else\r
-               sHTML+="tocExpandHelpSet("+nIdx+","+bLocal;\r
-       sHTML+=");return false;\" title=\""+sName+"\"><img alt=\"Book\" name=\""+getBId(nIdx)+"\" src=\""+sIcon+"\" border=0 align=\"absmiddle\">";\r
-       var sURL=_textToHtml_nonbsp(getItemURL(nIdx));\r
-       if(sURL!="")\r
-               addBookItem(getBookId(nIdx),_textToHtml_nonbsp(getTopicTarget(nIdx)),sURL);\r
-       sHTML+="&nbsp;"+sName+"</a></nobr></p></div><div id=\""+getCBId(nIdx)+"\" class=child></div>";\r
+       {\r
+               sHTML+="stub></div>";\r
+               gbNeedFillStub=true;\r
+               setTimeout("fillStub("+nIdx+","+bLocalProject+");",100);\r
+       }\r
        return sHTML;\r
 }\r
 \r
+function checkFillStub()\r
+{\r
+       if(!gbLData)\r
+       {\r
+               if(gchunkRequestQueue.length()>0)\r
+               {\r
+                       var cInfo=gchunkRequestQueue.deQueue();\r
+                       if(cInfo)\r
+                       {\r
+                               fillStub(cInfo.nIdx,cInfo.bLocal);\r
+                               return;\r
+                       }\r
+               }\r
+       }\r
+       if(gbNeedFillStub)\r
+       {\r
+               gbNeedFillStub=false;\r
+               setTimeout("syncInit()",1);\r
+       }\r
+}\r
+\r
+function fillStub(nIdx,bLocalProject)\r
+{\r
+       if(!gbLData)\r
+       {\r
+               gbLData=true;\r
+               var sObj=getElement(getPBId(nIdx));\r
+               if(sObj!=null)\r
+               {\r
+                       tocExpandHelpSet(nIdx,bLocalProject);\r
+                       gbNeedFillStub=false;\r
+                       setTimeout("syncInit()",1);\r
+               }\r
+               else\r
+                       setTimeout("fillStub("+nIdx+","+bLocalProject+");",100);\r
+       }\r
+       else\r
+               gchunkRequestQueue.inQueue(new chunkInfo(nIdx,bLocalProject));\r
+}\r
+\r
 function getBookId(nIdx){return "B_"+nIdx;}\r
 \r
 function getItemId(nIdx){return "I_"+nIdx;}\r
@@ -285,7 +381,7 @@ function markItem(nIdx)
 \r
 function calTocPath(obj)\r
 {\r
-       var sPath=getInnerText(obj).substring(1);\r
+       var sPath=getInnerText2(obj);\r
        var pObj=getParentNode(obj);\r
        do\r
        {\r
@@ -299,11 +395,10 @@ function calTocPath(obj)
                                var objs=getItemsByBook(sObj);\r
                                for(var i=0;i<objs.length;i++)\r
                                {\r
-                                       var sText=getInnerText(objs[i]);\r
-                                       \r
+                                       var sText=getInnerText2(objs[i]);\r
                                        if(sText.length!=0)\r
                                        {\r
-                                               sPath=sText.substring(1)+gsPathSplit+sPath;\r
+                                               sPath=sText+gsPathSplit+sPath;\r
                                                break;\r
                                        }\r
                                }\r
@@ -330,7 +425,7 @@ function writeAnItem(nIdx)
        var sName=_textToHtml(getItemName(nIdx));\r
        var sHTML="<p><nobr><a id=\""+getItemId(nIdx)+"\" onfocus=\"markItem("+nIdx+");\""\r
        var sAltString="";\r
-       if (nItemType&2)\r
+       if(nItemType&2)\r
                sAltString="Page";\r
        else\r
                sAltString="Remote Page";\r
@@ -349,16 +444,12 @@ function writeBookItems(nIdx,num)
                        nCIdx++;\r
                        var i=nIdx+nCIdx;\r
                        var nItemType=getItemType(i);\r
-                       if(nItemType==1){\r
+                       if(nItemType==1||nItemType==4||nItemType==8){\r
                                sHTML+=writeBook(i);    \r
                                nCIdx+=getItemContentsNum(i);           \r
                        }\r
                        else if(nItemType==2||nItemType==16){\r
                                sHTML+=writeAnItem(i);\r
-                       }else if(nItemType==4){\r
-                               sHTML+=writeBook(i,false);\r
-                       }else if(nItemType==8){\r
-                               sHTML+=writeBook(i,true);\r
                        }\r
                }\r
                while(nCIdx<num);\r
@@ -369,10 +460,9 @@ function writeBookItems(nIdx,num)
 function tocExpandHelpSet(nIdx,bLocal)\r
 {\r
        checkBookItem(nIdx);\r
-       cancelAll();\r
-       if(isHSLoad(nIdx))\r
-               ExpandIt(nIdx);\r
-       else{\r
+       removeLoadingDiv();\r
+       if(!isHSLoad(nIdx))\r
+       {\r
                setHSLoad(nIdx);\r
                var sSrc="";\r
                if(bLocal){\r
@@ -388,8 +478,11 @@ function tocExpandHelpSet(nIdx,bLocal)
                        var nProj=getProject(sSrc);\r
                        if(nProj!=-1)\r
                        {\r
-                               goChunk=addTocChunk(gaProj[nProj].sPPath,gaProj[nProj].sDPath);\r
                                sSrc=gaRoot[nProj].sToc;\r
+                               if(sSrc)\r
+                                       goChunk=addTocChunk(gaProj[nProj].sPPath,gaProj[nProj].sDPath);\r
+                               else\r
+                                       goChunk=null;\r
                        }\r
                        else\r
                                goChunk=null;\r
@@ -397,22 +490,22 @@ function tocExpandHelpSet(nIdx,bLocal)
                if(goChunk)\r
                {\r
                        PrepareLoading(nIdx);\r
-                       ExpandIt(nIdx);\r
-                       gbLoadToc=false;\r
+                       gbToc=false;\r
                        loadData2(goChunk.sPPath+goChunk.sDPath+sSrc);\r
                }\r
+               else\r
+               {\r
+                       gbLData=false;\r
+                       checkFillStub();\r
+               }\r
        }\r
 }\r
 \r
 function getProject(sSrc)\r
 {\r
        for(var i=0;i<gaProj.length;i++)\r
-       {\r
                if(isSamePath(getPath(sSrc),gaProj[i].sPPath))\r
-               {\r
                        return i;\r
-               }\r
-       }\r
        return -1;\r
 }\r
 \r
@@ -437,15 +530,15 @@ function PrepareLoading(nIdx)
        gnInsIdx=nIdx;\r
        if(!gsTP)\r
        {\r
-               var oObj=getElement(getCBId(gnInsIdx));\r
+               var oObj=getElement(getPBId(gnInsIdx));\r
                if(oObj)\r
-                       oObj.innerHTML=writeLoadingDiv(nIdx);\r
+                       oObj.insertAdjacentHTML("afterEnd",writeLoadingDiv(nIdx));\r
        }\r
 }\r
 \r
 function writeLoadingDiv(nIdx)\r
 {\r
-       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>";\r
+       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>";\r
 }\r
 \r
 function getItemName(nIdx)\r
@@ -542,13 +635,14 @@ function getItemIcon(nIdx,nIconIdx)
 function TocWriteClassStyle()\r
 {\r
        var sStyle="<STYLE TYPE='text/css'>\n";\r
-       if (gsBgImage)\r
+       if(gsBgImage)\r
                sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
        else\r
                sStyle+="body {border-top:black 1px solid;}\n";\r
        sStyle+="P {"+getFontStyle(goFont)+"margin-top:"+gsMargin+";margin-bottom:"+gsMargin+";}\n";\r
        sStyle+="DIV {margin-top:"+gsMargin+";margin-bottom:"+gsMargin+";}\n";\r
        sStyle+=".parent {margin-left:0pt;}\n";\r
+       sStyle+=".stub {margin-left:0pt;display:none}\n";\r
        sStyle+=".child {display:none;margin-left:"+gsIndent+";}\n";\r
        sStyle+="A:link {"+getFontStyle(goFont)+"}\n";\r
        sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";\r
@@ -586,19 +680,15 @@ function getItemsFromObj(obj)
                {\r
                        var tempNobr=getChildrenByTag(tempColl[i],"NOBR");\r
                        if(tempNobr&&tempNobr.length>0)\r
-                       {\r
                                for(var j=0;j<tempNobr.length;j++)\r
                                        anobr[anobr.length]=tempNobr[j];\r
-                       }\r
                }\r
                for(var s=0;s<anobr.length;s++)\r
                {\r
                        var tempAnchor=getChildrenByTag(anobr[s],"A");\r
                        if(tempAnchor&&tempAnchor.length>0)\r
-                       {\r
                                for(var u=0;u<tempAnchor.length;u++)\r
                                        aAnchor[aAnchor.length]=tempAnchor[u];\r
-                       }\r
                }\r
        }\r
        return aAnchor;\r
@@ -609,21 +699,15 @@ function getItemsByBook(obj)
        var aAnchor=new Array();\r
        var aTAnchor=getItemsFromObj(obj);\r
        for(var i=0;i<aTAnchor.length;i++)\r
-       {\r
                aAnchor[aAnchor.length]=aTAnchor[i];\r
-       }\r
        var tempBook=getChildrenByTag(obj,"DIV");\r
        if(tempBook&&tempBook.length>0)\r
-       {\r
                for(var j=0;j<tempBook.length;j++)\r
                {\r
                        var aTAnchorDiv=getItemsFromObj(tempBook[j]);\r
                        for(var s=0;s<aTAnchorDiv.length;s++)\r
-                       {\r
                                aAnchor[aAnchor.length]=aTAnchorDiv[s];\r
-                       }\r
                }\r
-       }       \r
        return aAnchor;\r
 }\r
 \r
@@ -635,21 +719,19 @@ function ExpandIt(nId)
 \r
 function ExpandIt2(nId,bForceOpen)\r
 {\r
-       if(gbIE4||gbNav6){\r
-               var oC=TocExpand(nId,true,bForceOpen);\r
-               var nNewScroll=document.body.scrollTop;\r
-               if(oC.style.display=="block"){\r
-                       var nTop=oC.offsetTop;\r
-                       var nBottom=nTop+oC.offsetHeight;\r
-                       if(document.body.scrollTop+document.body.clientHeight<nBottom){\r
-                               nNewScroll=nBottom-document.body.clientHeight;\r
-                       }\r
-                       if(nBottom-nTop>document.body.clientHeight){\r
-                               nNewScroll=nTop-20;\r
-                       }\r
+       var oC=TocExpand(nId,true,bForceOpen);\r
+       var nNewScroll=document.body.scrollTop;\r
+       if(oC.style.display=="block"){\r
+               var nTop=oC.offsetTop;\r
+               var nBottom=nTop+oC.offsetHeight;\r
+               if(document.body.scrollTop+document.body.clientHeight<nBottom){\r
+                       nNewScroll=nBottom-document.body.clientHeight;\r
+               }\r
+               if(nBottom-nTop>document.body.clientHeight){\r
+                       nNewScroll=nTop-20;\r
                }\r
-               document.body.scrollTop=nNewScroll;\r
        }\r
+       document.body.scrollTop=nNewScroll;\r
 }\r
 \r
 function TocExpand(nId,bChangeImg,bForceOpen)\r
@@ -682,16 +764,18 @@ function TocExpand(nId,bChangeImg,bForceOpen)
 \r
 function getChunkId(n)\r
 {\r
-       var nCandidate=-1;\r
-       for(var i=0;i<gaTocs.length;i++){\r
-               if(gaTocs[i].nMI<=n){\r
-                       nCandidate=i;\r
+       var nCan=-1;\r
+       for(var i=0;i<gaTocs.length;i++)\r
+               if(gaTocs[i].nMI<=n&&gaTocs[i].nMI!=-1)\r
+               {\r
+                       if(nCan==-1)\r
+                               nCan=i;\r
+                       else\r
+                               if(gaTocs[i].nMI>=gaTocs[nCan].nMI)\r
+                                       nCan=i;\r
                }\r
-               else\r
-                       break;\r
-       }\r
-       if(nCandidate!=-1&&gaTocs[nCandidate].nMI!=-1)\r
-               return nCandidate;\r
+       if(nCan!=-1)\r
+               return nCan;\r
        else\r
                return -1;\r
 }\r
@@ -735,6 +819,14 @@ function getItemImage(nIdx,bRemote)
        return _getFullPath(gaProj[0].sPPath,sIcon);\r
 }\r
 \r
+function getInnerText2(obj)\r
+{\r
+       var sText=getInnerText(obj);\r
+       if(sText.length>0&&!gbOpera7)\r
+               sText=sText.substring(1);\r
+       return sText;\r
+}\r
+\r
 function expandToc(oObj,sRest,aIdList)\r
 {\r
        var len=aIdList.length;\r
@@ -750,9 +842,7 @@ function expandToc(oObj,sRest,aIdList)
                var aTagAs=getItemsByBook(oObj);\r
                for(var s=0;s<aTagAs.length;s++)\r
                {\r
-                       var sText=getInnerText(aTagAs[s]);\r
-                       if(sText.length>0)\r
-                               sText=sText.substring(1);\r
+                       var sText=getInnerText2(aTagAs[s]);\r
                        if(sText==sPart)\r
                        {\r
                                aIdList[len]=aTagAs[s];\r
@@ -768,8 +858,8 @@ function expandToc(oObj,sRest,aIdList)
                var sPId=aChildren[i].id;\r
                if(!isPBId(sPId))\r
                        continue;\r
-               var sText=getInnerText(aChildren[i]);\r
-               if(sText.substring(1)!=sPart)\r
+               var sText=getInnerText2(aChildren[i]);\r
+               if(sText!=sPart)\r
                        continue;\r
                aIdList[len]=getIdByPBId(sPId);\r
                var sCId=getCBId(aIdList[len]);\r
@@ -804,37 +894,37 @@ function expandToc(oObj,sRest,aIdList)
 \r
 function getIdByPBId(sPId)\r
 {\r
-       return parseInt(sPId.substring(5,sPId.length-6));\r
+       return parseInt(sPId.substring(2,sPId.length-1));\r
 }\r
 \r
 function getIdByCBId(sCId)\r
 {\r
-       return parseInt(sCId.substring(5,sCId.length-5));\r
+       return parseInt(sCId.substring(2,sCId.length-1));\r
 }\r
 \r
 function isPBId(sId)\r
 {\r
-       return (sId&&sId.indexOf("Book_")==0&&sId.lastIndexOf("Parent")==sId.length-6);\r
+       return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("P")==sId.length-1);\r
 }\r
 \r
 function isCBId(sId)\r
 {\r
-       return (sId&&sId.indexOf("Book_")==0&&sId.lastIndexOf("Child")==sId.length-5);\r
+       return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("C")==sId.length-1);\r
 }\r
 \r
 function getBId(nIdx)\r
 {\r
-       return "Book_"+nIdx;\r
+       return "B_"+nIdx;\r
 }\r
 \r
 function getPBId(nIdx)\r
 {\r
-       return getBId(nIdx)+"Parent";\r
+       return getBId(nIdx)+"P";\r
 }\r
 \r
 function getCBId(nIdx)\r
 {\r
-       return getBId(nIdx)+"Child";\r
+       return getBId(nIdx)+"C";\r
 }\r
 \r
 function getClosestTocPath(aPaths)\r
@@ -853,13 +943,9 @@ function getClosestTocPath(aPaths)
                }\r
        }\r
        if(nThatIndex!=-1)\r
-       {\r
                sPath=aPaths[nThatIndex];\r
-       }\r
        else\r
-       {\r
                sPath=aPaths[0];\r
-       }\r
        return sPath;\r
 }\r
 \r
@@ -908,23 +994,22 @@ function getTocPaths(oTopicParam)
        var aRelTocPaths=oTopicParam.aPaths;\r
        var aPaths=new Array();\r
        for(var i=0;i<gaProj.length;i++)\r
-       {\r
                if(isSamePath(gaProj[i].sPPath,oTopicParam.sPPath))\r
                {\r
                        for(var j=0;j<aRelTocPaths.length;j++)\r
-                       {\r
-                               aPaths[j]=gaRoot[i].sRPath+aRelTocPaths[j];\r
-                               aPaths[j]=aPaths[j].substring(1);\r
-                       }\r
+                               for (var k=0;k<gaRoot[i].aRPath.length;k++)\r
+                               {\r
+                                       var sPath=gaRoot[i].aRPath[k]+aRelTocPaths[j];\r
+                                       aPaths[aPaths.length]=sPath.substring(1);\r
+                               }\r
                        break;\r
                }\r
-       }\r
        return aPaths;\r
 }\r
 \r
 function syncInit()\r
 {\r
-       if(gsTP)\r
+       if(gsTP&&!gbNeedFillStub)\r
        {\r
                gInSync=true;\r
                var obj=document.body;\r
@@ -936,9 +1021,7 @@ function syncInit()
                        {\r
                                if(aIdList.length)\r
                                        for(var i=0;i<aIdList.length-1;i++)\r
-                                       {\r
                                                ExpandIt2(aIdList[i],true);\r
-                                       }\r
                                gsCTPath=gsTP;\r
                                if(!gbIE55)\r
                                        aIdList[aIdList.length-1].focus();\r
@@ -964,11 +1047,12 @@ function syncInit()
 \r
 function loadToc()\r
 {\r
-       if(!gbReady)\r
+       if(!gbLoadToc)\r
        {\r
                var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);\r
                if(SendMessage(oResMsg)&&oResMsg.oParam)\r
                {\r
+                       gbLoadToc=true;\r
                        var oProj=oResMsg.oParam;\r
                        gaProj=oProj.aProj;\r
                        gbXML=oProj.bXML;\r
@@ -980,18 +1064,14 @@ function loadToc()
 function load1B1()\r
 {\r
        if(gnLT+1<gaProj.length)\r
-       {\r
                for(var i=gnLT+1;i<gaProj.length;i++)\r
-               {\r
-                       if(gaProj[i].sToc!=null&&gaProj[i].sToc!="")\r
+                       if(gaProj[i].sToc)\r
                        {\r
-                               gbLoadToc=true;\r
+                               gbToc=true;\r
                                gnLT=i;\r
                                setTimeout("loadTocInfo()",1);\r
                                return true;\r
                        }\r
-               }\r
-       }\r
        return false;\r
 }\r
 \r
@@ -1015,7 +1095,10 @@ function projReady(sRoot,aProj)
        gaRoot[gnLT].sToc=sRoot;\r
        \r
        if(gnLT==0)\r
-               gaRoot[gnLT].sRPath=gsPathSplit;\r
+       {\r
+               gaRoot[gnLT].aRPath=new Array();\r
+               gaRoot[gnLT].aRPath[0]=gsPathSplit;\r
+       }\r
 \r
        updatePTPath(gnLT,aProj);\r
 \r
@@ -1033,8 +1116,9 @@ function loadTData()
 {\r
        if(gaProj[0].sToc!="")\r
        {\r
+               gbLData=true;\r
                goChunk=addTocChunk(gaProj[0].sPPath,gaProj[0].sDPath);\r
-               gbLoadToc=false;\r
+               gbToc=false;\r
                loadData2(gaProj[0].sPPath+gaProj[0].sDPath+gaRoot[0].sToc);\r
        }\r
 }\r
@@ -1042,33 +1126,56 @@ function loadTData()
 function updatePTPath(n,aProj)\r
 {\r
        if(aProj)\r
-       {\r
                for(var i=0;i<aProj.length;i++)\r
                {\r
                        var sFullPath=_getFullPath(gaProj[n].sPPath,aProj[i].sPPath);\r
                        for(var j=0;j<gaProj.length;j++)\r
-                       {\r
                                if(isSamePath(sFullPath,gaProj[j].sPPath))\r
                                {\r
                                        if(gaRoot.length<=j||!gaRoot[j])\r
                                                gaRoot[j]=new Object();\r
-                                       if(!gaRoot[j].sRPath)\r
-                                       {\r
-                                               if(gaRoot[n].sRPath)\r
-                                                       gaRoot[j].sRPath=gaRoot[n].sRPath+aProj[i].sRPath;\r
-                                               else\r
-                                                       gaRoot[j].sRPath=aProj[i].sRPath;\r
-                                       }\r
+                                       if(!gaRoot[j].aRPath)\r
+                                               gaRoot[j].aRPath=new Array();\r
+\r
+                                       if(gaRoot[n].aRPath)\r
+                                               for(var k=0;k<gaRoot[n].aRPath.length;k++)\r
+                                               {\r
+                                                       var bDup=false;\r
+                                                       var sTFPath=gaRoot[n].aRPath[k]+aProj[i].sRPath;\r
+                                                       for(var l=0;l<gaRoot[j].aRPath.length;l++)\r
+                                                               if(gaRoot[j].aRPath[l]==sTFPath)\r
+                                                               {\r
+                                                                       bDup=true;\r
+                                                                       break;\r
+                                                               }\r
+                                                       if(!bDup)\r
+                                                               gaRoot[j].aRPath[gaRoot[j].aRPath.length]=sTFPath;\r
+                                               }\r
+                                       else\r
+                                               gaRoot[j].aRPath[gaRoot[j].aRPath.length]=aProj[i].sRPath;\r
                                        break;\r
                                }\r
-                       }\r
                }\r
+}\r
+\r
+function onLoadXMLError()\r
+{\r
+       if(gbToc)\r
+       {\r
+               var sRoot="";\r
+               var aRProj=new Array();\r
+               projReady(sRoot,aRProj);\r
+       }\r
+       else\r
+       {\r
+               var aToc=new Array();\r
+               putData(aToc)\r
        }\r
 }\r
 \r
 function putDataXML(xmlDoc,sDocPath)\r
 {\r
-       if(gbLoadToc)\r
+       if(gbToc)\r
        {\r
                var tocNode=xmlDoc.getElementsByTagName("toc")[0];\r
                if(tocNode)\r
@@ -1081,8 +1188,25 @@ function putDataXML(xmlDoc,sDocPath)
                                for(var i=0;i<rmtProject.length;i++)\r
                                {\r
                                        aRProj[i]=new Object();\r
-                                       aRProj[i].sPPath=rmtProject[i].getAttribute("url");\r
-                                       aRProj[i].sRPath=rmtProject[i].getAttribute("path");\r
+                                       var sURL=rmtProject[i].getAttribute("url");\r
+                                       if(sURL)\r
+                                       {\r
+                                               if(sURL.lastIndexOf("/")!=sURL.length-1)\r
+                                                       sURL+="/";                                              \r
+                                       }\r
+                                       aRProj[i].sPPath=sURL;\r
+                                       aRProj[i].sRPath = "";\r
+                                       var oSubPath = rmtProject[i].getElementsByTagName("subpath")[0];\r
+                                       if (oSubPath)\r
+                                       {\r
+                                               while (oSubPath)\r
+                                               {\r
+                                                       aRProj[i].sRPath += oSubPath.getAttribute("name") + "\n";\r
+                                                       oSubPath = oSubPath.getElementsByTagName("subpath")[0];\r
+                                               }\r
+                                       }\r
+                                       else\r
+                                               aRProj[i].sRPath=rmtProject[i].getAttribute("path");\r
                                }\r
                        }\r
                        projReady(sRoot,aRProj);\r
@@ -1123,6 +1247,7 @@ function processBook(node,aToc)
                                if(sIcons)\r
                                        item.sIconRef=sIcons;\r
                                if(sURL==null) sURL="";\r
+\r
                                item.sItemURL=sURL;\r
                                \r
                                if(oChild.nodeName=="book")\r
@@ -1147,6 +1272,11 @@ function processBook(node,aToc)
                                }\r
                                else if(oChild.nodeName=="project")\r
                                {\r
+                                       if(sRef)\r
+                                       {\r
+                                               if(sRef.lastIndexOf("/")!=sRef.length-1)\r
+                                                       sRef+="/";                                              \r
+                                       }\r
                                        item.nType=4;\r
                                        item.sRefURL=sRef;\r
                                        item.nContents=0;\r
@@ -1175,6 +1305,7 @@ function putData(aTocs)
 \r
 function realPutData()\r
 {\r
+       removeLoadingDiv();\r
        var aTocs=gaTocsNs61Fix;\r
        if(!aTocs) return;\r
        if(goChunk)\r
@@ -1185,10 +1316,10 @@ function realPutData()
                gnMinIdx+=aTocs.length;\r
                if(gnInsIdx!=-1)\r
                {\r
-                       var oObj=getElement(getCBId(gnInsIdx));\r
+                       var oObj=getElement(getPBId(gnInsIdx));\r
                        if(oObj)\r
                        {\r
-                               oObj.innerHTML=writeBookItems(n-1,aTocs.length);\r
+                               oObj.insertAdjacentHTML("afterEnd",writeBookItems(n-1,aTocs.length));\r
                                setTimeout("syncInit()",1);\r
                        }\r
                }\r
@@ -1199,11 +1330,13 @@ function realPutData()
                        var oMsg=new whMessage(WH_MSG_GETTOCPATHS,this,1,oParam);\r
                        if(SendMessage(oMsg))\r
                        {\r
-                               if (oMsg.oParam.oTocInfo)\r
+                               if(oMsg.oParam.oTocInfo)\r
                                        syncWithPaths(oMsg.oParam.oTocInfo);\r
                        }\r
                }       \r
        }\r
+       gbLData=false;\r
+       checkFillStub();\r
 }\r
 \r
 function syncWithPaths(oTopicParam)\r
@@ -1354,7 +1487,7 @@ function onSendMessage(oMsg)
        return true;\r
 }\r
 \r
-if (window.gbWhUtil&&window.gbWhVer&&window.gbWhMsg&&window.gbWhProxy)\r
+if(window.gbWhUtil&&window.gbWhVer&&window.gbWhMsg&&window.gbWhProxy)\r
 {\r
        RegisterListener2(this,WH_MSG_PROJECTREADY);\r
        RegisterListener2(this,WH_MSG_SYNCTOC);\r
@@ -1368,5 +1501,4 @@ if (window.gbWhUtil&&window.gbWhVer&&window.gbWhMsg&&window.gbWhProxy)
        gbWhTHost=true;\r
 }\r
 else\r
-       document.location.reload();\r
-\r
+       document.location.reload();
\ No newline at end of file