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