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

  1. var gsDefaultTarget="bsscright";
  2. var gsBgColor="#ffffff";
  3. var gsBgImage="";
  4. var goIdxFont=null;
  5. var goIdxEmptyFont=null;
  6. var goIdxHoverFont=null;
  7. var gsIdxMargin="0pt";
  8. var gsIdxIndent="8pt";
  9. var gsIdxActiveBgColor="#cccccc";
  10. var gsCK = null;
  11. var gsBCK = null;
  12. var gbCR = false;
  13. var gbBCR = false;
  14. var gbWhIHost=true;
  15.  
  16. function myEvent()
  17. {
  18.     this.pageX = 0;
  19.     this.pageY = 0;
  20. }
  21. var _event=new myEvent();
  22.  
  23. function setBackgroundcolor(sBgColor)
  24. {
  25.     gsBgColor=sBgColor;
  26. }
  27.  
  28. function setBackground(sBgImage)
  29. {
  30.     gsBgImage=sBgImage;
  31. }
  32.  
  33. function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)
  34. {
  35.     var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);
  36.     if(sType=="Normal")
  37.         goIdxFont=vFont;
  38.     else if(sType=="Empty")
  39.         goIdxEmptyFont=vFont;
  40.     else if(sType=="Hover")
  41.         goIdxHoverFont=vFont;
  42. }
  43.  
  44. function setActiveBgColor(sBgColor)
  45. {
  46.     gsIdxActiveBgColor=sBgColor;
  47. }
  48.  
  49. function setMargin(sMargin)
  50. {
  51.     gsIdxMargin=sMargin;
  52. }
  53.  
  54. function setIndent(sIndent)
  55. {
  56.     gsIdxIndent=sIndent;
  57. }
  58.  
  59. function writeOneItem(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel)
  60. {
  61.     var sHTML="";
  62.     var nIdxSet=aCurIdxSet[0];
  63.     var nIIdx=aPos[nIdxSet];
  64.     var sKOriName=getItemName(aDataCon,nIdxSet,nIIdx);
  65.     var sKName=_textToHtml(sKOriName);
  66.  
  67.     var nIdxIndent=parseInt(gsIdxIndent);
  68.     var sTopics="";
  69.     if(nLevel==1){
  70.         if(getItemType(aDataCon,nIdxSet,nIIdx)==1)
  71.         {
  72.             sHTML+="<H6><nobr>";
  73.             sHTML+="<b>"+sKName+"</b></nobr></H6>";
  74.         }
  75.         else{
  76.             for(var i=0;i<nLength;i++)
  77.                 sTopics+=getIdxTopics(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);
  78.             sHTML+="<p style=\"margin-left:"+gsIdxIndent+"\"><nobr>";
  79.             sHTML+="<a alt=\"" + sKName + "\" href=\"javascript:void(0);\" onfocus=\"clearHighLight();\" onclick=\"PopupMenu_Invoke(event,'"+getTargetName(aDataCon,nIdxSet,nIIdx)+"'";
  80.             if(sTopics.length>0)
  81.                 sHTML+=sTopics+");return false;\">"+sKName+"</a></nobr></p>";
  82.             else
  83.                 sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+"</a></nobr></p>";
  84.         }
  85.     }
  86.     else if(nLevel>=2){
  87.         var nIndent=nIdxIndent*nLevel;
  88.         for(var i=0;i<nLength;i++)
  89.             sTopics+=getIdxTopics(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);
  90.         if (nLevel==2)
  91.             sHTML+="<h6 class=\"firstsub\" style=\"margin-left:"+nIndent+"pt\"><nobr>";
  92.         else
  93.             sHTML+="<h6 style=\"margin-left:"+nIndent+"pt\"><nobr>";
  94.         sHTML+="<a alt=\"" + sKName + "\" href=\"javascript:void(0);\" onfocus=\"clearHighLight();\" onclick=\"PopupMenu_Invoke(event,'"+getTargetName(aDataCon,nIdxSet,nIIdx)+"'";
  95.         if(sTopics.length>0)
  96.             sHTML+=sTopics+");return false;\">"+sKName+"</a></nobr></h6>";
  97.         else
  98.             sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+"</a></nobr></h6>";
  99.     }
  100.     oHTML.addHTML(sHTML,nLength,bDown,(nLevel==1),sKOriName);
  101. }
  102.  
  103. function getTargetName(aDataCon,nIdxSet,nIIdx)
  104. {
  105.     if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)
  106.         if(aDataCon[nIdxSet].aKs[nIIdx].sTarget)
  107.             return aDataCon[nIdxSet].aKs[nIIdx].sTarget;
  108.     return gsDefaultTarget;
  109. }
  110.  
  111. function mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel)
  112. {
  113.     var oLocalHTML=new indexHTMLPart();
  114.     writeOneItem(oLocalHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel);
  115.     
  116.     var aLocalPos=new Array();
  117.     var aMaxPos=new Array();
  118.     for(var i=0;i<aPos.length;i++)
  119.     {
  120.         aLocalPos[i]=aPos[i];
  121.         aMaxPos[i]=-1;
  122.     }
  123.     
  124.     for(i=0;i<nLength;i++)
  125.     {
  126.         var nNKOff=getNKOff(aDataCon,aCurIdxSet[i],aLocalPos[aCurIdxSet[i]]);
  127.         aLocalPos[aCurIdxSet[i]]++;
  128.         if(nNKOff>0)
  129.             aMaxPos[aCurIdxSet[i]]=aLocalPos[aCurIdxSet[i]]+nNKOff;
  130.     }
  131.     var oSubHTML=new indexHTMLPart();
  132.     writeItems(oSubHTML,aDataCon,aLocalPos,null,aMaxPos,true,nLevel+1);
  133.     oLocalHTML.addSubHTML(oSubHTML,true);
  134.     oHTML.appendHTML(oLocalHTML,bDown);
  135. }
  136.  
  137. function adjustPosition(bDown,aDataCon,aCurIdxSet,nLength,aPos)
  138. {
  139.     if(bDown)
  140.     {
  141.         for(var i=0;i<nLength;i++)
  142.         {
  143.             var nNKOff=getNKOff(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);
  144.             aPos[aCurIdxSet[i]]+=(1+nNKOff);
  145.         }
  146.     }
  147.     else{
  148.         for(var i=0;i<nLength;i++)
  149.         {
  150.             var nPKOff=getPKOff(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);
  151.             aPos[aCurIdxSet[i]]-=(1+nPKOff);
  152.         }
  153.     }
  154. }
  155.  
  156. function getItemName(aDataCon,nIdxSet,nIIdx)
  157. {
  158.     if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)
  159.         return aDataCon[nIdxSet].aKs[nIIdx].sName;
  160.     else
  161.         return null;
  162. }
  163.  
  164. function getItemType(aDataCon,nIdxSet,nIIdx)
  165. {
  166.     if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)
  167.         return aDataCon[nIdxSet].aKs[nIIdx].nType;
  168.     else
  169.         return 0;
  170. }
  171.  
  172. function getNKOff(aDataCon,nIdxSet,nIIdx)
  173. {
  174.     if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)
  175.         return aDataCon[nIdxSet].aKs[nIIdx].nNKOff;
  176.     else
  177.         return null;
  178. }
  179.  
  180. function getPKOff(aDataCon,nIdxSet,nIIdx)
  181. {
  182.     if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)
  183.         return aDataCon[nIdxSet].aKs[nIIdx].nPKOff;
  184.     else
  185.         return null;
  186. }
  187.  
  188. function window_OnLoad()
  189. {
  190.     if(gsBgImage&&gsBgImage.length>0)
  191.     {
  192.         document.body.background=gsBgImage;
  193.     }
  194.     if(gsBgColor&&gsBgColor.length>0)
  195.     {
  196.         document.body.bgColor=gsBgColor;
  197.     }
  198.     document.body.insertAdjacentHTML("beforeEnd",writeLoadingDiv());
  199.     loadIdx();
  200.     var oMsg=new whMessage(WH_MSG_SHOWIDX,this,1,null)
  201.     SendMessage(oMsg);
  202. }
  203.  
  204. function loadIdx()
  205. {
  206.     if(!gbReady)
  207.     {
  208.         var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);
  209.         if(SendMessage(oResMsg)&&oResMsg.oParam)
  210.         {
  211.             gbReady=true;
  212.             var oProj=oResMsg.oParam;
  213.             var aProj=oProj.aProj;
  214.             gbXML=oProj.bXML;
  215.             if(aProj.length>0)
  216.             {
  217.                 var sLangId=aProj[0].sLangId;
  218.                 for(var i=0;i<aProj.length;i++)
  219.                 {
  220.                     if(aProj[i].sIdx!=null&&aProj[i].sIdx!=""&&aProj[i].sLangId==sLangId)
  221.                     {
  222.                         addProjInfo(aProj[i].sPPath,aProj[i].sDPath,aProj[i].sIdx);
  223.                     }
  224.                 }
  225.             }
  226.             writeDataIFrame();
  227.             enEvt();
  228.         }        
  229.     }
  230. }
  231.  
  232. function getIdxTopics(aDataCon,nIdxSet,nIIdx)
  233. {
  234.     var sTopics="";
  235.     if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)
  236.     {
  237.         if(aDataCon[nIdxSet].aKs[nIIdx].aTopics)
  238.         {
  239.             var nLen=aDataCon[nIdxSet].aKs[nIIdx].aTopics.length;
  240.             var nProj=aDataCon[nIdxSet].nProjId;
  241.             var sPath=gaData[nProj].sPPath;
  242.             for(var i=0;i<nLen;i++)
  243.             {
  244.                 var sURL=aDataCon[nIdxSet].aKs[nIIdx].aTopics[i].sURL;
  245.                 var sFullPath=_getFullPath(sPath,sURL);
  246.                 sTopics+=",'"+excapeSingleQuot(_textToHtml(aDataCon[nIdxSet].aKs[nIIdx].aTopics[i].sName))+"','"+_textToHtml_nonbsp(sFullPath)+"'";
  247.             }
  248.         }
  249.     }
  250.     return sTopics;        
  251. }
  252.  
  253. function excapeSingleQuot(str)
  254. {
  255.     if(str==null) return null;
  256.     var sRes=str;
  257.     var re=new RegExp("'","g");
  258.     sRes=sRes.replace(re,"\\'");
  259.     return sRes;
  260. }
  261.  
  262. function findCKInDom()
  263. {
  264.     if(gsCK!=null)
  265.     {
  266.         var sK=gsCK;
  267.         var oP=getElementsByTag(document,"P");
  268.         if(!oP) return false;
  269.         var len=oP.length;
  270.         var nB=0;
  271.         var nE=len-1;
  272.         var nM=0;
  273.         var sItem="";
  274.         var bF=false;
  275.         while(nB<nE){
  276.             nM=(nB+nE+1)>>1;
  277.             sItem=getInnerText(oP[nM]);
  278.             
  279.             if(compare(sItem,sK)==0)
  280.             {
  281.                 bF=true;
  282.                 break;
  283.             }
  284.             else if(compare(sItem,sK)>0)
  285.                 nE=nM-1;
  286.             else if(compare(sItem,sK)<0)
  287.                 nB=nM;
  288.         }
  289.         if(!bF)
  290.         {
  291.             if(nB==nE) nM=nB;
  292.         
  293.             if(nM+1<len)
  294.             {
  295.                 sItem=getInnerText(oP[nM+1]);
  296.                 if(compare(sItem,sK)<=0) nM++;
  297.             }            
  298.             if(nM+1<len)
  299.             {
  300.                 sItem=getInnerText(oP[nM+1]);
  301.                 if(compare(sItem.substring(0,sK.length),sK)==0) nM++;
  302.             }            
  303.         }
  304.     
  305.         var oMatch=oP[nM];
  306.         if(oMatch)
  307.         {
  308.             window.scrollTo(0,oMatch.offsetTop);
  309.             var tempColl=getElementsByTag(oMatch,"A");
  310.             if(tempColl&&tempColl.length>0){
  311.                 var nbTag=getElementsByTag(oMatch,"NOBR");
  312.                 if(nbTag&&nbTag.length>0)
  313.                     HighLightElement(nbTag[0], gsIdxActiveBgColor, "transparent");
  314.                 if (gbCR)
  315.                 {
  316.                     if (gbIE4)
  317.                         tempColl(0).click();
  318.                     else
  319.                     {
  320.                         var strCommand = tempColl[0].getAttribute("onClick");
  321.                         var nstrCommand = strCommand.indexOf(";");
  322.                         strCommand = strCommand.substring(0, nstrCommand);
  323.                         strCommand = strCommand.replace("event", "_event");
  324.                         window._event.pageX = oMatch.offsetLeft ;
  325.                         window._event.pageY = oMatch.offsetTop + 20;
  326.                         window.setTimeout(strCommand, 100);
  327.                     }
  328.                 }
  329.             }
  330.         }
  331.         gsCK=gsBCK;
  332.         gbCR=gbBCR;
  333.         if(gsBCK!=null)
  334.         {
  335.             gsBCK=null;
  336.             gbBCR=false;
  337.             findCK();
  338.             return false;
  339.         }
  340.         
  341.     }
  342.     return true;
  343. }
  344.  
  345. function clearHighLight()
  346. {
  347.     resetHighLight(gsBgColor);
  348. }
  349.  
  350. function IndexWriteClassStyle()
  351. {
  352.     var sStyle="";
  353.     sStyle+="<STYLE TYPE='text/css'>";
  354.     if (gsBgImage)
  355.         sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";
  356.     else
  357.         sStyle+="body {border-top:black 1px solid;}\n";
  358.     if(gbIE4&&gbMac&&!gbIE5)
  359.     {
  360.         var nMargin=parseInt(gsIdxMargin);
  361.         nMargin-=10;
  362.         sStyle+="P {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";
  363.         sStyle+="H6 {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";
  364.         sStyle+="H6.firstsub {"+getFontStyle(goIdxFont)+"margin-top:"+nMargin+"pt;margin-bottom:"+gsIdxMargin+";}\n";
  365.     }
  366.     else
  367.     {
  368.         sStyle+="P {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";
  369.         sStyle+="H6 {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";
  370.     }
  371.     sStyle+="DIV {margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";
  372.     sStyle+="A:link {"+getFontStyle(goIdxFont)+"}\n";
  373.     sStyle+="A:visited {"+getFontStyle(goIdxFont)+"}\n";
  374.     sStyle+="A:active {background-color:"+gsIdxActiveBgColor+";}\n";
  375.     sStyle+="A:hover {"+getFontStyle(goIdxHoverFont)+"}\n";
  376.     sStyle+="</STYLE>";    
  377.     document.write(sStyle);
  378.     return;
  379. }
  380.  
  381. function window_Unload()
  382. {
  383.     UnRegisterListener2(this,WH_MSG_PROJECTREADY);
  384.     UnRegisterListener2(this,WH_MSG_SEARCHINDEXKEY);
  385. }
  386.  
  387. function onSendMessage(oMsg)
  388. {
  389.     if(oMsg)
  390.     {
  391.         var nMsgId=oMsg.nMessageId;
  392.         if(nMsgId==WH_MSG_SEARCHINDEXKEY)
  393.         {
  394.             if(oMsg.oParam && oMsg.oParam.sInput)
  395.             {
  396.                 if(gsCK==null)
  397.                 {
  398.                     gsCK=oMsg.oParam.sInput;
  399.                     gbCR = oMsg.oParam.bCR;
  400.                     findCK();
  401.                 }
  402.                 else
  403.                 {
  404.                     gsBCK=oMsg.oParam.sInput;
  405.                     gbBCR = oMsg.oParam.bCR;
  406.                 }
  407.             }
  408.         }
  409.         else if(nMsgId==WH_MSG_PROJECTREADY)
  410.         {
  411.             loadIdx();
  412.         }
  413.     }
  414.     return true;
  415. }
  416.  
  417. if(window.gbWhVer&&window.gbWhLang&&window.gbWhMsg&&window.gbWhUtil&&window.gbWhHost&&window.gbWhProxy)
  418. {
  419.     RegisterListener2(this,WH_MSG_PROJECTREADY);
  420.     RegisterListener2(this,WH_MSG_SEARCHINDEXKEY);
  421.     goIdxFont=new whFont("Verdana","8pt","#000000","normal","normal","none");
  422.     goIdxEmptyFont=new whFont("Verdana","8pt","#666666","normal","normal","none");
  423.     goIdxHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");
  424.  
  425.     window.onload=window_OnLoad;
  426.     window.onbeforeunload=window_BUnload;
  427.     window.onunload=window_Unload;
  428.     gbWhIHost=true;
  429. }
  430. else
  431.     document.location.reload();
  432.  
  433.