--- /dev/null
+var gaChunks=new Array();\r
+var gaFakes=new Array();\r
+var gaDataCon=null;\r
+var gaData=new Array();\r
+\r
+var gbFindCK=false;;\r
+var gbNeedCalc=false;\r
+var gbScrl=false;\r
+var gbProcess=false;\r
+var gbReady=false;\r
+\r
+var gnCheck=0;\r
+var gnNum=0;\r
+var gnIns=-1;\r
+var gnLoad=0;\r
+var gnRef=-1;\r
+var gnMaxItems=0;\r
+var gnMaxMargin=32000;\r
+var gnNeeded=0;\r
+var gnNKI=-1;\r
+var gnRE=0;\r
+var gnScrlMgn=30;\r
+var gnSE=0;\r
+var gnVisible=0;\r
+var gnItems=0;\r
+var gnUHeight=1;\r
+\r
+var gsBCK=null;\r
+var gsChK=null;\r
+var gsCK=null;\r
+var gsLoadingDivID="LoadingDiv";\r
+var gsLoadingMsg="Loading data, please wait...";\r
+var gsSKA=null;\r
+var gsSKB=null;\r
+\r
+var gbLoadInfo=false;\r
+\r
+function putDataXML(xmlDoc,sDocPath)\r
+{\r
+ if(gbLoadInfo)\r
+ {\r
+ var node=xmlDoc.lastChild;\r
+ if(node)\r
+ {\r
+ var nTotal=0\r
+ var aChunk=new Array();\r
+ var oC=node.firstChild;\r
+ while(oC)\r
+ {\r
+ if(oC.nodeName=="chunkinfo")\r
+ {\r
+ var item=new Object();\r
+ item.sBK=oC.getAttribute("first");\r
+ item.sEK=oC.getAttribute("last");\r
+ item.sFileName=oC.getAttribute("url");\r
+ item.nNum=parseInt(oC.getAttribute("num"));\r
+ nTotal+=item.nNum;\r
+ item.nTotal=nTotal;\r
+ aChunk[aChunk.length]=item;\r
+ }\r
+ oC=oC.nextSibling;\r
+ }\r
+ projReady(aChunk);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ var node=xmlDoc.lastChild;\r
+ if(node)\r
+ {\r
+ var aData=new Array();\r
+ var nPrev=0;\r
+ var nNext=0;\r
+ var oC=node.firstChild;\r
+ while(oC)\r
+ {\r
+ nPrev=nNext;\r
+ if(oC.nodeName=="key")\r
+ {\r
+ var sName=oC.getAttribute("name");\r
+ if(sName&&sName.length>0)\r
+ {\r
+ var sTarget=oC.getAttribute("target");\r
+ var item=new Object();\r
+ item.nType=2;\r
+ item.sName=sName;\r
+ if(sTarget)\r
+ item.sTarget=sTarget;\r
+ item.nPKOff=nPrev;\r
+ aData[aData.length]=item;\r
+ var nCurIndex=aData.length;\r
+ processKey(oC,aData,item);\r
+ nNext=aData.length-nCurIndex;\r
+ item.nNKOff=nNext;\r
+ }\r
+ }\r
+ else if(oC.nodeName=="letter")\r
+ {\r
+ var name=oC.getAttribute("name");\r
+ if(name&&name.length>0)\r
+ {\r
+ var item=new Object();\r
+ item.nType=1;\r
+ item.sName=name;\r
+ item.nPKOff=nPrev;\r
+ nNext=0;\r
+ item.nNKOff=nNext;\r
+ aData[aData.length]=item;\r
+ }\r
+ }\r
+ else if(oC.nodeName=="entry")\r
+ {\r
+ var name=oC.getAttribute("name");\r
+ var def=oC.getAttribute("value");\r
+ if(name&&name.length>0)\r
+ {\r
+ var item=new Object();\r
+ item.sName=name;\r
+ item.sDef=def;\r
+ item.nPKOff=nPrev;\r
+ nNext=0;\r
+ item.nNKOff=nNext;\r
+ aData[aData.length]=item;\r
+ }\r
+ }\r
+ oC=oC.nextSibling;\r
+ }\r
+ putData(aData);\r
+ }\r
+ }\r
+}\r
+\r
+function processKey(element,aData,item)\r
+{\r
+ var i=0;\r
+ var nPrev=0;\r
+ var nNext=0;\r
+ var oC=element.firstChild;\r
+ while(oC)\r
+ {\r
+ if(oC.nodeName=="topic")\r
+ {\r
+ var name=oC.getAttribute("name");\r
+ var url=oC.getAttribute("url");\r
+ if(url&&url.length!=0)\r
+ {\r
+ if(!name||name.length==0)\r
+ name=url;\r
+ var topic=new Object();\r
+ topic.sName=name;\r
+ topic.sURL=url;\r
+ if(!item.aTopics)\r
+ item.aTopics=new Array();\r
+ item.aTopics[item.aTopics.length]=topic;\r
+ }\r
+ }\r
+ else if(oC.nodeName=="key")\r
+ {\r
+ nPrev=nNext;\r
+ var name=oC.getAttribute("name");\r
+ if(name&&name.length!=0)\r
+ {\r
+ var subItem=new Object();\r
+ subItem.sName=name;\r
+ subItem.nType=3;\r
+ subItem.nPKOff=nPrev;\r
+ aData[aData.length]=subItem;\r
+ var nCurIndex=aData.length;\r
+ processKey(oC,aData,subItem);\r
+ nNext=aData.length-nCurIndex;\r
+ subItem.nNKOff=nNext;\r
+ }\r
+ }\r
+ oC=oC.nextSibling;\r
+ }\r
+}\r
+\r
+function putData(aData)\r
+{\r
+ endLoading();\r
+ var oCData=goCData;\r
+ if(oCData)\r
+ {\r
+ oCData.aKs=aData;\r
+ if(gnNKI==-1)\r
+ setTimeout("checkReady();",1);\r
+ else\r
+ {\r
+ gsSKA=getKByIdx(oCData,gnNKI);\r
+ gbNeedCalc=true;\r
+ gbScrl=true;\r
+ gnNKI=-1;\r
+ if(gsSKA)\r
+ setTimeout("checkReady();",1);\r
+ else\r
+ {\r
+ markEnd();\r
+ setTimeout("checkAgain();",50);\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+function markEnd()\r
+{\r
+ if(gbProcess)\r
+ gbProcess=false;\r
+}\r
+\r
+function endLoading()\r
+{\r
+ var oDiv=getElement(gsLoadingDivID);\r
+ if(oDiv)\r
+ oDiv.style.visibility="hidden";\r
+}\r
+\r
+function markBegin()\r
+{\r
+ gbProcess=true;\r
+}\r
+\r
+function beginLoading()\r
+{\r
+ var oDiv=getElement(gsLoadingDivID);\r
+ if(oDiv)\r
+ {\r
+ oDiv.style.top=document.body.scrollTop;\r
+ oDiv.style.visibility="visible";\r
+ }\r
+}\r
+\r
+function indexHTMLPart()\r
+{\r
+ this.sHTML="";\r
+ this.nNeeded=0;\r
+ this.nCurrent=0;\r
+ this.nConsumed=0;\r
+ this.sFK=null;\r
+ this.sLK=null;\r
+ this.addHTML=function(sHTML,nConsumed,bDown,bK,sK){\r
+ if(bDown)\r
+ this.sHTML+=sHTML;\r
+ else\r
+ this.sHTML=sHTML+this.sHTML;\r
+ this.nCurrent++; \r
+ this.nConsumed+=nConsumed;\r
+ if(bK)\r
+ {\r
+ if(!this.sFK)\r
+ this.sFK=sK;\r
+ if(!this.sLK)\r
+ this.sLK=sK;\r
+ if(bDown)\r
+ this.sLK=sK;\r
+ else\r
+ this.sFK=sK;\r
+ }\r
+ }\r
+ this.appendHTML=function(oHTML,bDown){\r
+ this.addSubHTML(oHTML,bDown);\r
+ if(!this.sFK)\r
+ this.sFK=oHTML.sFK;\r
+ if(!this.sLK)\r
+ this.sLK=oHTML.sLK;\r
+ if(bDown)\r
+ this.sLK=oHTML.sLK;\r
+ else\r
+ this.sFK=oHTML.sFK;\r
+ } \r
+ \r
+ this.addSubHTML=function(oHTML,bDown){\r
+ if(bDown)\r
+ this.sHTML+=oHTML.sHTML;\r
+ else\r
+ this.sHTML=oHTML.sHTML+this.sHTML;\r
+ this.nCurrent+=oHTML.nCurrent;\r
+ this.nConsumed+=oHTML.nConsumed; \r
+ }\r
+}\r
+\r
+function getMaxUnits()\r
+{\r
+ return Math.floor(gnMaxMargin/gnUHeight)+1;\r
+}\r
+\r
+function getFakeItemsHTMLbyCount(nB,nCount)\r
+{\r
+ var nMU=getMaxUnits();\r
+ var nNum=Math.floor(nCount/nMU);\r
+ var sHTML="";\r
+ for(var i=0;i<nNum;i++)\r
+ sHTML+=getFakeItemHTML(nB,nMU-1);\r
+ \r
+ var nRest=nCount%nMU;\r
+ sHTML+=getFakeItemHTML(nB,nRest-1);\r
+ return sHTML;\r
+}\r
+\r
+function getFakeItemHTML(nB,nNum)\r
+{\r
+ return "<h6 name=fk"+nB+" id=fk"+nB+" style=\"margin-top:"+gnUHeight*nNum+";margin-bottom:0\"> </h6>";\r
+}\r
+\r
+function fakeItemsArea(nB,n,sKA,sKB,obj)\r
+{\r
+ this.nB=nB;\r
+ this.nNum=n;\r
+ this.sKA=sKA;\r
+ this.sKB=sKB;\r
+ this.obj=obj;\r
+ this.nMargin=(n-1)*gnUHeight;\r
+\r
+ this.setNum=function(n)\r
+ {\r
+ var nLastobj=-1;\r
+ var nDelta=this.nMargin;\r
+ this.nMargin=(n-1)*gnUHeight;\r
+ nDelta=nDelta-this.nMargin;\r
+ if(n>0)\r
+ {\r
+ this.nNum=n;\r
+ var nMU=getMaxUnits();\r
+ nLastobj=Math.floor((n-1)/nMU);\r
+ if(this.obj.length)\r
+ this.obj[nLastobj].style.marginTop=((n-1)%nMU)*gnUHeight;\r
+ else\r
+ this.obj.style.marginTop=((n-1)%nMU)*gnUHeight;\r
+ }\r
+ if(this.obj.length)\r
+ {\r
+ for(var i=this.obj.length-1;i>nLastobj;i--)\r
+ removeThis(this.obj[i]);\r
+ }\r
+ else\r
+ {\r
+ if(nLastobj==-1)\r
+ removeThis(this.obj);\r
+ }\r
+ return nDelta;\r
+ }\r
+ this.insertAdjacentHTML=function(sWhere,sHTML)\r
+ {\r
+ if(sWhere=="beforeBegin")\r
+ {\r
+ if(this.obj.length)\r
+ this.obj[0].insertAdjacentHTML(sWhere,sHTML);\r
+ else\r
+ this.obj.insertAdjacentHTML(sWhere,sHTML);\r
+ }\r
+ else if(sWhere=="afterEnd")\r
+ {\r
+ if(this.obj.length)\r
+ {\r
+ if(gbMac&&gbIE5&&this.obj[this.obj.length-1].nextSibling)\r
+ this.obj[this.obj.length-1].nextSibling.insertAdjacentHTML("beforeBegin",sHTML);\r
+ else\r
+ this.obj[this.obj.length-1].insertAdjacentHTML(sWhere,sHTML);\r
+ }\r
+ else\r
+ {\r
+ if(gbMac&&gbIE5&&this.obj.nextSibling)\r
+ this.obj.nextSibling.insertAdjacentHTML("beforeBegin",sHTML);\r
+ else\r
+ this.obj.insertAdjacentHTML(sWhere,sHTML);\r
+ }\r
+ }\r
+ }\r
+ this.getBtm=function()\r
+ {\r
+ if(this.obj.length)\r
+ return this.obj[this.obj.length-1].offsetTop;\r
+ else\r
+ return this.obj.offsetTop;\r
+ }\r
+ this.getTop=function()\r
+ {\r
+ return this.getBtm()-this.nMargin;\r
+ }\r
+}\r
+\r
+function usedItems(nB,nE)\r
+{\r
+ this.nB=nB;\r
+ this.nE=nE;\r
+ this.oN=null;\r
+}\r
+\r
+function checkReady()\r
+{\r
+ var len=gaChunks.length;\r
+ var bNeedLoad=false;\r
+ var aDataCon;\r
+ var s=0;\r
+ var bDown=(gsSKB==null);\r
+ var sK=bDown?gsSKA:gsSKB;\r
+ if(sK==null)\r
+ {\r
+ markEnd();\r
+ setTimeout("checkAgain();",50);\r
+ return;\r
+ }\r
+ if(!gsChK||sK!=gsChK||gnNum==0)\r
+ {\r
+ gnCheck=0;\r
+ gsChK=sK;\r
+ aDataCon=new Array();\r
+ }\r
+ else{\r
+ s=gnNum;\r
+ aDataCon=gaDataCon;\r
+ }\r
+ for(var i=gnCheck;i<len;i++)\r
+ {\r
+ var oCData=getChunkedData(i,bDown,sK);\r
+ if(oCData)\r
+ {\r
+ if(!oCData.aKs&&oCData.sFileName!=null)\r
+ {\r
+ bNeedLoad=true;\r
+ goCData=oCData;\r
+ gnNum=s;\r
+ gnCheck=i;\r
+ gaDataCon=aDataCon;\r
+ oCData.nProjId=i;\r
+ gbLoadInfo=false;\r
+ beginLoading();\r
+ loadData2(gaData[i].sPPath+gaData[i].sDPath+oCData.sFileName);\r
+ return;\r
+ }\r
+ else{\r
+ aDataCon[s++]=oCData;\r
+ }\r
+ }\r
+ }\r
+ if(!bNeedLoad)\r
+ {\r
+ gnNum=0;\r
+ gsSKA=gsSKB=gsShowK=null;\r
+ \r
+ var oHTML=new indexHTMLPart();\r
+ var aPos=new Array();\r
+ var aOriPos=new Array();\r
+ var aMaxPos=new Array();\r
+ var aMinPos=new Array();\r
+ \r
+ if(gbNeedCalc||gbFindCK) gnIns=0;\r
+ for(i=0;i<aDataCon.length;i++)\r
+ {\r
+ aPos[i]=getIdxPos(aDataCon[i],bDown,sK);\r
+ if(gbNeedCalc||gbFindCK)\r
+ {\r
+ gnIns+=aPos[i]+aDataCon[i].nTotal-aDataCon[i].nNum;\r
+ if(!bDown)\r
+ {\r
+ if(aPos[i]!=-1)\r
+ {\r
+ if(aDataCon[i].aKs)\r
+ gnIns+=aDataCon[i].aKs[aPos[i]].nNKOff;\r
+ else\r
+ {\r
+ var n=aPos[i]+1;\r
+ while(n<aDataCon[i].aKsOnly.length&&!aDataCon[i].aKsOnly[n])\r
+ n++;\r
+ n=n-aPos[i]-1;\r
+ gnIns+=n;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ aOriPos[i]=aPos[i];\r
+ getLimit(aDataCon,aPos,aMaxPos,aMinPos,i);\r
+ }\r
+ if((gbNeedCalc||gbFindCK)&&!bDown&&gnIns!=-1)\r
+ {\r
+ gnIns+=(aDataCon.length-1)\r
+ }\r
+ if(gnIns!=-1||gbFindCK)\r
+ {\r
+ oHTML.nNeeded=gnNeeded;\r
+ var bDone=writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,1);\r
+ if(oHTML.nConsumed!=0)\r
+ {\r
+ var nB;\r
+ if(!bDown)\r
+ nB=gnIns-oHTML.nConsumed+1;\r
+ else\r
+ nB=gnIns;\r
+ \r
+ var oldScrollPos=document.body.scrollTop;\r
+ if(insertIdxKs(nB,oHTML,gbScrl))\r
+ {\r
+ updateUsedK(aDataCon,aOriPos,aPos,bDown);\r
+ if(!gbScrl&&gbMac)\r
+ {\r
+ while(document.body.scrollTop!=oldScrollPos)\r
+ document.body.scrollTop=oldScrollPos;\r
+ }\r
+ gbScrl=false;\r
+ }\r
+ if(gbFindCK)\r
+ {\r
+ gbFindCK=false;\r
+ gbNeedCalc=true;\r
+ gsSKB=oHTML.sFK;\r
+ gnIns=-1;\r
+ setTimeout("checkReady();",50);\r
+ return;\r
+ }\r
+ }\r
+ else if(gbFindCK)\r
+ {\r
+ gbFindCK=false;\r
+ gbNeedCalc=true;\r
+ gsSKB=getFirstKeyFromPos(aDataCon,aPos);\r
+ gnIns=-1;\r
+ setTimeout("checkReady();",50);\r
+ return;\r
+ }\r
+ if(!findCKInDom()) return;\r
+\r
+ gnNeeded=gnNeeded-oHTML.nCurrent;\r
+ gnIns=-1;\r
+ markEnd();\r
+ setTimeout("checkAgain();",50);\r
+ gbNeedCalc=false;\r
+ }\r
+ else\r
+ {\r
+ if(!findCKInDom()) return;\r
+ markEnd();\r
+ setTimeout("checkAgain();",50);\r
+ }\r
+ }\r
+}\r
+\r
+function getFirstKeyFromPos(aDataCon,aPos)\r
+{\r
+ var sCurrentK=getBiggestChar();\r
+ for(var i=0;i<aPos.length;i++)\r
+ {\r
+ if(aDataCon[i].aKs&&aDataCon[i].aKs.length>0&&aPos[i]>=0&&aPos[i]<aDataCon[i].aKs.length)\r
+ {\r
+ if(sCurrentK==""||\r
+ compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)\r
+ {\r
+ sCurrentK=aDataCon[i].aKs[aPos[i]].sName;\r
+ }\r
+ }\r
+ }\r
+ return sCurrentK;\r
+}\r
+\r
+function checkAgain()\r
+{\r
+ if(!gbProcess)\r
+ {\r
+ if(gsBCK!=null)\r
+ {\r
+ gsCK=gsBCK;\r
+ gsBCK=null;\r
+ findCK();\r
+ }\r
+ else\r
+ {\r
+ markBegin();\r
+ getUnitIdx(document.body.scrollTop,document.body.clientHeight);\r
+ }\r
+ }\r
+ else\r
+ setTimeout("checkAgain()",50);\r
+}\r
+\r
+function getLimit(aDataCon,aPos,aMaxPos,aMinPos,i)\r
+{\r
+ aMaxPos[i]=aDataCon[i].nNum;\r
+ aMinPos[i]=-1;\r
+ var oPNode=null;\r
+ if(aDataCon[i].oUsedItems)\r
+ {\r
+ var oUsedItems=aDataCon[i].oUsedItems;\r
+ do{\r
+ if(oUsedItems.nB>aPos[i])\r
+ {\r
+ aMaxPos[i]=oUsedItems.nB;\r
+ break;\r
+ }\r
+ oPNode=oUsedItems;\r
+ oUsedItems=oUsedItems.oN;\r
+ }while(oUsedItems!=null);\r
+ if(oPNode)\r
+ aMinPos[i]=oPNode.nE;\r
+ }\r
+ else if(aDataCon[i].aKs==null)\r
+ {\r
+ aMaxPos[i]=aMinPos[i]=aPos[i];\r
+ }\r
+ if(aMinPos[i]>=aPos[i]||aMaxPos[i]<=aPos[i])\r
+ {\r
+ aMaxPos[i]=aMinPos[i]=aPos[i];\r
+ }\r
+}\r
+\r
+function getIdxPos(oIdx,bDown,sK)\r
+{\r
+ var aKs=oIdx.aKs;\r
+ var nIdx;\r
+ if(bDown)\r
+ nIdx=oIdx.nNum;\r
+ else\r
+ nIdx=-1;\r
+ if(aKs!=null)\r
+ {\r
+ for(var i=0;i<aKs.length;i++)\r
+ { \r
+ if(bDown)\r
+ {\r
+ if(compare(aKs[i].sName,sK)>0)\r
+ {\r
+ nIdx=i;\r
+ break;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if(compare(aKs[i].sName,sK)<0)\r
+ nIdx=i;\r
+ else\r
+ break;\r
+ }\r
+ i+=aKs[i].nNKOff;\r
+ }\r
+ }\r
+ else if(oIdx.aKsOnly)\r
+ {\r
+ var aKsOnly=oIdx.aKsOnly;\r
+ for(var i=0;i<aKsOnly.length;i++)\r
+ { \r
+ if(aKsOnly[i])\r
+ {\r
+ if(bDown)\r
+ {\r
+ if(compare(aKsOnly[i],sK)>0)\r
+ {\r
+ nIdx=i;\r
+ break;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if(compare(aKsOnly[i],sK)<0)\r
+ nIdx=i;\r
+ else\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return nIdx;\r
+}\r
+\r
+function writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,nLevel)\r
+{\r
+ var aOldPos=new Array();\r
+ for(var i=0;i<aPos.length;i++)\r
+ {\r
+ aOldPos[i]=aPos[i];\r
+ }\r
+ var p;\r
+ do{\r
+ var sCurrentK="";\r
+ var aCurIdxSet=new Array();\r
+ p=0;\r
+ for(i=0;i<aDataCon.length;i++)\r
+ {\r
+ if(aDataCon[i].aKs&&aDataCon[i].aKs.length&&aPos[i]!=-1&&\r
+ (bDown&&aPos[i]<aMaxPos[i])||(!bDown&&aPos[i]>aMinPos[i]))\r
+ {\r
+ if(sCurrentK==""||\r
+ (bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)||\r
+ (!bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)<0))\r
+ {\r
+ sCurrentK=aDataCon[i].aKs[aPos[i]].sName;\r
+ p=0;\r
+ aCurIdxSet[p++]=i;\r
+ }\r
+ else if(sCurrentK==aDataCon[i].aKs[aPos[i]].sName){\r
+ aCurIdxSet[p++]=i;\r
+ }\r
+ }\r
+ else if(nLevel==1&&aMaxPos[i]!=aMinPos[i]){\r
+ if(bDown&&aPos[i]==aMaxPos[i])\r
+ {\r
+ if(aDataCon[i].aKs)\r
+ {\r
+ gsSKA=aDataCon[i].aKs[aOldPos[i]].sName;\r
+ return false;\r
+ }\r
+ }\r
+ else if(!bDown&&aPos[i]==aMinPos[i])\r
+ {\r
+ if(aDataCon[i].aKs)\r
+ {\r
+ gsSKB=aDataCon[i].aKs[aOldPos[i]].sName;\r
+ return false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if(p>=1){\r
+ for(var s=0;s<p;s++)\r
+ {\r
+ aOldPos[aCurIdxSet[s]]=aPos[aCurIdxSet[s]];\r
+ }\r
+ mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,p,aPos,nLevel);\r
+ adjustPosition(bDown,aDataCon,aCurIdxSet,p,aPos);\r
+ \r
+ if(nLevel==1&&oHTML.nNeeded<=oHTML.nCurrent){\r
+ return true;\r
+ }\r
+ }\r
+ }while(p>0);\r
+ return true;\r
+}\r
+\r
+function updateUsedK(aDataCon,aOriPos,aOldPos,bDown)\r
+{\r
+ for(var i=0;i<aDataCon.length;i++)\r
+ {\r
+ if (aOldPos[i]!=aOriPos[i])\r
+ {\r
+ var nBP=0;\r
+ var nEP=0;\r
+ if(bDown)\r
+ {\r
+ nBP=aOriPos[i];\r
+ nEP=aOldPos[i]-1;\r
+ }\r
+ else\r
+ {\r
+ if (aOldPos[i]!=-1)\r
+ nBP=aOldPos[i]+aDataCon[i].aKs[aOldPos[i]].nNKOff+1;\r
+ else\r
+ nBP=0;\r
+ nEP=aOriPos[i]+aDataCon[i].aKs[aOriPos[i]].nNKOff;\r
+ }\r
+ if(nBP<=nEP)\r
+ {\r
+ setContentsUsed(aDataCon[i],nBP,nEP);\r
+ \r
+ var oFirstPair=aDataCon[i].oUsedItems;\r
+ if(oFirstPair.oN==null&&oFirstPair.nB==0&&oFirstPair.nE==aDataCon[i].nNum-1)\r
+ {\r
+ storeKeysOnly(aDataCon[i]);\r
+ aDataCon[i].oUsedItems=aDataCon[i].aKs=aDataCon[i].sFileName=null;\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+function storeKeysOnly(oCData)\r
+{\r
+ oCData.aKsOnly=new Array();\r
+ for(var i=0;i<oCData.aKs.length;i++)\r
+ {\r
+ oCData.aKsOnly[i]=oCData.aKs[i].sName;\r
+ i+=oCData.aKs[i].nNKOff;\r
+ }\r
+}\r
+\r
+function setContentsUsed(oIdx,nB,nE)\r
+{\r
+ if(!oIdx.oUsedItems)\r
+ oIdx.oUsedItems=new usedItems(nB,nE);\r
+ else\r
+ {\r
+ var oUsedItems=oIdx.oUsedItems;\r
+ var oPNode=null;\r
+ do{\r
+ if(oUsedItems.nB>nB)\r
+ {\r
+ if(oUsedItems.nB==nE+1)\r
+ {\r
+ oUsedItems.nB=nB;\r
+ }\r
+ else{\r
+ var oNewNode=new usedItems(oUsedItems.nB,oUsedItems.nE);\r
+ oNewNode.oN=oUsedItems.oN;\r
+ oUsedItems.nB=nB;\r
+ oUsedItems.nE=nE;\r
+ oUsedItems.oN=oNewNode;\r
+ }\r
+ break;\r
+ }\r
+ oPNode=oUsedItems;\r
+ oUsedItems=oUsedItems.oN;\r
+ }while(oUsedItems);\r
+ if(!oUsedItems)\r
+ {\r
+ if(oPNode!=null)\r
+ oPNode.oN=new usedItems(nB,nE);\r
+ }\r
+ if(oPNode!=null){\r
+ if(oPNode.nE==oPNode.oN.nB-1)\r
+ {\r
+ oPNode.nE=oPNode.oN.nE;\r
+ oPNode.oN=oPNode.oN.oN;\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+function projInfo(sPPath,sDPath,sFile)\r
+{\r
+ this.sPPath=sPPath;\r
+ this.sDPath=sDPath;\r
+ this.sFile=sFile;\r
+}\r
+\r
+function addProjInfo(sPPath,sDPath,sFile)\r
+{\r
+ var oIdxInfo=new projInfo(sPPath,sDPath,sFile);\r
+ gaData[gaData.length]=oIdxInfo;\r
+ return oIdxInfo;\r
+}\r
+\r
+function writeDataIFrame()\r
+{\r
+ if(gnLoad<gaData.length)\r
+ {\r
+ gbLoadInfo=true;\r
+ loadData2(gaData[gnLoad].sPPath+gaData[gnLoad].sDPath+gaData[gnLoad].sFile);\r
+ }\r
+ else{\r
+ if(gnItems!=0)\r
+ {\r
+ markBegin();\r
+ writeFakeItems();\r
+ gsSKA="";\r
+ gnNeeded=gnVisible;\r
+ gnIns=0;\r
+ checkReady();\r
+ }\r
+ }\r
+}\r
+\r
+function getH6ById(nPos)\r
+{\r
+ if(document.all)\r
+ return document.all("fk"+nPos);\r
+ else if(document.getElementsByName)\r
+ return document.getElementsByName("fk"+nPos);\r
+ return null; \r
+}\r
+\r
+function showItemsInEvaluation(nBP)\r
+{\r
+ var bRtn=true;\r
+ var fPer=nBP/gnItems;\r
+ var nB=Math.floor(fPer*gnMaxItems);\r
+ var oCData=getChunkByIdx(gnRef,nB);\r
+ if(oCData)\r
+ {\r
+ if(!oCData.aKs&&oCData.sFileName!=null)\r
+ {\r
+ gnNKI=nB;\r
+ goCData=oCData;\r
+ oCData.nProjId=gnRef;\r
+ gbLoadInfo=false;\r
+ beginLoading();\r
+ loadData2(gaData[gnRef].sPPath+gaData[gnRef].sDPath+oCData.sFileName);\r
+ }\r
+ else{\r
+ gsSKA=getKByIdx(oCData,nB);\r
+ if(gsSKA)\r
+ {\r
+ gsSKB=null;\r
+ gbNeedCalc=true;\r
+ gbScrl=true;\r
+ checkReady()\r
+ }\r
+ else\r
+ {\r
+ markEnd();\r
+ bRtn=false;\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ markEnd();\r
+ bRtn=false;\r
+ }\r
+ return bRtn;\r
+}\r
+\r
+function isUsed(oCData,nPos)\r
+{\r
+ var oUsed=oCData.oUsedItems;\r
+ while(oUsed&&oUsed.nB<=nPos)\r
+ {\r
+ if(oUsed.nE>=nPos) return true;\r
+ oUsed=oUsed.oN;\r
+ }\r
+ return false;\r
+}\r
+\r
+function getKByIdx(oCData,nB)\r
+{\r
+ var nRelPos=nB-(oCData.nTotal-oCData.nNum);\r
+ var aIKs=oCData.aKs;\r
+ if(nRelPos>=0&&aIKs&&nRelPos<aIKs.length)\r
+ {\r
+ var oK=null;\r
+ do{\r
+ oK=aIKs[nRelPos++];\r
+ } \r
+ while((oK.nType==3||isUsed(oCData,nRelPos-1))&&nRelPos<aIKs.length);\r
+ if(oK.nType!=3)\r
+ {\r
+ return oK.sName;\r
+ }\r
+ else{\r
+ nRelPos=nB-(oCData.nTotal-oCData.nNum)-1;\r
+ if(nRelPos>=0)\r
+ {\r
+ do{\r
+ oK=aIKs[nRelPos--];\r
+ }\r
+ while((oK.nType==3||isUsed(oCData,nRelPos+1))&&nRelPos>=0);\r
+ }\r
+ if(oK.nType!=3)\r
+ {\r
+ return oK.sName;\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+}\r
+\r
+function loadData2(sFileName)\r
+{\r
+ disEvt();\r
+ if(gbXML)\r
+ loadDataXML(sFileName);\r
+ else\r
+ loadData(sFileName);\r
+ enEvt();\r
+}\r
+\r
+function projReady(aChunk)\r
+{\r
+ gaChunks[gnLoad++]=aChunk;\r
+ var len=aChunk.length;\r
+ var nTotal=0;\r
+ if(len>0)\r
+ nTotal=aChunk[len-1].nTotal;\r
+ gnItems+=nTotal;\r
+ if(nTotal>gnMaxItems)\r
+ {\r
+ gnMaxItems=nTotal;\r
+ gnRef=gnLoad-1;\r
+ }\r
+ setTimeout("writeDataIFrame();",1);\r
+}\r
+\r
+function writeFakeItems()\r
+{\r
+ disEvt();\r
+ gnUHeight=15;\r
+ var sHTML=getFakeItemsHTMLbyCount(0,gnItems);\r
+ document.body.insertAdjacentHTML("beforeEnd",sHTML);\r
+ var obj=getH6ById(0);\r
+ if (document.body != null)\r
+ {\r
+ gnVisible=Math.ceil(document.body.clientHeight/gnUHeight);\r
+ }\r
+ gaFakes[0]=new fakeItemsArea(0,gnItems,"",getEndString(),obj);\r
+ enEvt();\r
+}\r
+\r
+function getEndString()\r
+{\r
+ var sBC=getBiggestChar();\r
+ return sBC+sBC+sBC+sBC+sBC+sBC+sBC+sBC;\r
+}\r
+\r
+function getUnitIdx(nScrl,nHeight)\r
+{\r
+ if(gaFakes.length==0)\r
+ {\r
+ markEnd();\r
+ return;\r
+ }\r
+ var nB=0;\r
+ var nE=gaFakes.length-1;\r
+ var nM=-1;\r
+ var nTop=0;\r
+ var nBtm=0;\r
+ var bF=false;\r
+ do{\r
+ nM=(nB+nE)>>1;\r
+ nBtm=gaFakes[nM].getBtm();\r
+ nTop=gaFakes[nM].getTop();\r
+ \r
+ if(nTop>=nScrl+nHeight)\r
+ nE=nM-1;\r
+ else if(nBtm<nScrl)\r
+ nB=nM+1;\r
+ else{\r
+ bF=true;\r
+ break;\r
+ }\r
+ }while(nE>=nB);\r
+ if(bF)\r
+ {\r
+ if(nTop>=nScrl){\r
+ gsSKA=gaFakes[nM].sKA;\r
+ gsSKB=null;\r
+ gnNeeded=Math.ceil((nHeight-nTop+nScrl)/gnUHeight);\r
+ gnIns=gaFakes[nM].nB;\r
+ checkReady();\r
+ }\r
+ else if(nBtm<=nScrl+nHeight){\r
+ gsSKB=gaFakes[nM].sKB;\r
+ gsSKA=null;\r
+ gnNeeded=Math.ceil((nBtm-nScrl+gnScrlMgn)/gnUHeight);\r
+ gbNeedCalc=true;\r
+ checkReady();\r
+ }\r
+ else{\r
+ gnNeeded=gnVisible;\r
+ var nUnitIdx=gaFakes[nM].nB+Math.floor((nScrl-nTop)/gnUHeight);\r
+ if (!showItemsInEvaluation(nUnitIdx))\r
+ {\r
+ gsSKA=gaFakes[nM].sKA;\r
+ gsSKB=null;\r
+ gnNeeded=Math.ceil(nHeight/gnUHeight);\r
+ gnIns=gaFakes[nM].nB;\r
+ checkReady();\r
+ }\r
+ }\r
+ }\r
+ else\r
+ markEnd();\r
+}\r
+\r
+function disEvt()\r
+{\r
+ window.onscroll=null;\r
+ window.onresize=null;\r
+}\r
+\r
+function enEvt()\r
+{\r
+ window.onscroll=window_OnScroll;\r
+ window.onresize=window_OnResize;\r
+}\r
+\r
+function insertIdxKs(nIns,oHTML,bScrl)\r
+{\r
+ var bRtn=true;\r
+ disEvt();\r
+ var nCount=oHTML.nConsumed;\r
+ var nB=0;\r
+ var nE=gaFakes.length-1;\r
+ var nM=-1;\r
+ var bF=false;\r
+ do{\r
+ nM=(nB+nE)>>1;\r
+ if(gaFakes[nM].nB>nIns)\r
+ nE=nM-1;\r
+ else if(gaFakes[nM].nB+gaFakes[nM].nNum<=nIns)\r
+ nB=nM+1;\r
+ else{\r
+ bF=true;\r
+ break;\r
+ }\r
+ }while(nE>=nB);\r
+ if(bF)\r
+ {\r
+ var oFIA=gaFakes[nM];\r
+ var nOffsetTop=oFIA.getTop();\r
+ var nOffsetBottom=oFIA.getBtm();\r
+ var nDelta=0;\r
+ var nHDiff=nIns-oFIA.nB;\r
+ var nTDiff=oFIA.nNum+oFIA.nB-(nIns+nCount);\r
+ if(nHDiff>0)\r
+ {\r
+ nDelta=oFIA.setNum(nHDiff);\r
+ var sOldKBefore=oFIA.sKB;\r
+ oFIA.sKB=oHTML.sFK;\r
+ if(nTDiff>0)\r
+ {\r
+ var sHTML=getFakeItemsHTMLbyCount(nIns,nTDiff);\r
+ oFIA.insertAdjacentHTML("afterEnd",sHTML);\r
+ var obj=getH6ById(nIns);\r
+ insertItemIntoArray(gaFakes,nM+1,new fakeItemsArea(nIns+nCount,nTDiff,oHTML.sLK,sOldKBefore,obj));\r
+ }\r
+ oFIA.insertAdjacentHTML("afterEnd",oHTML.sHTML); \r
+ if(bScrl)\r
+ {\r
+ if(gbMac&&gbIE4)\r
+ {\r
+ var nScrollPos=nOffsetBottom-nDelta;\r
+ while(document.body.scrollTop!=nScrollPos)\r
+ document.body.scrollTop=nScrollPos;\r
+ }\r
+ else\r
+ window.scrollTo(0,nOffsetBottom-nDelta);\r
+ }\r
+ }\r
+ else{\r
+ oFIA.insertAdjacentHTML("beforeBegin",oHTML.sHTML);\r
+ if(bScrl){\r
+ if(gbMac&&gbIE4)\r
+ {\r
+ var nScrollPos=nOffsetTop;\r
+ while(document.body.scrollTop!=nScrollPos)\r
+ document.body.scrollTop=nScrollPos;\r
+ }\r
+ else\r
+ window.scrollTo(0,nOffsetTop);\r
+ }\r
+ \r
+ if(nTDiff>0)\r
+ {\r
+ oFIA.nB=nIns+nCount;\r
+ nDelta=oFIA.setNum(nTDiff);\r
+ oFIA.sKA=oHTML.sLK;\r
+ } \r
+ else{\r
+ gaFakes[nM].setNum(0);\r
+ removeItemFromArray(gaFakes,nM);\r
+ }\r
+ }\r
+ }\r
+ else\r
+ bRtn=false;\r
+ enEvt();\r
+ return bRtn;\r
+}\r
+\r
+function window_OnScroll()\r
+{\r
+ gnSE++;\r
+ setTimeout("procScroll();",50); \r
+}\r
+\r
+function procScroll()\r
+{\r
+ if(gnSE==1&&!gbProcess)\r
+ {\r
+ markBegin();\r
+ getUnitIdx(document.body.scrollTop,document.body.clientHeight);\r
+ }\r
+ gnSE--;\r
+}\r
+\r
+function window_OnResize()\r
+{\r
+ gnRE++;\r
+ setTimeout("procResize();",50);\r
+}\r
+\r
+function procResize()\r
+{\r
+ if(gnRE==1&&!gbProcess)\r
+ {\r
+ markBegin();\r
+ gnVisible=Math.ceil(document.body.clientHeight/gnUHeight);\r
+ if(gnIns==-1)\r
+ getUnitIdx(document.body.scrollTop,document.body.clientHeight);\r
+ }\r
+ gnRE--;\r
+}\r
+\r
+function getChunkByIdx(nIdx,nPosition)\r
+{\r
+ var oCData=null;\r
+ if(nIdx<gaChunks.length)\r
+ {\r
+ var len=gaChunks[nIdx].length;\r
+ if(len>0)\r
+ {\r
+ var nB=0;\r
+ var nE=len-1;\r
+ var bF=false;\r
+ do{\r
+ var nM=(nB+nE)>>1;\r
+ if(nPosition<gaChunks[nIdx][nM].nTotal)\r
+ {\r
+ bF=true;\r
+ nE=nM;\r
+ }\r
+ else\r
+ nB=nM+1;\r
+ }while(nE>nB);\r
+ if(bF)\r
+ oCData=gaChunks[nIdx][nE];\r
+ else if(nPosition<gaChunks[nIdx][nB].nTotal)\r
+ oCData=gaChunks[nIdx][nB];\r
+ }\r
+ }\r
+ return oCData;\r
+}\r
+\r
+function getChunkedData(nIdx,bDown,sK)\r
+{\r
+ var oCData=null;\r
+ var nCandId=-1;\r
+ if(nIdx<gaChunks.length)\r
+ {\r
+ var len=gaChunks[nIdx].length;\r
+ if(len>0)\r
+ {\r
+ var nB=0;\r
+ var nE=len-1;\r
+ var bF=false;\r
+ do{\r
+ var nM=(nB+nE+(bDown?0:1))>>1;\r
+ if(bDown)\r
+ {\r
+ if(compare(sK,gaChunks[nIdx][nM].sEK)<0)\r
+ {\r
+ bF=true;\r
+ nE=nM;\r
+ }\r
+ else\r
+ nB=nM+1;\r
+ }\r
+ else\r
+ {\r
+ if(compare(sK,gaChunks[nIdx][nM].sBK)>0)\r
+ {\r
+ bF=true;\r
+ nB=nM;\r
+ }\r
+ else\r
+ nE=nM-1;\r
+ }\r
+ }while(nE>nB);\r
+ if(bF)\r
+ {\r
+ if(bDown)\r
+ nCandId=nE;\r
+ else\r
+ nCandId=nB;\r
+ }\r
+ else\r
+ {\r
+ if(bDown)\r
+ {\r
+ if(gaChunks[nIdx].length>nB&&compare(sK,gaChunks[nIdx][nB].sEK)<0)\r
+ nCandId=nB;\r
+ else\r
+ nCandId=gaChunks[nIdx].length-1;\r
+ }\r
+ else\r
+ {\r
+ if(0<=nE&&compare(sK,gaChunks[nIdx][nE].sBK)>0)\r
+ nCandId=nE;\r
+ else\r
+ nCandId=0;\r
+ }\r
+ }\r
+ return gaChunks[nIdx][nCandId];\r
+ }\r
+ }\r
+ return null;\r
+}\r
+\r
+function findCK()\r
+{\r
+ if(gsCK!=null)\r
+ {\r
+ gsSKA=gsCK;\r
+ gbFindCK=true;\r
+ gnNeeded=1;\r
+ markBegin();\r
+ checkReady();\r
+ }\r
+}\r
+\r
+function writeLoadingDiv(nIIdx)\r
+{\r
+ 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>";\r
+}\r
+\r
+var gbWhHost=true;
\ No newline at end of file