787. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 1/2/2018 11:56:48 AM Eastern Standard Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

787.1 Files compared

# Location File Last Modified
1 Tue Jan 2 16:56:48 2018 UTC
2 HTRE_P2.zip\src.zip\output\IHTA OLH Files.zip\admin.zip\admin whhost.js Wed May 31 16:59:36 2017 UTC

787.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 0 0
Changed 0 0
Inserted 1 1332
Removed 0 0

787.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

787.4 Active regular expressions

No regular expressions were active.

787.5 Comparison detail

        1   //      We bHelp 5.10 .002
        2   var gaChun ks=new Arr ay();
        3   var gaFake s=new Arra y();
        4   var gaData Con=null;
        5   var gaData =new Array ();
        6  
        7   var gbFind CK=false;;
        8   var gbNeed Calc=false ;
        9   var gbScrl =false;
        10   var gbProc ess=false;
        11   var gbRead y=false;
        12  
        13   var gnChec k=0;
        14   var gnNum= 0;
        15   var gnIns= -1;
        16   var gnLoad =0;
        17   var gnRef= -1;
        18   var gnMaxI tems=0;
        19   var gnMaxM argin=3200 0;
        20   var gnNeed ed=0;
        21   var gnNKI= -1;
        22   var gnRE=0 ;
        23   var gnScrl Mgn=30;
        24   var gnSE=0 ;
        25   var gnVisi ble=0;
        26   var gnItem s=0;
        27   var gnUHei ght=1;
        28  
        29   var gsBCK= null;
        30   var gsChK= null;
        31   var gsCK=n ull;
        32   var gsLoad ingDivID=" LoadingDiv ";
        33   var gsLoad ingMsg="Lo ading data , please w ait...";
        34   var gsPage Dir="ltr";
        35   var gsSKA= null;
        36   var gsSKB= null;
        37  
        38   var gbLoad Info=false ;
        39  
        40   function o nLoadXMLEr ror()
        41   {
        42           if (gbLoadInf o)
        43           {
        44                    var  aChunk=new  Array();
        45                    proj Ready(aChu nk);
        46           }
        47           el se
        48           {
        49                    var  aData=new  Array();
        50                    putD ata(aData) ;
        51           }
        52   }
        53  
        54   function p utDataXML( xmlDoc,sDo cPath)
        55   {
        56           if (gbLoadInf o)
        57           {
        58                    var  node=xmlDo c.lastChil d;
        59                    if(n ode)
        60                    {
        61                             var nT otal=0
        62                             var aC hunk=new A rray();
        63                             var oC =node.firs tChild;
        64                             while( oC)
        65                             {
        66                                      if(oC.no deName=="c hunkinfo")
        67                                      {
        68                                               var item=n ew Object( );
        69                                               item.sBK=o C.getAttri bute("firs t");
        70                                               item.sEK=o C.getAttri bute("last ");
        71                                               item.sFile Name=oC.ge tAttribute ("url");
        72                                               item.nNum= parseInt(o C.getAttri bute("num" ));
        73                                               nTotal+=it em.nNum;
        74                                               item.nTota l=nTotal;
        75                                               aChunk[aCh unk.length ]=item;
        76                                      }
        77                                      oC=oC.ne xtSibling;
        78                             }
        79                             projRe ady(aChunk );
        80                    }
        81           }
        82           el se
        83           {
        84                    var  node=xmlDo c.lastChil d;
        85                    if(n ode)
        86                    {
        87                             var aD ata=new Ar ray();
        88                             var nP rev=0;
        89                             var nN ext=0;
        90                             var oC =node.firs tChild;
        91                             while( oC)
        92                             {
        93                                      nPrev=nN ext;
        94                                      if(oC.no deName=="k ey")
        95                                      {
        96                                               var sName= oC.getAttr ibute("nam e");
        97                                               if(sName&& sName.leng th>0)
        98                                               {
        99                                                       va r sTarget= oC.getAttr ibute("tar get");
        100                                                       va r item=new  Object();
        101                                                       it em.nType=2 ;
        102                                                       it em.sName=s Name;
        103                                                       if (sTarget)
        104                                                                item .sTarget=s Target;
        105                                                       it em.nPKOff= nPrev;
        106                                                       aD ata[aData. length]=it em;
        107                                                       va r nCurInde x=aData.le ngth;
        108                                                       pr ocessKey(o C,aData,it em);
        109                                                       nN ext=aData. length-nCu rIndex;
        110                                                       it em.nNKOff= nNext;
        111                                               }
        112                                      }
        113                                      else if( oC.nodeNam e=="letter ")
        114                                      {
        115                                               var name=o C.getAttri bute("name ");
        116                                               if(name&&n ame.length >0)
        117                                               {
        118                                                       va r item=new  Object();
        119                                                       it em.nType=1 ;
        120                                                       it em.sName=n ame;
        121                                                       it em.nPKOff= nPrev;
        122                                                       nN ext=0;
        123                                                       it em.nNKOff= nNext;
        124                                                       aD ata[aData. length]=it em;
        125                                               }
        126                                      }
        127                                      else if( oC.nodeNam e=="entry" )
        128                                      {
        129                                               var name=o C.getAttri bute("name ");
        130                                               var def=oC .getAttrib ute("value ");
        131                                               if(name&&n ame.length >0)
        132                                               {
        133                                                       va r item=new  Object();
        134                                                       it em.sName=n ame;
        135                                                       it em.sDef=de f;
        136                                                       it em.nPKOff= nPrev;
        137                                                       nN ext=0;
        138                                                       it em.nNKOff= nNext;
        139                                                       aD ata[aData. length]=it em;
        140                                               }
        141                                      }
        142                                      oC=oC.ne xtSibling;
        143                             }
        144                             putDat a(aData);
        145                    }
        146           }
        147   }
        148  
        149   function p rocessKey( element,aD ata,item)
        150   {
        151           va r i=0;
        152           va r nPrev=0;
        153           va r nNext=0;
        154           va r oC=eleme nt.firstCh ild;
        155           wh ile(oC)
        156           {
        157                    if(o C.nodeName =="topic")
        158                    {
        159                             var na me=oC.getA ttribute(" name");
        160                             var ur l=oC.getAt tribute("u rl");
        161                             if(url &&url.leng th!=0)
        162                             {
        163                                      if(!name ||name.len gth==0)
        164                                               name=url;
        165                                      var topi c=new Obje ct();
        166                                      topic.sN ame=name;
        167                                      topic.sU RL=url;
        168                                      if(!item .aTopics)
        169                                               item.aTopi cs=new Arr ay();
        170                                      item.aTo pics[item. aTopics.le ngth]=topi c;
        171                             }
        172                    }
        173                    else  if(oC.nod eName=="ke y")
        174                    {
        175                             nPrev= nNext;
        176                             var na me=oC.getA ttribute(" name");
        177                             if(nam e&&name.le ngth!=0)
        178                             {
        179                                      var subI tem=new Ob ject();
        180                                      subItem. sName=name ;
        181                                      subItem. nType=3;
        182                                      subItem. nPKOff=nPr ev;
        183                                      aData[aD ata.length ]=subItem;
        184                                      var nCur Index=aDat a.length;
        185                                      processK ey(oC,aDat a,subItem) ;
        186                                      nNext=aD ata.length -nCurIndex ;
        187                                      subItem. nNKOff=nNe xt;
        188                             }
        189                    }
        190                    oC=o C.nextSibl ing;
        191           }
        192   }
        193  
        194   function p utData(aDa ta)
        195   {
        196           en dLoading() ;
        197           va r oCData=g oCData;
        198           if (oCData)
        199           {
        200                    oCDa ta.aKs=aDa ta;
        201                    if(g nNKI==-1)
        202                             setTim eout("chec kReady();" ,1);
        203                    else
        204                    {
        205                             gsSKA= getKByIdx( oCData,gnN KI);
        206                             gbNeed Calc=true;
        207                             gbScrl =true;
        208                             gnNKI= -1;
        209                             if(gsS KA)
        210                                      setTimeo ut("checkR eady();",1 );
        211                             else
        212                             {
        213                                      markEnd( );
        214                                      setTimeo ut("checkA gain();",5 0);
        215                             }
        216                    }
        217           }
        218   }
        219  
        220   function m arkEnd()
        221   {
        222           if (gbProcess )
        223                    gbPr ocess=fals e;
        224   }
        225  
        226   function e ndLoading( )
        227   {
        228           va r oDiv=get Element(gs LoadingDiv ID);
        229           if (oDiv)
        230                    oDiv .style.vis ibility="h idden";
        231   }
        232  
        233   function m arkBegin()
        234   {
        235           gb Process=tr ue;
        236   }
        237  
        238   function b eginLoadin g()
        239   {
        240           va r oDiv=get Element(gs LoadingDiv ID);
        241           if (oDiv)
        242           {
        243                    oDiv .style.top =document. body.scrol lTop;
        244                    oDiv .style.vis ibility="v isible";
        245           }
        246   }
        247  
        248   function i ndexHTMLPa rt()
        249   {
        250           th is.sHTML=" ";
        251           th is.nNeeded =0;
        252           th is.nCurren t=0;
        253           th is.nConsum ed=0;
        254           th is.sFK=nul l;
        255           th is.sLK=nul l;
        256           th is.addHTML =function( sHTML,nCon sumed,bDow n,bK,sK){
        257                    if(b Down)
        258                             this.s HTML+=sHTM L;
        259                    else
        260                             this.s HTML=sHTML +this.sHTM L;
        261                    this .nCurrent+ +;                          
        262                    this .nConsumed +=nConsume d;
        263                    if(b K)
        264                    {
        265                             if(!th is.sFK)
        266                                      this.sFK =sK;
        267                             if(!th is.sLK)
        268                                      this.sLK =sK;
        269                             if(bDo wn)
        270                                      this.sLK =sK;
        271                             else
        272                                      this.sFK =sK;
        273                    }
        274           }
        275           th is.appendH TML=functi on(oHTML,b Down){
        276                    this .addSubHTM L(oHTML,bD own);
        277                    if(! this.sFK)
        278                             this.s FK=oHTML.s FK;
        279                    if(! this.sLK)
        280                             this.s LK=oHTML.s LK;
        281                    if(b Down)
        282                             this.s LK=oHTML.s LK;
        283                    else
        284                             this.s FK=oHTML.s FK;
        285           }        
        286           
        287           th is.addSubH TML=functi on(oHTML,b Down){
        288                    if(b Down)
        289                             this.s HTML+=oHTM L.sHTML;
        290                    else
        291                             this.s HTML=oHTML .sHTML+thi s.sHTML;
        292                    this .nCurrent+ =oHTML.nCu rrent;
        293                    this .nConsumed +=oHTML.nC onsumed;                           
        294           }
        295   }
        296  
        297   function g etMaxUnits ()
        298   {
        299           re turn Math. floor(gnMa xMargin/gn UHeight)+1 ;
        300   }
        301  
        302   function g etFakeItem sHTMLbyCou nt(nB,nCou nt)
        303   {
        304           va r nMU=getM axUnits();
        305           va r nNum=Mat h.floor(nC ount/nMU);
        306           va r sHTML="" ;
        307           fo r(var i=0; i<nNum;i++ )
        308                    sHTM L+=getFake ItemHTML(n B,nMU-1);
        309                    
        310           va r nRest=nC ount%nMU;
        311           sH TML+=getFa keItemHTML (nB,nRest- 1);
        312           re turn sHTML ;
        313   }
        314  
        315   function g etFakeItem HTML(nB,nN um)
        316   {
        317           re turn "<h6  name=fk"+n B+" id=fk" +nB+" styl e=\"margin -top:"+gnU Height*nNu m+";margin -bottom:0\ ">&nbsp;</ h6>";
        318   }
        319  
        320   function f akeItemsAr ea(nB,n,sK A,sKB,obj)
        321   {
        322           th is.nB=nB;
        323           th is.nNum=n;
        324           th is.sKA=sKA ;
        325           th is.sKB=sKB ;
        326           th is.obj=obj ;
        327           th is.nMargin =(n-1)*gnU Height;
        328  
        329           th is.setNum= function(n )
        330           {
        331                    var  nLastobj=- 1;
        332                    var  nDelta=thi s.nMargin;
        333                    this .nMargin=( n-1)*gnUHe ight;
        334                    nDel ta=nDelta- this.nMarg in;
        335                    if(n >0)
        336                    {
        337                             this.n Num=n;
        338                             var nM U=getMaxUn its();
        339                             nLasto bj=Math.fl oor((n-1)/ nMU);
        340                             if(thi s.obj.leng th)
        341                                      this.obj [nLastobj] .style.mar ginTop=((n -1)%nMU)*g nUHeight;
        342                             else
        343                                      this.obj .style.mar ginTop=((n -1)%nMU)*g nUHeight;
        344                    }
        345                    if(t his.obj.le ngth)
        346                    {
        347                             for(va r i=this.o bj.length- 1;i>nLasto bj;i--)
        348                                      removeTh is(this.ob j[i]);
        349                    }
        350                    else
        351                    {
        352                             if(nLa stobj==-1)
        353                                      removeTh is(this.ob j);
        354                    }
        355                    retu rn nDelta;
        356           }
        357           th is.insertA djacentHTM L=function (sWhere,sH TML)
        358           {
        359                    if(s Where=="be foreBegin" )
        360                    {
        361                             if(thi s.obj.leng th)
        362                                      this.obj [0].insert AdjacentHT ML(sWhere, sHTML);
        363                             else
        364                                      this.obj .insertAdj acentHTML( sWhere,sHT ML);
        365                    }
        366                    else  if(sWhere =="afterEn d")
        367                    {
        368                             if(thi s.obj.leng th)
        369                             {
        370                                      if(gbMac &&gbIE5&&t his.obj[th is.obj.len gth-1].nex tSibling)
        371                                               this.obj[t his.obj.le ngth-1].ne xtSibling. insertAdja centHTML(" beforeBegi n",sHTML);
        372                                      else
        373                                               this.obj[t his.obj.le ngth-1].in sertAdjace ntHTML(sWh ere,sHTML) ;
        374                             }
        375                             else
        376                             {
        377                                      if(gbMac &&gbIE5&&t his.obj.ne xtSibling)
        378                                               this.obj.n extSibling .insertAdj acentHTML( "beforeBeg in",sHTML) ;
        379                                      else
        380                                               this.obj.i nsertAdjac entHTML(sW here,sHTML );
        381                             }
        382                    }
        383           }
        384           th is.getBtm= function()
        385           {
        386           if (gbSafari3 )
        387           {
        388                    if(t his.obj.le ngth)
        389                             return  findPosit ion(this.o bj[this.ob j.length-1 ]);
        390                    else
        391                             return  findPosit ion(this.o bj);
        392           }
        393                    if(t his.obj.le ngth)
        394                             return  this.obj[ this.obj.l ength-1].o ffsetTop;
        395                    else
        396                             return  this.obj. offsetTop;
        397           }
        398           th is.getTop= function()
        399           {
        400                    retu rn this.ge tBtm()-thi s.nMargin;
        401           }
        402   }
        403  
        404   function u sedItems(n B,nE)
        405   {
        406           th is.nB=nB;
        407           th is.nE=nE;
        408           th is.oN=null ;
        409   }
        410  
        411   function c heckReady( )
        412   {
        413           va r len=gaCh unks.lengt h;
        414           va r bNeedLoa d=false;
        415           va r aDataCon ;
        416           va r s=0;
        417           va r bDown=(g sSKB==null );
        418           va r sK=bDown ?gsSKA:gsS KB;
        419           if (sK==null)
        420           {
        421                    mark End();
        422                    setT imeout("ch eckAgain() ;",50);
        423                    retu rn;
        424           }
        425           if (!gsChK||s K!=gsChK|| gnNum==0)
        426           {
        427                    gnCh eck=0;
        428                    gsCh K=sK;
        429                    aDat aCon=new A rray();
        430           }
        431           el se{
        432                    s=gn Num;
        433                    aDat aCon=gaDat aCon;
        434           }
        435           fo r(var i=gn Check;i<le n;i++)
        436           {
        437                    var  oCData=get ChunkedDat a(i,bDown, sK);
        438                    if(o CData)
        439                    {
        440                             if(!oC Data.aKs&& oCData.sFi leName!=nu ll)
        441                             {
        442                                      bNeedLoa d=true;
        443                                      goCData= oCData;
        444                                      gnNum=s;
        445                                      gnCheck= i;
        446                                      gaDataCo n=aDataCon ;
        447                                      oCData.n ProjId=i;
        448                                      gbLoadIn fo=false;
        449                                      beginLoa ding();
        450                                      loadData 2(gaData[i ].sPPath+g aData[i].s DPath+oCDa ta.sFileNa me);
        451                                      return;
        452                             }
        453                             else{
        454                                      aDataCon [s++]=oCDa ta;
        455                             }
        456                    }
        457           }
        458           if (!bNeedLoa d)
        459           {
        460                    gnNu m=0;
        461                    gsSK A=gsSKB=gs ShowK=null ;
        462                    
        463                    var  oHTML=new  indexHTMLP art();
        464                    var  aPos=new A rray();
        465                    var  aOriPos=ne w Array();
        466                    var  aMaxPos=ne w Array();
        467                    var  aMinPos=ne w Array();
        468                    
        469                    if(g bNeedCalc| |gbFindCK)  gnIns=0;
        470                    for( i=0;i<aDat aCon.lengt h;i++)
        471                    {
        472                             aPos[i ]=getIdxPo s(aDataCon [i],bDown, sK);
        473                             if(gbN eedCalc||g bFindCK)
        474                             {
        475                                      gnIns+=a Pos[i]+aDa taCon[i].n Total-aDat aCon[i].nN um;
        476                                      if(!bDow n)
        477                                      {
        478                                               if(aPos[i] !=-1)
        479                                               {
        480                                                       if (aDataCon[ i].aKs)
        481                                                                gnIn s+=aDataCo n[i].aKs[a Pos[i]].nN KOff;
        482                                                       el se
        483                                                       {
        484                                                                var  n=aPos[i]+ 1;
        485                                                                whil e(n<aDataC on[i].aKsO nly.length &&!aDataCo n[i].aKsOn ly[n])
        486                                                                         n++;
        487                                                                n=n- aPos[i]-1;
        488                                                                gnIn s+=n;
        489                                                       }
        490                                               }
        491                                      }
        492                             }
        493                             aOriPo s[i]=aPos[ i];
        494                             getLim it(aDataCo n,aPos,aMa xPos,aMinP os,i);
        495                    }
        496                    if(( gbNeedCalc ||gbFindCK )&&!bDown& &gnIns!=-1 )
        497                    {
        498                             gnIns+ =(aDataCon .length-1)
        499                    }
        500                    if(g nIns!=-1|| gbFindCK)
        501                    {
        502                             oHTML. nNeeded=gn Needed;
        503                             var bD one=writeI tems(oHTML ,aDataCon, aPos,aMinP os,aMaxPos ,bDown,1);
        504                             if(oHT ML.nConsum ed!=0)
        505                             {
        506                                      var nB;
        507                                      if(!bDow n)
        508                                               nB=gnIns-o HTML.nCons umed+1;
        509                                      else
        510                                               nB=gnIns;
        511                                              
        512                                      var oldS crollPos=d ocument.bo dy.scrollT op;
        513                                      if(inser tIdxKs(nB, oHTML,gbSc rl))
        514                                      {
        515                                               updateUsed K(aDataCon ,aOriPos,a Pos,bDown) ;
        516                                               if(!gbScrl &&gbMac)
        517                                               {
        518                                                       do cument.bod y.scrollTo p=oldScrol lPos;
        519                                               }
        520                                               gbScrl=fal se;
        521                                      }
        522                                      if(gbFin dCK)
        523                                      {
        524                                               gbFindCK=f alse;
        525                                               gbNeedCalc =true;
        526                                               gsSKB=oHTM L.sFK;
        527                                               gnIns=-1;
        528                                               setTimeout ("checkRea dy();",50) ;
        529                                               return;
        530                                      }
        531                             }
        532                             else i f(gbFindCK )
        533                             {
        534                                      gbFindCK =false;
        535                                      gbNeedCa lc=true;
        536                                      gsSKB=ge tFirstKeyF romPos(aDa taCon,aPos );
        537                                      gnIns=-1 ;
        538                                      setTimeo ut("checkR eady();",5 0);
        539                                      return;
        540                             }
        541                             if(!fi ndCKInDom( )) return;
        542  
        543                             gnNeed ed=gnNeede d-oHTML.nC urrent;
        544                             gnIns= -1;
        545                             markEn d();
        546                             setTim eout("chec kAgain();" ,50);
        547                             gbNeed Calc=false ;
        548                    }
        549                    else
        550                    {
        551                             if(!fi ndCKInDom( )) return;
        552                             markEn d();
        553                             setTim eout("chec kAgain();" ,50);
        554                    }
        555           }
        556   }
        557  
        558   function g etFirstKey FromPos(aD ataCon,aPo s)
        559   {
        560           va r sCurrent K=getBigge stChar();
        561           fo r(var i=0; i<aPos.len gth;i++)
        562           {
        563                    if(a DataCon[i] .aKs&&aDat aCon[i].aK s.length>0 &&aPos[i]> =0&&aPos[i ]<aDataCon [i].aKs.le ngth)
        564                    {
        565                             if(sCu rrentK=="" ||
        566                                      compare( sCurrentK, aDataCon[i ].aKs[aPos [i]].sName )>0)
        567                             {
        568                                      sCurrent K=aDataCon [i].aKs[aP os[i]].sNa me;
        569                             }
        570                    }
        571           }
        572           re turn sCurr entK;
        573   }
        574  
        575   function c heckAgain( )
        576   {
        577           if (!gbProces s)
        578           {
        579                    if(g sBCK!=null )
        580                    {
        581                             gsCK=g sBCK;
        582                             gsBCK= null;
        583                             findCK ();
        584                    }
        585                    else
        586                    {
        587                             markBe gin();
        588                         getUnitIdx (document. body.scrol lTop,getCl ientHeight ());
        589                    }
        590           }
        591           el se
        592                    setT imeout("ch eckAgain() ",50);
        593   }
        594  
        595   function g etLimit(aD ataCon,aPo s,aMaxPos, aMinPos,i)
        596   {
        597           aM axPos[i]=a DataCon[i] .nNum;
        598           aM inPos[i]=- 1;
        599           va r oPNode=n ull;
        600           if (aDataCon[ i].oUsedIt ems)
        601           {
        602                    var  oUsedItems =aDataCon[ i].oUsedIt ems;
        603                    do{
        604                             if(oUs edItems.nB >aPos[i])
        605                             {
        606                                      aMaxPos[ i]=oUsedIt ems.nB;
        607                                      break;
        608                             }
        609                             oPNode =oUsedItem s;
        610                             oUsedI tems=oUsed Items.oN;
        611                    }whi le(oUsedIt ems!=null) ;
        612                    if(o PNode)
        613                             aMinPo s[i]=oPNod e.nE;
        614           }
        615           el se if(aDat aCon[i].aK s==null)
        616           {
        617                    aMax Pos[i]=aMi nPos[i]=aP os[i];
        618           }
        619           if (aMinPos[i ]>=aPos[i] ||aMaxPos[ i]<=aPos[i ])
        620           {
        621                    aMax Pos[i]=aMi nPos[i]=aP os[i];
        622           }
        623   }
        624  
        625   function g etIdxPos(o Idx,bDown, sK)
        626   {
        627           va r aKs=oIdx .aKs;
        628           va r nIdx;
        629           if (bDown)
        630                    nIdx =oIdx.nNum ;
        631           el se
        632                    nIdx =-1;
        633           if (aKs!=null )
        634           {
        635                    for( var i=0;i< aKs.length ;i++)
        636                    {        
        637                             if(bDo wn)
        638                             {
        639                                      if(compa re(aKs[i]. sName,sK)> 0)
        640                                      {
        641                                               nIdx=i;
        642                                               break;
        643                                      }
        644                             }
        645                             else
        646                             {
        647                                      if(compa re(aKs[i]. sName,sK)< 0)
        648                                               nIdx=i;
        649                                      else
        650                                               break;
        651                             }
        652                             i+=aKs [i].nNKOff ;
        653                    }
        654           }
        655           el se if(oIdx .aKsOnly)
        656           {
        657                    var  aKsOnly=oI dx.aKsOnly ;
        658                    for( var i=0;i< aKsOnly.le ngth;i++)
        659                    {        
        660                             if(aKs Only[i])
        661                             {
        662                                      if(bDown )
        663                                      {
        664                                               if(compare (aKsOnly[i ],sK)>0)
        665                                               {
        666                                                       nI dx=i;
        667                                                       br eak;
        668                                               }
        669                                      }
        670                                      else
        671                                      {
        672                                               if(compare (aKsOnly[i ],sK)<0)
        673                                                       nI dx=i;
        674                                               else
        675                                                       br eak;
        676                                      }
        677                             }
        678                    }
        679           }
        680           re turn nIdx;
        681   }
        682  
        683   function w riteItems( oHTML,aDat aCon,aPos, aMinPos,aM axPos,bDow n,nLevel)
        684   {
        685           va r aOldPos= new Array( );
        686           fo r(var i=0; i<aPos.len gth;i++)
        687           {
        688                    aOld Pos[i]=aPo s[i];
        689           }
        690           va r p;
        691           do {
        692                    var  sCurrentK= "";
        693                    var  aCurIdxSet =new Array ();
        694                    p=0;
        695                    for( i=0;i<aDat aCon.lengt h;i++)
        696                    {
        697                             if(aDa taCon[i].a Ks&&aDataC on[i].aKs. length&&aP os[i]!=-1& &
        698                                      (bDown&& aPos[i]<aM axPos[i])| |(!bDown&& aPos[i]>aM inPos[i]))
        699                             {
        700                                      if(sCurr entK==""||
        701                                               (bDown&&co mpare(sCur rentK,aDat aCon[i].aK s[aPos[i]] .sName)>0) ||
        702                                               (!bDown&&c ompare(sCu rrentK,aDa taCon[i].a Ks[aPos[i] ].sName)<0 ))
        703                                      {
        704                                               sCurrentK= aDataCon[i ].aKs[aPos [i]].sName ;
        705                                               p=0;
        706                                               aCurIdxSet [p++]=i;
        707                                      }
        708                                      else if( compare(sC urrentK,aD ataCon[i]. aKs[aPos[i ]].sName)= =0){
        709                                               aCurIdxSet [p++]=i;
        710                                      }
        711                             }
        712                             else i f(nLevel== 1&&aMaxPos [i]!=aMinP os[i]){
        713                                      if(bDown &&aPos[i]= =aMaxPos[i ])
        714                                      {
        715                                               if(aDataCo n[i].aKs)
        716                                               {
        717                                                       gs SKA=aDataC on[i].aKs[ aOldPos[i] ].sName;
        718                                                       re turn false ;
        719                                               }
        720                                      }
        721                                      else if( !bDown&&aP os[i]==aMi nPos[i])
        722                                      {
        723                                               if(aDataCo n[i].aKs)
        724                                               {
        725                                                       gs SKB=aDataC on[i].aKs[ aOldPos[i] ].sName;
        726                                                       re turn false ;
        727                                               }
        728                                      }
        729                             }
        730                    }
        731                    if(p >=1){
        732                             for(va r s=0;s<p; s++)
        733                             {
        734                                      aOldPos[ aCurIdxSet [s]]=aPos[ aCurIdxSet [s]];
        735                             }
        736                             mergeI tems(oHTML ,bDown,aDa taCon,aCur IdxSet,p,a Pos,nLevel );
        737                             adjust Position(b Down,aData Con,aCurId xSet,p,aPo s);
        738                             
        739                             if(nLe vel==1&&oH TML.nNeede d<=oHTML.n Current){
        740                                      return t rue;
        741                             }
        742                    }
        743           }w hile(p>0);
        744           re turn true;
        745   }
        746  
        747   function u pdateUsedK (aDataCon, aOriPos,aO ldPos,bDow n)
        748   {
        749           fo r(var i=0; i<aDataCon .length;i+ +)
        750           {
        751                    if ( aOldPos[i] !=aOriPos[ i])
        752                    {
        753                             var nB P=0;
        754                             var nE P=0;
        755                             if(bDo wn)
        756                             {
        757                                      nBP=aOri Pos[i];
        758                                      nEP=aOld Pos[i]-1;
        759                             }
        760                             else
        761                             {
        762                                      if (aOld Pos[i]!=-1 )
        763                                               nBP=aOldPo s[i]+aData Con[i].aKs [aOldPos[i ]].nNKOff+ 1;
        764                                      else
        765                                               nBP=0;
        766                                      nEP=aOri Pos[i]+aDa taCon[i].a Ks[aOriPos [i]].nNKOf f;
        767                             }
        768                             if(nBP <=nEP)
        769                             {
        770                                      setConte ntsUsed(aD ataCon[i], nBP,nEP);
        771                                      
        772                                      var oFir stPair=aDa taCon[i].o UsedItems;
        773                                      if(oFirs tPair.oN== null&&oFir stPair.nB= =0&&oFirst Pair.nE==a DataCon[i] .nNum-1)
        774                                      {
        775                                               storeKeysO nly(aDataC on[i]);
        776                                               aDataCon[i ].oUsedIte ms=aDataCo n[i].aKs=a DataCon[i] .sFileName =null;
        777                                      }
        778                             }
        779                    }
        780           }
        781   }
        782  
        783   function s toreKeysOn ly(oCData)
        784   {
        785           oC Data.aKsOn ly=new Arr ay();
        786           fo r(var i=0; i<oCData.a Ks.length; i++)
        787           {
        788                    oCDa ta.aKsOnly [i]=oCData .aKs[i].sN ame;
        789                    i+=o CData.aKs[ i].nNKOff;
        790           }
        791   }
        792  
        793   function s etContents Used(oIdx, nB,nE)
        794   {
        795           if (!oIdx.oUs edItems)
        796                    oIdx .oUsedItem s=new used Items(nB,n E);
        797           el se
        798           {
        799                    var  oUsedItems =oIdx.oUse dItems;
        800                    var  oPNode=nul l;
        801                    do{
        802                             if(oUs edItems.nB >nB)
        803                             {
        804                                      if(oUsed Items.nB== nE+1)
        805                                      {
        806                                               oUsedItems .nB=nB;
        807                                      }
        808                                      else{
        809                                               var oNewNo de=new use dItems(oUs edItems.nB ,oUsedItem s.nE);
        810                                               oNewNode.o N=oUsedIte ms.oN;
        811                                               oUsedItems .nB=nB;
        812                                               oUsedItems .nE=nE;
        813                                               oUsedItems .oN=oNewNo de;
        814                                      }
        815                                      break;
        816                             }
        817                             oPNode =oUsedItem s;
        818                             oUsedI tems=oUsed Items.oN;
        819                    }whi le(oUsedIt ems);
        820                    if(! oUsedItems )
        821                    {
        822                             if(oPN ode!=null)
        823                                      oPNode.o N=new used Items(nB,n E);
        824                    }
        825                    if(o PNode!=nul l){
        826                             if(oPN ode.nE==oP Node.oN.nB -1)
        827                             {
        828                                      oPNode.n E=oPNode.o N.nE;
        829                                      oPNode.o N=oPNode.o N.oN;
        830                             }
        831                    }
        832           }
        833   }
        834  
        835   function p rojInfo(sP Path,sDPat h,sFile)
        836   {
        837           th is.sPPath= sPPath;
        838           th is.sDPath= sDPath;
        839           th is.sFile=s File;
        840   }
        841  
        842   function a ddProjInfo (sPPath,sD Path,sFile )
        843   {
        844           va r oIdxInfo =new projI nfo(sPPath ,sDPath,sF ile);
        845           ga Data[gaDat a.length]= oIdxInfo;
        846           re turn oIdxI nfo;
        847   }
        848  
        849   function w riteDataIF rame()
        850   {
        851           if (gnLoad<ga Data.lengt h)
        852           {
        853                    gbLo adInfo=tru e;
        854                    load Data2(gaDa ta[gnLoad] .sPPath+ga Data[gnLoa d].sDPath+ gaData[gnL oad].sFile );
        855           }
        856           el se{
        857                    if(g nItems!=0)
        858                    {
        859                             markBe gin();
        860                             writeF akeItems() ;
        861                             gsSKA= "";
        862                             gnNeed ed=gnVisib le;
        863                             gnIns= 0;
        864                             checkR eady();
        865                    }
        866           }
        867   }
        868  
        869   function g etH6ById(n Pos)
        870   {
        871           if (document. all)
        872                    retu rn documen t.all("fk" +nPos);
        873           el se if(docu ment.getEl ementsByNa me)
        874                    retu rn documen t.getEleme ntsByName( "fk"+nPos) ;
        875           re turn null;              
        876   }
        877  
        878   function s howItemsIn Evaluation (nBP)
        879   {
        880           va r bRtn=tru e;
        881           va r fPer=nBP /gnItems;
        882           va r nB=Math. floor(fPer *gnMaxItem s);
        883           va r oCData=g etChunkByI dx(gnRef,n B);
        884           if (oCData)
        885           {
        886                    if(! oCData.aKs &&oCData.s FileName!= null)
        887                    {
        888                             gnNKI= nB;
        889                             goCDat a=oCData;
        890                             oCData .nProjId=g nRef;
        891                             gbLoad Info=false ;
        892                             beginL oading();
        893                             loadDa ta2(gaData [gnRef].sP Path+gaDat a[gnRef].s DPath+oCDa ta.sFileNa me);
        894                    }
        895                    else {
        896                             gsSKA= getKByIdx( oCData,nB) ;
        897                             if(gsS KA)
        898                             {
        899                                      gsSKB=nu ll;
        900                                      gbNeedCa lc=true;
        901                                      gbScrl=t rue;
        902                                      checkRea dy()
        903                             }
        904                             else
        905                             {
        906                                      markEnd( );
        907                                      bRtn=fal se;
        908                             }
        909                    }
        910           }
        911           el se
        912           {
        913                    mark End();
        914                    bRtn =false;
        915           }
        916           re turn bRtn;
        917   }
        918  
        919   function i sUsed(oCDa ta,nPos)
        920   {
        921           va r oUsed=oC Data.oUsed Items;
        922           wh ile(oUsed& &oUsed.nB< =nPos)
        923           {
        924                    if(o Used.nE>=n Pos) retur n true;
        925                    oUse d=oUsed.oN ;
        926           }
        927           re turn false ;
        928   }
        929  
        930   function g etKByIdx(o CData,nB)
        931   {
        932           va r nRelPos= nB-(oCData .nTotal-oC Data.nNum) ;
        933           va r aIKs=oCD ata.aKs;
        934           if (nRelPos>= 0&&aIKs&&n RelPos<aIK s.length)
        935           {
        936                    var  oK=null;
        937                    do{
        938                             oK=aIK s[nRelPos+ +];
        939                    }        
        940                    whil e((oK.nTyp e==3||isUs ed(oCData, nRelPos-1) )&&nRelPos <aIKs.leng th);
        941                    if(o K.nType!=3 )
        942                    {
        943                             return  oK.sName;
        944                    }
        945                    else {
        946                             nRelPo s=nB-(oCDa ta.nTotal- oCData.nNu m)-1;
        947                             if(nRe lPos>=0)
        948                             {
        949                                      do{
        950                                               oK=aIKs[nR elPos--];
        951                                      }
        952                                      while((o K.nType==3 ||isUsed(o CData,nRel Pos+1))&&n RelPos>=0) ;
        953                             }
        954                             if(oK. nType!=3)
        955                             {
        956                                      return o K.sName;
        957                             }
        958                    }
        959           }
        960           re turn null;
        961   }
        962  
        963   function l oadData2(s FileName)
        964   {
        965           di sEvt();
        966           if (gbXML)
        967                    load DataXML(sF ileName);
        968           el se
        969                    load Data(sFile Name);
        970           en Evt();
        971   }
        972  
        973   function p rojReady(a Chunk)
        974   {
        975           ga Chunks[gnL oad++]=aCh unk;
        976           va r len=aChu nk.length;
        977           va r nTotal=0 ;
        978           if (len>0)
        979                    nTot al=aChunk[ len-1].nTo tal;
        980           gn Items+=nTo tal;
        981           if (nTotal>gn MaxItems)
        982           {
        983                    gnMa xItems=nTo tal;
        984                    gnRe f=gnLoad-1 ;
        985           }
        986           se tTimeout(" writeDataI Frame();", 1);
        987   }
        988  
        989   function w riteFakeIt ems()
        990   {
        991           di sEvt();
        992           gn UHeight=15 ;
        993           if (gbSafari3  && !gbMac )
        994                gnUHeigh t=1;
        995           va r sHTML=ge tFakeItems HTMLbyCoun t(0,gnItem s);
        996           do cument.bod y.insertAd jacentHTML ("beforeEn d",sHTML);
        997           va r obj=getH 6ById(0);
        998           if  (document .body != n ull)
        999           {
        1000                    gnVi sible=Math .ceil(getC lientHeigh t()/gnUHei ght);
        1001           }
        1002           ga Fakes[0]=n ew fakeIte msArea(0,g nItems,"", getEndStri ng(),obj);
        1003           en Evt();
        1004   }
        1005  
        1006   function g etEndStrin g()
        1007   {
        1008           va r sBC=getB iggestChar ();
        1009           re turn sBC+s BC+sBC+sBC +sBC+sBC+s BC+sBC;
        1010   }
        1011  
        1012   function g etUnitIdx( nScrl,nHei ght)
        1013   {
        1014           if (gaFakes.l ength==0)
        1015           {
        1016                    mark End();
        1017                    retu rn;
        1018           }
        1019           va r nB=0;
        1020           va r nE=gaFak es.length- 1;
        1021           va r nM=-1;
        1022           va r nTop=0;
        1023           va r nBtm=0;
        1024           va r bF=false ;
        1025           do {
        1026                    nM=( nB+nE)>>1;
        1027                    nBtm =gaFakes[n M].getBtm( );
        1028                    nTop =gaFakes[n M].getTop( );
        1029                             
        1030                    if(n Top>=nScrl +nHeight)
        1031                             nE=nM- 1;
        1032                    else  if(nBtm<n Scrl)
        1033                             nB=nM+ 1;
        1034                    else {
        1035                             bF=tru e;
        1036                             break;
        1037                    }
        1038           }w hile(nE>=n B);
        1039           if (bF)
        1040           {
        1041                    if(n Top>=nScrl ){
        1042                             gsSKA= gaFakes[nM ].sKA;
        1043                             gsSKB= null;
        1044                             gnNeed ed=Math.ce il((nHeigh t-nTop+nSc rl)/gnUHei ght);
        1045                             gnIns= gaFakes[nM ].nB;
        1046                             checkR eady();
        1047                    }
        1048                    else  if(nBtm<= nScrl+nHei ght){
        1049                             gsSKB= gaFakes[nM ].sKB;
        1050                             gsSKA= null;
        1051                             gnNeed ed=Math.ce il((nBtm-n Scrl+gnScr lMgn)/gnUH eight);
        1052                             gbNeed Calc=true;
        1053                             checkR eady();
        1054                    }
        1055                    else {
        1056                             gnNeed ed=gnVisib le;
        1057                             var nU nitIdx=gaF akes[nM].n B+Math.flo or((nScrl- nTop)/gnUH eight);
        1058                             if (!s howItemsIn Evaluation (nUnitIdx) )
        1059                             {
        1060                                      gsSKA=ga Fakes[nM]. sKA;
        1061                                      gsSKB=nu ll;
        1062                                      gnNeeded =Math.ceil (nHeight/g nUHeight);
        1063                                      gnIns=ga Fakes[nM]. nB;
        1064                                      checkRea dy();
        1065                             }
        1066                    }
        1067           }
        1068           el se
        1069                    mark End();
        1070   }
        1071  
        1072   function d isEvt()
        1073   {
        1074           wi ndow.onscr oll=null;
        1075           wi ndow.onres ize=null;
        1076   }
        1077  
        1078   function e nEvt()
        1079   {
        1080           wi ndow.onscr oll=window _OnScroll;
        1081           wi ndow.onres ize=window _OnResize;
        1082   }
        1083  
        1084   function i nsertIdxKs (nIns,oHTM L,bScrl)
        1085   {
        1086           va r bRtn=tru e;
        1087           di sEvt();
        1088           va r nCount=o HTML.nCons umed;
        1089           va r nB=0;
        1090           va r nE=gaFak es.length- 1;
        1091           va r nM=-1;
        1092           va r bF=false ;
        1093           do {
        1094                    nM=( nB+nE)>>1;
        1095                    if(g aFakes[nM] .nB>nIns)
        1096                             nE=nM- 1;
        1097                    else  if(gaFake s[nM].nB+g aFakes[nM] .nNum<=nIn s)
        1098                             nB=nM+ 1;
        1099                    else {
        1100                             bF=tru e;
        1101                             break;
        1102                    }
        1103           }w hile(nE>=n B);
        1104           if (bF)
        1105           {
        1106                    var  oFIA=gaFak es[nM];
        1107                    var  nOffsetTop =oFIA.getT op();
        1108                    var  nOffsetBot tom=oFIA.g etBtm();
        1109                    var  nDelta=0;
        1110                    var  nHDiff=nIn s-oFIA.nB;
        1111                    var  nTDiff=oFI A.nNum+oFI A.nB-(nIns +nCount);
        1112                    if(n HDiff>0)
        1113                    {
        1114                             nDelta =oFIA.setN um(nHDiff) ;
        1115                             var sO ldKBefore= oFIA.sKB;
        1116                             oFIA.s KB=oHTML.s FK;
        1117                             if(nTD iff>0)
        1118                             {
        1119                                      var sHTM L=getFakeI temsHTMLby Count(nIns ,nTDiff);
        1120                                      oFIA.ins ertAdjacen tHTML("aft erEnd",sHT ML);
        1121                                      var obj= getH6ById( nIns);
        1122                                      insertIt emIntoArra y(gaFakes, nM+1,new f akeItemsAr ea(nIns+nC ount,nTDif f,oHTML.sL K,sOldKBef ore,obj));
        1123                             }
        1124                             oFIA.i nsertAdjac entHTML("a fterEnd",o HTML.sHTML );        
        1125                             if(bSc rl)
        1126                             {
        1127                                      if(gbMac &&gbIE4)
        1128                                      {
        1129                                               var nScrol lPos=nOffs etBottom-n Delta;
        1130                                               while(docu ment.body. scrollTop! =nScrollPo s)
        1131                                                       do cument.bod y.scrollTo p=nScrollP os;
        1132                                      }
        1133                                      else
        1134                                               window.scr ollTo(0,nO ffsetBotto m-nDelta);
        1135                             }
        1136                    }
        1137                    else {
        1138                             oFIA.i nsertAdjac entHTML("b eforeBegin ",oHTML.sH TML);
        1139                             if(bSc rl){
        1140                                      if(gbMac &&gbIE4)
        1141                                      {
        1142                                               var nScrol lPos=nOffs etTop;
        1143                                               while(docu ment.body. scrollTop! =nScrollPo s)
        1144                                                       do cument.bod y.scrollTo p=nScrollP os;
        1145                                      }
        1146                                      else
        1147                                               window.scr ollTo(0,nO ffsetTop);
        1148                             }
        1149                                              
        1150                             if(nTD iff>0)
        1151                             {
        1152                                      oFIA.nB= nIns+nCoun t;
        1153                                      nDelta=o FIA.setNum (nTDiff);
        1154                                      oFIA.sKA =oHTML.sLK ;
        1155                             }        
        1156                             else{
        1157                                      gaFakes[ nM].setNum (0);
        1158                                      removeIt emFromArra y(gaFakes, nM);
        1159                             }
        1160                    }
        1161           }
        1162           el se
        1163                    bRtn =false;
        1164           en Evt();
        1165           re turn bRtn;
        1166   }
        1167  
        1168   function w indow_OnSc roll()
        1169   {
        1170           gn SE++;
        1171           se tTimeout(" procScroll ();",50); 
        1172   }
        1173  
        1174   function p rocScroll( )
        1175   {
        1176           if (gnSE==1&& !gbProcess )
        1177           {
        1178                    mark Begin();
        1179                    getU nitIdx(doc ument.body .scrollTop ,getClient Height());
        1180           }
        1181           gn SE--;
        1182   }
        1183  
        1184   function w indow_OnRe size()
        1185   {
        1186           gn RE++;
        1187           se tTimeout(" procResize ();",50);
        1188   }
        1189  
        1190   function p rocResize( )
        1191   {
        1192           if (gnRE==1&& !gbProcess )
        1193           {
        1194                    mark Begin();
        1195                    gnVi sible=Math .ceil(getC lientHeigh t()/gnUHei ght);
        1196                    if(g nIns==-1)
        1197                             getUni tIdx(docum ent.body.s crollTop,g etClientHe ight());
        1198           }
        1199           gn RE--;
        1200   }
        1201  
        1202   function g etChunkByI dx(nIdx,nP osition)
        1203   {
        1204           va r oCData=n ull;
        1205           if (nIdx<gaCh unks.lengt h)
        1206           {
        1207                    var  len=gaChun ks[nIdx].l ength;
        1208                    if(l en>0)
        1209                    {
        1210                             var nB =0;
        1211                             var nE =len-1;
        1212                             var bF =false;
        1213                             do{
        1214                                      var nM=( nB+nE)>>1;
        1215                                      if(nPosi tion<gaChu nks[nIdx][ nM].nTotal )
        1216                                      {
        1217                                               bF=true;
        1218                                               nE=nM;
        1219                                      }
        1220                                      else
        1221                                               nB=nM+1;
        1222                             }while (nE>nB);
        1223                             if(bF)
        1224                                      oCData=g aChunks[nI dx][nE];
        1225                             else i f(nPositio n<gaChunks [nIdx][nB] .nTotal)
        1226                                      oCData=g aChunks[nI dx][nB];
        1227                    }
        1228           }
        1229           re turn oCDat a;
        1230   }
        1231  
        1232   function g etChunkedD ata(nIdx,b Down,sK)
        1233   {
        1234           va r oCData=n ull;
        1235           va r nCandId= -1;
        1236           if (nIdx<gaCh unks.lengt h)
        1237           {
        1238                    var  len=gaChun ks[nIdx].l ength;
        1239                    if(l en>0)
        1240                    {
        1241                             var nB =0;
        1242                             var nE =len-1;
        1243                             var bF =false;
        1244                             do{
        1245                                      var nM=( nB+nE+(bDo wn?0:1))>> 1;
        1246                                      if(bDown )
        1247                                      {
        1248                                               if(compare (sK,gaChun ks[nIdx][n M].sEK)<0)
        1249                                               {
        1250                                                       bF =true;
        1251                                                       nE =nM;
        1252                                               }
        1253                                               else
        1254                                                       nB =nM+1;
        1255                                      }
        1256                                      else
        1257                                      {
        1258                                               if(compare (sK,gaChun ks[nIdx][n M].sBK)>0)
        1259                                               {
        1260                                                       bF =true;
        1261                                                       nB =nM;
        1262                                               }
        1263                                               else
        1264                                                       nE =nM-1;
        1265                                      }
        1266                             }while (nE>nB);
        1267                             if(bF)
        1268                             {
        1269                                      if(bDown )
        1270                                               nCandId=nE ;
        1271                                      else
        1272                                               nCandId=nB ;
        1273                             }
        1274                             else
        1275                             {
        1276                                      if(bDown )
        1277                                      {
        1278                                               if(gaChunk s[nIdx].le ngth>nB&&c ompare(sK, gaChunks[n Idx][nB].s EK)<0)
        1279                                                       nC andId=nB;
        1280                                               else
        1281                                                       nC andId=gaCh unks[nIdx] .length-1;
        1282                                      }
        1283                                      else
        1284                                      {
        1285                                               if(0<=nE&& compare(sK ,gaChunks[ nIdx][nE]. sBK)>0)
        1286                                                       nC andId=nE;
        1287                                               else
        1288                                                       nC andId=0;
        1289                                      }
        1290                             }
        1291                             return  gaChunks[ nIdx][nCan dId];
        1292                    }
        1293           }
        1294           re turn null;
        1295   }
        1296  
        1297   function f indCK()
        1298   {
        1299           if (gsCK!=nul l)
        1300           {
        1301                    gsSK A=gsCK;
        1302                    gbFi ndCK=true;
        1303                    gnNe eded=1;
        1304                    mark Begin();
        1305                    chec kReady();
        1306           }
        1307   }
        1308  
        1309   function w riteLoadin gDiv(nIIdx )
        1310   {
        1311           va r padding  = (gsPageD ir == "ltr ")?"paddin g-left":"p adding-rig ht";
        1312           va r directio nHorizonta l = (gsPag eDir == "l tr")?"left ":"right";
        1313           re turn "<div  id=\""+gs LoadingDiv ID+"\" sty le=\"posit ion:absolu te;top:0;"  + directi onHorizont al + 
        1314           ": 0;z-index: 600;visibi lity:hidde n;" +paddi ng+ ":4px; background -color:ivo ry;border- width:1;bo rder-style :solid;bor der-color: black;widt h:150px;\" >"+gsLoadi ngMsg+"</d iv>";
        1315   }
        1316  
        1317   function f indPositio n( oElemen t ) {
        1318     if( type of( oEleme nt.offsetP arent ) !=  'undefine d' ) 
        1319     {
        1320       for( v ar posY =  0; oElemen t; oElemen t = oEleme nt.offsetP arent ) 
        1321       {
        1322         posY  += oEleme nt.offsetT op;
        1323       }
        1324       return  posY ;
        1325     } 
        1326     else 
        1327     {
        1328       return  oElement. y ;
        1329     }
        1330   }
        1331  
        1332   var gbWhHo st=true;