Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

691 lines
20 KiB

  1. var DrvTypeLocalDisk = 3;
  2. var g_dictDrivers = null; //dictionary. key = deviceID, item = issigned
  3. var BIOSHelp = "";
  4. TSDriveLink = TSDrive = TSHWareLink = TSHWare = BIOSHelpLink = BIOSHelp;
  5. //WinUpdate, Defrag & CleanUp defined in commonFunc.js
  6. var WinUpdateLink = "<A class=\"sys-link-normal\" href=\"hcp://system/updatectr/updatecenter.htm\">" + TAG_WINUPDATE + "</A>";
  7. var defragLink = "<A class=\"sys-link-normal\" href=\"#\" onclick=\"Run(Defrag)\">" + TAG_DEFRAG + "</A>";
  8. var cleanupLink = "<A class=\"sys-link-normal\" href=\"#\" onclick=\"Run(CleanUp)\">" + TAG_CLEANUP + "</A>";
  9. var HCLLink = "<A class=\"sys-link-normal\" href=\"http://www.microsoft.com/hcl/default.asp\">" + TAG_HCLDESC + "</A>";
  10. function SetHelpLinks() {
  11. var WinFolderPath = GetWinFolderPath();
  12. //init some vars
  13. BIOSHelp = "ms-its:" + WinFolderPath + "\\Help\\msinfo32.chm::/msinfo_system_summary.htm";
  14. BIOSHelpLink = "<A class=\"sys-link-normal\" href=\"" + BIOSHelp + "\">" + TAG_VIEWHELP + "</A>";
  15. MemHelpLink = BIOSHelpLink;
  16. TSHWare = "hcp://Help/tshoot/hwcon.htm";
  17. TSHWareLink = "<A class=\"sys-link-normal\" href=\"" + TSHWare + "\">" + TAG_TSHOOTER + "</A>";
  18. TSDrive = "hcp://Help/tshoot/tsdrive.htm";
  19. TSDriveLink = "<A class=\"sys-link-normal\" href=\"" + TSDrive + "\">" + TAG_TSHOOTER + "</A>";
  20. }
  21. //traverse the list and display each item.
  22. function displayTableSegment(outerDiv, head) {
  23. var strMsg = "<table width=\"100%\" cellspacing=0 cellpadding=0><tr class=\"sys-table-cell-bgcolor2 sys-font-body sys-color-body\"><td align='left' style=\"padding : 0.5em;\">%arg1%</td></tr></table>";
  24. var strHTML = "";
  25. var cnt = 1;
  26. var tableElement = null;
  27. if (document.all[outerDiv].length == null)
  28. tableElement = document.all[outerDiv];
  29. else
  30. tableElement = document.all[outerDiv][0];
  31. if (!head)
  32. tableElement.outerHTML = strMsg.replace(/%arg1%/, TAG_NONE);
  33. else
  34. {
  35. if(head.error)
  36. tableElement.outerHTML = strMsg.replace(/%arg1%/, head.error);
  37. else
  38. {
  39. var curr = head;
  40. while (curr!=null)
  41. {
  42. if (document.all[outerDiv].length == null)
  43. tableElement = document.all[outerDiv];
  44. else
  45. tableElement = document.all[outerDiv][0];
  46. if (cnt%2 == 0)
  47. {
  48. if (tableElement.all["tr_" + outerDiv])
  49. tableElement.all["tr_" + outerDiv].className = "sys-table-cell-bgcolor1";
  50. cnt = 1;
  51. }
  52. else
  53. {
  54. if (tableElement.all["tr_" + outerDiv])
  55. tableElement.all["tr_" + outerDiv].className = "sys-table-cell-bgcolor2";
  56. cnt++;
  57. }
  58. curr.show(tableElement);
  59. strHTML += tableElement.outerHTML;
  60. curr = curr.getNext();
  61. }
  62. if(tableElement)
  63. tableElement.outerHTML = strHTML;
  64. }
  65. }
  66. }
  67. function IsSigned(id) {
  68. var bSigned = null; //unknown
  69. if(g_dictDrivers.Exists(id))
  70. {
  71. var bSigned = g_dictDrivers.Item(id);
  72. }
  73. return bSigned;
  74. }
  75. function GetDriverInfo()
  76. {
  77. g_dictDrivers = new ActiveXObject("Scripting.Dictionary");
  78. var loc = wbemlocator;
  79. var svcs = loc.ConnectServer(remoteServer);
  80. svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate;
  81. var strQuery = "Select DeviceID, IsSigned From Win32_PnPSignedDriver";
  82. var colDevices = new Enumerator(svcs.ExecQuery(strQuery));
  83. for(; !colDevices.atEnd(); colDevices.moveNext())
  84. {
  85. var device = colDevices.item();
  86. try
  87. {
  88. g_dictDrivers.add(device.DeviceID, device.IsSigned);
  89. }
  90. catch(e)
  91. {
  92. //do nothing
  93. }
  94. }
  95. }
  96. //Just a wrapper for an error message.
  97. function MsinfoErrObject(msg)
  98. {
  99. this.error = msg;
  100. }
  101. ////////////////////////
  102. //myOS
  103. function myOSShow(tableElement) {
  104. if(tableElement)
  105. {
  106. tableElement.all["name"].innerHTML = this.m_name;
  107. tableElement.all["created"].innerHTML = this.m_created;
  108. tableElement.all["help"].innerHTML = this.m_help;
  109. }
  110. else
  111. displayTableSegment("os", this.m_head);
  112. }
  113. function myOS() {
  114. this.m_name = null;
  115. this.m_created = null;
  116. this.m_help = null;
  117. this.m_next = null;
  118. this.setNext = new Function("ptr", "this.m_next = ptr;");
  119. this.getNext = new Function("return this.m_next;");
  120. this.show = myOSShow;
  121. var loc = wbemlocator;
  122. var svcs = loc.ConnectServer(remoteServer);
  123. svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate;
  124. var cls = svcs.get("Win32_OperatingSystem");
  125. var insts = new Enumerator(cls.Instances_())
  126. if(!insts.atEnd()) {
  127. var inst = insts.item();
  128. this.m_name = (inst.Caption ? inst.Caption : TAG_UNKNOWN);
  129. this.m_created = (inst.InstallDate ? getDateTime(inst.InstallDate, true) : TAG_UNKNOWN);
  130. this.m_help = WinUpdateLink;
  131. this.m_head = this;
  132. }
  133. }//EO myOS
  134. ///////////////////
  135. ////////////////////////
  136. //myBIOS
  137. function myBIOSShow(tableElement) {
  138. if(tableElement)
  139. {
  140. tableElement.all["name"].innerHTML = this.m_name;
  141. tableElement.all["created"].innerHTML = this.m_created;
  142. tableElement.all["help"].innerHTML = this.m_help;
  143. }
  144. else
  145. displayTableSegment("bios", this.m_head);
  146. }
  147. function myBIOS() {
  148. this.m_name = null;
  149. this.m_created = null;
  150. this.m_help = null;
  151. this.m_next = null;
  152. this.setNext = new Function("ptr", "this.m_next = ptr;");
  153. this.getNext = new Function("return this.m_next;");
  154. this.show = myBIOSShow;
  155. var loc = wbemlocator;
  156. var svcs = loc.ConnectServer(remoteServer);
  157. svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate;
  158. var cls = svcs.get("Win32_BIOS");
  159. var insts = new Enumerator(cls.Instances_())
  160. if(!insts.atEnd()) {
  161. var inst = insts.item();
  162. this.m_name = TAG_BIOS;
  163. this.m_created = (inst.ReleaseDate ? getDateTime(inst.ReleaseDate, true) : TAG_UNKNOWN);
  164. this.m_help = BIOSHelpLink;
  165. this.m_head = this;
  166. }
  167. }//EO myBIOS
  168. ///////////////////
  169. //////////////////////
  170. //myComponent
  171. function myComponentShow(tableElement) {
  172. tableElement.all["name"].innerHTML = this.m_name;
  173. tableElement.all["status"].innerHTML = this.m_status;
  174. tableElement.all["update"].innerHTML = this.m_update;
  175. tableElement.all["help"].innerHTML = this.m_help;
  176. }
  177. function myComponent(genericName) {
  178. this.m_name = null;
  179. this.m_status = null;
  180. this.m_update = null;
  181. this.m_help = null;
  182. this.m_next = null;
  183. this.setNext = new Function("ptr", "this.m_next = ptr;");
  184. this.getNext = new Function("return this.m_next;");
  185. this.show = myComponentShow;
  186. var strQuery;
  187. switch (genericName) {
  188. case "video":
  189. this.m_name = TAG_VIDEOCARD;
  190. strQuery = "Select Name, PNPDeviceID From Win32_VideoController";
  191. break;
  192. case "sound":
  193. this.m_name = TAG_SOUNDCARD;
  194. strQuery = "Select Name, PNPDeviceID From Win32_SoundDevice";
  195. break;
  196. case "usb":
  197. this.m_name = TAG_USBCTRLR;
  198. strQuery = "Select Name, PNPDeviceID From Win32_USBController";
  199. break;
  200. case "scsi":
  201. this.m_name = TAG_SCSIADAPTR;
  202. strQuery = "";//PENDING
  203. break;
  204. case "network":
  205. this.m_name = TAG_NWCARD;
  206. var loc = wbemlocator;
  207. var svcs = loc.ConnectServer(remoteServer);
  208. svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate;
  209. strQuery = "Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = TRUE";
  210. var insts = new Enumerator(svcs.ExecQuery(strQuery))
  211. for(; !insts.atEnd(); insts.moveNext()) {
  212. var inst = insts.item();
  213. strQuery = "Associators of {Win32_NetworkAdapterConfiguration.Index=" + inst.Index + "}";
  214. var colNetworkAdapter = new Enumerator(svcs.ExecQuery(strQuery));
  215. if (!colNetworkAdapter.atEnd()) {
  216. var networkAdapter = colNetworkAdapter.item();
  217. var issigned = IsSigned(networkAdapter.PNPDeviceID);
  218. this.m_status = issigned ? TAG_SUPPORTED : TAG_NOTSUPPORTED;
  219. this.m_update = issigned ? TAG_NOTREQ : TAG_RECOMMENDED;
  220. this.m_help = issigned ? TSHWareLink : HCLLink;
  221. }
  222. break;//PENDING multiple instances?
  223. }
  224. strQuery = "";
  225. break;
  226. default:
  227. this.m_name = genericName; //err
  228. }
  229. if(strQuery) {
  230. var loc = wbemlocator;
  231. var svcs = loc.ConnectServer(remoteServer);
  232. svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate;
  233. var insts = new Enumerator(svcs.ExecQuery(strQuery))
  234. arrInfo = new Array();
  235. for(; !insts.atEnd(); insts.moveNext()) {
  236. var inst = insts.item();
  237. var issigned = IsSigned(inst.PNPDeviceID);
  238. this.m_status = issigned ? TAG_SUPPORTED : TAG_NOTSUPPORTED;
  239. this.m_update = issigned ? TAG_NOTREQ : TAG_RECOMMENDED;
  240. this.m_help = issigned ? TSHWareLink : HCLLink;
  241. break;//PENDING multiple instances?
  242. }
  243. }
  244. }
  245. //EO myComponent
  246. //////////////////////
  247. //////////////////////
  248. //myComponents
  249. function myComponentsShow() {
  250. displayTableSegment("component", this.m_head);
  251. }
  252. function myComponents() {
  253. this.m_head = null;
  254. this.show = myComponentsShow;
  255. var arrComponents = new Array("usb", "sound", "network", "video");
  256. for (var i=0; i < arrComponents.length ; i++) {
  257. var oComponent = new myComponent(arrComponents[i]);
  258. oComponent.setNext(this.m_head); //add before
  259. this.m_head = oComponent;
  260. }
  261. }
  262. //EO myComponents
  263. //////////////////////
  264. //////////////////////
  265. //myDisk
  266. function myDiskShow(tableElement) {
  267. tableElement.all["name"].innerHTML = this.m_name;
  268. tableElement.all["usage"].innerHTML = this.m_usage;
  269. tableElement.all["help"].innerHTML = this.m_help;
  270. }
  271. function myDisk(name, size, freeSpace) {
  272. this.m_name = null;
  273. this.m_usage = null;
  274. this.m_help = null;
  275. this.m_next = null;
  276. this.setNext = new Function("ptr", "this.m_next = ptr;");
  277. this.getNext = new Function("return this.m_next;");
  278. this.show = myDiskShow;
  279. //TSDrive //when do we invoke the TS?
  280. var strUsage = TAG_UNKNOWN;
  281. if(size && freeSpace) {
  282. var usedSpace = size - freeSpace;
  283. var perUsage = Math.round(usedSpace/(usedSpace + parseInt(freeSpace)) * 100);
  284. if(perUsage < 5)
  285. strUsage = TAG_USAGELOW;
  286. else if(perUsage >= 5 && perUsage < 55)
  287. strUsage = TAG_USAGELOW;
  288. else if(perUsage >= 55 && perUsage < 80)
  289. strUsage = TAG_USAGEMED;
  290. else if(perUsage >= 80 && perUsage < 95)
  291. strUsage = TAG_USAGEHIGH;
  292. else //perUsage >= 95)
  293. strUsage = TAG_USAGECRITICAL;
  294. strUsage = perUsage + "% " + "(" + strUsage + ")";
  295. }
  296. this.m_name = TAG_LOCALDISK + " (" + name + ")";
  297. this.m_usage = strUsage;
  298. this.m_help = "<A class=\"sys-link-normal\" href=\"sysDiskTS.htm\">" + TAG_MOREINFO + "</A>";
  299. }
  300. //EO myDisk
  301. //////////////////////
  302. //////////////////////
  303. //myDisks
  304. function myDisksShow() {
  305. displayTableSegment("partition", this.m_head);
  306. }
  307. function myDisks() {
  308. this.m_head = null;
  309. this.show = myDisksShow;
  310. var loc = wbemlocator;
  311. var svcs = loc.ConnectServer(remoteServer);
  312. svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate;
  313. strQuery = "Select * From Win32_LogicalDisk Where Drivetype = " + DrvTypeLocalDisk;
  314. var colLogicalDisks = new Enumerator(svcs.ExecQuery(strQuery));
  315. for(; !colLogicalDisks.atEnd(); colLogicalDisks.moveNext()) {
  316. var logicalDisk = colLogicalDisks.item();
  317. with (logicalDisk) {
  318. var oDisk = new myDisk(Name, Size, FreeSpace);
  319. oDisk.setNext(this.m_head); //add before
  320. this.m_head = oDisk;
  321. }
  322. }
  323. }
  324. //EO MyDisks
  325. //////////////////////
  326. ////////////////////////
  327. //myRAM
  328. function myRAMShow(tableElement) {
  329. if(tableElement)
  330. {
  331. tableElement.all["detected"].innerHTML = this.m_detected;
  332. tableElement.all["minreq"].innerHTML = this.m_minreq;
  333. tableElement.all["help"].innerHTML = this.m_help;
  334. }
  335. else
  336. displayTableSegment("ram", this.m_head);
  337. }
  338. function myRAM() {
  339. this.m_detected = null;
  340. this.m_minreq = null;
  341. this.m_help = null;
  342. this.m_next = null;
  343. this.setNext = new Function("ptr", "this.m_next = ptr;");
  344. this.getNext = new Function("return this.m_next;");
  345. this.show = myRAMShow;
  346. var loc = wbemlocator;
  347. var svcs = loc.ConnectServer(remoteServer);
  348. svcs.Security_.impersonationlevel = wbemImpersonationLevelImpersonate;
  349. var MinMemoryReq = TAG_RAMMINREQVALUE; //PENDING determine programatically
  350. var memCapacity = 0;
  351. var cls = svcs.get("Win32_PhysicalMemory");
  352. var coll = new Enumerator(cls.Instances_())
  353. if (!coll.atEnd())
  354. {
  355. for (;!coll.atEnd();coll.moveNext())
  356. {
  357. var p = coll.item();
  358. if(!isNaN(p.Capacity))
  359. memCapacity += parseInt(p.Capacity); //in bytes.
  360. }
  361. }
  362. else
  363. {
  364. var insts = new Enumerator(svcs.ExecQuery("Select * from Win32_ComputerSystem"));
  365. for(; !insts.atEnd(); insts.moveNext())
  366. {
  367. var inst = insts.item();
  368. memCapacity += parseInt(inst.TotalPhysicalMemory); //in bytes.
  369. }
  370. }
  371. this.m_detected = fig2Words(memCapacity); // memCapacity in bytes
  372. this.m_minreq = MinMemoryReq;
  373. this.m_help = MemHelpLink;
  374. this.m_head = this;
  375. if (pchealth)
  376. {
  377. var memRequired = 0;
  378. var CurrentSKU = pchealth.UserSettings.MachineSKU.SKU.toUpperCase();
  379. switch (CurrentSKU)
  380. {
  381. case "PERSONAL_32":
  382. memRequired = 64;
  383. break;
  384. case "PROFESSIONAL_32":
  385. memRequired = 64;
  386. break;
  387. case "SERVER_32":
  388. memRequired = 128;
  389. break;
  390. case "ADVANCEDSERVER_32":
  391. memRequired = 128;
  392. break;
  393. case "DATACENTER_32":
  394. memRequired = 512;
  395. break;
  396. case "PERSONAL_64":
  397. memRequired = 1024;
  398. break;
  399. case "PROFESSIONAL_64":
  400. memRequired = 1024;
  401. break;
  402. case "SERVER_64":
  403. memRequired = 1024;
  404. break;
  405. case "ADVANCEDSERVER_64":
  406. memRequired = 1024;
  407. break;
  408. case "DATACENTER_64":
  409. memRequired = 1024;
  410. break;
  411. case "BLADE_32":
  412. memRequired = 128;
  413. break;
  414. default:
  415. break;
  416. }
  417. if (memRequired != 0)
  418. {
  419. memRequired = memRequired * 1024 * 1024; // convert to bytes
  420. this.m_minreq = fig2Words(memRequired);
  421. }
  422. else
  423. {
  424. // For unknown SKU use the value for PRO and append an asterisk.
  425. memRequired = 64 * 1024 * 1024;
  426. this.m_minreq = fig2Words(memRequired);
  427. this.m_minreq += "*";
  428. }
  429. }
  430. }//EO myRAM
  431. ///////////////////
  432. //////////////////////
  433. //myDefectiveApp
  434. function myDefectiveAppShow(tableElement) {
  435. tableElement.all["appname"].innerHTML = this.m_appname;
  436. tableElement.all["drivername"].innerHTML = this.m_drivername;
  437. tableElement.all["manufacturer"].innerHTML = this.m_manufacturer;
  438. tableElement.all["help"].innerHTML = this.m_help;
  439. }
  440. function myDefectiveApp(appname, drivername, manufacturer, help) {
  441. strLink = "<A class=\"sys-link-normal\" href=\"%arg1%\">" + TAG_MOREINFO + "</A>";
  442. this.m_appname = (appname ? appname : TAG_UNKNOWN);
  443. this.m_drivername = (drivername ? drivername : TAG_UNKNOWN);
  444. this.m_manufacturer = (manufacturer ? manufacturer : TAG_UNKNOWN);
  445. this.m_help = (help ? strLink.replace(/%arg1%/, help) : TAG_UNKNOWN);
  446. this.m_next = null;
  447. this.setNext = new Function("ptr", "this.m_next = ptr;");
  448. this.getNext = new Function("return this.m_next;");
  449. this.show = myDefectiveAppShow;
  450. }
  451. //EO myDefectiveApp
  452. //////////////////////
  453. //////////////////////
  454. //myDefectiveApps
  455. function myDefectiveAppsShow() {
  456. displayTableSegment("defectiveapps", this.m_head);
  457. }
  458. function myDefectiveApps() {
  459. this.m_head = null;
  460. this.show = myDefectiveAppsShow;
  461. try
  462. {
  463. if(remoteServer)
  464. {
  465. var oDefectiveApp = new myDefectiveApp(MSG_LOCALONLY, "", "","");
  466. oDefectiveApp.setNext(this.m_head); //add before
  467. this.m_head = oDefectiveApp;
  468. return;
  469. }
  470. else
  471. var oBD = new ActiveXObject("Windows.BlockedDrivers");
  472. var items = new Enumerator(oBD.BlockedDrivers());
  473. for(;!items.atEnd(); items.moveNext())
  474. {
  475. var item = items.item();
  476. var oDefectiveApp = new myDefectiveApp(item.Description, item.Name, item.Manufacturer, item.HelpFile);
  477. oDefectiveApp.setNext(this.m_head); //add before
  478. this.m_head = oDefectiveApp;
  479. }
  480. }
  481. catch(e)
  482. {
  483. this.m_head = new MsinfoErrObject(e.description);
  484. }
  485. }
  486. //EO myDefectiveApps
  487. //////////////////////
  488. function DisplayLocStrings() {
  489. WaitMessage.innerHTML = MSG_WAIT;
  490. Refresh.innerHTML = TAG_REFRESH;
  491. with(System_Software.all) {
  492. Caption.innerHTML = TAG_SYSTEMSOFTWARE;
  493. Col1.innerHTML = TAG_SYSTEMSOFTWARE;
  494. Col2.innerHTML = TAG_DATECREATED;
  495. Col3.innerHTML = TAG_HELP;
  496. }
  497. with(Hardware.all) {
  498. Caption.innerHTML = TAG_HARDWARE;
  499. Col1.innerHTML = TAG_COMPONENT;
  500. Col2.innerHTML = TAG_STATUS;
  501. Col3.innerHTML = TAG_UPDATE;
  502. Col4.innerHTML = TAG_HELP;
  503. }
  504. with(Harddisks.all) {
  505. Caption.innerHTML = TAG_HARDDISK;
  506. Col1.innerHTML = TAG_DISKPARTITION;
  507. Col2.innerHTML = TAG_USAGE;
  508. Col3.innerHTML = TAG_HELP;
  509. }
  510. with(Mem.all) {
  511. Caption.innerHTML = TAG_RAM;
  512. Col1.innerHTML = TAG_RAMDETECTED;
  513. Col2.innerHTML = TAG_RAMMINREQ;
  514. Col3.innerHTML = TAG_HELP;
  515. }
  516. with(DefectiveApps.all) {
  517. Caption.innerHTML = TAG_DEFECTIVEAPPSTITLE;
  518. Col1.innerHTML = TAG_DEFECTIVEAPPNAME;
  519. Col2.innerHTML = TAG_DEFECTIVEAPPDRVRNAME;
  520. Col3.innerHTML = TAG_DEFECTIVEAPPMANUFACTURER;
  521. Col4.innerHTML = TAG_HELP;
  522. }
  523. }
  524. var INCR_UNIT = 100/6;//move progress bar in increments of INCR_UNIT
  525. function LoadChores(taskId) {
  526. try {
  527. switch(taskId)
  528. {
  529. case 0:
  530. SetHelpLinks(); //get windows folder path
  531. remoteServer = GetServerName(); //set remoteServer
  532. ShowServerName(TAG_HEALTH);
  533. break;
  534. case 1:
  535. DrawProgressBar(INCR_UNIT, TAG_SYSTEMSOFTWARE);
  536. break;
  537. case 2:
  538. var oOS = new myOS(); //System Software
  539. oOS.show();
  540. break;
  541. case 3:
  542. DrawProgressBar(INCR_UNIT * 2, TAG_SYSTEMSOFTWARE);
  543. case 4:
  544. var oBIOS = new myBIOS();
  545. oBIOS.show();
  546. break;
  547. case 5:
  548. DrawProgressBar(INCR_UNIT * 3, TAG_HARDWARE);
  549. break;
  550. case 6:
  551. GetDriverInfo();//PENDING deserves it's own taskid
  552. var oComponents = new myComponents(); //Components
  553. oComponents.show();
  554. break;
  555. case 7:
  556. DrawProgressBar(INCR_UNIT * 4, TAG_HARDDISK);
  557. break;
  558. case 8:
  559. var oDisks = new myDisks(); //Storage Space
  560. oDisks.show();
  561. break;
  562. case 8:
  563. DrawProgressBar(INCR_UNIT * 5, TAG_RAM);
  564. break;
  565. case 9:
  566. var oRAM = new myRAM(); //Memory
  567. oRAM.show();
  568. break;
  569. case 10:
  570. DrawProgressBar(INCR_UNIT * 6, TAG_DEFECTIVEAPPSTITLE);
  571. break;
  572. case 11:
  573. var oDefectiveApps = new myDefectiveApps(); //Defective Apps
  574. oDefectiveApps.show();
  575. break;
  576. default:
  577. taskId = -1;
  578. _header.style.display = "none";
  579. _data.style.display = "";
  580. _body.style.cursor= "default";
  581. }
  582. if(taskId >= 0)
  583. window.setTimeout("LoadChores(" + ++taskId + ")", TIMEOUT);
  584. }
  585. catch (e) {
  586. HandleErr(e);
  587. }
  588. }
  589. function dispatchFunction() {
  590. _body.style.cursor= "wait";
  591. DisplayLocStrings();
  592. SetProgressBarImage();
  593. window.setTimeout("LoadChores(0)", TIMEOUT);
  594. }