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

  1. var gsFileName="";
  2. var xmlDoc=null;
  3. var sdocPath=null;
  4. var gsInsertBeforeEndHTML="";
  5. var sReplaceStringsSrc=new Array();
  6. sReplaceStringsSrc[0]="&";
  7. sReplaceStringsSrc[1]=">";
  8. sReplaceStringsSrc[2]="<";
  9. sReplaceStringsSrc[3]=""";
  10. sReplaceStringsSrc[4]=" ";
  11. var sReplaceStringsDst=new Array();
  12. sReplaceStringsDst[0]="&";
  13. sReplaceStringsDst[1]=">";
  14. sReplaceStringsDst[2]="<";
  15. sReplaceStringsDst[3]="\"";
  16. sReplaceStringsDst[4]=" ";
  17. var goHighLighted=null;
  18.  
  19. function _getRelativePath(strParentPath,strCurrentPath)
  20. {
  21.     if(_isAbsPath(strCurrentPath)) return _getPath(strCurrentPath);
  22.     strParentPath=_replaceSlash(strParentPath);
  23.     strParentPath=_getPath(strParentPath);
  24.     strCurrentPath=_replaceSlash(strCurrentPath);
  25.     strCurrentPath=_getPath(strCurrentPath);
  26.     for(var i=0;i<strParentPath.length&&i<strCurrentPath.length;i++)
  27.     {
  28.         if(strParentPath.charAt(i)!=strCurrentPath.charAt(i))
  29.             break;
  30.     }
  31.     
  32.     strParentPath=strParentPath.substring(i);
  33.     strCurrentPath=strCurrentPath.substring(i);    
  34.     
  35.     var nPathPos=0;
  36.     while(nPathPos!=-1)
  37.     {
  38.         nPathPos=strParentPath.indexOf("/");
  39.         if(nPathPos!=-1)
  40.         {
  41.             strParentPath=strParentPath.substring(nPathPos+1);
  42.             strCurrentPath="../"+strCurrentPath;
  43.         }
  44.     }
  45.     return strCurrentPath;
  46. }
  47.  
  48. function _getRelativeFileName(strParentPath, strCurrentPath)
  49. {
  50.     strParentPath=_replaceSlash(strParentPath);
  51.     strParentPath=_getPath(strParentPath);
  52.     strCurrentPath=_replaceSlash(strCurrentPath);
  53.     for(var i=0;i<strParentPath.length&&i<strCurrentPath.length;i++)
  54.     {
  55.         if(strParentPath.charAt(i)!=strCurrentPath.charAt(i))
  56.             break;
  57.     }
  58.     
  59.     strParentPath=strParentPath.substring(i);
  60.     strCurrentPath=strCurrentPath.substring(i);    
  61.     
  62.     var nPathPos=0;
  63.     while(nPathPos!=-1)
  64.     {
  65.         nPathPos=strParentPath.indexOf("/");
  66.         if(nPathPos!=-1)
  67.         {
  68.             strParentPath=strParentPath.substring(nPathPos+1);
  69.             strCurrentPath="../"+strCurrentPath;
  70.         }
  71.     }
  72.     return strCurrentPath;
  73. }
  74.  
  75. function _isAbsPathToHost(sPath)
  76. {
  77.     return (sPath.indexOf("/")==0);
  78. }
  79.  
  80. function _getHost(sPath)
  81. {
  82.     var nPos=sPath.indexOf("//");
  83.     if(nPos>0)
  84.     {
  85.         var nPosx=sPath.indexOf("/",nPos+2);
  86.         if(nPosx>0)
  87.             return sPath.substring(0,nPosx);
  88.         else
  89.             return sPath;
  90.     }
  91.     return sPath;
  92. }
  93.  
  94. function _getFullPath(sPath,sRelPath)
  95. {
  96.     if(_isAbsPath(sRelPath))
  97.         return sRelPath;
  98.     else if(_isAbsPathToHost(sRelPath))
  99.         return _getHost(sPath)+sRelPath;
  100.     else
  101.     {
  102.         var sFullPath=sPath;
  103.         var nPathPos=0;
  104.         while(nPathPos!=-1)
  105.         {
  106.             var nPathPos=sRelPath.indexOf("../");
  107.             if(nPathPos!=-1)
  108.             {
  109.                 sRelPath=sRelPath.substring(nPathPos+3);
  110.                 sFullPath=sFullPath.substring(0,sFullPath.length-1);
  111.                 var nPos2 = sFullPath.lastIndexOf("/");
  112.                 if(nPos2!=-1)
  113.                     sFullPath=sFullPath.substring(0,nPos2+1);
  114.                 else
  115.                     break;
  116.             }
  117.         }
  118.         sFullPath+=sRelPath;
  119.         return sFullPath;
  120.     }    
  121. }
  122.  
  123. function _isAbsPath(strPath)
  124. {
  125.     var strUpper=strPath.toUpperCase();
  126.     return (strUpper.indexOf(":")!=-1);
  127. }
  128.  
  129. function _replaceSlash(strURL)
  130. {    
  131.     var re=new RegExp("\\\\","g");
  132.     var strReplacedURL=strURL.replace(re,"/");
  133.     return strReplacedURL;
  134. }
  135.  
  136. function _getPath(strURL)
  137. {
  138.     pathpos=strURL.lastIndexOf("/");
  139.     if(pathpos>0)
  140.         return strURL.substring(0,pathpos+1);
  141.     else
  142.         return "";
  143. }
  144.  
  145. function removeItemFromArray(oArray,i)
  146. {
  147.     if(oArray.length&&i>=0&&i<oArray.length)
  148.     {
  149.         var len=oArray.length;
  150.         for(var s=i;s<len-1;s++)
  151.             oArray[s]=oArray[s+1];
  152.         oArray.length=len-1;
  153.     }
  154. }
  155.  
  156. function insertItemIntoArray(oArray,i,obj)
  157. {
  158.     if(oArray.length&&i>=0&&i<=oArray.length)
  159.     {
  160.         var len=oArray.length;
  161.         for(var s=len;s>i;s--)
  162.             oArray[s]=oArray[s-1];
  163.         oArray[i]=obj;        
  164.     }
  165. }
  166.  
  167. function loadData(sFileName)
  168. {
  169.     if(!getElement("dataDiv"))
  170.     {
  171.         if(!insertDataDiv())
  172.         {
  173.             gsFileName=sFileName;
  174.             return;
  175.         }
  176.     }
  177.     var sHTML="";
  178.     if(gbMac)
  179.         sHTML+="<iframe src="+sFileName+"></iframe>";
  180.     else
  181.         sHTML+="<iframe style=\"visibility:hidden;width:0;height:0\" src="+sFileName+"></iframe>";
  182.     
  183.     var oDivCon=getElement("dataDiv");
  184.     if(oDivCon)
  185.     {
  186.         if(gbNav6)
  187.         {
  188.             if(oDivCon.getElementsByTagName&&oDivCon.getElementsByTagName("iFrame").length>0)
  189.             {
  190.                 oDivCon.getElementsByTagName("iFrame")[0].src=sFileName;
  191.             }
  192.             else
  193.                 oDivCon.innerHTML=sHTML;
  194.         }
  195.         else
  196.             oDivCon.innerHTML=sHTML;
  197.     }
  198. }
  199.  
  200. function loadDataXML(sFileName)
  201. {
  202.     var sCurrentDocPath=_getPath(document.location.href);
  203.     sdocPath=_getFullPath(sCurrentDocPath,sFileName);
  204.     if(gbIE5)
  205.     {
  206.         xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  207.         xmlDoc.async=true;
  208.         xmlDoc.onreadystatechange=checkState;
  209.         if(document.body!=null)
  210.             xmlDoc.load(sdocPath);
  211.     }
  212.     else if(gbNav6)
  213.     {
  214.         xmlDoc=document.implementation.createDocument("","",null);
  215.         xmlDoc.addEventListener("load",initializeData,false);
  216.         xmlDoc.load(sdocPath,"text/xml");
  217.     }
  218. }
  219.  
  220. function initializeData()
  221. {
  222.     if(xmlDoc!=null)
  223.         putDataXML(xmlDoc,sdocPath);
  224. }
  225.  
  226. function checkState()
  227. {
  228.     if(xmlDoc!=null)
  229.     {
  230.         var state=xmlDoc.readyState;
  231.         if(state==4)
  232.         {
  233.             var err=xmlDoc.parseError;
  234.             if(err.errorCode!=0)
  235.                 alert(err.reason);
  236.             else
  237.                 putDataXML(xmlDoc,sdocPath);
  238.         }
  239.     }
  240. }
  241.  
  242. function insertDataDiv()
  243. {
  244.     var sHTML="";
  245.     if(gbMac)
  246.         sHTML+="<div id=dataDiv style=\"display:none;\"></div>";
  247.     else
  248.         sHTML+="<div id=dataDiv style=\"visibility:hidden\"></div>";
  249.     if((gbIE5||gbNav6)&&document.body)
  250.         document.body.insertAdjacentHTML("beforeEnd",sHTML);
  251.     else
  252.     {
  253.         gsInsertBeforeEndHTML=sHTML;
  254.         setTimeout("insertWhenBodyReady();",100);
  255.         return false;
  256.     }
  257.     return true;
  258. }
  259.  
  260. function insertWhenBodyReady()
  261. {
  262.     if(gsInsertBeforeEndHTML=="") return;
  263.     if(document.body)
  264.     {
  265.         document.body.insertAdjacentHTML("beforeEnd",gsInsertBeforeEndHTML);
  266.         gsInsertBeforeEndHTML="";
  267.         loadData(gsFileName);
  268.     }
  269.     else
  270.     {
  271.         setTimeout("insertWhenBodyReady();",100);
  272.     }
  273. }
  274.  
  275. function window_BUnload()
  276. {
  277.     var oDivCon=getElement("dataDiv");
  278.     if(oDivCon)
  279.         oDivCon.innerHTML="";
  280. }
  281.  
  282. function removeThis(obj)
  283. {
  284.     if(obj.parentNode)
  285.         obj.parentNode.removeChild(obj);
  286.     else
  287.         obj.outerHTML="";
  288. }
  289.  
  290. function getParentNode(obj)
  291. {
  292.     if(obj.parentNode)
  293.         return obj.parentNode;
  294.     else if(obj.parentElement)
  295.         return obj.parentElement;
  296.     return null;
  297. }
  298.  
  299. function getElement(sID)
  300. {
  301.     if(document.getElementById)
  302.         return document.getElementById(sID);
  303.     else if(document.all)
  304.         return document.all(sID);
  305.     return null;
  306. }
  307.  
  308. function getChildrenByTag(obj,sTagName)
  309. {
  310.     if(obj.getElementsByTagName)
  311.     {
  312.         var aChildren=new Array();
  313.         var aElements=getElementsByTag(obj,sTagName);
  314.         if(aElements!=null)
  315.         {
  316.             for(var i=0;i<aElements.length;i++)
  317.             {
  318.                 if(aElements[i].parentNode==obj)
  319.                     aChildren[aChildren.length]=aElements[i];
  320.             }
  321.             return aChildren;
  322.         }
  323.         else
  324.             return new Array();
  325.     }
  326.     else if(obj.children)
  327.         return obj.children.tags(sTagName);
  328. }
  329.  
  330. function getElementsByTag(obj,sTagName)
  331. {
  332.     if(obj.getElementsByTagName)
  333.         return obj.getElementsByTagName(sTagName);
  334.     else if(obj.all)
  335.         return obj.all.tags(sTagName);
  336.     return null;
  337. }
  338.  
  339. function _htmlToText(sHTML)
  340. {
  341.     if(sHTML==null) return null;
  342.     var sText=sHTML;
  343.     for(var i=0;i<sReplaceStringsSrc.length;i++)
  344.     {
  345.         var re=new RegExp(sReplaceStringsSrc[i],"g");
  346.         sText=sText.replace(re,sReplaceStringsDst[i]);
  347.     }    
  348.     return sText;
  349. }
  350.  
  351. function _textToHtml_nonbsp(sText)
  352. {
  353.     if(sText==null) return null;
  354.     var sHTML=sText;
  355.     for(var i=0;i<sReplaceStringsSrc.length-1;i++)
  356.     {
  357.         var re=new RegExp(sReplaceStringsDst[i],"g");
  358.         sHTML=sHTML.replace(re,sReplaceStringsSrc[i]);
  359.     }    
  360.     return sHTML;
  361. }
  362.  
  363. function _textToHtml(sText)
  364. {
  365.     if(sText==null) return null;
  366.     var sHTML=sText;
  367.     for(var i=0;i<sReplaceStringsSrc.length;i++)
  368.     {
  369.         var re=new RegExp(sReplaceStringsDst[i],"g");
  370.         sHTML=sHTML.replace(re,sReplaceStringsSrc[i]);
  371.     }    
  372.     return sHTML;
  373. }
  374.  
  375.  
  376. function getInnerText(obj)
  377. {
  378.     var renbsp2sp=new RegExp("\xa0","g");
  379.     if(obj.innerText)
  380.     {
  381.         var sText=obj.innerText;
  382.         sText=sText.replace(renbsp2sp," ");
  383.         return sText;
  384.     }
  385.     else
  386.     {
  387.         if(obj.nodeValue)
  388.         {
  389.             var sValue=obj.nodeValue;
  390.             sValue=sValue.replace(renbsp2sp," ");
  391.             return sValue;
  392.         }
  393.         else
  394.         {
  395.             var sText="";
  396.             var oChild=obj.firstChild;
  397.             while(oChild!=null)
  398.             {
  399.                 sText+=getInnerText(oChild);
  400.                 oChild=oChild.nextSibling;
  401.             }
  402.             return sText;
  403.         }
  404.     }
  405.         
  406. }
  407.  
  408. function HighLightElement(obj,sHighLightColor,sNormalColor)
  409. {
  410.     if(obj!=null)
  411.     {
  412.         resetHighLight(sNormalColor);
  413.         obj.style.backgroundColor=sHighLightColor;
  414.         goHighLighted=obj;
  415.     }
  416. }
  417.  
  418. function resetHighLight(sNormalColor)
  419. {
  420.     if(goHighLighted!=null)
  421.     {
  422.         goHighLighted.style.backgroundColor=sNormalColor;
  423.         goHighLighted=null;
  424.     }
  425. }
  426.  
  427. function whFont(sName,sSize,sColor,sStyle,sWeight,sDecoration)
  428. {
  429.     this.sName=sName;
  430.     this.sSize=sSize;
  431.     this.sColor=sColor;
  432.     this.sStyle=sStyle;
  433.     this.sWeight=sWeight;
  434.     this.sDecoration=sDecoration;
  435. }
  436.  
  437. function getFontStyle(oFont)
  438. {
  439.     var sStyle="";
  440.     if(oFont)
  441.     {
  442.         sStyle+="font-family:"+oFont.sName+";";
  443.         if(gbMac)
  444.         {
  445.             var nSize=parseInt(oFont.sSize);
  446.             if(gbIE5)
  447.                 nSize+=2;
  448.             else
  449.                 nSize+=4;
  450.             sStyle+="font-size:"+nSize+"pt;";
  451.         }
  452.         else
  453.             sStyle+="font-size:"+oFont.sSize+";";
  454.             
  455.         sStyle+="font-style:"+oFont.sStyle+";";
  456.         sStyle+="font-weight:"+oFont.sWeight+";";
  457.         sStyle+="text-decoration:"+oFont.sDecoration+";";
  458.         sStyle+="color:"+oFont.sColor+";";
  459.     }
  460.     return sStyle;
  461. }
  462.  
  463. var gbWhUtil=true;