home *** CD-ROM | disk | FTP | other *** search
/ PC Answers 2003 September / PC Answers September 2003.iso / Software / trial / MonitorIT 5.2.06 / monitorit_fullsetup.exe / data1.cab / Rpm / ViewNetStatus.asp < prev    next >
Encoding:
Text File  |  2003-06-24  |  52.3 KB  |  1,429 lines

  1. <html>
  2.  
  3. <head>
  4.  
  5. <title>Network Status Display</title>
  6. <link rel="stylesheet" type="text/css" href="css/rpmstyle.css">
  7.  
  8. <style type="text/css"> 
  9. .GTabBox {  height : 400; width : 630; border: none; background-color : activeborder }
  10.  
  11. .VAMainBox { position:absolute; margin:0; padding:0; border: solid thin; background-color : activeborder }
  12. .VAMainBox { border-top-color : #E0E0E0; border-left-color : #E0E0E0; border-bottom-color : #555555; border-right-color : #555555 }
  13.  
  14. .EventLog { border-style : solid; margin:0; padding:0; border-width : thin; overflow : scroll;  background-color:white }
  15. .EventLog { border-top-color : graytext; border-left-color : graytext; border-bottom-color : white; border-right-color : white}
  16.  
  17. .STabSel { border-left:solid thin white; border-top:solid thin white; border-right:solid thin black }
  18. .STabSel { height : 28px; width : 110px; background-color : activeborder; color : windowtext}
  19. .STabSel { font-size : 13pt; font-weight:bold; text-align:center; vertical-align:middle }
  20.  
  21. .STabUnsel { height : 28px; width : 110px; background-color : graytext; color : captiontext}
  22. .STabUnsel { font-size : 10pt;  text-align:center; cursor:hand; vertical-align:middle}
  23. .STabUnsel { border-bottom:solid thin white; border-top:solid thin #e8e8e8;  border-left:solid thin #e8e8e8 }
  24.  
  25. .RptStatusTextBox {  background-color: e8e8e8; color: infotext; }
  26. .RptStatusTextBox { border-style : solid; border-width : thin; overflow : scroll}
  27. .RptStatusTextBox { border-top-color : graytext; border-left-color : graytext; border-bottom-color : white; border-right-color : white}
  28.  
  29. .devtext { font-size: 9pt; font-weight: 500; background-color: threedhighlight; color: windowtext; border: solid thin; }
  30. .devtext { border-top-color : graytext; border-left-color : graytext; border-bottom-color : white; border-right-color : white }
  31.  
  32. </style>
  33. </head>
  34.  
  35. <body class="bodyc" language="JavaScript" RPMHostIP="!BreakoutBot:MonitorIP!" RPMHostPort="!BreakoutBot:MonitorPort!" RPMUserName="!BreakoutBot:UserName!" RPMUserRights="!BreakoutBot:UserRights!" BOBDone="!BreakoutBot:Done!" onload="top.banner.savePageCoord(event,document.body,'ViewNetStatus'); SR_Init()" onunload="DiscoRpmCC_AR()" onresize="processSizeChange()" onclick="checkClick()" onkeydown="processBSP()">
  36.  
  37. <script LANGUAGE="JavaScript">
  38. <!--
  39. var    AR_CompIDArray = ""; // Computer Id Array
  40. var    Lb = "<BR>"; // Line break
  41. var    Tid = null;
  42. var    GTid = null;
  43. var    CTid = null;
  44. var   ignoreDBChangeEvent = false;
  45. var    RMode = ""; // Mode of Operation, New, Edit, Delete, Lookup
  46. var    CmpLupRecCount = 0; // Computer Lookup record count
  47. var    CmpRecLth = 7; // Computer Loopkup record length
  48. var   CurCmpStoreIdx = 0; // index into Computer Store for Selected Computer Name
  49. var     ReconnectEvent = false;
  50. var     Hp = 82;
  51. var     AR_CmpStoreArr = new Array();
  52. var     AR_GroupStoreArr = new Array();
  53. var     MostRecentHours = 6;
  54. var   DetailsArr = new Array();
  55. var    DetailsArrIx = 0;
  56.  
  57. var   AlertSelectIdx = 0; // Index of currently selected Alert 
  58. var     AlertStoreArr = new Array();
  59. var   AlertLupRecCount = 0; // Count of records returned from Alert Lookup operation
  60.  
  61. var IGNORE_NETSTAT =    -1
  62. var NORMAL_NETSTAT =    0
  63. var CAUTION_NETSTAT = 1
  64. var CRITICAL_NETSTAT    = 2
  65.  
  66. var COUNTER_WATCH = 1
  67. var EVENTLOG_WATCH = 2
  68. var WINSERVICE_WATCH    = 3
  69. var FILE_WATCH    = 4
  70. var SNMPTRAP_WATCH =    5
  71. var SYSLOG_WATCH = 6
  72. var SERVER_WATCH = 7
  73. var PROCESS_WATCH = 8;
  74.  
  75. var FILE_DELETED =  1;
  76. var FILE_STRING_MATCH =    2;
  77. var FILE_DATE_CHANGE = 4;
  78. var FILE_SIZE_CHANGE = 8;
  79. var FILE_SIZE_MAX = 16;
  80. var FILE_NOT_CHANGED = 32;
  81.  
  82. var NOT_RUNNING_NO_RESTART    =    1;
  83. var NOT_RUNNING_RESTARTED    =    2;
  84. var NOT_RUNNING_RESTART_FAILED =    4;
  85. var RUNNING_HALTED    =            8;
  86. var RUNNING_NOT_HALTED    =        16;
  87. var RUNNING_EXCEEDED_CPU    =    32;
  88. var RUNNING_EXCEEDED_MEMORY    =    64;
  89. var RUNNING_EXCEEDED_CPU_HALTED = 128;
  90. var RUNNING_EXCEEDED_MEMORY_HALTED = 256;
  91.  
  92. // Capture and ignore script errors
  93.     window.onerror = wwScrErr;
  94. function wwScrErr() {
  95.     return true;
  96. }
  97.  
  98. /* Process OnLoad */
  99. function SR_Init() {
  100.     top.MainLoaded = true; // Flag that Main is now loaded
  101.     initButtonState(); // set initial button state for all buttons
  102.  
  103.     /* get Audio Alert checkbox state */
  104.     cc = top.banner.RpmCC_Ban.RegGetKey(top.banner.ServerID+"NetStatusAudioAlertState"); // get state
  105.     if ( cc == "unchecked" ) { // If not checked 
  106.         AlertAudioEnabled.checked = "";
  107.     }
  108.     else { 
  109.         AlertAudioEnabled.checked == "CHECKED";
  110.     }
  111.     
  112.     Hp = parseInt(document.body.RPMHostPort,10);
  113.     RpmCC_AR.Connect(document.body.RPMHostIP,Hp, "");
  114.     processSizeChange();
  115.     
  116.     // Set NetStat Interval
  117.     if ( lasthours.length == 0 ) {
  118.         for ( var i=1; i<25; i++ ) {
  119.             stxt = ""+i;
  120.             el = addElementToSelect(lasthours,stxt);
  121.             if ( i == MostRecentHours ) {
  122.                el.selected = "selected";
  123.             }
  124.         }
  125.     }
  126. }
  127.  
  128. function processRepReconnect() {
  129.     Tid = null;
  130.     if ( RpmCC_AR.IsConnected() ) {
  131.         Tid = setTimeout("processRepConnectionCheck()",30000); // Delay 30 secs then check connection
  132.         return;
  133.     }
  134.     RpmCC_AR.Connect(document.body.RPMHostIP,Hp, ""); 
  135. }
  136. function processRepConnectConfirmed() {
  137.     // Restore Filter and Computer Store    
  138.     if ( ReconnectEvent == false ) {
  139.         ReconnectEvent = true;
  140.         InitComputerLookup();
  141.     }
  142.     else {
  143.         // Reset status for all
  144.         for ( var i=0, j=0; i<CmpLupRecCount; i++, j+=CmpRecLth ) {
  145.             var cstat = "~"+AR_CmpStoreArr[j+3]+"~0";
  146.             processComputerStatus(cstat);
  147.         }    
  148.           RpmCC_AR.NetStatFunction("GetNetStatAll");
  149.     }
  150.     top.Rstatus.Pstat("Connected");
  151.     if ( Tid != null ) {
  152.         clearTimeout(Tid); // stop timeout routine
  153.     }
  154.     Tid = setTimeout("processRepConnectionCheck()",30000); // Delay 30 secs then check connection
  155. }
  156. function processRepConnectionCheck() {
  157.     Tid = null;
  158.     RpmCC_AR.SendKeepAlive("Check");
  159.     Tid = setTimeout("processRepConnectionCheck()",30000); // Delay 30 secs then check connection
  160. }
  161.  
  162. /* On Unload tell the Comm control to Disconnect from the Server */
  163. function DiscoRpmCC_AR() {
  164.     RpmCC_AR.Disconnect();
  165.     top.banner.processStopCommX();
  166.     if ( Tid != null ) {
  167.         clearTimeout(Tid); // stop timeout routine
  168.     }
  169.     if ( GTid != null ) {
  170.         clearTimeout(GTid); // stop timeout routine
  171.     }
  172.     if ( CTid != null ) {
  173.         clearTimeout(CTid); // stop timeout routine
  174.     }
  175.     // Save Audio Alert checkbox state
  176.     var cc = ( AlertAudioEnabled.checked == false ) ? "unchecked" : "checked";
  177.     top.banner.RpmCC_Ban.RegSetKey(top.banner.ServerID+"NetStatusAudioAlertState",cc); // save 
  178.     SaveCurrentDisplayState();
  179. }
  180.  
  181. function SaveCurrentDisplayState() {
  182.     // Save current display state
  183.     var cc = (CurSelTab == "GroupTab") ? "0," : "1,";
  184.     for ( var i=0, GIndx=0; i<GrpLupRecCount; i++, GIndx+=GroupRecLength ) {
  185.         if ( AR_GroupStoreArr[GIndx+4] == 1 ) { // if Expanded
  186.             cc += AR_GroupStoreArr[GIndx+1] + ",";
  187.         }
  188.     }
  189.     top.banner.RpmCC_Ban.RegSetKey(top.banner.ServerID+"NetStatusDisplayState",cc);     
  190. }
  191.  
  192. function processDBChanged() {
  193.     CTid = null;
  194.     top.banner.processStartComm(); 
  195.     top.Rstatus.StatDB.style.display = "none";
  196.     InitComputerLookup();
  197.     Tid = setTimeout("finishDBChange()",1000); // Delay 
  198. }
  199. /* Get MRU Log Messages for ServerWatch */
  200. function finishDBChange() {
  201.     Tid = null; // reset
  202.     top.banner.processStopCommX();
  203. }
  204.  
  205. function processMostRecentHours() {
  206.     MostRecentHours = lasthours.selectedIndex+1;
  207.     RpmCC_AR.NetStatFunction("SetNetStatInterval~"+MostRecentHours);
  208. }
  209.  
  210. /* Play specified WAV file as an AudioAlert */
  211. function processAlertAudioOut() {
  212.     if ( AlertAudioEnabled.checked == false )
  213.         return; // exit if not enabled or Busy
  214.     RpmCC_AR.DoMessageBeep(0x40); // System Asterisk
  215. }
  216.  
  217. /* Get Report Name from Store based on Report ID */
  218. function InitComputerLookup() {
  219.     CmpLupRecCount = 0; // initialize record counter
  220.     AR_CmpStoreArr.length = 0;
  221.     
  222.     if ( RpmCC_AR.ComputerLookup("*","*") ) {
  223.         top.Rstatus.Pstat("Unable to start the COMPUTER LOOKUP request",true);
  224.         processResetButton();
  225.     }
  226.     else { // waiting for OperationCompleteEvent
  227.           SetCursor("wait");
  228.         top.Rstatus.Pstat("One moment while COMPUTER LOOKUP request completes");
  229.     }
  230. }
  231.  
  232. /* Process Computer LOOKUP RECORD Event */
  233. function processComputerLookupRecord(Cid,Gid,Name,Desc,OSVer,Addr) {
  234.     var wrkarr = new Array();
  235.      CmpRecLth = 9; // Storage record length
  236.     var i = CmpLupRecCount * CmpRecLth;
  237.     AR_CmpStoreArr[i] = Name;
  238.     AR_CmpStoreArr[i+1] = Gid;
  239.     AR_CmpStoreArr[i+2] = Desc;
  240.     AR_CmpStoreArr[i+3] = Cid;
  241.     wrkarr = OSVer.split("[]");; // map OS version to Generic OS types
  242.     AR_CmpStoreArr[i+4] = wrkarr[0];
  243.     AR_CmpStoreArr[i+5] = Addr;
  244.     AR_CmpStoreArr[i+6] = 0; // status: 0=normal; 1=caution; 2=critical
  245.     AR_CmpStoreArr[i+7] = 0; // expanded 0=no; 1=yes    
  246.     AR_CmpStoreArr[i+8] = -1; // Display Index    
  247.     ++CmpLupRecCount;
  248. }
  249.  
  250. /* Process Computer Lookup Op Complete Event */
  251. function processComputerOpComplete() {
  252.     SetCursor("auto");
  253.     top.Rstatus.Pstat("Request Completed");
  254.     if (CmpLupRecCount == 0) { // check if any records found
  255.         top.Rstatus.Pstat("No record matches found for COMPUTER LOOKUP request",true);
  256.         processResetButton();
  257.     }
  258.  
  259.     GrpLupRecCount = 0; // initialize record counter
  260.     AR_GroupStoreArr.length = 0;
  261.     if ( RpmCC_AR.GroupLookup("","","") ) {
  262.         top.Rstatus.Pstat("Unable to start the GROUP LOOKUP request",true);
  263.         processResetButton();
  264.     }
  265.     else { // waiting for OperationCompleteEvent
  266.         top.Rstatus.Pstat("One moment while GROUP LOOKUP request completes");
  267.     }
  268. }
  269.  
  270. var   GrpLupRecCount = 0; // Count of records returned from Group Lookup operation
  271. var    GroupRecLength = 6; // Length of a Group Lookup record in the Store
  272. /* Process Group LOOKUP RECORD Event */
  273. function processGroupLookupRecord(Gid,GrpName,GrpDesc) {
  274.     // place data from Lookup Record into specified Store
  275.     // Add to Storage
  276.     var i = GrpLupRecCount * GroupRecLength;
  277.     AR_GroupStoreArr[i++] = GrpName;
  278.     AR_GroupStoreArr[i++] = Gid;
  279.     AR_GroupStoreArr[i++] = GrpDesc;
  280.     AR_GroupStoreArr[i++] = 0; // status: 0=normal; 1=caution; 2=critical
  281.     AR_GroupStoreArr[i++] = 0; // expanded 0=no; 1=yes    
  282.     AR_GroupStoreArr[i++] = 0; // Display Index
  283.     ++GrpLupRecCount;
  284. }
  285. /* Process DB Error in Group Lookup Operation */
  286. function processGroupOpError() {
  287.     top.Rstatus.Pstat("An error occurred during GROUP LOOKUP operation",true);
  288.     goResetWait();
  289. }
  290. function processGroupOpComplete() {
  291.     if ( GrpLupRecCount == 0 ) {
  292.         top.Rstatus.Pstat("No GROUP record matches found for LOOKUP request",true);    
  293.         processGeneralClick(GroupTab);
  294.     }
  295.     else {
  296.         var cc = top.banner.RpmCC_Ban.RegGetKey(top.banner.ServerID+"NetStatusDisplayState");     
  297.         var wrkarr = new Array();
  298.         var Gid = "";
  299.         wrkarr = cc.split(",");
  300.         for ( var j=1; j<wrkarr.length; j++ ) {
  301.             Gid = wrkarr[j]; // ID of Expanded Group    
  302.             for ( var i=0, GIndx=0; i<GrpLupRecCount; i++, GIndx+=GroupRecLength ) {
  303.                 if ( AR_GroupStoreArr[GIndx+1] == Gid ) { // if Match
  304.                     AR_GroupStoreArr[GIndx+4] = 1; // Set Expanded
  305.                     for ( var m=0, n=0; m<CmpLupRecCount; m++, n+=CmpRecLth ) {
  306.                         if ( AR_CmpStoreArr[n+1] == Gid ) {
  307.                            AR_CmpStoreArr[n+7] = 1; // Expanded State
  308.                         }
  309.                     }
  310.                 }
  311.             }
  312.         }        
  313.           processGeneralClick(GroupTab);
  314.         if ( wrkarr[0] == "1" ) {
  315.            processGeneralClick(DeviceTab);
  316.        }
  317.          RpmCC_AR.NetStatFunction("GetNetStatInterval");
  318.         GTid = setTimeout("processGetNetStatAll()",200); // Delay  
  319.  
  320.         AlertLupRecCount = 0; // clear Lookup record counter
  321.         AlertStoreArr.length = 0;
  322.         AL_AlertSel.innerHTML = "";
  323.         if ( RpmCC_AR.AlertGroupLookup("*") ) {
  324.             top.Rstatus.Pstat("Unable to start the Alert LOOKUP request",true);
  325.             processResetButton();
  326.         }
  327.         else {
  328.             top.Rstatus.Pstat("One moment while Alert LOOKUP request completes");
  329.         }
  330.     }
  331. }
  332. /* Alert Lookup Op Complete */
  333. function processAlertOpComplete() {
  334.     if (AlertLupRecCount == 0) { // check if any records found
  335.          top.Rstatus.Pstat("No record matches found for Alert LOOKUP request",true);    
  336.      }
  337.      else {
  338.         // Get OID definitions
  339.         if ( RpmCC_AR.EnumOidDefs() ) { // if unable to initiate request        
  340.             top.Rstatus.Pstat("Unable to start the OID LOOKUP request",true);
  341.             processResetButton();    
  342.         }
  343.         else { // waiting for OperationCompleteEvent
  344.             top.Rstatus.Pstat("One moment while OID LOOKUP request completes");
  345.         }
  346.     }
  347. }
  348. var gOIDstrg = "";
  349. var gOIDarray = new Array();
  350. function processOIDLookupRecord(OIDstrg) {
  351.     gOIDstrg = OIDstrg; // save
  352.     gOIDarray = OIDstrg.split("~"); // parse
  353.  
  354.      top.Rstatus.Pstat("Done",true);    
  355. }
  356.  
  357. function processGetNetStatAll() {
  358.     GTid = null;
  359.       RpmCC_AR.NetStatFunction("GetNetStatAll");
  360. }
  361.  
  362. /* Process Click on Enable Report Status Tab or Schedule Report Tab*/
  363. function enableDeviceStatus() {
  364.     processGeneralClick(DeviceTab);
  365. }
  366.  
  367. function enableGroupStatus() {
  368.     processGeneralClick(GroupTab);
  369. }
  370.  
  371.  
  372. // Process to Toggle the Hide and Show of the Banner & Menu Frames
  373. var hideToggle = 0;
  374. var TitleDivSize = 117;
  375. function processBannerMenu() {
  376.     if ( hideToggle == 0 ) {
  377.         top.BannerMenuHide(); hideToggle = 1;
  378.         NetStatusTitleDiv.style.display = "none"; 
  379.         TitleDivSize = 72; 
  380.     }
  381.     else {
  382.         top.BannerMenuShow(); hideToggle = 0;   
  383.         NetStatusTitleDiv.style.display = "";  
  384.         TitleDivSize = 117;
  385.     }   
  386. }
  387.  
  388. /* Set initial button state for all buttons */
  389. function initButtonState() {
  390. }
  391. function sButtonState(bObj,bst) {
  392.     bObj.disabled = (bst == "0") ? "" : "disabled";
  393.     //bObj.className = (bst == "0") ? "SBoxButton" : "SBoxButtonD";
  394. }
  395. function ButtonState(bObj,bst) {
  396.     bObj.disabled = (bst == "0") ? "" : "disabled";
  397.     //bObj.className = (bst == "0") ? "BoxButton" : "BoxButtonD";
  398. }
  399.  
  400. var SCbsy = false;
  401. var borderSz = 20; // Thin Bord is 2pixels
  402. function processSizeChange() {
  403.     if ( SCbsy ) 
  404.         return;
  405.     SCbsy = true;
  406.     // Display Height and Width
  407.     bCh = document.body.clientHeight;
  408.     bCw = document.body.clientWidth;
  409.     
  410.     // Minimums
  411.     bCh = (bCh < 240) ? 240 : bCh;
  412.     bCw = (bCw < 330) ? 330 : bCw;
  413.    document.body.scroll = (bCw <= 330 || bCh <= 240) ? "yes" : "no";
  414.    
  415.       //PopUpContext Menu
  416.    PopUpContextSize(bCw);
  417.   
  418.    // Set Height/Widths for Chart and Button areas
  419.     GTabBx.style.height = bCh-2;
  420.     GTabBx.style.width = bCw-borderSz;
  421.     GTab.style.top = bCh-borderSz-90;
  422.     DeviceUI.style.height = GroupUI.style.height = GTabBx.style.posHeight-TitleDivSize;
  423.     DeviceUI.style.width = GroupUI.style.width = GTab.style.width = GTabBx.style.posWidth-4;
  424.     Devicewin.style.height = Groupwin.style.height = GroupUI.style.posHeight-50;
  425.     GTabBx.style.display = "";
  426.     
  427.     GroupTab.className="STabUnsel";
  428.     DeviceTab.className="STabUnsel";
  429.     document.all[CurSelTab].className="STabSel";
  430.     
  431.    // Set Height/Widths for Log areas
  432.     DeviceWinMain.style.left = "4px";
  433.     DeviceWinMain.style.top = "10px"; 
  434.     DeviceWinMain.style.height = bCh-10; 
  435.     DeviceWinMain.style.width = bCw-8;
  436.     DeviceWin.style.height = bCh-10-65;    
  437.     
  438.     SCbsy = false;
  439. }
  440.  
  441. /* Process Click on selected Tab */
  442. var CurSelTab = "GroupTab"; // current selected tab
  443. var RTid = null;
  444. function processGeneralClick(th) {
  445.     if ( th.style.cursor =="auto" ) 
  446.         return; // ignore disabled
  447.  
  448.     top.Rstatus.Pstat("");
  449.     GroupUI.style.display="none";
  450.     DeviceUI.style.display="none";
  451.     GroupTab.className="STabUnsel";
  452.     DeviceTab.className="STabUnsel";
  453.     th.className="STabSel";
  454.     CurSelTab = th.id;
  455.     switch ( th.id ) {
  456.    case "GroupTab" : 
  457.       GroupUI.style.display=""; // Enable this Tab's view
  458.        outputGroupStatusDisplay(); 
  459.      break;
  460.    case "DeviceTab" : 
  461.          DeviceUI.style.display="";
  462.        outputDeviceStatusDisplay(); 
  463.     break;
  464.     }
  465. }
  466.  
  467. function outputGroupStatusDisplay() {
  468.     /* Format Details for output */
  469.     var GDispArr = new Array();
  470.     GDispArr.length = 0;
  471.     for ( var i=0, j=0; i<GrpLupRecCount; i++, j+=GroupRecLength ) {
  472.           GDispArr[i] = AR_GroupStoreArr[j].toLowerCase()+"    [+]"+j;
  473.     }
  474.     GDispArr.sort();
  475.  
  476.     var percent=10, rowcount=10, ExpImg="plus", StatImg="Normal";
  477.     if ( GrpLupRecCount < 10 ) { percent = 33; rowcount = 3; }
  478.     else if ( GrpLupRecCount < 20 ) { percent = 25; rowcount = 4; }
  479.     else if ( GrpLupRecCount < 30 ) { percent = 20; rowcount = 5; }
  480.     else if ( GrpLupRecCount < 40 ) { percent = 14; rowcount = 7; }
  481.     
  482.     var warr = new Array();
  483.     Groupwin.innerHTML = ""; // clear details
  484.       sob = "<center><table border='0' cellpadding='1' cellSpacing='2' width='100%'>";
  485.       for ( var j=0; j<GrpLupRecCount;  ) {
  486.         sob += "<tr>";
  487.         for ( var i=0; i<rowcount && j<GrpLupRecCount; i++, j++ ) {
  488.             warr = GDispArr[j].split("[+]");
  489.             var GIndx = parseInt(warr[1],10);
  490.             ExpImg = ( AR_GroupStoreArr[GIndx+4] ) ? "minus" : "plus";
  491.             if ( AR_GroupStoreArr[GIndx+3] == 0 ) { 
  492.                 StatImg = "Normal";
  493.             }
  494.             else if ( AR_GroupStoreArr[GIndx+3] == 1 ) { 
  495.                 StatImg = "Caution";
  496.             }
  497.             else { 
  498.                 StatImg = "Critical";
  499.             }
  500.             AR_GroupStoreArr[GIndx+5] = j; // Display Index
  501.             
  502.             sob += "<td width='"+percent+"%' align='center' class='statuslabel'>";
  503.             sob += "<img id='GroupStatus_"+j+"' src='images/"+StatImg+".gif' align='absmiddle' height='12' width='12'>";
  504.              sob += "<img id='Expand_"+j+"' src='images/"+ ExpImg+".gif' width='11' height='11' style='cursor:hand'";
  505.              sob += " onclick='processGroupExpand(this.id)' ";
  506.              sob += "title='Click to show or hide the Group`s associated servers/devices in the `Devices` tab view'><br>";
  507.             sob += "<span title='" + AR_GroupStoreArr[GIndx+2] +"'>"+ AR_GroupStoreArr[GIndx]+"</span></td>";
  508.         }
  509.         for ( ; i<rowcount; i++ ) {
  510.              sob += "<td width='"+percent+"%' align='center' class='statuslabel'> </td>";
  511.         }
  512.         sob += "</tr>";    
  513.     }
  514.     sob += "</table></center>";
  515.     Groupwin.insertAdjacentHTML("beforeEnd",sob);
  516. }
  517. function processGroupExpand(isx) {
  518.     if ( isx.charAt(0) != "E" ) 
  519.                 return;
  520.     var ix = isx.substring(7,isx.length); // Strip off index
  521.     var GIndx = ix * GroupRecLength;
  522.     AR_GroupStoreArr[GIndx+4] ^= 1; // toggle expand state
  523.     var Gid = AR_GroupStoreArr[GIndx+1];
  524.     var State = AR_GroupStoreArr[GIndx+4]; // Expand State
  525.     ExpImg = ( AR_GroupStoreArr[GIndx+4] ) ? "minus" : "plus";
  526.     document.all[isx].src="images/"+ ExpImg+".gif";
  527.     for ( var i=0, j=0; i<CmpLupRecCount; i++, j+=CmpRecLth ) {
  528.         if ( AR_CmpStoreArr[j+1] == Gid ) {
  529.            AR_CmpStoreArr[j+7] = State;
  530.         }
  531.     }
  532. /*
  533.     for ( var i=0, j=0; i<CmpLupRecCount; i++, j+=CmpRecLth ) {
  534.         if ( AR_CmpStoreArr[j+7] ) { 
  535.         // if at least one computer displayed due to 'Expand'
  536.             enableDeviceStatus();
  537.             break;
  538.         }
  539.     }
  540.     if ( State ) {
  541.         enableDeviceStatus();
  542.     }
  543. */
  544. }
  545.  
  546. var CDispArr = new Array();
  547. function outputDeviceStatusDisplay() {
  548.     // Find how many to display
  549.     CDispArr.length = 0;
  550.     for ( var i=0, j=0, k=0; i<CmpLupRecCount; i++, j+=CmpRecLth ) {
  551.         AR_CmpStoreArr[j+8] = -1; // Reset Display Index
  552.         if ( AR_CmpStoreArr[j+7] == 1 ) {
  553.            CDispArr[k++] = AR_CmpStoreArr[j].toLowerCase()+"    [+]"+j;
  554.         }   
  555.     }
  556.     CDispArr.sort();
  557.     
  558.     /* Format Details for output */
  559.     var percent=10, rowcount=10, StatImg="Normal";
  560.     if ( CDispArr.length < 10 ) { percent = 33; rowcount = 3; }
  561.     else if ( CDispArr.length < 20 ) { percent = 25; rowcount = 4; }
  562.     else if ( CDispArr.length < 30 ) { percent = 20; rowcount = 5; }
  563.     else if ( CDispArr.length < 40 ) { percent = 14; rowcount = 7; }
  564.  
  565.     var warr = new Array();
  566.     Devicewin.innerHTML = ""; // clear details
  567.     
  568.       sob = "<center><table border='0' cellpadding='1' cellSpacing='2' width='100%'>";
  569.       for ( var j=0; j<CDispArr.length;  ) {
  570.         sob += "<tr>";
  571.         for ( var i=0; i<rowcount && j<CDispArr.length; i++, j++ ) {
  572.             warr = CDispArr[j].split("[+]");
  573.             var CIndx = parseInt(warr[1],10);
  574.             if ( AR_CmpStoreArr[CIndx+6] == 0 ) { 
  575.                 StatImg = "Normal";
  576.             }
  577.             else if ( AR_CmpStoreArr[CIndx+6] == 1 ) { 
  578.                 StatImg = "Caution";
  579.             }
  580.             else { 
  581.                 StatImg = "Critical";
  582.             }
  583.             AR_CmpStoreArr[CIndx+8] = j; // Display Index
  584.             
  585.             sob += "<td width='"+percent+"%' align='center' class='statuslabel'";
  586.             sob += " title='Click to display the outstanding alerts for this device' ";
  587.              sob += " style='cursor:hand' onclick='processDeviceExpand(this)' cindx='"+ CIndx + "'>";
  588.             sob += "<img id='DeviceStatus_"+j+"' src='images/"+StatImg+".gif' align='absmiddle' height='12' width='12'><br>";
  589.             sob += " <span title='IPAddr= "+ AR_CmpStoreArr[CIndx+5] +"; Desc= " + AR_CmpStoreArr[CIndx+2] +"; Group= "+GetGrpNameFromID(AR_CmpStoreArr[CIndx+1])+"'>"+ AR_CmpStoreArr[CIndx]+"</span></td>";            
  590.         }
  591.         for ( ; i<rowcount; i++ ) {
  592.              sob += "<td width='"+percent+"%' align='center' class='statuslabel'> </td>";
  593.         }
  594.         sob += "</tr>";    
  595.     }
  596.     sob += "</table></center>";
  597.     Devicewin.insertAdjacentHTML("beforeEnd",sob);
  598.     SaveCurrentDisplayState();
  599. }
  600.  
  601. function processDeviceExpand(CObj) {
  602.     var CIndx = parseInt(CObj.cindx,10);
  603.     if ( AR_CmpStoreArr[CIndx+6] == 0 ){
  604.         alert("No alerts currently outstanding when state is 'Normal'");
  605.         return;
  606.     }    
  607.     if ( document.body.RPMUserRights == "0" ) {
  608.        DetSelectAllButton.disabled = "disabled";
  609.        DetUnselectAllButton.disabled = "disabled";
  610.        AckBut.disabled = "disabled";
  611.     }
  612.     else {
  613.        DetSelectAllButton.disabled = "";
  614.        DetUnselectAllButton.disabled = "";
  615.        AckBut.disabled = "";
  616.     }
  617.     top.banner.processStartComm(); 
  618.     SetCursor("wait");
  619.  
  620.     DeviceWinMain.style.display = "";
  621.       RpmCC_AR.NetStatFunction("GetNetStatDetails~"+AR_CmpStoreArr[CIndx+3]);
  622.       lasthours.style.visibility = "hidden";
  623.       processDeviceWindow(CIndx);
  624. }
  625. function processDeviceDetailCloseButton() {
  626.     DeviceWinMain.style.display = "none";
  627.       lasthours.style.visibility = "visible";
  628. }
  629. function processDeviceWindow(CIx) {
  630.     /* Format Output to Log Window */
  631.     var osix = AR_CmpStoreArr[CIx+4].indexOf("Microsoft");
  632.     var OS = ( osix >= 0 ) ? AR_CmpStoreArr[CIx+4].substring(osix+10) : AR_CmpStoreArr[CIx+4];
  633.     var Descr = ( AR_CmpStoreArr[CIx+2] == "" ) ? "       " : AR_CmpStoreArr[CIx+2];
  634.     ELBgFlg = 0;
  635.     DIdx = 0;
  636.     DObjArr.length = 0;
  637.     DeviceWin.innerHTML = "";
  638.     FOps = "<table id='devicehdr1' border='0' cellpadding='2' cellSpacing='0' width='100%'>";
  639.     FOps += "<tr height='25'><td align='left' style='background-color:activeborder' class='optextb'>";
  640.     FOps += "Server/Device: <span class='devtext'> " +AR_CmpStoreArr[CIx]+" </span>    ";
  641.     FOps += "IP Addr: <span class='devtext'> " +AR_CmpStoreArr[CIx+5]+" </span>    ";
  642.     FOps += "Desc: <span class='devtext'> "+Descr+" </span></td></tr>";
  643.     FOps += "<tr height='25'><td align='left' style='background-color:activeborder' class='optextb'>";
  644.     FOps += "OS Ver: <span class='devtext'> " +OS+" </span>    ";
  645.     FOps += "Group: <span class='devtext'> "+GetGrpNameFromID(AR_CmpStoreArr[CIx+1])+" </span>";
  646.     FOps += "</td></tr></table>";
  647.     FOps += "<table id='devicehdr2' border='0' cellpadding='0' cellSpacing='1' width='100%'><tr>";
  648.     FOps += "<td width='26' colspan='1' align='center' style='background-color:activeborder' class='optextb'>";
  649.     FOps += "Ack" + "</td>";
  650.     FOps += "<td width='26' colspan='1' align='center' style='background-color:activeborder' class='optextb'>";
  651.     FOps += "Sev" + "</td>";
  652.     FOps += "<td width='200' colspan='1' align='center' style='background-color:activeborder' class='optextb'>";
  653.     FOps += "Alert Type" + "</td>";
  654.     FOps += "<td width='110' colspan='1' align='center' style='background-color:activeborder' class='optextb'>";
  655.     FOps += "Date/Time Stamp" + "</td>";
  656.     FOps += "<td width='120' colspan='1' align='center' style='background-color:activeborder' class='optextb'>";
  657.     FOps += "Action Taken" + "</td>";
  658.     FOps += "<td width='*' colspan='1' align='center' style='background-color:activeborder' class='optextb'>";
  659.     FOps += "Status" + "</td>"
  660.     FOps += "</tr></table><span id='DeviceText'></span>";
  661.     DeviceWin.insertAdjacentHTML("afterBegin",FOps);
  662. }
  663. var ELBgFlg = 0;
  664. var DIdx = 0;
  665. var DObjArr = new Array();
  666. function processDeviceDetailDisplay(csArg) {
  667.     var warr = new Array();
  668.     var darr = new Array();
  669.     if ((ELBgFlg ^= 1) == 0) {
  670.         FOps = "<div style='background-color:white'>";
  671.     }
  672.     else {
  673.         FOps = "<div style='background-color:e8e8e8'>";
  674.     }
  675.     FOps += "<table border='0' cellpadding='0' cellSpacing='1' width='100%'><tr>";    
  676.     
  677.     warr = csArg.split("~");
  678.     var dParms = warr[2]+"~"+warr[4]; // AGID~LogID
  679.     var dCompID = warr[1]; // CompID
  680.     var EGid = warr[2]; // Alert Group ID
  681.     var DNotified = parseInt(warr[warr.length-1],10);
  682.  
  683.     var DAlertType = "", DDTStamp = "", DStatus = "", DAction = "", DStatusTip = "", DAlertTip = "";
  684.     
  685.     if ( warr[3] == "0" ) { StatImg = "Normal";    }
  686.     else if ( warr[3] == "1" ) {     StatImg = "Caution";    }
  687.     else { StatImg = "Critical"; }    
  688.     
  689.     switch ( parseInt(warr[5]) )
  690.     {
  691.         case COUNTER_WATCH:
  692.         {
  693.             DDTStamp = warr[6];
  694.             // Status string= Source, Category, & Comp Message
  695.             DStatus = "Value= "+warr[7]+"; "+ ((warr[9] == "1")?"Over ":"Under ") + "Threshold= "+warr[8]+"; Minimum Duration= "+warr[10];
  696.             DAlertType = "CounterWatch- "+ warr[12] + " : " + warr[11] ;
  697.         }
  698.         break;
  699.         
  700.         case EVENTLOG_WATCH:
  701.         {
  702.             DDTStamp = warr[10];
  703.             // make sure complete message has no single quote characters
  704.             darr = warr[17].split("'"); 
  705.             warr[17] = darr.join("`");
  706.             
  707.         darr = warr[17].split("\x0d\x0a\x0d\x0a");
  708.         warr[17] = darr.join("<br>");
  709.         darr = warr[17].split("\x0d\x0a");
  710.         warr[17] = darr.join("<br>");
  711.     
  712.             // Status string= Source, Category, & Comp Message
  713.             DStatus = "ID= "+warr[16]+"; Src= "+warr[14]+"; Catg= "+warr[15]+"; Desc= "+warr[17]; 
  714.             var EvLTyp = "";
  715.             if ( warr[13] == "1" ) { EvLTyp = "Error"; }
  716.             else if ( warr[13] == "2" ) { EvLTyp = "Warning"; }
  717.             else if ( warr[13] == "4" ) { EvLTyp = "Information"; }
  718.             else if ( warr[13] == "8" ) { EvLTyp = "Security"; }
  719.             DAlertType = "EventLogWatch- "+warr[12]+" / "+EvLTyp; // Event Log Name & Type
  720.         }
  721.         break;
  722.         
  723.         case WINSERVICE_WATCH:
  724.         {
  725.             DDTStamp = warr[10];
  726.             if ( warr[8] == "0" ) {
  727.                 DStatus = "Notified Only";
  728.             }
  729.             else if ( warr[8] == "1" ) {
  730.                 DStatus = "Service Restarted";
  731.             }
  732.             else {
  733.                 DStatus = warr[9]; // info
  734.             }
  735.             DAlertType = "WinServiceWatch- "+ warr[14] + " ("+ warr[15] +")";
  736.         }
  737.         break;
  738.         
  739.         case FILE_WATCH:
  740.         {
  741.             DDTStamp = warr[15];
  742.             // Status string= Source, Category, & Comp Message
  743.             DStatus = GetFileCheckStatus(warr[13])+" FileSize= "+warr[11]+"KB; SearchString= "+warr[12]+"; FileD/T= "+warr[14];
  744.             DAlertType = "FileWatch- "+ warr[10] ;
  745.         }
  746.         break;
  747.  
  748.         case SNMPTRAP_WATCH:
  749.         {
  750.             DDTStamp = warr[11];
  751.             var VarBind = " ";
  752.            var VBCount = parseInt( warr[13], 10 );
  753.            for ( var i=0; i <VBCount; i++ ) {
  754.                VarBind += warr[17+i+i];
  755.                VarBind += ", "+warr[18+i+i]+"; ";               
  756.             }
  757.             DStatus = "OID= "+warr[7]+"; UpTime= "+warr[9]+"; VariableBindings: "+VarBind; // Status string
  758.             DAlertType = "SNMPTrapWatch- "+getOIDName(warr[7]); // Alert Name
  759.         }
  760.         break;
  761.  
  762.         case SYSLOG_WATCH:
  763.         {
  764.             DDTStamp = warr[15];
  765.             // make sure complete message has no single quote characters
  766.             darr = warr[14].split("'"); 
  767.             warr[14] = darr.join("`");
  768.             // Status string= Facility, Severity, & Comp Message
  769.             DStatus = "Facility= "+GetFacility(warr[10])+"; Severity= "+GetSeverity(warr[11])+"; Message= "+warr[14];
  770.             DAlertType = "SYSLOGWatch- "+ warr[13] ;
  771.         }
  772.         break;
  773.  
  774.         case SERVER_WATCH:
  775.         {
  776.             DDTStamp = warr[11];
  777.             // make sure complete message has no single quote characters
  778.             darr = warr[12].split("'"); 
  779.             warr[12] = darr.join("`");
  780.             DStatus = warr[12]; // Status string
  781.             DAlertType = "ServerWatch- "+ ((warr[10] == "SQLCONNECT") ? "SQL" : warr[10]); // Service Name
  782.             DNotified = parseInt(warr[14],10);
  783.         }
  784.         break;
  785.         
  786.         case PROCESS_WATCH:
  787.         {
  788.             DDTStamp = warr[11];
  789.             // Status string= Source, Category, & Comp Message
  790.             var pPID = "", pDuration = "";
  791.             if ( warr[23] != "" ) {
  792.                var prarr = new Array();
  793.                prarr = warr[23].split("[]");
  794.                pPID = prarr[0];
  795.                pDuration = prarr[1];
  796.             }
  797.             DStatus = GetProcessCheckStatus(warr[17]);
  798.             if ( pPID != "" ) {
  799.                DStatus += "; PID="+pPID;
  800.             }
  801.             if ( pDuration != "" ) {
  802.                DStatus += "; Duration="+pDuration;
  803.             }
  804.             DStatus += "; CPU%= "+warr[12]+"; Memory= "+warr[13];
  805.             DStatus += "KB; PPool= "+warr[14]+"KB; NPPool= "+warr[15]+"KB; PFile= "+warr[16]+"KB ;";
  806.             DStatus += "Thresholds: CPU%= "+warr[18]+"; Memory= "+warr[19];
  807.             DStatus += "KB; PPool= "+warr[20]+"KB; NPPool= "+warr[21]+"KB; PFile= "+warr[22]+"KB";
  808.             DAlertType = "ProcessWatch- ProcessName= "+warr[10];
  809.             DNotified = parseInt(warr[24],10);
  810.         }
  811.         break;        
  812.     }
  813.     if ( DAlertType != "" ) {
  814.         AEagd = AEad = AEsub = AEpn = PGnbr = PGtext = BPnbr = BPtext = "";
  815.         ACd = ""; // Action description
  816.         EAgn = getAlertNameSpecial(EGid);
  817.         if ( DNotified && EAgn != "" ) { // Alert Group Name
  818.             var aix = AlertSelectIdx * AlertRecLength;
  819.             AEad = AlertStoreArr[aix+15]; // Email Address
  820.  
  821.             var est = AlertStoreArr[aix+16];
  822.             var estarr = new Array();
  823.             estarr = est.split("[+]");
  824.             AEsub = estarr[0]; // Email Subject
  825.         
  826.             AEpn = AlertStoreArr[aix+12]; // Program Name
  827.         
  828.             PGnbr = AlertStoreArr[aix+18]; // AlphaPage Number
  829.             PGtext = AlertStoreArr[aix+19]; // AlphaPage TexttoSend
  830.         
  831.             BPnbr = AlertStoreArr[aix+21]; // Beeper Nmbr
  832.             BPtext = AlertStoreArr[aix+22]; // Beeper Texttosend
  833.  
  834.             AEagd = AlertStoreArr[aix+2]; // Alert Group Desc
  835.  
  836.             if (AlertStoreArr[aix+14] == "1") { // EmailNotify?
  837.                 DAction += "Email Sent; ";
  838.                 ACd += "EmailAddress: " + AEad + "; EmailSubject: " + AEsub + "; ";
  839.             }
  840.             if    (AlertStoreArr[aix+11] == "1") { // Program Execution?
  841.                 ACd += "Program Run At "
  842.                 if ( AEpn.charAt(0) == ">" ) { // execute remotely?
  843.                     ACd += "Monitored Server/Computer";
  844.                     AEpn = AEpn.substring(1,AEpn.length); // strip off ">"
  845.                     if ( AEpn == '"RESTART"' ) {
  846.                         AEpn = "Monitored Server/Computer Restarted";
  847.                         DAction += "Computer Rebooted; "
  848.                     }
  849.                     else {
  850.                         DAction += "Program Run; ";
  851.                     }
  852.                 }
  853.                 else {
  854.                     DAction += "Program Run; ";
  855.                     ACd += "MonitorIT Server";
  856.                 }
  857.  
  858.                 ACd += "; ProgramName: " + AEpn +"; ";;
  859.             }
  860.             if (AlertStoreArr[aix+17] == "1") { // AlphaPager?
  861.                 DAction += "Alpha Pager Called; ";
  862.                 ACd += "PagerNumber: "+ PGnbr + "; PagerText: "+ PGtext +"; ";
  863.             }
  864.             if    (AlertStoreArr[aix+20] == "1") { // Beeper?
  865.                 DAction += "Beeper Called "
  866.                 ACd += "BeeperNumber: "+ BPnbr + "; BeeperText: "+ BPtext +"; ";
  867.             }
  868.             if ( parseInt(warr[5]) == WINSERVICE_WATCH && DStatus == "1" ) {
  869.                 DAction += "Service Restarted; ";
  870.             }
  871.         }
  872.         if ( DAction == "" ) {
  873.               DAction = "No Actions Taken";
  874.         }
  875.         DAlertTip = "Watch/Alert Name = "+EAgn;
  876.         
  877.         FOps += "<td width='26' colspan='1' align='center' class='optext'>";
  878.         FOps += "<input id='Detail_" + DIdx + "' type='checkbox'"
  879.         FOps += "dparms='" + dParms + "' dcompid='" + dCompID + "'></td>";
  880.         FOps += "<td width='26' colspan='1' align='center' class='optext'>";
  881.         FOps += "<img src='images/"+StatImg+".gif' align='absmiddle' height='12' width='12'></td>";
  882.         FOps += "<td width='200' colspan='1' align='left' class='optext ' ";
  883.         FOps += "title='" + DAlertTip + "'>";
  884.         FOps += DAlertType + "</td>";
  885.         FOps += "<td width='110' colspan='1' align='left' class='optext'>";
  886.         FOps += DDTStamp + "</td>";
  887.         FOps += "<td width='120' colspan='1' align='left' class='optext' ";
  888.         FOps += "title='" + ACd + "'>";
  889.         FOps += DAction + "</td>";
  890.         FOps += "<td width='*' colspan='1' align='left' class='optext'>";
  891.         FOps += DStatus +"</td>";
  892.     }
  893.     else {    
  894.         FOps += "<td width='100%' align='left' class='optext'>";
  895.         FOps += csArg + "</td>";
  896.     }
  897.     
  898.     FOps += "</tr></table></div>";
  899.     DeviceText.insertAdjacentHTML("afterBegin",FOps);
  900.     DObjArr[DIdx] = document.all["Detail_"+DIdx];
  901.     ++DIdx;
  902. }
  903.  
  904. /* Get Alert Name from Store based on Alert ID */
  905. function getAlertNameSpecial(UID) {
  906.     AlertName = "";
  907.     for (i=0, j=0; i < AlertStoreArr.length; ++j, i+=AlertRecLength) {
  908.         if ( AlertStoreArr[i+1] == UID ) {
  909.             AlertName = AlertStoreArr[i];
  910.             AlertSelectIdx = j;
  911.             break;
  912.         }
  913.     }
  914.     return AlertName;
  915. }
  916. function GetGrpNameFromID(Gid) {
  917.     for ( var i=0, GIndx=0; i<GrpLupRecCount; i++, GIndx+=GroupRecLength ) {
  918.         if ( AR_GroupStoreArr[GIndx+1] == Gid ) {
  919.             return AR_GroupStoreArr[GIndx];
  920.         }
  921.     }
  922.     return "";
  923. }
  924.  
  925. function processDetailSelect(Type) {
  926.     Checked = ( Type == "0" ) ? "checked" : "";
  927.     for ( var i=0; i<DIdx; i++ ) {
  928.         DObjArr[i].checked = Checked; 
  929.     }
  930. }
  931.  
  932. function processAckButton() {
  933.     if ( DIdx <= 0 ) 
  934.         return;
  935.  
  936.     var ackParms = "NetStatAck";
  937.     ackParms += "~" + DObjArr[0].dcompid; // Computer ID
  938.     var Count = 0;
  939.     for ( var i=0; i<DIdx; i++ ) {
  940.         if ( DObjArr[i].checked  ) {
  941.             ackParms += "~"+DObjArr[i].dparms;
  942.             ++Count;
  943.         }         
  944.     }
  945.     if ( Count > 0 ) {
  946.           RpmCC_AR.NetStatFunction(ackParms);
  947.         processDeviceDetailCloseButton();
  948.     }
  949.     else {
  950.         alert("Please select one or more Alerts to Acknowledge");
  951.     }
  952. }
  953.  
  954. function processSelect(Type) {
  955.     State = ( Type == "0" ) ? 1 : 0;
  956.     for ( var i=0, GIndx=0; i<GrpLupRecCount; i++, GIndx+=GroupRecLength ) {
  957.         AR_GroupStoreArr[GIndx+4] = State; // set state
  958.         var Gid = AR_GroupStoreArr[GIndx+1];
  959.         ExpImg = ( State ) ? "minus" : "plus";
  960.         document.all["Expand_"+i].src="images/"+ ExpImg+".gif";
  961.     }
  962.     for ( var j=0, k=0; j<CmpLupRecCount; j++, k+=CmpRecLth ) {
  963.         AR_CmpStoreArr[k+7] = State;
  964.     }
  965.     if ( State ) {
  966.         enableDeviceStatus();
  967.         outputDeviceStatusDisplay();
  968.     }
  969. }
  970. function processComputerStatus(cstat) {
  971.     var wrkarr = new Array();
  972.     wrkarr = cstat.split("~");
  973.     var Status = parseInt(wrkarr[2]);
  974.  
  975.     for ( var i=0, j=0; i<CmpLupRecCount; i++, j+=CmpRecLth ) {
  976.         if ( AR_CmpStoreArr[j+3] == wrkarr[1] ) { // Match on Computer ID
  977.            if ( AR_CmpStoreArr[j+6] != Status ) { // Status changed
  978.                AR_CmpStoreArr[j+6] = Status;
  979.                 processAlertAudioOut();
  980.                // Update Device icon if currently Displayed
  981.                if ( AR_CmpStoreArr[j+7] && AR_CmpStoreArr[j+8] >= 0 ) { 
  982.                     if ( Status == 0 ) StatImg = "Normal";
  983.                     else if ( Status == 1 ) StatImg = "Caution";
  984.                     else StatImg = "Critical";
  985.                     var DObj = document.all["DeviceStatus_"+AR_CmpStoreArr[j+8]];
  986.                      DObj.src="images/"+StatImg+".gif";
  987.                 }
  988.                // Update Group icon if necessary & currently Displayed
  989.                var GStat = 0;
  990.                 for ( var m=0, n=0; m<CmpLupRecCount; m++, n+=CmpRecLth ) {
  991.                     if ( AR_CmpStoreArr[j+1] == AR_CmpStoreArr[n+1] ) { // if match on Group ID
  992.                         if ( AR_CmpStoreArr[n+6] == 2 ) { // if at least one Critical
  993.                             GStat = 2;
  994.                             break;
  995.                         }
  996.                         else {
  997.                             GStat |= AR_CmpStoreArr[n+6];
  998.                         }
  999.                     }
  1000.                 }
  1001.                 for ( var p=0, GIndx=0; p<GrpLupRecCount; p++, GIndx+=GroupRecLength ) {
  1002.                     if ( AR_GroupStoreArr[GIndx+1] == AR_CmpStoreArr[j+1] ) { // if match on Gid
  1003.                        if ( AR_GroupStoreArr[GIndx+3] != GStat ) { // Status changed
  1004.                            AR_GroupStoreArr[GIndx+3] = GStat;
  1005.                            // Update Group icon 
  1006.                             if ( GStat == 0 ) StatImg = "Normal";
  1007.                             else if ( GStat == 1 ) StatImg = "Caution";
  1008.                             else StatImg = "Critical";
  1009.                             document.all["GroupStatus_"+AR_GroupStoreArr[GIndx+5]].src="images/"+StatImg+".gif";
  1010.                         }
  1011.                         break;
  1012.                     }
  1013.                 }
  1014.              } // end If status change
  1015.             break;
  1016.         } // end If match
  1017.     } // end For on Computer search
  1018. }
  1019. function getOIDName(coid) {
  1020.     for ( var i=0; i<gOIDarray.length-1; i+=4 ) {
  1021.         if ( gOIDarray[i+2] == coid ) { // if match
  1022.             return gOIDarray[i+1];    
  1023.         }
  1024.     }
  1025.     return coid;
  1026. }
  1027.  
  1028. function processResetButton() {
  1029.       SetCursor("auto");
  1030. }
  1031.  
  1032. function PopUpContextOpen() {
  1033. }
  1034. function PopUpContextClose() {
  1035. }
  1036.  
  1037. function processKeyPress() {
  1038.     /* get KeyCode and check if invalid */
  1039.     kc = event.keyCode;
  1040.     stat = 1; // default to OK
  1041.  
  1042.     // Keys:   ~            %           [           ]           #           !
  1043.     if (kc == 126 ||    kc == 37 || kc == 91 ||    kc == 93 || kc == 35 || kc == 33) { // Not acceptable 
  1044.         stat = 0;
  1045.     } // Keys:        *           ?
  1046.     else if ( (kc == 42 || kc == 63) &&  event.srcElement.name != "AR_Rpt" ) { //Not acceptable
  1047.         stat = 0;
  1048.     }
  1049.     if (stat == 0) { // if Not Acceptable
  1050.         event.returnValue=false;
  1051.         top.Rstatus.Pstat("Keys ~%*?[]#! are not accepted for this field");    
  1052.         alert("Keys ~%*?[]#! are not accepted for this field");    
  1053.     }
  1054.     else {
  1055.         top.Rstatus.Pstat(""); // clear status line
  1056.     }
  1057. }    
  1058.  
  1059. function GetFileCheckStatus(fcstat) {
  1060.     var csStatusParm="", csStatusList="Status: ";
  1061.     var warr = new Array();
  1062.  
  1063.     var lStat = parseInt(fcstat, 10);
  1064.     csStatusList += (lStat & FILE_STRING_MATCH) ? "SearchString Match; " : "";
  1065.     csStatusList += (lStat & FILE_DATE_CHANGE) ? "Date Changed; " : "";
  1066.     csStatusList += (lStat & FILE_SIZE_CHANGE) ? "Size Changed; " : "";
  1067.     csStatusList += (lStat & FILE_SIZE_MAX) ? "Created or MaxSize Exceeded; " : "";
  1068.     csStatusList += (lStat & FILE_DELETED) ? "Deleted; " : "";
  1069.     csStatusList += (lStat & FILE_NOT_CHANGED) ? "NOT Changed; " : "";
  1070.     return csStatusList;
  1071. }
  1072.  
  1073. function GetProcessCheckStatus(fcstat) {
  1074.     var csStatusParm="", csStatusList="Status: ";
  1075.     var warr = new Array();
  1076.  
  1077.     var lStatus = parseInt(fcstat, 10);
  1078.     csStatusList += (lStatus & NOT_RUNNING_NO_RESTART) ? "Process Not Running; No Restart Attempted " : "";
  1079.     csStatusList += (lStatus & NOT_RUNNING_RESTARTED) ? "Process Not Running; Successfully Restarted " : "";
  1080.     csStatusList += (lStatus & NOT_RUNNING_RESTART_FAILED) ? "Process Not Running; Restart Failed " : "";
  1081.     csStatusList += (lStatus & RUNNING_HALTED) ? "Process Running; Terminated " : "";
  1082.     csStatusList += (lStatus & RUNNING_NOT_HALTED) ? "Process Running; No Terminate Attempt " : "";
  1083.     csStatusList += (lStatus & RUNNING_EXCEEDED_CPU) ? "Process Running & Exceeded CPU Threshold; " : "";
  1084.     csStatusList += (lStatus & RUNNING_EXCEEDED_MEMORY) ? "Process Running & Exceeded a Memory Threshold" : "";
  1085.     csStatusList += (lStatus & RUNNING_EXCEEDED_CPU_HALTED) ? "Process Running & Exceeded CPU Threshold; Terminated " : "";
  1086.     csStatusList += (lStatus & RUNNING_EXCEEDED_MEMORY_HALTED) ? "Process Running & Exceeded a Memory Threshold; Terminated " : "";
  1087.  
  1088.     return csStatusList;
  1089. }
  1090.  
  1091. function GetFacility(FacCode)
  1092. {
  1093.     var csFacility;
  1094.     switch ( parseInt(FacCode) )
  1095.     {
  1096.     case 0: csFacility = "Kernel"; break;
  1097.     case 1: csFacility = "User-Level"; break;
  1098.     case 2: csFacility = "Mail System"; break;
  1099.     case 3: csFacility = "System Daemons"; break;
  1100.     case 4: csFacility = "Security/Authorization (4)"; break;
  1101.     case 5: csFacility = "Internal by Syslogd"; break;
  1102.     case 6: csFacility = "Line Printer Subsystem"; break;
  1103.     case 7: csFacility = "Network News Subsystem"; break;
  1104.     case 8: csFacility = "UUCP Subsystem"; break;
  1105.     case 9: csFacility = "Clock Daemon (9)"; break;
  1106.     case 10: csFacility = "Security/Authorization (10)"; break;
  1107.     case 11: csFacility = "FTP Daemon"; break;
  1108.     case 12: csFacility = "NTP Subsystem"; break;
  1109.     case 13: csFacility = "Log Audit"; break;
  1110.     case 14: csFacility = "Log Alert"; break;
  1111.     case 15: csFacility = "Clock Daemon (15)"; break;
  1112.     case 16: csFacility = "Local Use 0"; break;
  1113.     case 17: csFacility = "Local Use 1"; break;
  1114.     case 18: csFacility = "Local Use 2"; break;
  1115.     case 19: csFacility = "Local Use 3"; break;
  1116.     case 20: csFacility = "Local Use 4"; break;
  1117.     case 21: csFacility = "Local Use 5"; break;
  1118.     case 22: csFacility = "Local Use 6"; break;
  1119.     case 23: csFacility = "Local Use 7"; break;
  1120.     default:
  1121.         csFacility = FacCode;
  1122.     }
  1123.     return csFacility;
  1124. }
  1125.  
  1126. function GetSeverity(SevCode)
  1127. {
  1128.     var csSeverity;
  1129.     switch ( parseInt(SevCode,10) )
  1130.     {
  1131.     case 0: csSeverity = "Emergency"; break;
  1132.     case 1: csSeverity = "Alert"; break;
  1133.     case 2: csSeverity = "Critical"; break;
  1134.     case 3: csSeverity = "Error"; break;
  1135.     case 4: csSeverity = "Warning"; break;
  1136.     case 5: csSeverity = "Notice"; break;
  1137.     case 6: csSeverity = "Informational"; break;
  1138.     case 7: csSeverity = "Debug"; break;
  1139.     default:
  1140.         csSeverity = SevCode;
  1141.     }
  1142.     return csSeverity;
  1143. }
  1144.  
  1145. // Print Event Log Data
  1146. var DiscStatWindow = null;
  1147. function processDeviceDetailPrintStatus() {
  1148.     if ( !top.banner.IE55orBetter ) {
  1149.         alert("Print requires IE 5.5/SP1 or greater. Download current, free IE update from Microsoft's web site");
  1150.         return;
  1151.     }
  1152.     FakeBut.click();    // simulate event to call "savePageCoord(...)"
  1153.     var wprop = "height="+top.banner.bCh+",width="+top.banner.bCw
  1154.     wprop += ",top="+(top.banner.bY-28)+",left="+(top.banner.bX-4)+",scrollbars";
  1155.     var rName = ""+Math.random(); // use Random number to get unique Window name
  1156.     rName = rName.substring(2,rName.length);
  1157.     DiscStatWindow = window.open("",rName,wprop);
  1158.     if ( DiscStatWindow == null ) {
  1159.         return;   
  1160.     }
  1161.     var dh = "<html><head><title>MonitorIT - Server/Device Detail Alert Report</title>";
  1162.     dh += "<link rel='stylesheet' type='text/css' href='css/rpmstyle.css'></head><body";
  1163.     dh += " title='Exit to Close Window when Printing is complete'>"; 
  1164.     dh += DeviceWin.innerHTML;
  1165.     // ploghdr1.width="18"; ploghdr2.width="28"; ploghdr3.width="170"; ploghdr4.width="101"; ploghdr5.width="126"; ploghdr6.width="46"; ploghdr7.width="58";
  1166.     dh += '<script LANGUAGE="JavaScript">devicehdr1.border="1"; window.focus();';
  1167.     dh += ' </script></body></html>';
  1168.     DiscStatWindow.document.open();
  1169.     DiscStatWindow.document.write(dh)
  1170.     DiscStatWindow.document.close();
  1171.     DiscStatWindow.print();
  1172. }
  1173. //-->
  1174. </script>
  1175.  
  1176. <script LANGUAGE="JavaScript" src="js/MiscFunc.js"></script>
  1177. <script LANGUAGE="JavaScript" src="js/ButtonFunc.js"></script>
  1178. <script LANGUAGE="JavaScript" src="js/AlertFunc.js"></script>
  1179.  
  1180. <script LANGUAGE="JavaScript" FOR="RpmCC_AR" EVENT="NetStatNotify(csArg)">
  1181. <!--
  1182. var wrkarr = new Array();
  1183. wrkarr = csArg.split("~");
  1184. if ( wrkarr[0] == "ComputerStatus" ) {
  1185.     processComputerStatus(csArg);   
  1186. }
  1187. else if ( wrkarr[0] == "StatusInterval" ) {
  1188.     MostRecentHours = parseInt(wrkarr[1]);
  1189.     lasthours.selectedIndex = MostRecentHours-1;       
  1190. }
  1191. else if ( wrkarr[0] == "StatusDetails" ) {
  1192.     if ( wrkarr[1] == "Begin" ) {
  1193.         DetailsArr.length = 0;
  1194.         DetailsArrIx = 0;  
  1195.     }
  1196.     else if ( wrkarr[1] == "End" ) {
  1197.         top.banner.processStopCommX(); 
  1198.         SetCursor("auto");
  1199.         //alert(DetailsArr.join(""));    
  1200.     }
  1201.     else {
  1202.         DetailsArr[DetailsArrIx++] = wrkarr[1];
  1203.         processDeviceDetailDisplay(csArg);
  1204.     }   
  1205. }
  1206. //-->
  1207. </script> 
  1208.  
  1209. <script LANGUAGE="JavaScript" FOR="RpmCC_AR" EVENT="Connected()">
  1210. <!--
  1211. processRepConnectConfirmed();
  1212. //-->
  1213. </script> 
  1214.  
  1215. <script LANGUAGE="JavaScript" FOR="RpmCC_AR" EVENT="Disconnected()">
  1216. <!--
  1217. top.Rstatus.Pstat("Disconnected",true);
  1218. if ( Tid != null ) {
  1219.     clearTimeout(Tid); // stop timeout routine
  1220. }
  1221. Tid = setTimeout("processRepReconnect()",10000); // Delay 10 secs then try reconnnect
  1222. //-->
  1223. </script>
  1224.  
  1225. <script
  1226. LANGUAGE="JavaScript" FOR="RpmCC_AR" EVENT="DBChanged(cdata)">
  1227. <!--
  1228. var warr = new Array();
  1229. warr = cdata.split("~"); // parse the event data
  1230. // process only if Computer, Watch/Alert or Group Table change
  1231. if ( (warr[0] == "1" || warr[0] == "2" || warr[0] == "5") && ignoreDBChangeEvent == false ) {
  1232.     top.Rstatus.StatDB.style.display = "";
  1233.     if ( CTid == null ) {
  1234.         CTid = setTimeout("processDBChanged()",30000); // Delay 30 secs then process
  1235.     }
  1236. }
  1237. //-->
  1238. </script>
  1239.  
  1240. <script FOR="RpmCC_AR" EVENT="ComputerLookupRecord(Cid,Gid,Sid,Nme,Desc,Pswd,OSVer,Addr,Port)">
  1241. <!--
  1242. processComputerLookupRecord(Cid,Gid,Nme,Desc,OSVer,Addr);
  1243. //-->
  1244. </script>
  1245.  
  1246. <script LANGUAGE="JavaScript" FOR="RpmCC_AR" EVENT="ComputerOpComplete()">
  1247. <!--
  1248. processComputerOpComplete();
  1249. //-->
  1250. </script>
  1251.  
  1252. <script LANGUAGE="JavaScript" FOR="RpmCC_AR" EVENT="ComputerOpError()">
  1253. <!--
  1254. processComputerOpError();
  1255. //-->
  1256. </script> 
  1257.  
  1258. <script FOR="RpmCC_AR" EVENT="GroupLookupRecord(Gid,GNme,GDesc)">
  1259. <!--
  1260. processGroupLookupRecord(Gid,GNme,GDesc);
  1261. //-->
  1262. </script> 
  1263.  
  1264. <script FOR="RpmCC_AR" EVENT="GroupOpComplete()">
  1265. <!--
  1266. processGroupOpComplete();
  1267. //-->
  1268. </script> 
  1269. <script FOR="RpmCC_AR" EVENT="GroupOpError()">
  1270. <!--
  1271. processGroupOpError();
  1272. //-->
  1273. </script>
  1274.  
  1275. <script LANGUAGE="JavaScript" FOR="RpmCC_AR"
  1276. EVENT="AlertGroupLookupRecordPart1(AlID, AlName, AlDesc, AlThresh, AlOver, AlEveryTime, AlDur, AlSched, AlSDT, AlEDT, AlArrayIDs)">
  1277. <!--
  1278. AlertLupRecPart1(AlID, AlName, AlDesc, AlThresh, AlOver, AlEveryTime, AlDur, AlSched, AlSDT, AlEDT, AlArrayIDs);
  1279. //-->
  1280. </script>
  1281.  
  1282. <script LANGUAGE="JavaScript" FOR="RpmCC_AR"
  1283. EVENT="AlertGroupLookupRecordPart2(AlID, AlRunProg, AlProgNme, AlProgramArgs, AlENotify, AlEAddr, AlESubj, AlPhNotify, AlPhNumber, AlTextToSpeak, AlPgNotify, AlPgNumber, AlTextToSend)">
  1284. <!--
  1285. AlertLupRecPart2(AlID, AlRunProg, AlProgNme, AlProgramArgs, AlENotify, AlEAddr, AlESubj, AlPhNotify, AlPhNumber, AlTextToSpeak, AlPgNotify, AlPgNumber, AlTextToSend);
  1286. //-->
  1287. </script>
  1288.  
  1289. <script LANGUAGE="JavaScript" FOR="RpmCC_AR" EVENT="AlertGroupOpComplete()">
  1290. <!--
  1291. processAlertOpComplete();
  1292. VA_CommBusy = 0; // reset Comm busy flag
  1293. //-->
  1294. </script> 
  1295.  
  1296. <script LANGUAGE="JavaScript" FOR="RpmCC_AR" EVENT="AlertGroupOpError()">
  1297. <!--
  1298. processAlertOpError();
  1299. VA_CommBusy = 0; // reset Comm busy flag
  1300. //-->
  1301. </script> 
  1302.  
  1303. <script LANGUAGE="JavaScript" FOR="RpmCC_AR" EVENT="EnumOidDefs(ostrg)">
  1304. <!--
  1305. processOIDLookupRecord(ostrg);
  1306. //-->
  1307. </script> 
  1308.  
  1309. <script LANGUAGE="JavaScript" FOR="RpmCC_AR" EVENT="StartCommunication()">
  1310. <!--
  1311. top.banner.processStartComm();
  1312. //-->
  1313. </script> 
  1314.  
  1315. <script LANGUAGE="JavaScript" FOR="RpmCC_AR" EVENT="StopCommunication()">
  1316. <!--
  1317. top.banner.processStopComm();
  1318. //-->
  1319. </script> 
  1320.  
  1321. <script LANGUAGE="JavaScript" src="js/PopUpMenuFunc.js"></script>
  1322.  
  1323. <object ID="RpmCC_AR" NAME="RpmCC_AR" WIDTH="14" HEIGHT="1" style="display:none" CLASSID="CLSID:D88C2358-FC83-11D1-BF49-00104B2D6F80" CODEBASE="controls/RPMComm.cab#version=5,2,0,0">
  1324.   <param name="_Version" value="65536">
  1325.   <param name="_ExtentX" value="2646">
  1326.   <param name="_ExtentY" value="1341">
  1327.   <param name="_StockProps" value="0">
  1328. </object>
  1329.  
  1330. <!-- Invisible Object to Support Simulated Click Event -->
  1331. <button id="FakeBut" style="display:none" onclick="top.banner.savePageCoord(event,document.body,'ViewNetStatus')">
  1332. </button>
  1333.  
  1334. <select ONCHANGE="processAlertName()" SIZE="1" NAME="AL_AlertSel" id="AL_AlertSel" class="idis" style="width: 185pt" style="display: none"></select> 
  1335.  
  1336. <!-- Define Images used in dynamic HTML generation to force loading and caching now -->
  1337. <div style="display:none">
  1338. <img src="images/sViewAlerts.gif"><img src="images/selectall.gif"><img src="images/Unchecked.gif">
  1339. <img src="images/unselectall.gif"><img src="images/Computer.gif"><img src="images/Printer.gif">
  1340. <img src="images/Checked.gif"><img src="images/CloseImg.gif"><img src="images/NetStatusSm.bmp">
  1341. <img src="images/FullView.gif"><img src="images/Normal.gif"><img src="images/Caution.gif">
  1342. <img src="images/Critical.gif">
  1343. </div>
  1344.  
  1345.  <!-- PopUp to Display Device Details -->   
  1346.   <div ID="DeviceWinMain" class="VAMainBox" style="display:none; left:150; top:150; ">
  1347.    <table width="100%" style="height:26">
  1348.     <tr><td width="10%" align="center"></td><td width="80%" align="center"><img src="images/sViewAlerts.gif" align="absmiddle" height="16" width="16"> <span align="absmiddle" id="ELogHeader" class="inputlabel">Device Alert Details</span> </td><td width="10%" align="center"></td></tr>
  1349.     </table>
  1350.  
  1351.      <table width="100%">
  1352.         <tr><td><div class="EventLog" ID="DeviceWin" style="width:100%;height:100%" align="center"><span id="DeviceText"></span></div></tr></td>
  1353.         </table>
  1354.     
  1355.    <center>
  1356.     <table width="100%">
  1357.     <tr><td align="center" width ="100%" colspan="3"><button id="DetSelectAllButton" onclick="processDetailSelect('0')" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand" style="width:95px; height:22px" id="abSelC" ><img src="images/selectall.gif" align="absmiddle" height="15" width="14">Select All</button> <button id="DetUnselectAllButton" onclick="processDetailSelect('1')" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand" style="width:95px; height:22px" id="abUselC" ><img src="images/unselectall.gif" align="absmiddle" height="15" width="14">Unselect All</button> <button id="AckBut" style="width:110px; height:22px;" onclick="processAckButton()" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand"><img src="images/EditStop.gif" align="absmiddle" height="16" width="15"> Acknowledge</button> <button id="DevicePrintButton" title="Print Device Alert Detail Status Display" onclick="if (this.bdis == '0') processDeviceDetailPrintStatus();" bdis="0" style="width:75px; height:22px" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand"><img src="images/Printer.gif" align="absmiddle" height="15" width="17"> Print</button> <button id="DetailDoneButton" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand" title="Exit Device Alert Detail Display" style="width:75px; height:22px" onClick="processDeviceDetailCloseButton()"><img src="images/CloseImg.gif" align="absmiddle" height="14" width="15"> Close  </button></td>
  1358.   </tr>
  1359.    </table>
  1360.   </center>
  1361.   </div> 
  1362.  <!-- End of PopUp to Display Device Details -->
  1363.  
  1364.  
  1365. <div id="GTabBx" class="GTabBox" border="0" align="left" style="display:none">
  1366.  <div id="NetStatusTitleDiv" align="left" width="98%">
  1367.  <table border="1"  borderColor="activeborder" align="left">
  1368.     <tr><td borderColorDark="graytext" borderColorLight="white" style="font-weight:800; font-size:12pt; background-color:threedhighlight; color:windowtext"> <img src="images/NetStatusSm.bmp" align="absmiddle" height="16" width="16"> Network Status Display </td>         
  1369.    </tr>
  1370.  </table><BR CLEAR=ALL><HR align="left">
  1371.  </div>
  1372.  
  1373.  
  1374. <div id="GTab" align="left" >
  1375.     <table width="100%" border="0" cellspacing="0" cellpadding="0">
  1376.         <tr>
  1377.         <td valign="center" id="GroupTab"  class="STabSel" onclick="processGeneralClick(this)">Groups</td>
  1378.         <td valign="center" id="DeviceTab"  class="STabUnsel" onclick="processGeneralClick(this)">Devices</td>
  1379.         <td width="*" style="border-bottom: solid thin white"> </td>
  1380.       </tr>
  1381.     </table>
  1382.  
  1383. <div id="GroupUI" class="Lbr_border" style="border-left:solid thin white; border-bottom:solid thin graytext; border-right:solid thin graytext" SelDate="" align="center">
  1384.  
  1385.   <table width="100%" height="100%" border="0" cellspacing="3" cellpadding="2" >
  1386.     <tr>
  1387.           <td height="25px" align="center" class="inputlabel">Group Network Status</td>
  1388.       </tr>
  1389.        <tr>
  1390.         <td height="*" width="92%">      
  1391.         <div align="center" class="RptStatusTextBox" Name="Groupwin" ID="Groupwin" ></div>
  1392.       </td>
  1393.      </tr>
  1394.    
  1395.      <tr>
  1396.        <td height="30px" width="92%">
  1397.           <div classFlag="idis" ><table border="1" cellspacing="1" cellpadding="1" height="30" width="100%"><tr><td width="23%" align="left" class="inputlabel"><span title="Uses the 'Asterisk' WAV assignment in Control Panel->Sounds & Multimedia Properties"><INPUT TYPE="checkbox" NAME="AlertAudioEnabled" id="AlertAudioEnabled" class="inputlabel" CHECKED>Audio Alert</span></td><td width="54%" align="center"><button title="Show status of all servers/devices for all the Groups in the 'Devices' tab view" onclick="processSelect('0')" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand" style="width:95px; height:24px" id="bSelC" ><img src="images/FullView.gif" align="absmiddle" height="16" width="16"> Expand All</button>  <button title="Hide status of all servers/devices for all the Groups in the 'Devices' tab view" onclick="processSelect('1')" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand" style="width:95px; height:24px" id="bUselC" ><img src="images/Collapse.gif" align="absmiddle" height="14" width="16">Collapse All</button></td><td width="23%" align="right" class="inputlabel"><button onclick="processBannerMenu()" title="Press to Toggle Hide/Show of Menu and Banner Frames"><img src="images/FullView.gif" align="absmiddle" height="16" width="16"></button></td></tr></table></div>
  1398.         </td>
  1399.        </tr>
  1400.     </table>
  1401.             
  1402. </div>
  1403.  
  1404. <div id="DeviceUI" class="Lbr_border" style="display:none; border-left:solid thin white; border-bottom:solid thin graytext; border-right:solid thin graytext" SelDate="" align="center">
  1405.  
  1406.   <table width="100%" height="100%" border="0" cellspacing="3" cellpadding="2" >
  1407.     <tr>
  1408.           <td height="25px" align="center" class="inputlabel">Device Network Status</td>
  1409.       </tr>
  1410.        <tr>
  1411.         <td height="*" width="92%">      
  1412.         <div align="center" class="RptStatusTextBox" Name="Devicewin" ID="Devicewin" classFlag ="idis" ></div>
  1413.       </td>
  1414.      </tr>
  1415.    
  1416.      <tr>
  1417.        <td height="30px" width="92%">
  1418.           <div classFlag="idis" ><table border="1" cellspacing="1" cellpadding="1" height="30" width="100%"><tr><td width="40%" align="left" class="inputlabel"><span title="Change to set the interval for the number of previous hours of alerts that affect the status"> Status Interval: <select onchange="processMostRecentHours()" id="lasthours"></select> Hrs</span></td><td width="20%" align="center"> </td><td width="40%" align="right" class="statuslabel"><button onclick="processBannerMenu()" title="Press to Toggle Hide/Show of Menu and Banner Frames"><img src="images/FullView.gif" align="absmiddle" height="16" width="16"></button></td></tr></table></div>
  1419.         </td>
  1420.        </tr>
  1421.     </table>
  1422. </div>
  1423.  
  1424. </div>
  1425.  
  1426. </div>
  1427. </body>
  1428. </html>
  1429.