home *** CD-ROM | disk | FTP | other *** search
/ Adelphia Powerlink / adelphia-powerlink.iso / install / inc / sdcnetcheck.js < prev    next >
Encoding:
Text File  |  2003-09-16  |  33.7 KB  |  1,147 lines

  1. //**********************************************************************************
  2. //**
  3. //**  File Name: sdcnetcheck.js
  4. //**
  5. //**  Summary: SupportSoft Network Utility JavaScript File
  6. //**
  7. //**  Description: This file contains global functions and structures used by
  8. //**               several pages to check and modify network settings such as
  9. //**               DHCP, adapters, and IP addresses.
  10. //**
  11. //**  Copyright SupportSoft Inc. 2003, All rights reserved.
  12. //**
  13. //**********************************************************************************
  14.  
  15. // sdcnetcheck object
  16. document.write('<object classid="CLSID:01118400-3e00-11d2-8470-0060089874ed" height="0" width="0" id="netobj"></object>');
  17.  
  18. //**********************************************************************************
  19. // Constants
  20. //**********************************************************************************
  21.  
  22. // Pages to go to if a check fails
  23. var HREF_FAIL_OS = "fail_os.htm";
  24. var HREF_FAIL_MEMORY = "fail_mem_orig.htm";
  25. var HREF_FAIL_CPU = "fail_cpu.htm";
  26. var HREF_FAIL_DISK_SPACE = "fail_disk.htm";
  27. var HREF_FAIL_NIC = "viewer_nic.htm";
  28. var HREF_FAIL_TCPIP = "viewer_tcpip.htm";
  29. var HREF_FAIL_BRIDGE = "viewer_bridge.htm";
  30. var HREF_FAIL_DISABLED = "viewer_enable.htm";
  31. var HREF_FAIL_IE = "swload.htm";
  32. var HREF_FAIL_OE = "swload.htm";
  33. var HREF_FAIL_CONNECTION = "install.htm";
  34.  
  35. // Values for network adapter testing. Solution links, status.
  36. var gAdapterStatus =       "";
  37. var gFix =                 "";
  38. var FIX_DISABLED =         "<a href='" + HREF_FAIL_DISABLED + "'>Solution</a>";
  39. var FIX_DISCONNECTED =     "<a href='" + HREF_FAIL_CONNECTION + "'>Solution</a>";
  40. var FIX_DHCP =             "<a href='" + HREF_FAIL_NIC + "'>Solution</a>";
  41. var FIX_TCPIP =            "<a href='" + HREF_FAIL_TCPIP + "'>Solution</a>";
  42. var FIX_BRIDGED =          "<a href='" + HREF_FAIL_BRIDGE + "'>Solution</a>";
  43. var FIX_NIC =              "<a href='" + HREF_FAIL_NIC + "'>Solution</a>"
  44. var STATUS_NIC_FAILED =    "No Network Adapter Found";
  45. var STATUS_DISABLED =      "Adapter Disabled";
  46. var STATUS_DHCP_FAILED =   "DHCP Disabled";
  47. var STATUS_TCPIP_FAILED =  "TCP/IP Not Installed";
  48. var STATUS_BRIDGED =       "Adapter Bridged";
  49.  
  50. // Minimum requirements
  51. var MIN_MEMORY = 32;
  52. var MIN_CPU = 133;
  53. var MIN_DISK_SPACE = 150;
  54. var MIN_IE_VERSION = 5.0;
  55. var MIN_EMAIL_CLIENT = "Outlook Express";
  56. var MIN_BROWSER_TYPE = "Internet Explorer";
  57. var MIN_PROCESSOR_TYPE = "Pentium";
  58.  
  59. // Recommended requirements
  60. var REC_MEMORY = 64;
  61. var REC_CPU = 166;
  62. var REC_DISK_SPACE = 150;
  63.  
  64. // Values for testing Internet connections. Used with function ssTestConnect()
  65. var TEST_CONNECT_INT_ADD = "supportsoft.adelphia.net";
  66. var TEST_CONNECT_NET = "65.83.242.107";
  67. var TEST_CONNECT_INT_PORT = 80;
  68.  
  69. // Values for POP server testing
  70. var TEST_POP_ADD = window.external.GetIniValue("", "SETUP", "pop");
  71. var TEST_POP_PORT = window.external.GetIniValue("", "SETUP", "popport");
  72.  
  73. // Values for SMTP server testing
  74. var TEST_SMTP_DOMAIN = window.external.GetIniValue("", "SETUP", "maildomain");
  75. var TEST_SMTP_ADD = window.external.GetIniValue("", "SETUP", "smtp");
  76. var TEST_SMTP_PORT = window.external.GetIniValue("", "SETUP", "smtpport");
  77. // From value for the test email sent by ssOnCheckSMTP
  78. var TEST_SMTP_FROM = "";
  79. // Subject value for the test email sent by ssOnCheckSMTP
  80. var TEST_SMTP_SUBJECT = "";
  81. // Body of the test email sent by ssOnCheckSMTP
  82. var TEST_SMTP_BODY = "";
  83.  
  84. // Message for disconnected cable/ethernet card
  85. var MSG_DISCONNECTED = "(Network Card Disconnected)";
  86.  
  87. // Message for disabled cable/ethernet card
  88. var MSG_DISABLED = "<b>Warning</b><br>We found your Network Interface Card, but it appears to be disabled. Please go to the Device Manager and enable the adapter under Network Adapters.";
  89.  
  90. // Limit display name of adapter to 40 characters for UI purposes
  91. var INT_ADAPTER_NAME_LENGTH = 40;
  92.  
  93. //**********************************************************************************
  94. // Arrays
  95. //**********************************************************************************
  96. // Values will be stored in these arrays for multi-adapter/nic scenarios
  97. var arrayDesc = new Array();
  98. var arrayNicSer = new Array();
  99. var arrayDhcp = new Array();
  100. var arrayNicIP = new Array();
  101. var arrayNicStatus = new Array();
  102. var arrayNic98me = new Array();
  103. var arrayNicFix = new Array();
  104. var arrayTcpip = new Array();
  105.  
  106. // These values are used to filter out virtual adapters on NT only
  107. var arrayAdapterFilter = new Array();
  108. arrayAdapterFilter[0] = "bay networks extranet access client adapter";
  109. arrayAdapterFilter[1] = "ppp pptp";
  110. arrayAdapterFilter[2] = "virtual";
  111. arrayAdapterFilter[3] = "dial";
  112. arrayAdapterFilter[4] = "remote access";
  113. arrayAdapterFilter[5] = "ivasion";
  114. arrayAdapterFilter[6] = "winpoet";
  115. arrayAdapterFilter[7] = "vpn";
  116. arrayAdapterFilter[8] = "eacfilt miniport";
  117. arrayAdapterFilter[9] = "nts enternet p.p.p.o.e";
  118. arrayAdapterFilter[10] = "vmware";
  119. arrayAdapterFilter[11] = "wan miniport";
  120. arrayAdapterFilter[12] = "deterministic network enhancer miniport";
  121. arrayAdapterFilter[13] = "internet connection sharing";
  122. arrayAdapterFilter[14] = "ti adsl";
  123. arrayAdapterFilter[15] = "ras async adapter";
  124. arrayAdapterFilter[16] = "direct parallel";
  125.  
  126. //**********************************************************************************
  127. // Global variables
  128. //**********************************************************************************
  129. var gFreeSpace, gMemory, gCpuCheck, gTcpipImage, gNicImage, gTotalRam, gCPU, gStrNic, gProcessor;
  130. var gOpSystem, gFreeSpaceMB, gOSImage, gIEVersion, gIEImage, gOEInstalled, gMinIEInstalled;
  131. var gNicIP, gOSGroup;
  132. var gDHCP = "";
  133. var gNicFix = "";
  134. var gTcpipFix = "";
  135. var gOsFix = "";
  136. var gIeFix = "";
  137. var gOeFix = "";
  138. var gDiskFix = "";
  139. var gRamFix = "";
  140. var cpuFix = "";
  141. var gProcessorTypeFix = "";
  142. var gProcessorType = "";
  143. var gQueryString = "";
  144. var gDisconnect = "";
  145. var gNicDisabled = false;
  146. var gEthernet = "";
  147. var gPresentethernetcards = "";
  148. var gAdaptTypeCount;
  149.  
  150. //**********************************************************************************
  151. // Functions
  152. //**********************************************************************************
  153.  
  154. //*******************************
  155. // Name:         ssGetEthernetCards
  156. // Purpose:      Retrieve the adapters that have been installed
  157. // Return:       Array
  158. //*******************************
  159. function ssGetEthernetCards() { 
  160.   try
  161.   { 
  162.     var mynetcheck = new ActiveXObject("SdcUser.SdcNetCheck.1") //use a clean one each time.
  163.     var ncards = mynetcheck.GetEthernetCards().split(";");
  164.     var ncardz;
  165.     var ncard;
  166.     ncardz=[];
  167.     for (n in ncards)
  168.     {
  169.       ncard = ncards[n].split("=");
  170.       if (ncard[1])
  171.       { 
  172.         ncardz[ncard[0]]=ncard[1];
  173.       }
  174.     }
  175.   }
  176.   catch (gec_err) { }
  177.   return ncardz;
  178. }
  179.  
  180. //*******************************
  181. // Name:         ssGetPresentAdapters
  182. // Purpose:      Retrieve an array of present ethernet adapters on system
  183. // Parameter:    Array of all ethernet adapters that have been installed, using ssGetEthernetCards()
  184. // Return:       Array
  185. //*******************************
  186. function ssGetPresentAdapters(comparearray) {
  187.   try
  188.   {
  189.     var counter;
  190.     var mynetcheck = new ActiveXObject("SdcUser.SdcNetCheck.1") //use a clean one each time.   
  191.     present = mynetcheck.GetNetClassDevices().toString().split(";");  
  192.     rr="";
  193.     ispresent=[];
  194.     for (r in present)
  195.     {
  196.       presentsplit = present[r].split("=");
  197.       if (presentsplit[0])
  198.       { 
  199.         if (comparearray[presentsplit[0]])
  200.         {
  201.           // Check against filter list for virtual adapters on NT only
  202.           if (ssGetOS() == "nt")
  203.           {
  204.             counter = 0;
  205.             for (i=0; i <= arrayAdapterFilter.length-1; i++)
  206.             {
  207.               if (comparearray[presentsplit[0]].toLowerCase().indexOf(arrayAdapterFilter[i].toLowerCase()) != -1)
  208.               {
  209.                 counter++;
  210.               }
  211.             }
  212.             
  213.             // Add the adapter to our list if it passes the keyword filtering
  214.             if (counter == 0)
  215.             {
  216.               ispresent[presentsplit[0]]=comparearray[presentsplit[0]];
  217.             }
  218.           }
  219.           else
  220.           {
  221.             ispresent[presentsplit[0]]=comparearray[presentsplit[0]]; 
  222.           }
  223.         }
  224.       }
  225.     }
  226.   }
  227.   catch (gpa_err) { }
  228.   return ispresent; //an array by service name of adapters that are present on the machine.
  229. }
  230.  
  231. //*******************************
  232. // Name:         ssGetPresentAdaptersCount
  233. // Purpose:      Retrieve the number of present ethernet adapters on system
  234. // Parameter:    Array of all present ethernet adapters, using ssGetPresentAdapters()
  235. // Return:       Integer
  236. //*******************************
  237. function ssGetPresentAdaptersCount(comparearray) { 
  238.   try
  239.   { 
  240.     var mynetcheck = new ActiveXObject("SdcUser.SdcNetCheck.1") //use a clean one each time.   
  241.     present = mynetcheck.GetNetClassDevices().toString().split(";");  
  242.     rr="";
  243.     ispresent=[];
  244.     for (r in present)
  245.     {
  246.       presentsplit = present[r].split("=");
  247.       if (presentsplit[0])
  248.       {
  249.         if (comparearray[presentsplit[0]])
  250.         {
  251.           ispresent[presentsplit[0]]=comparearray[presentsplit[0]]; 
  252.         }
  253.       }
  254.     }
  255.   }
  256.   catch (gpa_err) { }
  257.   return presentsplit.length; //an intenger representing the number of adapters that are present on the machine.
  258. }
  259.  
  260. //*******************************
  261. // Name:         ssGetAdapterFromQuery
  262. // Purpose:      Retrieve adapter index as passed in querystring
  263. // Return:       Integer
  264. //*******************************
  265. function ssGetAdapterFromQuery()
  266. {
  267.   var strPage = window.location.href;
  268.   var arraySplit = strPage.split("=");
  269.   var adapterValue = arraySplit[1];
  270.   return adapterValue;
  271. }
  272.  
  273. //*******************************
  274. // Name:         ssTestConnection
  275. // Purpose:      Test a network or Internet connection
  276. // Parameter:    address -- IP Address or name address (like www.yahoo.com) to be tested
  277. //               port -- integer value of port to be tested
  278. // Return:       boolean
  279. //*******************************
  280. function ssTestConnection(address,port)
  281. {
  282.   var netTest = document.netobj.TestConnect(address,port,30000);
  283.   return netTest;
  284.  
  285. }
  286.  
  287. //*******************************
  288. // Name:         ssCheckPop
  289. // Purpose:      Test connection to POP server
  290. // Parameter:    pop -- address of POP server to test
  291. //               port -- integer value of port to be tested (like 110)
  292. //               username -- string
  293. //               password -- string
  294. // Return:       boolean
  295. //*******************************
  296. function ssCheckPop(pop,port,username,password)
  297. {
  298.   var retval = document.netobj.CheckPop(pop,port,username,password);
  299.   return retval;
  300. }  
  301.  
  302. //*******************************
  303. // Name:         ssOnCheckSMTP
  304. // Purpose:      Test connection to POP server
  305. // Parameter:    pop -- address of POP server to test
  306. //               port -- integer value of port to be tested (like 110)
  307. //               username -- string
  308. //               password -- string
  309. // Return:       boolean
  310. //*******************************
  311. function ssOnCheckSMTP(smtp,port,from,to,subject,body)
  312. {
  313.   var retval = document.netobj.CheckSmtp(smtp,port,from,to,subject,body);
  314.   return retval;
  315. }  
  316.  
  317. //*******************************
  318. // Name:         ssRetestNetwork
  319. // Purpose:      Resend the page and test with adapter selected in droplist
  320. // Parameter:    adapter -- Integer index of adapter to be tested
  321. //*******************************
  322. function ssRetestNetwork(tintAdapter)
  323. {
  324.   window.location.href = ssGetCurrentPage() + "?adapter=" + tintAdapter;
  325. }
  326.  
  327. //*******************************
  328. // Name:         ssSaveAdapterList
  329. // Purpose:      Loop through each adapter and make a list of adapter names to add to registry for SI use
  330. //*******************************
  331. function ssSaveAdapterList()
  332. {
  333.   ssGetAllAdapters();
  334.   var strAdapterList = "";
  335.   for (i=0; i < arrayDesc.length; i++)
  336.   {
  337.     strAdapterList += arrayDesc[i];
  338.     if (i < arrayDesc.length-1)
  339.     {
  340.       strAdapterList += "<br>";
  341.     }
  342.   }
  343.   ssSetReg("adapters",strAdapterList);
  344.   return strAdapterList;
  345. }
  346.  
  347. //*******************************
  348. // Name:         ssGetAllAdapters
  349. // Purpose:      Loop through each adapter and add its attributes to global arrays.
  350. // Parameter:    name -- Name of the registry value to retrieve
  351. // Return:       String
  352. //*******************************
  353. function ssGetAllAdapters()
  354. {
  355.   switch (ssGetOS())
  356.   {
  357.     // Windows 2k, NT and XP
  358.     // Loop through adapters and make sure all are DHCP enabled
  359.     case "2000":
  360.     case "xp":
  361.     case "nt":
  362.  
  363.       var cnt = 0;
  364.       var count = 0;
  365.       
  366.       for (i in gPresentethernetcards) {
  367.         // Now shake out DHCP, IP and connection status
  368.         document.netobj.GetAdaptersInfo("");
  369.         var count = document.netobj.GetCount();
  370.         var j;
  371.         document.netobj.MoveFirst();
  372.  
  373.         // Set the servicename and description
  374.           arrayNicSer[cnt] = i;
  375.           arrayDesc[cnt] = gPresentethernetcards[i];
  376.       
  377.         if (i != "" && document.netobj.GetAdapterStatus(i) == "")
  378.         {
  379.           arrayNicStatus[cnt] = document.netobj.GetAdapterStatus(i);
  380.           arrayDhcp[cnt] = "";
  381.           arrayNicIP[cnt] = "";
  382.           arrayNicFix[cnt] = "Adapter Disabled";
  383.  
  384.           // Is TCP/IP installed?
  385.           if (netobj.IsTCPIPBoundToAdapter(arrayNicSer[cnt]))
  386.           {
  387.             arrayTcpip[cnt] = true;
  388.           }
  389.           else
  390.           {
  391.             arrayTcpip[cnt] = false;
  392.           }
  393.         }
  394.         else
  395.         {
  396.           // Loop through GetAdapter list (from ipconfig) to find a match
  397.           for(j = 0; j < count ; j++)
  398.           {
  399.             if(document.netobj.GetAttribute("AdapterInfo", "ServiceName") == i)
  400.             {
  401.               // Get the values out of the adapter
  402.               arrayDhcp[cnt] = document.netobj.GetAttribute("AdapterInfo", "DHCPEnabled");
  403.               arrayNicStatus[cnt] = document.netobj.GetAdapterStatus(arrayNicSer[cnt]);
  404.               arrayNicIP[cnt] = document.netobj.GetAttribute("AdapterInfo", "IPAddress");
  405.               
  406.               if (arrayNicStatus[cnt].toLowerCase().indexOf("disconnected") != -1)
  407.               {
  408.                 arrayNicFix[cnt] = MSG_DISCONNECTED;
  409.               }
  410.               else
  411.               {
  412.                 arrayNicFix[cnt] = "";
  413.               }
  414.               
  415.               // Is TCP/IP installed?
  416.               arrayTcpip[cnt] = netobj.IsTCPIPBoundToAdapter(arrayNicSer[cnt]);
  417.               break;
  418.             }
  419.             else
  420.             {
  421.               // Check for Network Bridge (XP only)
  422.               var bridgeValue = window.external.QueryRegValue("HKLM", "System\\CurrentControlSet\\services\\bridge\\linkage", "bind");
  423.  
  424.               if (bridgeValue.indexOf(i) != -1)
  425.               {
  426.                 arrayDhcp[cnt] = "";
  427.                 arrayNicStatus[cnt] = "Bridged";
  428.                 arrayNicIP[cnt] = "";
  429.                 arrayNicFix[cnt] = "Connection Bridged!  <a href='" + HREF_FAIL_BRIDGE + "?adapter=" + cnt + "'>Solution!</a>";
  430.                 arrayTcpip[cnt] = "Bridged";
  431.               }
  432.               else // not bridged mode, so check whether TCPIP is bound to this adapter
  433.               {
  434.                 if (netobj.IsTCPIPBoundToAdapter(i))
  435.                 {
  436.                   // should never get here
  437.                   arrayDhcp[cnt] = "";
  438.                   arrayNicStatus[cnt] = "";
  439.                   arrayNicIP[cnt] = "";
  440.                   arrayNicFix[cnt] = "Unknown Problem";
  441.                   arrayTcpip[cnt] = "Unknown Problem";
  442.                 }
  443.  
  444.                 // TCP/IP is not bound
  445.                 else
  446.                 {
  447.                   arrayDhcp[cnt] = "";
  448.                   arrayNicStatus[cnt] = "";
  449.                   arrayNicIP[cnt] = "";
  450.                   arrayNicFix[cnt] = "<a href='" + HREF_FAIL_TCPIP + "?adapter=" + cnt + "'>Solution!</a>";
  451.                   arrayTcpip[cnt] = false;
  452.                 }
  453.               }
  454.             }
  455.             document.netobj.MoveNext();
  456.           }
  457.           // end for loop
  458.           
  459.           // We have an adapter, but we can't get a count to loop through
  460.           if (count == 0)
  461.           {
  462.             arrayDhcp[cnt] = "";
  463.             arrayNicStatus[cnt] = document.netobj.GetAdapterStatus(arrayNicSer[cnt]);
  464.             arrayNicIP[cnt] = document.netobj.GetAttribute("AdapterInfo", "IPAddress");
  465.  
  466.             // Is TCP/IP installed?
  467.             if (netobj.IsTCPIPBoundToAdapter(arrayNicSer[cnt]))
  468.             {
  469.               arrayTcpip[cnt] = true;
  470.             }
  471.             else
  472.             {
  473.               arrayTcpip[cnt] = false;
  474.             }
  475.           }
  476.         }
  477.         cnt = cnt + 1;
  478.       }
  479.  
  480.     break;
  481.     
  482.     default :
  483.       // Windows 95, 98, ME
  484.       var cnt = 0;
  485.       // If valid ethernet adapters are found
  486.       for (i in gPresentethernetcards) {
  487.         // All we can get for 95, 98, ME is servicename and description.
  488.         arrayNicSer[cnt] = i;
  489.         arrayDesc[cnt] = gPresentethernetcards[i];
  490.         arrayDhcp[cnt] = "";
  491.         arrayNicStatus[cnt] = "";
  492.         arrayNicIP[cnt] = "";
  493.         arrayNicFix[cnt] = "";
  494.  
  495.         // Is TCP/IP installed?
  496.         if (netobj.IsTCPIPBoundToAdapter(arrayNicSer[cnt]))
  497.         {
  498.           arrayTcpip[cnt] = true;
  499.         }
  500.         else
  501.         {
  502.           arrayTcpip[cnt] = false;
  503.         }
  504.         cnt ++;
  505.       }
  506.   }
  507.  
  508. }
  509.  
  510.  
  511. //*******************************
  512. // Name:         ssGeneralInfo
  513. // Purpose:      Gather Network Info and iterate through series of pass/fail tests
  514. // Parameter:    adapter -- Integer index of adapter to be tested
  515. //*******************************
  516. function ssGeneralInfo(tintAdapter) 
  517. {
  518.   var issueFn = document.si.GetIssueFile(ssGetIssueID());
  519.  
  520.   MemThreshold = MIN_MEMORY;
  521.   CPUThreshold = MIN_CPU;
  522.   
  523.   document.si.StartXMLIO(issueFn);
  524.   var SystemID = document.si.GetXMLValue('SDC_Connectivity', 'ConnectionData', 'MacID');
  525.   gTotalRam = document.si.GetXMLValue("PCH_Sysinfo",SystemID, "RAM");
  526.   gCPU = document.si.GetXMLValue("PCH_Sysinfo",SystemID, "ClockSpeed");
  527.   gOpSystem = document.si.GetXMLValue("PCH_Sysinfo",SystemID, "OSName");
  528.   
  529.   var processorType = document.si.GetXMLValue("SDC_AdditionalSysInfo", "SDC_AdditionalSysInfo", "ProcessorType");
  530.   processorType = processorType.toLowerCase();
  531.   gProcessor = processorType;
  532.   var regex = /_/g;
  533.  
  534.   gProcessor = gProcessor.replace(regex," ");
  535.   
  536.   if (processorType.indexOf(MIN_PROCESSOR_TYPE.toLowerCase()) != -1)
  537.   {
  538.     gProcessorType = gStatusLightGreen;
  539.   }
  540.   else
  541.   {
  542.     gProcessorType = gStatusLightRed;
  543.     flagPass = false;
  544.     gProcessorTypeFix = "<a href='" + HREF_FAIL_CPU + "?adapter=" + tintAdapter + "'>More Info</a>";
  545.   }
  546.   
  547.   // Write the operating system to the registry
  548.   ssSetReg("OS",gOpSystem.toLowerCase());
  549.   
  550.   // browser info
  551.   var defaultbrowser = document.si.GetXMLValue("BrowserInfo","BrowserInfo", "DefaultBrowser");
  552.   gIEVersion = document.si.GetXMLValue("BrowserInfo","BrowserInfo", "IEVersion");
  553.   gIEVersion = gIEVersion.toLowerCase().substr(0,3);
  554.   
  555.   // check all mail clients
  556.   var mailclients = document.si.GetXMLSections("Mail_Categories");
  557.   
  558. //  var tcpip = nicCount;
  559.   var disksRaw = new String(document.si.GetXMLSections('Win32_LogicalDisk'));
  560.   var disks = disksRaw.split(',');
  561.   
  562.   // Debug mode
  563.   if (gdebugOS != "")
  564.   {
  565.     gOpSystem = gdebugOS;
  566.   }
  567.  
  568.   // Loop through supported operating systems to see if there is a match
  569.   if (gOpSystem.toLowerCase().indexOf("windows") != -1 )
  570.   {
  571.     for (i=0; i <= arraySupportedOS.length-1; i++)
  572.     {
  573.       var boolOS;
  574.       if (gOpSystem.toLowerCase().indexOf(arraySupportedOS[i].abName) != -1)
  575.       {
  576.         boolOS = true;
  577.       }
  578.     }
  579.     if (boolOS)
  580.     {
  581.       gOSImage = gStatusLightGreen;
  582.     }
  583.     else
  584.     {
  585.       flagPass = false;
  586.       gOSImage = gStatusLightRed;
  587.       gOsFix = "<a href='" + HREF_FAIL_OS + "?adapter=" + tintAdapter + "'>More Info</a>";
  588.     }
  589.   }
  590.   else
  591.   {
  592.     flagPass = false;
  593.     gOsFix = "<a href='" + HREF_FAIL_OS + "?adapter=" + tintAdapter + "'>More Info</a>";
  594.   }
  595.   
  596.   // Get free disk space for first drive (usually C:)
  597.   for (i=0; i<1; i++) 
  598.   {
  599.     var freeSpace = document.si.GetXMLValue('Win32_LogicalDisk', disks[i], 'TotalFreeSpace');
  600.     var totalSpace = document.si.GetXMLValue('Win32_LogicalDisk', disks[i], 'TotalCapacity');
  601.     var percent = freeSpace*100/totalSpace;
  602.     var freeSpaceMBtemp = freeSpace/1024;
  603.     gFreeSpaceMB = Math.round(freeSpaceMBtemp);
  604.     
  605.     // Debug mode
  606.     if (gdebugFreeSpace != "")
  607.     {
  608.       gFreeSpaceMB = gdebugFreeSpace;
  609.     }
  610.  
  611.     if (gFreeSpaceMB > MIN_DISK_SPACE) 
  612.     {
  613.       gFreeSpace = gStatusLightGreen;
  614.     }
  615.     else
  616.     {
  617.       gFreeSpace = gStatusLightRed;
  618.       flagPass = false;
  619.       gDiskFix = "<a href='" + HREF_FAIL_DISK_SPACE + "?adapter=" + tintAdapter + "'>Solution!</a>";
  620.     }
  621.   }
  622.  
  623.   // Debug mode
  624.   if (gdebugRAM != "")
  625.   {
  626.     gTotalRam = gdebugRAM;
  627.   }
  628.  
  629.   if (gTotalRam > MemThreshold) 
  630.   {
  631.     gMemory = gStatusLightGreen;
  632.   }
  633.   else
  634.   {
  635.     gMemory = gStatusLightRed;
  636.     flagPass = false;
  637.     gRamFix = "<a href='" + HREF_FAIL_MEMORY + "?adapter=" + tintAdapter + "'>More Info</a>";
  638.   }
  639.      
  640.   // Debug mode
  641.   if (gdebugCPU != "")
  642.   {
  643.     gCPU = gdebugCPU;
  644.   }
  645.  
  646.   if (gCPU > CPUThreshold) 
  647.   {
  648.     gCpuCheck = gStatusLightGreen;
  649.   }
  650.   else
  651.   {
  652.     gCpuCheck = gStatusLightRed;
  653.     flagPass = false;
  654.     cpuFix = "<a href='" + HREF_FAIL_CPU + "?adapter=" + tintAdapter + "'>More Info</a>";
  655.   }
  656.  
  657.   // Debug mode
  658.   if (gdebugEmail != "")
  659.   {
  660.     mailclients = gdebugEmail;
  661.   }
  662.  
  663.   if (mailclients.toLowerCase().indexOf(MIN_EMAIL_CLIENT.toLowerCase()) != -1 )
  664.   {
  665.     oeimg = gStatusLightGreen;
  666.     gOEInstalled = "Yes";
  667.   }
  668.   else
  669.   {
  670.     oeimg = gStatusLightRed;
  671.     gOEInstalled = "No";
  672.   }
  673.   
  674.   // Debug mode
  675.   if (gdebugIE != "")
  676.   {
  677.     gIEVersion = gdebugIE;
  678.   }
  679.  
  680.   if (gIEVersion >= MIN_IE_VERSION )
  681.   {
  682.     gIEImage = gStatusLightGreen;
  683.     gMinIEInstalled = "Yes";
  684.   }
  685.   else
  686.   {
  687.     gIEImage = gStatusLightRed;
  688.     gMinIEInstalled = "No";
  689.   }
  690.  
  691.   document.si.EndXMLIO();
  692. }
  693.  
  694. //*******************************
  695. // Name:         ssEnableDHCP
  696. // Purpose:      Enable DHCP on a given adapter
  697. // Parameter:    adapter -- Service Name of adapter to be enabled. Windows 95/98/ME
  698. //                          can pass an empty string since all adapters will be enabled
  699. //               reboot -- Boolean. True will reboot system after enabling DHCP on 95/98/ME/NT
  700. //               reload -- Boolean. True will reload the current page after enabling on 2k and XP
  701. //*******************************
  702. function ssEnableDHCP(adapter,reboot,reload)
  703. {
  704.   document.netobj.EnableDHCP(adapter);
  705.   
  706.   // Set the Current User/runonce key to launch SmartAccess on reboot
  707.   ssSetInstallRestart();
  708.   if (ssGetReg("OS").indexOf("2000") != -1 || ssGetReg("OS").indexOf("xp") != -1)
  709.   {
  710.     var stopDHCP = window.external.StartDhcp(false);
  711.     var startDHCP = window.external.StartDhcp(true);
  712.     var renewIP = window.external.IpConfig(1);
  713.     if (reload == true)
  714.     {
  715.       window.location.reload();
  716.     }
  717.   }
  718.   else
  719.   {
  720.     if (reboot == true)
  721.     {
  722.       alert(ALERT_REBOOT);
  723.       window.external.Reboot();
  724.     }
  725.   }
  726. }
  727.  
  728. //*******************************
  729. // Name:         ssDetectUSB
  730. // Purpose:      Detect whether there is a USB port available on the computer
  731. // Return:       String. Yes, No or Unknown
  732. //*******************************
  733. function ssDetectUSB()
  734. {
  735.   if (ssGetOS() == "98" || ssGetOS() == "me") {
  736.     var UsbCount = new String(window.external.QueryRegValue("HKLM", "SYSTEM\\CurrentControlSet\\Services\\Class\\USB\\0000", "NTMPDriver"));
  737.   }
  738.   else {
  739.     var UsbCount = new String(window.external.QueryRegValue("HKLM", "SYSTEM\\CurrentControlSet\\Services\\usbhub\\Enum", "Count"));
  740.   }
  741.   
  742.   if (UsbCount == '')
  743.   {
  744.     usb = 'Unknown';
  745.   }
  746.   else if (UsbCount == '0')
  747.   {
  748.     usb = 'No';
  749.   }
  750.   else
  751.   {
  752.     usb = 'Yes';
  753.   }
  754.   return usb;
  755. }
  756.  
  757.  
  758. //*******************************
  759. // Name:         ssFinalAdapterList
  760. // Purpose:      List all viable network adapters
  761. // Parameter:    adapter -- Integer index of adapter to be tested
  762. //*******************************
  763. function ssFinalAdapterList(tintAdapter)
  764. {
  765.   // Set up parameters for adapter arrays
  766.   gEthernet = ssGetEthernetCards();
  767.   gPresentethernetcards = ssGetPresentAdapters(gEthernet);
  768.  
  769.   // Set adapter arrays
  770.   ssGetAllAdapters();
  771.  
  772.   // Debug mode -- Are there any ethernet cards?
  773.   var nicCount = arrayDesc.length;
  774.   
  775.   if (gdebugNIC != "")
  776.   {
  777.     nicCount = gdebugNIC;
  778.   }
  779.  
  780.   // Ethernet Cards
  781.   if (nicCount > 0)
  782.   {
  783.     var counter = 0;
  784.  
  785.     // Assign values from arrays
  786.     nicDesc = arrayDesc[tintAdapter];
  787.     nicServiceName = arrayNicSer[tintAdapter];
  788.     
  789.     var selected = "";
  790.     var strSize = arrayDesc.length + 1;
  791.  
  792.     // build list box of adapters
  793.     strNic = "<select ID='aSelect' onChange='ssRetestNetwork(this.selectedIndex);' size=" + strSize + " style='width:350px;'>";
  794.     for (i=0; i<=arrayDesc.length-1; i++)
  795.     {
  796.       if (i == tintAdapter)
  797.       {
  798.         selected = "SELECTED";
  799.       }
  800.       
  801.       // Only show adapter if it matches modem type in registry
  802.       if (ssAdapterType(arrayDesc[i]) == ssGetReg("ModemType"))
  803.       {
  804.         // Limit display name of adapter to 40 characters for UI purposes
  805.         var displayName = arrayDesc[i];
  806.         if (displayName.length > INT_ADAPTER_NAME_LENGTH)
  807.         {
  808.           displayName = displayName.slice(0,INT_ADAPTER_NAME_LENGTH) + "...";
  809.         }
  810.         strNic += "<option value='"+arrayNicSer[i]+"' " + selected + ">" + displayName +"</option>";
  811.         selected = "";
  812.         var indexTcpip = i;
  813.         gNicImage = gStatusLightGreen;
  814.       }
  815.       else
  816.       {
  817.         gNicImage = gStatusLightRed;
  818.       }
  819.     }
  820.  
  821.     strNic += "</select>";
  822.     gNicFix = arrayNicFix[tintAdapter];
  823.   }
  824.   else
  825.   {
  826.     strNic = "Ethernet Card Not found";
  827.     gNicIP = "Not found";
  828.     gNicImage = gStatusLightRed;
  829.     flagPass = false;
  830.     gNicFix = "<a href='" + HREF_FAIL_NIC + "?adapter=" + tintAdapter + "'>Solution!</a>";
  831.   }
  832.   
  833.   gDHCP = arrayDhcp[tintAdapter];
  834.   
  835.   // There is an ethernet card, but it might be unplugged
  836.   if (nicCount > 0)
  837.   {
  838.     if (nicCount <= document.netobj.GetCount())
  839.     {
  840.       gNicImage = gStatusLightGreen;
  841.     }
  842.     // There is an ethernet card, but it might be disabled
  843.     else if (!gIsBridged)
  844.     {
  845.       // Is TCP/IP installed? If so, we are probably disabled.
  846.       if (arrayTcpip[tintAdapter] == "Installed" && arrayNicStatus[tintAdapter] != "Connected"  && arrayNicStatus[tintAdapter] != "DisConnected" && gOSGroup == "2k")
  847.       {
  848.         gNicImage = gStatusLightRed;
  849.         gNicFix = 'Adapter Disabled!  <a href="' + HREF_FAIL_DISABLED + '">Solution!</a>';
  850.         gNicDisabled = true;
  851.         flagPass = false;
  852.       }
  853.       else if (arrayNicStatus[tintAdapter] == "DisConnected")
  854.       {
  855.         gNicImage = gStatusLightGreen;
  856.         gNicFix = MSG_DISCONNECTED;
  857.         gNicDisabled = false;
  858.       }
  859.       else
  860.       {
  861.         gNicImage = gStatusLightGreen;
  862.         gNicFix = '';
  863.         gNicDisabled = false;
  864.       }
  865.     }
  866.  
  867.     if (arrayNicStatus[tintAdapter] == "Bridged")
  868.     {
  869.       gNicImage = gStatusLightRed;
  870.     }
  871.   }
  872.   else
  873.   {
  874.     gNicImage = gStatusLightRed;
  875.     flagPass = false;
  876.     if (arrayTcpip[tintAdapter] == "Not Installed")
  877.     {
  878.       gNicFix = "<a href='" + HREF_FAIL_TCPIP + "?adapter=" + tintAdapter + "'>Solution!</a>";
  879.     }
  880.     else
  881.     {
  882.       gNicFix = "<a href='" + HREF_FAIL_NIC + "?adapter=" + tintAdapter + "'>Solution!</a>";
  883.     }
  884.   }
  885. }
  886.  
  887.  
  888.  
  889. //*******************************
  890. // Name:         ssAdapterType
  891. // Purpose:      Determine whether user has chosen to install on USB or ethernet adapter
  892. // Return:       usb -- User has chosen USB adapter
  893. //               ethernet -- User has chosen ethernet adapter
  894. //*******************************
  895. function ssAdapterType(desc)
  896. {
  897.   var selectedAdapterType;
  898.   var description = desc.toLowerCase();
  899.   var currentUSBAdapters = window.external.GetUsbDeviceList(true);
  900.   if (description.indexOf("usb") != -1 || currentUSBAdapters.toLowerCase().indexOf(description) != -1)
  901.   {
  902.     selectedAdapterType = "usb";
  903.   }
  904.   else
  905.   {
  906.     selectedAdapterType = "ethernet";
  907.   }
  908.   return selectedAdapterType;
  909. }
  910.  
  911. //*******************************
  912. // Name:         ssInstalledUSB
  913. // Purpose:      Determine whether user has any USB adapters installed
  914. // Return:       boolean
  915. //*******************************
  916. function ssInstalledUSB()
  917. {
  918.   
  919.   // Set up parameters for adapter arrays
  920.   document.netobj.GetAdaptersInfo("");
  921.   var count = document.netobj.GetCount();
  922.  
  923.   gEthernet = ssGetEthernetCards();
  924.   gPresentethernetcards = ssGetPresentAdapters(gEthernet);
  925.  
  926.   // Set adapter arrays
  927.   ssGetAllAdapters();
  928.  
  929.   gAdaptTypeCount = 0;
  930.  
  931.   for (i=0; i < arrayDesc.length; i++)
  932.   {
  933.     var adapterDesc = arrayDesc[i];
  934.     var adapterType = ssAdapterType(adapterDesc);
  935.     if (adapterType == "usb")
  936.     {
  937.       return true;
  938.     }
  939.   }
  940.   return false;
  941. }
  942.  
  943.  
  944. //*******************************
  945. // Name:         ssNicTest
  946. // Purpose:      Check for ethernet adapters
  947. // Return:       boolean
  948. //*******************************
  949. function ssNicTest()
  950. {
  951.   var nicCount = arrayDesc.length;
  952.   if (gdebugNIC != "")
  953.   {
  954.     nicCount = gdebugNIC;
  955.   }
  956.  
  957.   if (nicCount < 1)
  958.   {
  959.     gAdapterStatus = STATUS_NIC_FAILED;
  960.     gFix = FIX_NIC;
  961.     return false;
  962.   }
  963.   return true;
  964. }
  965.  
  966.  
  967. //*******************************
  968. // Name:         ssDhcpTest
  969. // Purpose:      Check adapter for DHCP
  970. // Parameter:    adapter -- Integer index of adapter to be tested
  971. // Return:       boolean
  972. //*******************************
  973. function ssDhcpTest(tintAdapter)
  974. {
  975.   var status = arrayDhcp[tintAdapter];
  976.   if (status.toLowerCase() == "yes")
  977.   {
  978.     return true;
  979.   }
  980.   else
  981.   {
  982.     gAdapterStatus = STATUS_DHCP_FAILED;
  983.     gFix = FIX_DHCP;
  984.     return false;
  985.   }
  986. }
  987.  
  988.  
  989. //*******************************
  990. // Name:         ssStatusTest
  991. // Purpose:      Check adapter status - connected, disconnected, etc. If not 2K or XP, we return true
  992. // Parameter:    adapter -- Integer index of adapter to be tested
  993. // Return:       boolean
  994. //*******************************
  995. function ssStatusTest(tintAdapter)
  996. {
  997.   var status = arrayNicStatus[tintAdapter];
  998.   if (status.toLowerCase() != "connected" && ssOSGroup() == "2k")
  999.   {
  1000.     return false;
  1001.   }
  1002.   else
  1003.   {
  1004.     return true;
  1005.   }
  1006. }
  1007.  
  1008.  
  1009. //*******************************
  1010. // Name:         ssTcpipTest
  1011. // Purpose:      Check for TCP/IP on specified adapter
  1012. // Parameter:    adapter -- Integer index of adapter to be tested
  1013. // Return:       TCP/IP status
  1014. //*******************************
  1015. function ssTcpipTest(tintAdapter)
  1016. {
  1017.   var status = arrayTcpip[tintAdapter];
  1018.  
  1019.   if (gdebugTcpip != "")
  1020.   {
  1021.     status = gdebugTcpip;
  1022.   }
  1023.  
  1024.   if (status != true)
  1025.   {
  1026.     gAdapterStatus = STATUS_TCPIP_FAILED;
  1027.     gFix = FIX_TCPIP;
  1028.     return false;
  1029.   }
  1030.   return status;
  1031. }
  1032.  
  1033.   
  1034. //*******************************
  1035. // Name:         ssAdapterEnabled
  1036. // Purpose:      Is adapter enabled? 2k, XP, NT model
  1037. // Parameter:    adapter -- Integer index of adapter to be tested
  1038. // Return:       boolean
  1039. //*******************************
  1040. function ssAdapterEnabled(tintAdapter)
  1041. {
  1042.   var status = arrayNicStatus[tintAdapter];
  1043.   status = status.toLowerCase();
  1044.  
  1045.   // We have no status, but we do have TCP/IP, so we are probably disabled
  1046.   if (status == "" && ssTcpipTest(tintAdapter) && ssOSGroup() == "2k")
  1047.   {
  1048.     gAdapterStatus = STATUS_DISABLED;
  1049.     gFix = FIX_DISABLED;
  1050.     return false;
  1051.   }
  1052.   
  1053.   if (status == "disconnected")
  1054.   {
  1055.     gAdapterStatus = status;
  1056.     gFix = FIX_DISCONNECTED;
  1057.     return false;
  1058.   }
  1059.  
  1060.   if (status == "bridged")
  1061.   {
  1062.     gAdapterStatus = status;
  1063.     gFix = FIX_BRIDGED;
  1064.     return false;
  1065.   }
  1066.   return true;
  1067. }
  1068.   
  1069.  
  1070. //*******************************
  1071. // Name:         ssBridgeTest
  1072. // Purpose:      Check if adapter is bridged. XP only
  1073. // Parameter:    adapter -- Integer index of adapter to be tested
  1074. // Return:       boolean
  1075. //*******************************
  1076. function ssBridgeTest(tintAdapter)
  1077. {
  1078.   // Only check adapter if it matches modem type in registry
  1079.  
  1080.   var adapterDesc = arrayDesc[tintAdapter];
  1081.   var adapterType = ssAdapterType(adapterDesc);
  1082.  
  1083.   if (adapterType == ssGetReg("ModemType"))
  1084.   {
  1085.     status = arrayNicStatus[tintAdapter];
  1086.     status = status.toLowerCase();
  1087.     if (status == "bridged")
  1088.     {
  1089.       gAdapterStatus = STATUS_BRIDGED;
  1090.       gFix = FIX_BRIDGED;
  1091.       return false;
  1092.     }
  1093.   }
  1094.   return true;
  1095. }
  1096.  
  1097.  
  1098. //*******************************
  1099. // Name:         ssTestAdapter
  1100. // Purpose:      Run a series of tests on adapter
  1101. // Parameter:    adapter -- Integer index of adapter to be tested
  1102. // Return:       boolean. Returns true if all tests pass
  1103. //*******************************
  1104. function ssTestAdapter(tintAdapter)
  1105. {
  1106.   // Reset adapter status and solution text/link for each adapter
  1107.   // Assume connected until tests prove otherwise
  1108.   gAdapterStatus = "Connected";
  1109.   gFix = "";
  1110.   var status = true;
  1111.   
  1112.   if (!ssNicTest())
  1113.   {
  1114.     return false;
  1115.   }
  1116.   
  1117.   // Check adapter status
  1118.   if (ssOSGroup() == "2k")
  1119.   {
  1120.     if (!ssStatusTest(tintAdapter))
  1121.     {
  1122.       if (!ssAdapterEnabled(tintAdapter))
  1123.       {
  1124.         status = false;
  1125.       }
  1126.     }
  1127.   }
  1128.   
  1129.   // Check for a bridge on XP only
  1130.   if (ssGetOS() == "xp")
  1131.   {
  1132.     if (!ssBridgeTest(tintAdapter))
  1133.     {
  1134.       status = false;
  1135.     }
  1136.   }
  1137.  
  1138.   // Check TCP/IP
  1139.   if (status && !ssTcpipTest(tintAdapter))
  1140.   {
  1141.     status = false;
  1142.   }
  1143.   
  1144.   return status;
  1145. }
  1146.  
  1147.