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

  1. var gaChunks=new Array();
  2. var gaFakes=new Array();
  3. var gaDataCon=null;
  4. var gaData=new Array();
  5.  
  6. var gbFindCK=false;;
  7. var gbNeedCalc=false;
  8. var gbScrl=false;
  9. var gbProcess=false;
  10. var gbReady=false;
  11.  
  12. var gnCheck=0;
  13. var gnNum=0;
  14. var gnIns=-1;
  15. var gnLoad=0;
  16. var gnRef=-1;
  17. var gnMaxItems=0;
  18. var gnMaxMargin=32000;
  19. var gnNeeded=0;
  20. var gnNKI=-1;
  21. var gnRE=0;
  22. var gnScrlMgn=30;
  23. var gnSE=0;
  24. var gnVisible=0;
  25. var gnItems=0;
  26. var gnUHeight=1;
  27.  
  28. var gsBCK=null;
  29. var gsChK=null;
  30. var gsCK=null;
  31. var gsLoadingDivID="LoadingDiv";
  32. var gsLoadingMsg="Bitte warten, Daten werden geladen ...";
  33. var gsSKA=null;
  34. var gsSKB=null;
  35.  
  36. var gbLoadInfo=false;
  37.  
  38. function putDataXML(xmlDoc,sDocPath)
  39. {
  40.     if(gbLoadInfo)
  41.     {
  42.         var node=xmlDoc.lastChild;
  43.         if(node)
  44.         {
  45.             var nTotal=0
  46.             var aChunk=new Array();
  47.             var oC=node.firstChild;
  48.             while(oC)
  49.             {
  50.                 if(oC.nodeName=="chunkinfo")
  51.                 {
  52.                     var item=new Object();
  53.                     item.sBK=oC.getAttribute("first");
  54.                     item.sEK=oC.getAttribute("last");
  55.                     item.sFileName=oC.getAttribute("url");
  56.                     item.nNum=parseInt(oC.getAttribute("num"));
  57.                     nTotal+=item.nNum;
  58.                     item.nTotal=nTotal;
  59.                     aChunk[aChunk.length]=item;
  60.                 }
  61.                 oC=oC.nextSibling;
  62.             }
  63.             projReady(aChunk);
  64.         }
  65.     }
  66.     else
  67.     {
  68.         var node=xmlDoc.lastChild;
  69.         if(node)
  70.         {
  71.             var aData=new Array();
  72.             var nPrev=0;
  73.             var nNext=0;
  74.             var oC=node.firstChild;
  75.             while(oC)
  76.             {
  77.                 nPrev=nNext;
  78.                 if(oC.nodeName=="key")
  79.                 {
  80.                     var sName=oC.getAttribute("name");
  81.                     if(sName&&sName.length>0)
  82.                     {
  83.                         var sTarget=oC.getAttribute("target");
  84.                         var item=new Object();
  85.                         item.nType=2;
  86.                         item.sName=sName;
  87.                         if(sTarget)
  88.                             item.sTarget=sTarget;
  89.                         item.nPKOff=nPrev;
  90.                         aData[aData.length]=item;
  91.                         var nCurIndex=aData.length;
  92.                         processKey(oC,aData,item);
  93.                         nNext=aData.length-nCurIndex;
  94.                         item.nNKOff=nNext;
  95.                     }
  96.                 }
  97.                 else if(oC.nodeName=="letter")
  98.                 {
  99.                     var name=oC.getAttribute("name");
  100.                     if(name&&name.length>0)
  101.                     {
  102.                         var item=new Object();
  103.                         item.nType=1;
  104.                         item.sName=name;
  105.                         item.nPKOff=nPrev;
  106.                         nNext=0;
  107.                         item.nNKOff=nNext;
  108.                         aData[aData.length]=item;
  109.                     }
  110.                 }
  111.                 else if(oC.nodeName=="entry")
  112.                 {
  113.                     var name=oC.getAttribute("name");
  114.                     var def=oC.getAttribute("value");
  115.                     if(name&&name.length>0)
  116.                     {
  117.                         var item=new Object();
  118.                         item.sName=name;
  119.                         item.sDef=def;
  120.                         item.nPKOff=nPrev;
  121.                         nNext=0;
  122.                         item.nNKOff=nNext;
  123.                         aData[aData.length]=item;
  124.                     }
  125.                 }
  126.                 oC=oC.nextSibling;
  127.             }
  128.             putData(aData);
  129.         }
  130.     }
  131. }
  132.  
  133. function processKey(element,aData,item)
  134. {
  135.     var i=0;
  136.     var nPrev=0;
  137.     var nNext=0;
  138.     var oC=element.firstChild;
  139.     while(oC)
  140.     {
  141.         if(oC.nodeName=="topic")
  142.         {
  143.             var name=oC.getAttribute("name");
  144.             var url=oC.getAttribute("url");
  145.             if(url&&url.length!=0)
  146.             {
  147.                 if(!name||name.length==0)
  148.                     name=url;
  149.                 var topic=new Object();
  150.                 topic.sName=name;
  151.                 topic.sURL=url;
  152.                 if(!item.aTopics)
  153.                     item.aTopics=new Array();
  154.                 item.aTopics[item.aTopics.length]=topic;
  155.             }
  156.         }
  157.         else if(oC.nodeName=="key")
  158.         {
  159.             nPrev=nNext;
  160.             var name=oC.getAttribute("name");
  161.             if(name&&name.length!=0)
  162.             {
  163.                 var subItem=new Object();
  164.                 subItem.sName=name;
  165.                 subItem.nType=3;
  166.                 subItem.nPKOff=nPrev;
  167.                 aData[aData.length]=subItem;
  168.                 var nCurIndex=aData.length;
  169.                 processKey(oC,aData,subItem);
  170.                 nNext=aData.length-nCurIndex;
  171.                 subItem.nNKOff=nNext;
  172.             }
  173.         }
  174.         oC=oC.nextSibling;
  175.     }
  176. }
  177.  
  178. function putData(aData)
  179. {
  180.     endLoading();
  181.     var oCData=goCData;
  182.     if(oCData)
  183.     {
  184.         oCData.aKs=aData;
  185.         if(gnNKI==-1)
  186.             setTimeout("checkReady();",1);
  187.         else
  188.         {
  189.             gsSKA=getKByIdx(oCData,gnNKI);
  190.             gbNeedCalc=true;
  191.             gbScrl=true;
  192.             gnNKI=-1;
  193.             if(gsSKA)
  194.                 setTimeout("checkReady();",1);
  195.             else
  196.             {
  197.                 markEnd();
  198.                 setTimeout("checkAgain();",50);
  199.             }
  200.         }
  201.     }
  202. }
  203.  
  204. function markEnd()
  205. {
  206.     if(gbProcess)
  207.         gbProcess=false;
  208. }
  209.  
  210. function endLoading()
  211. {
  212.     var oDiv=getElement(gsLoadingDivID);
  213.     if(oDiv)
  214.         oDiv.style.visibility="hidden";
  215. }
  216.  
  217. function markBegin()
  218. {
  219.     gbProcess=true;
  220. }
  221.  
  222. function beginLoading()
  223. {
  224.     var oDiv=getElement(gsLoadingDivID);
  225.     if(oDiv)
  226.     {
  227.         oDiv.style.top=document.body.scrollTop;
  228.         oDiv.style.visibility="visible";
  229.     }
  230. }
  231.  
  232. function indexHTMLPart()
  233. {
  234.     this.sHTML="";
  235.     this.nNeeded=0;
  236.     this.nCurrent=0;
  237.     this.nConsumed=0;
  238.     this.sFK=null;
  239.     this.sLK=null;
  240.     this.addHTML=function(sHTML,nConsumed,bDown,bK,sK){
  241.         if(bDown)
  242.             this.sHTML+=sHTML;
  243.         else
  244.             this.sHTML=sHTML+this.sHTML;
  245.         this.nCurrent++;            
  246.         this.nConsumed+=nConsumed;
  247.         if(bK)
  248.         {
  249.             if(!this.sFK)
  250.                 this.sFK=sK;
  251.             if(!this.sLK)
  252.                 this.sLK=sK;
  253.             if(bDown)
  254.                 this.sLK=sK;
  255.             else
  256.                 this.sFK=sK;
  257.         }
  258.     }
  259.     this.appendHTML=function(oHTML,bDown){
  260.         this.addSubHTML(oHTML,bDown);
  261.         if(!this.sFK)
  262.             this.sFK=oHTML.sFK;
  263.         if(!this.sLK)
  264.             this.sLK=oHTML.sLK;
  265.         if(bDown)
  266.             this.sLK=oHTML.sLK;
  267.         else
  268.             this.sFK=oHTML.sFK;
  269.     }    
  270.     
  271.     this.addSubHTML=function(oHTML,bDown){
  272.         if(bDown)
  273.             this.sHTML+=oHTML.sHTML;
  274.         else
  275.             this.sHTML=oHTML.sHTML+this.sHTML;
  276.         this.nCurrent+=oHTML.nCurrent;
  277.         this.nConsumed+=oHTML.nConsumed;            
  278.     }
  279. }
  280.  
  281. function getMaxUnits()
  282. {
  283.     return Math.floor(gnMaxMargin/gnUHeight)+1;
  284. }
  285.  
  286. function getFakeItemsHTMLbyCount(nB,nCount)
  287. {
  288.     var nMU=getMaxUnits();
  289.     var nNum=Math.floor(nCount/nMU);
  290.     var sHTML="";
  291.     for(var i=0;i<nNum;i++)
  292.         sHTML+=getFakeItemHTML(nB,nMU-1);
  293.         
  294.     var nRest=nCount%nMU;
  295.     sHTML+=getFakeItemHTML(nB,nRest-1);
  296.     return sHTML;
  297. }
  298.  
  299. function getFakeItemHTML(nB,nNum)
  300. {
  301.     return "<h6 name=fk"+nB+" id=fk"+nB+" style=\"margin-top:"+gnUHeight*nNum+";margin-bottom:0\"> </h6>";
  302. }
  303.  
  304. function fakeItemsArea(nB,n,sKA,sKB,obj)
  305. {
  306.     this.nB=nB;
  307.     this.nNum=n;
  308.     this.sKA=sKA;
  309.     this.sKB=sKB;
  310.     this.obj=obj;
  311.     this.nMargin=(n-1)*gnUHeight;
  312.  
  313.     this.setNum=function(n)
  314.     {
  315.         var nLastobj=-1;
  316.         var nDelta=this.nMargin;
  317.         this.nMargin=(n-1)*gnUHeight;
  318.         nDelta=nDelta-this.nMargin;
  319.         if(n>0)
  320.         {
  321.             this.nNum=n;
  322.             var nMU=getMaxUnits();
  323.             nLastobj=Math.floor((n-1)/nMU);
  324.             if(this.obj.length)
  325.                 this.obj[nLastobj].style.marginTop=((n-1)%nMU)*gnUHeight;
  326.             else
  327.                 this.obj.style.marginTop=((n-1)%nMU)*gnUHeight;
  328.         }
  329.         if(this.obj.length)
  330.         {
  331.             for(var i=this.obj.length-1;i>nLastobj;i--)
  332.                 removeThis(this.obj[i]);
  333.         }
  334.         else
  335.         {
  336.             if(nLastobj==-1)
  337.                 removeThis(this.obj);
  338.         }
  339.         return nDelta;
  340.     }
  341.     this.insertAdjacentHTML=function(sWhere,sHTML)
  342.     {
  343.         if(sWhere=="beforeBegin")
  344.         {
  345.             if(this.obj.length)
  346.                 this.obj[0].insertAdjacentHTML(sWhere,sHTML);
  347.             else
  348.                 this.obj.insertAdjacentHTML(sWhere,sHTML);
  349.         }
  350.         else if(sWhere=="afterEnd")
  351.         {
  352.             if(this.obj.length)
  353.             {
  354.                 if(gbMac&&gbIE5&&this.obj[this.obj.length-1].nextSibling)
  355.                     this.obj[this.obj.length-1].nextSibling.insertAdjacentHTML("beforeBegin",sHTML);
  356.                 else
  357.                     this.obj[this.obj.length-1].insertAdjacentHTML(sWhere,sHTML);
  358.             }
  359.             else
  360.             {
  361.                 if(gbMac&&gbIE5&&this.obj.nextSibling)
  362.                     this.obj.nextSibling.insertAdjacentHTML("beforeBegin",sHTML);
  363.                 else
  364.                     this.obj.insertAdjacentHTML(sWhere,sHTML);
  365.             }
  366.         }
  367.     }
  368.     this.getBtm=function()
  369.     {
  370.         if(this.obj.length)
  371.             return this.obj[this.obj.length-1].offsetTop;
  372.         else
  373.             return this.obj.offsetTop;
  374.     }
  375.     this.getTop=function()
  376.     {
  377.         return this.getBtm()-this.nMargin;
  378.     }
  379. }
  380.  
  381. function usedItems(nB,nE)
  382. {
  383.     this.nB=nB;
  384.     this.nE=nE;
  385.     this.oN=null;
  386. }
  387.  
  388. function checkReady()
  389. {
  390.     var len=gaChunks.length;
  391.     var bNeedLoad=false;
  392.     var aDataCon;
  393.     var s=0;
  394.     var bDown=(gsSKB==null);
  395.     var sK=bDown?gsSKA:gsSKB;
  396.     if(sK==null)
  397.     {
  398.         markEnd();
  399.         setTimeout("checkAgain();",50);
  400.         return;
  401.     }
  402.     if(!gsChK||sK!=gsChK||gnNum==0)
  403.     {
  404.         gnCheck=0;
  405.         gsChK=sK;
  406.         aDataCon=new Array();
  407.     }
  408.     else{
  409.         s=gnNum;
  410.         aDataCon=gaDataCon;
  411.     }
  412.     for(var i=gnCheck;i<len;i++)
  413.     {
  414.         var oCData=getChunkedData(i,bDown,sK);
  415.         if(oCData)
  416.         {
  417.             if(!oCData.aKs&&oCData.sFileName!=null)
  418.             {
  419.                 bNeedLoad=true;
  420.                 goCData=oCData;
  421.                 gnNum=s;
  422.                 gnCheck=i;
  423.                 gaDataCon=aDataCon;
  424.                 oCData.nProjId=i;
  425.                 gbLoadInfo=false;
  426.                 beginLoading();
  427.                 loadData2(gaData[i].sPPath+gaData[i].sDPath+oCData.sFileName);
  428.                 return;
  429.             }
  430.             else{
  431.                 aDataCon[s++]=oCData;
  432.             }
  433.         }
  434.     }
  435.     if(!bNeedLoad)
  436.     {
  437.         gnNum=0;
  438.         gsSKA=gsSKB=gsShowK=null;
  439.         
  440.         var oHTML=new indexHTMLPart();
  441.         var aPos=new Array();
  442.         var aOriPos=new Array();
  443.         var aMaxPos=new Array();
  444.         var aMinPos=new Array();
  445.         
  446.         if(gbNeedCalc||gbFindCK) gnIns=0;
  447.         for(i=0;i<aDataCon.length;i++)
  448.         {
  449.             aPos[i]=getIdxPos(aDataCon[i],bDown,sK);
  450.             if(gbNeedCalc||gbFindCK)
  451.             {
  452.                 gnIns+=aPos[i]+aDataCon[i].nTotal-aDataCon[i].nNum;
  453.                 if(!bDown)
  454.                 {
  455.                     if(aPos[i]!=-1)
  456.                     {
  457.                         if(aDataCon[i].aKs)
  458.                             gnIns+=aDataCon[i].aKs[aPos[i]].nNKOff;
  459.                         else
  460.                         {
  461.                             var n=aPos[i]+1;
  462.                             while(n<aDataCon[i].aKsOnly.length&&!aDataCon[i].aKsOnly[n])
  463.                                 n++;
  464.                             n=n-aPos[i]-1;
  465.                             gnIns+=n;
  466.                         }
  467.                     }
  468.                 }
  469.             }
  470.             aOriPos[i]=aPos[i];
  471.             getLimit(aDataCon,aPos,aMaxPos,aMinPos,i);
  472.         }
  473.         if((gbNeedCalc||gbFindCK)&&!bDown&&gnIns!=-1)
  474.         {
  475.             gnIns+=(aDataCon.length-1)
  476.         }
  477.         if(gnIns!=-1||gbFindCK)
  478.         {
  479.             oHTML.nNeeded=gnNeeded;
  480.             var bDone=writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,1);
  481.             if(oHTML.nConsumed!=0)
  482.             {
  483.                 var nB;
  484.                 if(!bDown)
  485.                     nB=gnIns-oHTML.nConsumed+1;
  486.                 else
  487.                     nB=gnIns;
  488.                     
  489.                 var oldScrollPos=document.body.scrollTop;
  490.                 if(insertIdxKs(nB,oHTML,gbScrl))
  491.                 {
  492.                     updateUsedK(aDataCon,aOriPos,aPos,bDown);
  493.                     if(!gbScrl&&gbMac)
  494.                     {
  495.                         while(document.body.scrollTop!=oldScrollPos)
  496.                             document.body.scrollTop=oldScrollPos;
  497.                     }
  498.                     gbScrl=false;
  499.                 }
  500.                 if(gbFindCK)
  501.                 {
  502.                     gbFindCK=false;
  503.                     gbNeedCalc=true;
  504.                     gsSKB=oHTML.sFK;
  505.                     gnIns=-1;
  506.                     setTimeout("checkReady();",50);
  507.                     return;
  508.                 }
  509.             }
  510.             else if(gbFindCK)
  511.             {
  512.                 gbFindCK=false;
  513.                 gbNeedCalc=true;
  514.                 gsSKB=getFirstKeyFromPos(aDataCon,aPos);
  515.                 gnIns=-1;
  516.                 setTimeout("checkReady();",50);
  517.                 return;
  518.             }
  519.             if(!findCKInDom()) return;
  520.  
  521.             gnNeeded=gnNeeded-oHTML.nCurrent;
  522.             gnIns=-1;
  523.             markEnd();
  524.             setTimeout("checkAgain();",50);
  525.             gbNeedCalc=false;
  526.         }
  527.         else
  528.         {
  529.             if(!findCKInDom()) return;
  530.             markEnd();
  531.             setTimeout("checkAgain();",50);
  532.         }
  533.     }
  534. }
  535.  
  536. function getFirstKeyFromPos(aDataCon,aPos)
  537. {
  538.     var sCurrentK=getBiggestChar();
  539.     for(var i=0;i<aPos.length;i++)
  540.     {
  541.         if(aDataCon[i].aKs&&aDataCon[i].aKs.length>0&&aPos[i]>=0&&aPos[i]<aDataCon[i].aKs.length)
  542.         {
  543.             if(sCurrentK==""||
  544.                 compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)
  545.             {
  546.                 sCurrentK=aDataCon[i].aKs[aPos[i]].sName;
  547.             }
  548.         }
  549.     }
  550.     return sCurrentK;
  551. }
  552.  
  553. function checkAgain()
  554. {
  555.     if(!gbProcess)
  556.     {
  557.         if(gsBCK!=null)
  558.         {
  559.             gsCK=gsBCK;
  560.             gsBCK=null;
  561.             findCK();
  562.         }
  563.         else
  564.         {
  565.             markBegin();
  566.             getUnitIdx(document.body.scrollTop,document.body.clientHeight);
  567.         }
  568.     }
  569.     else
  570.         setTimeout("checkAgain()",50);
  571. }
  572.  
  573. function getLimit(aDataCon,aPos,aMaxPos,aMinPos,i)
  574. {
  575.     aMaxPos[i]=aDataCon[i].nNum;
  576.     aMinPos[i]=-1;
  577.     var oPNode=null;
  578.     if(aDataCon[i].oUsedItems)
  579.     {
  580.         var oUsedItems=aDataCon[i].oUsedItems;
  581.         do{
  582.             if(oUsedItems.nB>aPos[i])
  583.             {
  584.                 aMaxPos[i]=oUsedItems.nB;
  585.                 break;
  586.             }
  587.             oPNode=oUsedItems;
  588.             oUsedItems=oUsedItems.oN;
  589.         }while(oUsedItems!=null);
  590.         if(oPNode)
  591.             aMinPos[i]=oPNode.nE;
  592.     }
  593.     else if(aDataCon[i].aKs==null)
  594.     {
  595.         aMaxPos[i]=aMinPos[i]=aPos[i];
  596.     }
  597.     if(aMinPos[i]>=aPos[i]||aMaxPos[i]<=aPos[i])
  598.     {
  599.         aMaxPos[i]=aMinPos[i]=aPos[i];
  600.     }
  601. }
  602.  
  603. function getIdxPos(oIdx,bDown,sK)
  604. {
  605.     var aKs=oIdx.aKs;
  606.     var nIdx;
  607.     if(bDown)
  608.         nIdx=oIdx.nNum;
  609.     else
  610.         nIdx=-1;
  611.     if(aKs!=null)
  612.     {
  613.         for(var i=0;i<aKs.length;i++)
  614.         {    
  615.             if(bDown)
  616.             {
  617.                 if(compare(aKs[i].sName,sK)>0)
  618.                 {
  619.                     nIdx=i;
  620.                     break;
  621.                 }
  622.             }
  623.             else
  624.             {
  625.                 if(compare(aKs[i].sName,sK)<0)
  626.                     nIdx=i;
  627.                 else
  628.                     break;
  629.             }
  630.             i+=aKs[i].nNKOff;
  631.         }
  632.     }
  633.     else if(oIdx.aKsOnly)
  634.     {
  635.         var aKsOnly=oIdx.aKsOnly;
  636.         for(var i=0;i<aKsOnly.length;i++)
  637.         {    
  638.             if(aKsOnly[i])
  639.             {
  640.                 if(bDown)
  641.                 {
  642.                     if(compare(aKsOnly[i],sK)>0)
  643.                     {
  644.                         nIdx=i;
  645.                         break;
  646.                     }
  647.                 }
  648.                 else
  649.                 {
  650.                     if(compare(aKsOnly[i],sK)<0)
  651.                         nIdx=i;
  652.                     else
  653.                         break;
  654.                 }
  655.             }
  656.         }
  657.     }
  658.     return nIdx;
  659. }
  660.  
  661. function writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,nLevel)
  662. {
  663.     var aOldPos=new Array();
  664.     for(var i=0;i<aPos.length;i++)
  665.     {
  666.         aOldPos[i]=aPos[i];
  667.     }
  668.     var p;
  669.     do{
  670.         var sCurrentK="";
  671.         var aCurIdxSet=new Array();
  672.         p=0;
  673.         for(i=0;i<aDataCon.length;i++)
  674.         {
  675.             if(aDataCon[i].aKs&&aDataCon[i].aKs.length&&aPos[i]!=-1&&
  676.                 (bDown&&aPos[i]<aMaxPos[i])||(!bDown&&aPos[i]>aMinPos[i]))
  677.             {
  678.                 if(sCurrentK==""||
  679.                     (bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)||
  680.                     (!bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)<0))
  681.                 {
  682.                     sCurrentK=aDataCon[i].aKs[aPos[i]].sName;
  683.                     p=0;
  684.                     aCurIdxSet[p++]=i;
  685.                 }
  686.                 else if(sCurrentK==aDataCon[i].aKs[aPos[i]].sName){
  687.                     aCurIdxSet[p++]=i;
  688.                 }
  689.             }
  690.             else if(nLevel==1&&aMaxPos[i]!=aMinPos[i]){
  691.                 if(bDown&&aPos[i]==aMaxPos[i])
  692.                 {
  693.                     if(aDataCon[i].aKs)
  694.                     {
  695.                         gsSKA=aDataCon[i].aKs[aOldPos[i]].sName;
  696.                         return false;
  697.                     }
  698.                 }
  699.                 else if(!bDown&&aPos[i]==aMinPos[i])
  700.                 {
  701.                     if(aDataCon[i].aKs)
  702.                     {
  703.                         gsSKB=aDataCon[i].aKs[aOldPos[i]].sName;
  704.                         return false;
  705.                     }
  706.                 }
  707.             }
  708.         }
  709.         if(p>=1){
  710.             for(var s=0;s<p;s++)
  711.             {
  712.                 aOldPos[aCurIdxSet[s]]=aPos[aCurIdxSet[s]];
  713.             }
  714.             mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,p,aPos,nLevel);
  715.             adjustPosition(bDown,aDataCon,aCurIdxSet,p,aPos);
  716.             
  717.             if(nLevel==1&&oHTML.nNeeded<=oHTML.nCurrent){
  718.                 return true;
  719.             }
  720.         }
  721.     }while(p>0);
  722.     return true;
  723. }
  724.  
  725. function updateUsedK(aDataCon,aOriPos,aOldPos,bDown)
  726. {
  727.     for(var i=0;i<aDataCon.length;i++)
  728.     {
  729.         if (aOldPos[i]!=aOriPos[i])
  730.         {
  731.             var nBP=0;
  732.             var nEP=0;
  733.             if(bDown)
  734.             {
  735.                 nBP=aOriPos[i];
  736.                 nEP=aOldPos[i]-1;
  737.             }
  738.             else
  739.             {
  740.                 if (aOldPos[i]!=-1)
  741.                     nBP=aOldPos[i]+aDataCon[i].aKs[aOldPos[i]].nNKOff+1;
  742.                 else
  743.                     nBP=0;
  744.                 nEP=aOriPos[i]+aDataCon[i].aKs[aOriPos[i]].nNKOff;
  745.             }
  746.             if(nBP<=nEP)
  747.             {
  748.                 setContentsUsed(aDataCon[i],nBP,nEP);
  749.                 
  750.                 var oFirstPair=aDataCon[i].oUsedItems;
  751.                 if(oFirstPair.oN==null&&oFirstPair.nB==0&&oFirstPair.nE==aDataCon[i].nNum-1)
  752.                 {
  753.                     storeKeysOnly(aDataCon[i]);
  754.                     aDataCon[i].oUsedItems=aDataCon[i].aKs=aDataCon[i].sFileName=null;
  755.                 }
  756.             }
  757.         }
  758.     }
  759. }
  760.  
  761. function storeKeysOnly(oCData)
  762. {
  763.     oCData.aKsOnly=new Array();
  764.     for(var i=0;i<oCData.aKs.length;i++)
  765.     {
  766.         oCData.aKsOnly[i]=oCData.aKs[i].sName;
  767.         i+=oCData.aKs[i].nNKOff;
  768.     }
  769. }
  770.  
  771. function setContentsUsed(oIdx,nB,nE)
  772. {
  773.     if(!oIdx.oUsedItems)
  774.         oIdx.oUsedItems=new usedItems(nB,nE);
  775.     else
  776.     {
  777.         var oUsedItems=oIdx.oUsedItems;
  778.         var oPNode=null;
  779.         do{
  780.             if(oUsedItems.nB>nB)
  781.             {
  782.                 if(oUsedItems.nB==nE+1)
  783.                 {
  784.                     oUsedItems.nB=nB;
  785.                 }
  786.                 else{
  787.                     var oNewNode=new usedItems(oUsedItems.nB,oUsedItems.nE);
  788.                     oNewNode.oN=oUsedItems.oN;
  789.                     oUsedItems.nB=nB;
  790.                     oUsedItems.nE=nE;
  791.                     oUsedItems.oN=oNewNode;
  792.                 }
  793.                 break;
  794.             }
  795.             oPNode=oUsedItems;
  796.             oUsedItems=oUsedItems.oN;
  797.         }while(oUsedItems);
  798.         if(!oUsedItems)
  799.         {
  800.             if(oPNode!=null)
  801.                 oPNode.oN=new usedItems(nB,nE);
  802.         }
  803.         if(oPNode!=null){
  804.             if(oPNode.nE==oPNode.oN.nB-1)
  805.             {
  806.                 oPNode.nE=oPNode.oN.nE;
  807.                 oPNode.oN=oPNode.oN.oN;
  808.             }
  809.         }
  810.     }
  811. }
  812.  
  813. function projInfo(sPPath,sDPath,sFile)
  814. {
  815.     this.sPPath=sPPath;
  816.     this.sDPath=sDPath;
  817.     this.sFile=sFile;
  818. }
  819.  
  820. function addProjInfo(sPPath,sDPath,sFile)
  821. {
  822.     var oIdxInfo=new projInfo(sPPath,sDPath,sFile);
  823.     gaData[gaData.length]=oIdxInfo;
  824.     return oIdxInfo;
  825. }
  826.  
  827. function writeDataIFrame()
  828. {
  829.     if(gnLoad<gaData.length)
  830.     {
  831.         gbLoadInfo=true;
  832.         loadData2(gaData[gnLoad].sPPath+gaData[gnLoad].sDPath+gaData[gnLoad].sFile);
  833.     }
  834.     else{
  835.         if(gnItems!=0)
  836.         {
  837.             markBegin();
  838.             writeFakeItems();
  839.             gsSKA="";
  840.             gnNeeded=gnVisible;
  841.             gnIns=0;
  842.             checkReady();
  843.         }
  844.     }
  845. }
  846.  
  847. function getH6ById(nPos)
  848. {
  849.     if(document.all)
  850.         return document.all("fk"+nPos);
  851.     else if(document.getElementsByName)
  852.         return document.getElementsByName("fk"+nPos);
  853.     return null;        
  854. }
  855.  
  856. function showItemsInEvaluation(nBP)
  857. {
  858.     var bRtn=true;
  859.     var fPer=nBP/gnItems;
  860.     var nB=Math.floor(fPer*gnMaxItems);
  861.     var oCData=getChunkByIdx(gnRef,nB);
  862.     if(oCData)
  863.     {
  864.         if(!oCData.aKs&&oCData.sFileName!=null)
  865.         {
  866.             gnNKI=nB;
  867.             goCData=oCData;
  868.             oCData.nProjId=gnRef;
  869.             gbLoadInfo=false;
  870.             beginLoading();
  871.             loadData2(gaData[gnRef].sPPath+gaData[gnRef].sDPath+oCData.sFileName);
  872.         }
  873.         else{
  874.             gsSKA=getKByIdx(oCData,nB);
  875.             if(gsSKA)
  876.             {
  877.                 gsSKB=null;
  878.                 gbNeedCalc=true;
  879.                 gbScrl=true;
  880.                 checkReady()
  881.             }
  882.             else
  883.             {
  884.                 markEnd();
  885.                 bRtn=false;
  886.             }
  887.         }
  888.     }
  889.     else
  890.     {
  891.         markEnd();
  892.         bRtn=false;
  893.     }
  894.     return bRtn;
  895. }
  896.  
  897. function isUsed(oCData,nPos)
  898. {
  899.     var oUsed=oCData.oUsedItems;
  900.     while(oUsed&&oUsed.nB<=nPos)
  901.     {
  902.         if(oUsed.nE>=nPos) return true;
  903.         oUsed=oUsed.oN;
  904.     }
  905.     return false;
  906. }
  907.  
  908. function getKByIdx(oCData,nB)
  909. {
  910.     var nRelPos=nB-(oCData.nTotal-oCData.nNum);
  911.     var aIKs=oCData.aKs;
  912.     if(nRelPos>=0&&aIKs&&nRelPos<aIKs.length)
  913.     {
  914.         var oK=null;
  915.         do{
  916.             oK=aIKs[nRelPos++];
  917.         }    
  918.         while((oK.nType==3||isUsed(oCData,nRelPos-1))&&nRelPos<aIKs.length);
  919.         if(oK.nType!=3)
  920.         {
  921.             return oK.sName;
  922.         }
  923.         else{
  924.             nRelPos=nB-(oCData.nTotal-oCData.nNum)-1;
  925.             if(nRelPos>=0)
  926.             {
  927.                 do{
  928.                     oK=aIKs[nRelPos--];
  929.                 }
  930.                 while((oK.nType==3||isUsed(oCData,nRelPos+1))&&nRelPos>=0);
  931.             }
  932.             if(oK.nType!=3)
  933.             {
  934.                 return oK.sName;
  935.             }
  936.         }
  937.     }
  938.     return null;
  939. }
  940.  
  941. function loadData2(sFileName)
  942. {
  943.     disEvt();
  944.     if(gbXML)
  945.         loadDataXML(sFileName);
  946.     else
  947.         loadData(sFileName);
  948.     enEvt();
  949. }
  950.  
  951. function projReady(aChunk)
  952. {
  953.     gaChunks[gnLoad++]=aChunk;
  954.     var len=aChunk.length;
  955.     var nTotal=0;
  956.     if(len>0)
  957.         nTotal=aChunk[len-1].nTotal;
  958.     gnItems+=nTotal;
  959.     if(nTotal>gnMaxItems)
  960.     {
  961.         gnMaxItems=nTotal;
  962.         gnRef=gnLoad-1;
  963.     }
  964.     setTimeout("writeDataIFrame();",1);
  965. }
  966.  
  967. function writeFakeItems()
  968. {
  969.     disEvt();
  970.     gnUHeight=15;
  971.     var sHTML=getFakeItemsHTMLbyCount(0,gnItems);
  972.     document.body.insertAdjacentHTML("beforeEnd",sHTML);
  973.     var obj=getH6ById(0);
  974.     if (document.body != null)
  975.     {
  976.         gnVisible=Math.ceil(document.body.clientHeight/gnUHeight);
  977.     }
  978.     gaFakes[0]=new fakeItemsArea(0,gnItems,"",getEndString(),obj);
  979.     enEvt();
  980. }
  981.  
  982. function getEndString()
  983. {
  984.     var sBC=getBiggestChar();
  985.     return sBC+sBC+sBC+sBC+sBC+sBC+sBC+sBC;
  986. }
  987.  
  988. function getUnitIdx(nScrl,nHeight)
  989. {
  990.     if(gaFakes.length==0)
  991.     {
  992.         markEnd();
  993.         return;
  994.     }
  995.     var nB=0;
  996.     var nE=gaFakes.length-1;
  997.     var nM=-1;
  998.     var nTop=0;
  999.     var nBtm=0;
  1000.     var bF=false;
  1001.     do{
  1002.         nM=(nB+nE)>>1;
  1003.         nBtm=gaFakes[nM].getBtm();
  1004.         nTop=gaFakes[nM].getTop();
  1005.             
  1006.         if(nTop>=nScrl+nHeight)
  1007.             nE=nM-1;
  1008.         else if(nBtm<nScrl)
  1009.             nB=nM+1;
  1010.         else{
  1011.             bF=true;
  1012.             break;
  1013.         }
  1014.     }while(nE>=nB);
  1015.     if(bF)
  1016.     {
  1017.         if(nTop>=nScrl){
  1018.             gsSKA=gaFakes[nM].sKA;
  1019.             gsSKB=null;
  1020.             gnNeeded=Math.ceil((nHeight-nTop+nScrl)/gnUHeight);
  1021.             gnIns=gaFakes[nM].nB;
  1022.             checkReady();
  1023.         }
  1024.         else if(nBtm<=nScrl+nHeight){
  1025.             gsSKB=gaFakes[nM].sKB;
  1026.             gsSKA=null;
  1027.             gnNeeded=Math.ceil((nBtm-nScrl+gnScrlMgn)/gnUHeight);
  1028.             gbNeedCalc=true;
  1029.             checkReady();
  1030.         }
  1031.         else{
  1032.             gnNeeded=gnVisible;
  1033.             var nUnitIdx=gaFakes[nM].nB+Math.floor((nScrl-nTop)/gnUHeight);
  1034.             if (!showItemsInEvaluation(nUnitIdx))
  1035.             {
  1036.                 gsSKA=gaFakes[nM].sKA;
  1037.                 gsSKB=null;
  1038.                 gnNeeded=Math.ceil(nHeight/gnUHeight);
  1039.                 gnIns=gaFakes[nM].nB;
  1040.                 checkReady();
  1041.             }
  1042.         }
  1043.     }
  1044.     else
  1045.         markEnd();
  1046. }
  1047.  
  1048. function disEvt()
  1049. {
  1050.     window.onscroll=null;
  1051.     window.onresize=null;
  1052. }
  1053.  
  1054. function enEvt()
  1055. {
  1056.     window.onscroll=window_OnScroll;
  1057.     window.onresize=window_OnResize;
  1058. }
  1059.  
  1060. function insertIdxKs(nIns,oHTML,bScrl)
  1061. {
  1062.     var bRtn=true;
  1063.     disEvt();
  1064.     var nCount=oHTML.nConsumed;
  1065.     var nB=0;
  1066.     var nE=gaFakes.length-1;
  1067.     var nM=-1;
  1068.     var bF=false;
  1069.     do{
  1070.         nM=(nB+nE)>>1;
  1071.         if(gaFakes[nM].nB>nIns)
  1072.             nE=nM-1;
  1073.         else if(gaFakes[nM].nB+gaFakes[nM].nNum<=nIns)
  1074.             nB=nM+1;
  1075.         else{
  1076.             bF=true;
  1077.             break;
  1078.         }
  1079.     }while(nE>=nB);
  1080.     if(bF)
  1081.     {
  1082.         var oFIA=gaFakes[nM];
  1083.         var nOffsetTop=oFIA.getTop();
  1084.         var nOffsetBottom=oFIA.getBtm();
  1085.         var nDelta=0;
  1086.         var nHDiff=nIns-oFIA.nB;
  1087.         var nTDiff=oFIA.nNum+oFIA.nB-(nIns+nCount);
  1088.         if(nHDiff>0)
  1089.         {
  1090.             nDelta=oFIA.setNum(nHDiff);
  1091.             var sOldKBefore=oFIA.sKB;
  1092.             oFIA.sKB=oHTML.sFK;
  1093.             if(nTDiff>0)
  1094.             {
  1095.                 var sHTML=getFakeItemsHTMLbyCount(nIns,nTDiff);
  1096.                 oFIA.insertAdjacentHTML("afterEnd",sHTML);
  1097.                 var obj=getH6ById(nIns);
  1098.                 insertItemIntoArray(gaFakes,nM+1,new fakeItemsArea(nIns+nCount,nTDiff,oHTML.sLK,sOldKBefore,obj));
  1099.             }
  1100.             oFIA.insertAdjacentHTML("afterEnd",oHTML.sHTML);    
  1101.             if(bScrl)
  1102.             {
  1103.                 if(gbMac&&gbIE4)
  1104.                 {
  1105.                     var nScrollPos=nOffsetBottom-nDelta;
  1106.                     while(document.body.scrollTop!=nScrollPos)
  1107.                         document.body.scrollTop=nScrollPos;
  1108.                 }
  1109.                 else
  1110.                     window.scrollTo(0,nOffsetBottom-nDelta);
  1111.             }
  1112.         }
  1113.         else{
  1114.             oFIA.insertAdjacentHTML("beforeBegin",oHTML.sHTML);
  1115.             if(bScrl){
  1116.                 if(gbMac&&gbIE4)
  1117.                 {
  1118.                     var nScrollPos=nOffsetTop;
  1119.                     while(document.body.scrollTop!=nScrollPos)
  1120.                         document.body.scrollTop=nScrollPos;
  1121.                 }
  1122.                 else
  1123.                     window.scrollTo(0,nOffsetTop);
  1124.             }
  1125.                     
  1126.             if(nTDiff>0)
  1127.             {
  1128.                 oFIA.nB=nIns+nCount;
  1129.                 nDelta=oFIA.setNum(nTDiff);
  1130.                 oFIA.sKA=oHTML.sLK;
  1131.             }    
  1132.             else{
  1133.                 gaFakes[nM].setNum(0);
  1134.                 removeItemFromArray(gaFakes,nM);
  1135.             }
  1136.         }
  1137.     }
  1138.     else
  1139.         bRtn=false;
  1140.     enEvt();
  1141.     return bRtn;
  1142. }
  1143.  
  1144. function window_OnScroll()
  1145. {
  1146.     gnSE++;
  1147.     setTimeout("procScroll();",50);    
  1148. }
  1149.  
  1150. function procScroll()
  1151. {
  1152.     if(gnSE==1&&!gbProcess)
  1153.     {
  1154.         markBegin();
  1155.         getUnitIdx(document.body.scrollTop,document.body.clientHeight);
  1156.     }
  1157.     gnSE--;
  1158. }
  1159.  
  1160. function window_OnResize()
  1161. {
  1162.     gnRE++;
  1163.     setTimeout("procResize();",50);
  1164. }
  1165.  
  1166. function procResize()
  1167. {
  1168.     if(gnRE==1&&!gbProcess)
  1169.     {
  1170.         markBegin();
  1171.         gnVisible=Math.ceil(document.body.clientHeight/gnUHeight);
  1172.         if(gnIns==-1)
  1173.             getUnitIdx(document.body.scrollTop,document.body.clientHeight);
  1174.     }
  1175.     gnRE--;
  1176. }
  1177.  
  1178. function getChunkByIdx(nIdx,nPosition)
  1179. {
  1180.     var oCData=null;
  1181.     if(nIdx<gaChunks.length)
  1182.     {
  1183.         var len=gaChunks[nIdx].length;
  1184.         if(len>0)
  1185.         {
  1186.             var nB=0;
  1187.             var nE=len-1;
  1188.             var bF=false;
  1189.             do{
  1190.                 var nM=(nB+nE)>>1;
  1191.                 if(nPosition<gaChunks[nIdx][nM].nTotal)
  1192.                 {
  1193.                     bF=true;
  1194.                     nE=nM;
  1195.                 }
  1196.                 else
  1197.                     nB=nM+1;
  1198.             }while(nE>nB);
  1199.             if(bF)
  1200.                 oCData=gaChunks[nIdx][nE];
  1201.             else if(nPosition<gaChunks[nIdx][nB].nTotal)
  1202.                 oCData=gaChunks[nIdx][nB];
  1203.         }
  1204.     }
  1205.     return oCData;
  1206. }
  1207.  
  1208. function getChunkedData(nIdx,bDown,sK)
  1209. {
  1210.     var oCData=null;
  1211.     var nCandId=-1;
  1212.     if(nIdx<gaChunks.length)
  1213.     {
  1214.         var len=gaChunks[nIdx].length;
  1215.         if(len>0)
  1216.         {
  1217.             var nB=0;
  1218.             var nE=len-1;
  1219.             var bF=false;
  1220.             do{
  1221.                 var nM=(nB+nE+(bDown?0:1))>>1;
  1222.                 if(bDown)
  1223.                 {
  1224.                     if(compare(sK,gaChunks[nIdx][nM].sEK)<0)
  1225.                     {
  1226.                         bF=true;
  1227.                         nE=nM;
  1228.                     }
  1229.                     else
  1230.                         nB=nM+1;
  1231.                 }
  1232.                 else
  1233.                 {
  1234.                     if(compare(sK,gaChunks[nIdx][nM].sBK)>0)
  1235.                     {
  1236.                         bF=true;
  1237.                         nB=nM;
  1238.                     }
  1239.                     else
  1240.                         nE=nM-1;
  1241.                 }
  1242.             }while(nE>nB);
  1243.             if(bF)
  1244.             {
  1245.                 if(bDown)
  1246.                     nCandId=nE;
  1247.                 else
  1248.                     nCandId=nB;
  1249.             }
  1250.             else
  1251.             {
  1252.                 if(bDown)
  1253.                 {
  1254.                     if(gaChunks[nIdx].length>nB&&compare(sK,gaChunks[nIdx][nB].sEK)<0)
  1255.                         nCandId=nB;
  1256.                     else
  1257.                         nCandId=gaChunks[nIdx].length-1;
  1258.                 }
  1259.                 else
  1260.                 {
  1261.                     if(0<=nE&&compare(sK,gaChunks[nIdx][nE].sBK)>0)
  1262.                         nCandId=nE;
  1263.                     else
  1264.                         nCandId=0;
  1265.                 }
  1266.             }
  1267.             return gaChunks[nIdx][nCandId];
  1268.         }
  1269.     }
  1270.     return null;
  1271. }
  1272.  
  1273. function findCK()
  1274. {
  1275.     if(gsCK!=null)
  1276.     {
  1277.         gsSKA=gsCK;
  1278.         gbFindCK=true;
  1279.         gnNeeded=1;
  1280.         markBegin();
  1281.         checkReady();
  1282.     }
  1283. }
  1284.  
  1285. function writeLoadingDiv(nIIdx)
  1286. {
  1287.     return "<div id=\""+gsLoadingDivID+"\" style=\"position:absolute;top:0;left:0;z-index:600;visibility:hidden;padding-left:4px;background-color:ivory;border-width:1;border-style:solid;border-color:black;width:150px;\">"+gsLoadingMsg+"</div>";
  1288. }
  1289.  
  1290. var gbWhHost=true;