home *** CD-ROM | disk | FTP | other *** search
/ PC & Mediji 2002 March / PCM_0203.iso / MEDIA / DEMO / M10USWEB.exe / RCDATA / CABINET / money.cab / msmoney.chm / jsonstart.js < prev    next >
Text File  |  2001-07-25  |  12KB  |  422 lines

  1. /*
  2.  
  3. Microsoft Money
  4. Copyright (c) 2001 Microsoft Corporation
  5. All rights reserved
  6.  
  7. File     : jsOnstart.js
  8. Modified : Jun 20 2001
  9. Contact  : michealh
  10.  
  11. *********************************************************************/
  12.  
  13. var g_objTpc = new Object();
  14. var m_objThmbnl;
  15.  
  16. //********************************************************************
  17. function udtXmlObject(
  18.     bolValidate,
  19.     bolResolve,
  20.     bolPreserve,
  21.     bolAsync,
  22.     objListener)
  23. {
  24.     this.XMLDOM                    = new ActiveXObject("Microsoft.XMLDOM");
  25.     this.XMLDOM.validateOnParse    = bolValidate;
  26.     this.XMLDOM.resolveExternals   = bolResolve;
  27.     this.XMLDOM.preserveWhiteSpace = bolPreserve;
  28.     this.XMLDOM.async              = bolAsync;
  29.     if(null != objListener) this.XMLDOM.onreadystatechange = objListener;
  30.     this.loadData = function()
  31.     {
  32.         this.XMLDOM.load(this.dataSource);
  33.     }
  34. }
  35. //********************************************************************
  36. function Main()
  37. {
  38.     g_objTpc["MoneyData"]  = new udtXmlObject(false,false,false,true,null);
  39.     g_objTpc["Locale"]     = new udtXmlObject(false,false,false,true,FetchProductSku);
  40.     g_objTpc["ProductSku"] = new udtXmlObject(false,false,false,true,FetchIncludes);
  41.     g_objTpc["StyleRules"] = new Array("enabled","disabled");
  42.     
  43.     var L_strSku     = "hhsku.xml";
  44.     var L_strRsrc    = "msmoney.xml";
  45.     var L_strPrefs   = "hhprefs.xml";
  46.     var L_strDfltSku = "hhstd";
  47.     var L_strDfltLcl = "hhusa";
  48.     
  49.     g_objTpc["MoneyData"].dataSource    = GetFilePath(L_strRsrc);
  50.     g_objTpc["Locale"].dataSource       = GetFilePath(L_strPrefs);
  51.     g_objTpc["Locale"].defaultValue     = L_strDfltLcl;
  52.     g_objTpc["ProductSku"].defaultValue = L_strDfltSku;
  53.     g_objTpc["ProductSku"].dataSource   = GetFilePath(L_strSku);
  54.     g_objTpc["ProductSku"].legalValues  = new Array("std","dlx","biz","stddlx","dlxbiz","core");
  55.     g_objTpc["Includes"]                = new Array();
  56.     
  57.     g_objTpc["MoneyData"].loadData();
  58. }
  59. //********************************************************************
  60. function FetchProductSku()
  61. {
  62.     if(4 == g_objTpc["Locale"].XMLDOM.readyState)
  63.     {
  64.         g_objTpc["Locale"].value = (0 == g_objTpc["Locale"].XMLDOM.parseError)
  65.             ?
  66.             g_objTpc["Locale"].XMLDOM.documentElement.selectSingleNode("country").text.toLowerCase()
  67.             :
  68.             g_objTpc["Locale"].defaultValue
  69.             ;
  70.         g_objTpc["ProductSku"].loadData();
  71.     }
  72. }
  73. //********************************************************************
  74. function FetchIncludes()
  75. {
  76.     if(4 == g_objTpc["ProductSku"].XMLDOM.readyState)
  77.     {
  78.         g_objTpc["ProductSku"].value = FetchTopicSku();
  79.         var L_intIndx = SelectStyleSheet(); // dependent on product SKU
  80.         g_objTpc["StyleRules"].styleType = g_objTpc["StyleRules"][L_intIndx];
  81.         
  82.         if(LoadIncludes())
  83.         {
  84.             var L_intCnt = 0;
  85.             g_objTpc["Includes"].stackSize = g_objTpc["Includes"].length;
  86.             for(;L_intCnt < g_objTpc["Includes"].stackSize;)
  87.             {
  88.                 g_objTpc["Includes"][L_intCnt].loadData();
  89.                 L_intCnt++
  90.             }
  91.         }
  92.         else
  93.         {
  94.             FinishTransformations();
  95.         }
  96.     }
  97. }
  98. //********************************************************************
  99. function FetchTopicSku()
  100. {
  101.     var L_strRtVlu = g_objTpc["ProductSku"].defaultValue;
  102.     if(0 == g_objTpc["ProductSku"].XMLDOM.parseError)
  103.     {
  104.         try
  105.         {
  106.             L_strRtVlu = g_objTpc["ProductSku"].XMLDOM.documentElement.selectSingleNode("type").text.toLowerCase();
  107.         }
  108.         catch(e)
  109.         {
  110.             L_strRtVlu = g_objTpc["ProductSku"].defaultValue;
  111.         }
  112.     }
  113.     return L_strRtVlu;
  114. }
  115. //********************************************************************
  116. function SelectStyleSheet()
  117. {
  118.     if("object" == typeof document.XMLDocument)
  119.     {
  120.         var L_intRtVlu;
  121.         var L_strDsply;
  122.         var L_rexVlu       = new RegExp();
  123.         var L_rexTpc       = new RegExp();
  124.         var L_intCnt       = 0;
  125.         var L_intIsEnbld   = 0;
  126.         var L_intIsDsbld   = 1;
  127.         var L_objStyl      = document.createStyleSheet("csOnstart.css");
  128.         var L_strSkuAttrbt = document.XMLDocument.documentElement.getAttribute("sku").toLowerCase();
  129.         
  130.         if("core" == L_strSkuAttrbt)
  131.         {
  132.             L_intRtVlu = L_intIsEnbld;
  133.         }
  134.         else
  135.         { 
  136.             switch(g_objTpc["ProductSku"].value)
  137.             {
  138.                 case "hhstd" :
  139.                 L_rexVlu = /^(?:std(dlx)?)$/
  140.                 break;
  141.                 
  142.                 case "hhdlx" :
  143.                 L_rexVlu = /^(?:(std)?(dlx)(biz)?)$/
  144.                 break;
  145.                 
  146.                 case "hhbiz" :
  147.                 L_rexVlu = /^(?:(dlx)?biz)$/
  148.                 break;
  149.             }
  150.             L_intRtVlu = (L_rexVlu.test(L_strSkuAttrbt))
  151.                 ?
  152.                 L_intIsEnbld
  153.                 :
  154.                 L_intIsDsbld
  155.                 ;
  156.         }
  157.         switch(L_strSkuAttrbt)
  158.         {
  159.             case "std" :
  160.             L_rexTpc = /^(?:std(dlx)?)$/
  161.             break;
  162.             
  163.             case "stddlx" :
  164.             L_rexTpc = /^(?:(std)|(dlx))$/
  165.             break;
  166.             
  167.             case "dlx" :
  168.             L_rexTpc = /^(?:(std)?(dlx)(biz)?)$/
  169.             break;
  170.             
  171.             case "dlxbiz" :
  172.             L_rexTpc = /^(?:(dlx)|(biz))$/
  173.             break;
  174.             
  175.             case "biz" :
  176.             L_rexTpc = /^(?:(dlx)?biz)$/
  177.             break;
  178.             
  179.             default :
  180.             L_rexTpc = /^(?:ank)$/
  181.             break;
  182.         }
  183.         for(;L_intCnt < g_objTpc["ProductSku"].legalValues.length;)
  184.         {
  185.             L_strDsply = (L_rexTpc.test(g_objTpc["ProductSku"].legalValues[L_intCnt]))
  186.                 ?
  187.                 "block" 
  188.                 :
  189.                 "none"
  190.                 ;
  191.             L_objStyl.addRule(".Frgmnt__" + g_objTpc["ProductSku"].legalValues[L_intCnt],
  192.                 "display:" + L_strDsply);
  193.             L_intCnt++;
  194.         }
  195.         L_objStyl.rules[1].style.color = (L_intIsEnbld == L_intRtVlu) ? "#000000" : "#93948e";
  196.         
  197.         return L_intRtVlu;
  198.     }
  199. }
  200. //********************************************************************
  201. function LoadIncludes()
  202. {
  203.     var L_bolRtVlu = false;
  204.     if("object" == typeof document.XMLDocument)
  205.     {
  206.         g_objTpc["Clone"] = document.XMLDocument.cloneNode(true);
  207.         var L_intIndx;
  208.         var L_objIncldNd;
  209.         var L_strHref;
  210.         var L_intInPrcss   = 0;
  211.         var L_strTkn       = "#xpointer(";
  212.         var L_objInclNdLst = g_objTpc["Clone"].selectNodes("//include");
  213.         if(L_objInclNdLst.length > 0)
  214.         {
  215.             L_objIncldNd = L_objInclNdLst.nextNode();
  216.             while(L_objIncldNd)
  217.             {
  218.                 L_strHref = L_objIncldNd.getAttribute("href");
  219.                 if(L_strHref)
  220.                 {
  221.                     g_objTpc["Includes"][L_intInPrcss] = new udtXmlObject(false,false,false,true,HandleIncludes);
  222.                     g_objTpc["Includes"][L_intInPrcss].designTimeNode = L_objIncldNd;
  223.                     L_intIndx = L_strHref.lastIndexOf(L_strTkn);
  224.                     g_objTpc["Includes"][L_intInPrcss].queryPath = (L_intIndx > 0)
  225.                         ?
  226.                         L_strHref.substr(L_intIndx + L_strTkn.length,L_strHref.length - L_intIndx - L_strTkn.length - 1)
  227.                         :
  228.                         null
  229.                         ;
  230.                     if(L_intIndx > 0) 
  231.                     {
  232.                         L_strHref = L_strHref.substr(0,L_intIndx);
  233.                     }
  234.                     g_objTpc["Includes"][L_intInPrcss].dataSource = L_strHref;
  235.                     L_intInPrcss++;
  236.                 }    
  237.                 L_objIncldNd = L_objInclNdLst.nextNode();
  238.             }
  239.             L_bolRtVlu = (g_objTpc["Includes"].length > 0);
  240.         }
  241.     }
  242.     return L_bolRtVlu;
  243. }
  244. //********************************************************************
  245. function HandleIncludes()
  246. {
  247.     var L_intCnt     = 0;
  248.     var L_intRdyItms = 0;
  249.     for(;L_intCnt < g_objTpc["Includes"].length;)
  250.     {
  251.         if((g_objTpc["Includes"][L_intCnt] != null)
  252.             && (g_objTpc["Includes"][L_intCnt].XMLDOM.readyState == 4))
  253.         {
  254.             if(g_objTpc["Includes"][L_intCnt].XMLDOM.parseError != 0)
  255.             {
  256.                 g_objTpc["Includes"].stackSize -= 1;
  257.                 g_objTpc["Includes"][L_intCnt] = null;
  258.             }
  259.             else if(g_objTpc["Includes"][L_intCnt].XMLDOM.url != "")
  260.             {
  261.                 L_intRdyItms++;
  262.             }
  263.         }
  264.         L_intCnt++;
  265.     }
  266.     if(L_intRdyItms == g_objTpc["Includes"].stackSize)
  267.     {
  268.         L_intCnt = 0;
  269.         for(;L_intCnt < g_objTpc["Includes"].length;)
  270.         {
  271.             if((null != g_objTpc["Includes"][L_intCnt]) 
  272.                 && (0 == g_objTpc["Includes"][L_intCnt].XMLDOM.parseError))
  273.             {
  274.                 TransformIncludes(L_intCnt);
  275.             }
  276.             else
  277.             {
  278.                 //alert("This help topic is still partially\nunder construction, and may have\nproblems displaying properly.");
  279.             }
  280.             L_intCnt++;                                                                                  
  281.         }
  282.         FinishTransformations();    
  283.     }
  284. }
  285. //********************************************************************
  286. function TransformIncludes(intArrayIndex)
  287. {
  288.     var L_objNwNd;
  289.     var L_objXmlDom  = g_objTpc["Includes"][intArrayIndex].XMLDOM;
  290.     var L_strQryPth  = g_objTpc["Includes"][intArrayIndex].queryPath;
  291.     var L_objIncldNd = g_objTpc["Includes"][intArrayIndex].designTimeNode;
  292.     var L_objErrVlu  = L_objXmlDom.parseError;
  293.     if(0 == L_objErrVlu)
  294.     {
  295.         L_objNwNd = L_objXmlDom.createDocumentFragment();
  296.         if(L_strQryPth != null)
  297.         {
  298.             var L_objNodeList = L_objXmlDom.selectNodes(L_strQryPth);
  299.             var L_objNextNode = L_objNodeList.nextNode();
  300.             while(L_objNextNode)
  301.             {
  302.                 L_objNextNode.setAttribute("href",GetFileName(L_objXmlDom.url));
  303.                 if(L_objNextNode.text.length < 1)
  304.                 {
  305.                     L_objNextNode.setAttribute("type","uarvw");
  306.                 }
  307.                 L_objNwNd.appendChild(L_objNextNode);
  308.                 L_objNextNode = L_objNodeList.nextNode();
  309.             }
  310.         }
  311.     }
  312.     L_objIncldNd.parentNode.replaceChild(L_objNwNd,L_objIncldNd);
  313. }
  314. //********************************************************************
  315. function FinishTransformations()
  316. {
  317.     try
  318.     {
  319.         g_objTpc["Clone"].documentElement.selectSingleNode("content").setAttribute("styleType",g_objTpc["StyleRules"].styleType);
  320.     
  321.         if(g_objTpc["Locale"].value == "hhcdn")
  322.         {
  323.             g_objTpc["Clone"].documentElement.selectSingleNode("content").setAttribute("preference","cdn");
  324.         }
  325.         if(g_objTpc["Clone"].documentElement.selectNodes("//thumbnail").length > 0)
  326.         {
  327.             m_objThmbnl = window.createPopup();
  328.         }
  329.         document.body.innerHTML = g_objTpc["Clone"].transformNode(Transformation);
  330.         ReadUpdateList();
  331.         ResetHeaderHtml();
  332.         window.onresize = function()
  333.         {
  334.             ResetHeaderHtml();
  335.         }
  336.     }
  337.     catch(e)
  338.     {
  339.         document.body.innerHTML = "Unable to load topic.";
  340.     }
  341.     document.body.oncontextmenu = function()
  342.     {
  343.         return false;
  344.     }
  345. }
  346. //********************************************************************
  347. function ReadUpdateList()
  348. {
  349.     if((4 == g_objTpc["MoneyData"].XMLDOM.readyState) 
  350.         && (0 == g_objTpc["MoneyData"].XMLDOM.parseError))
  351.     {
  352.         try
  353.         {
  354.             var L_objSwpNd;
  355.             var L_lngTnum   = document.XMLDocument.documentElement.getAttribute("tNum");
  356.             var L_objTrgt   = document.all.MSMNYUPDATE;
  357.             var L_objUpdtNd = g_objTpc["MoneyData"].XMLDOM.documentElement.selectNodes("update[@id='" + L_lngTnum + "']");
  358.             if(L_objUpdtNd.length && L_objTrgt)
  359.             {
  360.                 L_objTrgt.innerHTML = L_objUpdtNd.item(0).text;
  361.                 L_objTrgt.style.display = "block";    
  362.             }
  363.         }
  364.         catch(e)
  365.         {
  366.             return;
  367.         }
  368.     }
  369. }
  370. //********************************************************************
  371. function ResetHeaderHtml()
  372. {
  373.     if(HeaderExpandText)
  374.     {
  375.         HeaderExpandText.style.display = (document.body.clientWidth >= 200) ? "none" : "block";
  376.     }
  377.     if(HeaderContractText)
  378.     {
  379.         HeaderContractText.style.display = (document.body.clientWidth < 200) ? "none" : "block";
  380.     }
  381. }
  382. //********************************************************************
  383. function GetFilePath(strFileName)
  384. {
  385.     var L_strFlPth;
  386.     var L_intTrnctRgt;
  387.     var L_intTrnctLft;
  388.     var L_strLctn = location.href;
  389.     L_intTrnctRgt = L_strLctn.lastIndexOf("\\") + 1;
  390.     L_intTrnctLft = (2 == L_strLctn.search(/:/)) 
  391.         ? 
  392.         14 
  393.         : 
  394.         7
  395.         ;
  396.     L_strFlPth = (0 == L_intTrnctRgt) 
  397.         ? 
  398.         strFileName 
  399.         : 
  400.         unescape("file:///" + L_strLctn.substring(L_intTrnctLft, L_intTrnctRgt) + strFileName)
  401.         ;
  402.     return L_strFlPth;
  403. }
  404. //********************************************************************
  405. function GetFileName(strFilePath)
  406. {
  407.     var L_strPrts = (4 == strFilePath.search(/:/)) 
  408.         ?
  409.         strFilePath.split("\\")
  410.         :
  411.         strFilePath.split("/")
  412.         ;
  413.     return L_strPrts[L_strPrts.length - 1];
  414. }
  415. //********************************************************************
  416. window.onload = function()
  417. {
  418.     g_objTpc["Locale"].loadData();
  419. }
  420. Main();
  421.  
  422.