extensions/net.sf.basedb.labenv/trunk/resources/reports/labenvironmentdatabasedisplay.js

Code
Comments
Other
Rev Date Author Line
2989 02 Dec 14 olle 1 var LabEnvDbDisp = function()
2989 02 Dec 14 olle 2 {
2989 02 Dec 14 olle 3   var labenvdbdisp = {};
2989 02 Dec 14 olle 4   var debug = 0;
2989 02 Dec 14 olle 5   var storageIntervalInSeconds = null;
2989 02 Dec 14 olle 6
2989 02 Dec 14 olle 7   labenvdbdisp.getStorageIntervalInSeconds = function()
2989 02 Dec 14 olle 8   {
2989 02 Dec 14 olle 9     return storageIntervalInSeconds;
2989 02 Dec 14 olle 10   }
2989 02 Dec 14 olle 11
2989 02 Dec 14 olle 12   labenvdbdisp.setStorageIntervalInSeconds = function(storageIntervalInSecondsInput)
2989 02 Dec 14 olle 13   {
2989 02 Dec 14 olle 14     //alert("setStorageIntervalInSeconds(): storageIntervalInSecondsInput = " + storageIntervalInSecondsInput);
2989 02 Dec 14 olle 15     storageIntervalInSeconds = storageIntervalInSecondsInput;
2989 02 Dec 14 olle 16   }
2989 02 Dec 14 olle 17
2989 02 Dec 14 olle 18   // Page initialization
2989 02 Dec 14 olle 19   labenvdbdisp.initPage = function()
2989 02 Dec 14 olle 20   {
2989 02 Dec 14 olle 21     var frm = document.forms['labenv'];
2989 02 Dec 14 olle 22
2989 02 Dec 14 olle 23     // Step 1
2989 02 Dec 14 olle 24
2989 02 Dec 14 olle 25     // Step 2
2989 02 Dec 14 olle 26     Events.addEventHandler('step-2', 'wizard-initialize', labenvdbdisp.initializeStep2);
2989 02 Dec 14 olle 27     Events.addEventHandler('step-2', 'wizard-validate', labenvdbdisp.validateStep2);
2989 02 Dec 14 olle 28     Events.addEventHandler('fromdate', 'blur', labenvdbdisp.fromDateTimeOnChange);
2989 02 Dec 14 olle 29     Events.addEventHandler('fromtime', 'blur', labenvdbdisp.fromDateTimeOnChange);
2989 02 Dec 14 olle 30     Events.addEventHandler('todate', 'blur', labenvdbdisp.toDateTimeOnChange);
2989 02 Dec 14 olle 31     Events.addEventHandler('totime', 'blur', labenvdbdisp.toDateTimeOnChange);
2989 02 Dec 14 olle 32     
2989 02 Dec 14 olle 33     // Step 3
2989 02 Dec 14 olle 34     Events.addEventHandler('printButton', 'click', labenvdbdisp.printVersion);
2989 02 Dec 14 olle 35     
2989 02 Dec 14 olle 36     // Navigation
2989 02 Dec 14 olle 37     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
2989 02 Dec 14 olle 38     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
2989 02 Dec 14 olle 39     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
2989 02 Dec 14 olle 40     Buttons.addClickHandler('gocreate', Wizard.goRegister);
2989 02 Dec 14 olle 41   
2989 02 Dec 14 olle 42     // Final registration
2989 02 Dec 14 olle 43     Events.addEventHandler('wizard', 'wizard-submit', labenvdbdisp.submit);
2989 02 Dec 14 olle 44     Events.addEventHandler('printButton', 'click', labenvdbdisp.printVersion);
2989 02 Dec 14 olle 45   
2989 02 Dec 14 olle 46     Doc.show('step-1');
2989 02 Dec 14 olle 47     Doc.show('gonext');
2989 02 Dec 14 olle 48
2989 02 Dec 14 olle 49     // Create lab sensor menu from configuration data
2989 02 Dec 14 olle 50     labenvdbdisp.createSensorMenu();
2989 02 Dec 14 olle 51
2989 02 Dec 14 olle 52     // Fetch and store storage interval in seconds
2989 02 Dec 14 olle 53     labenvdbdisp.fetchStorageIntervalInSeconds();
2989 02 Dec 14 olle 54   }
2989 02 Dec 14 olle 55
2989 02 Dec 14 olle 56   labenvdbdisp.createSensorMenu = function()
2989 02 Dec 14 olle 57   {
2989 02 Dec 14 olle 58     // Get lab sensor configurations JSON object with AJAX
2989 02 Dec 14 olle 59     var request = Ajax.getXmlHttpRequest();
2989 02 Dec 14 olle 60     var url = '../LabEnvironment.servlet?ID='+App.getSessionId();
2989 02 Dec 14 olle 61     url += '&cmd=GetLabSensorConfigList';
2989 02 Dec 14 olle 62
2989 02 Dec 14 olle 63     Wizard.asyncJsonRequest(url, labenvdbdisp.createSensorMenu2);
2989 02 Dec 14 olle 64   }
2989 02 Dec 14 olle 65
2989 02 Dec 14 olle 66   labenvdbdisp.createSensorMenu2 = function(response)
2989 02 Dec 14 olle 67   {
2989 02 Dec 14 olle 68     Doc.show('navigation');
2989 02 Dec 14 olle 69     if (response.status != 'ok')
2989 02 Dec 14 olle 70     {
2989 02 Dec 14 olle 71       setFatalError(response.message);
2989 02 Dec 14 olle 72       return false;
2989 02 Dec 14 olle 73     }
2989 02 Dec 14 olle 74     // Get sensor configurations information from the AJAX response
4527 20 Jun 17 nicklas 75     var labSensorConfigList = response.sensors;
2989 02 Dec 14 olle 76     if (labSensorConfigList != null)
2989 02 Dec 14 olle 77     {
2989 02 Dec 14 olle 78       // Construct lab sensor menu from JSON data
2989 02 Dec 14 olle 79       var sensorSelect = document.getElementById('sensorSelectId');
2989 02 Dec 14 olle 80       for (var i=0; i < labSensorConfigList.length; i++)
2989 02 Dec 14 olle 81       {
2989 02 Dec 14 olle 82         // Get URL and name for lab sensor number 'i'
2989 02 Dec 14 olle 83         var labSensorConfig = labSensorConfigList[i];
2989 02 Dec 14 olle 84         var sensorUrl = labSensorConfig['url'];
2989 02 Dec 14 olle 85         var sensorName = labSensorConfig['name'];
2989 02 Dec 14 olle 86         // Create and add new option element to select menu
2989 02 Dec 14 olle 87         var optionEl = document.createElement('option');
2989 02 Dec 14 olle 88         optionEl.setAttribute('value',sensorUrl);
2989 02 Dec 14 olle 89         optionEl.innerHTML = sensorName;
2989 02 Dec 14 olle 90         sensorSelect.appendChild(optionEl);
2989 02 Dec 14 olle 91       }
2989 02 Dec 14 olle 92     }
2989 02 Dec 14 olle 93   }
2989 02 Dec 14 olle 94
2989 02 Dec 14 olle 95   labenvdbdisp.fetchStorageIntervalInSeconds = function()
2989 02 Dec 14 olle 96   {
2989 02 Dec 14 olle 97     // Get lab environment database configuration JSON object with AJAX
2989 02 Dec 14 olle 98     var request = Ajax.getXmlHttpRequest();
2989 02 Dec 14 olle 99     var url = '../LabEnvironment.servlet?ID='+App.getSessionId();
2989 02 Dec 14 olle 100     url += '&cmd=GetLabEnvDatabaseConfig';
2989 02 Dec 14 olle 101
2989 02 Dec 14 olle 102     Wizard.asyncJsonRequest(url, labenvdbdisp.fetchStorageIntervalInSeconds2);
2989 02 Dec 14 olle 103   }
2989 02 Dec 14 olle 104
2989 02 Dec 14 olle 105   labenvdbdisp.fetchStorageIntervalInSeconds2 = function(response)
2989 02 Dec 14 olle 106   {
2989 02 Dec 14 olle 107     if (response.status != 'ok')
2989 02 Dec 14 olle 108     {
2989 02 Dec 14 olle 109       setFatalError(response.message);
2989 02 Dec 14 olle 110       return false;
2989 02 Dec 14 olle 111     }
2989 02 Dec 14 olle 112     // Get lab environment database configuration information from the AJAX response
2989 02 Dec 14 olle 113     var labEnvDatabaseConfig = response.labEnvDatabaseConfig;
2989 02 Dec 14 olle 114     if (labEnvDatabaseConfig != null)
2989 02 Dec 14 olle 115     {
2989 02 Dec 14 olle 116       var storageIntervalInSecondsCurrent = labEnvDatabaseConfig.storageIntervalInSeconds;
2989 02 Dec 14 olle 117       labenvdbdisp.setStorageIntervalInSeconds(storageIntervalInSecondsCurrent);
2989 02 Dec 14 olle 118     }
2989 02 Dec 14 olle 119   }
2989 02 Dec 14 olle 120
2989 02 Dec 14 olle 121   labenvdbdisp.initializeStep2 = function()
2989 02 Dec 14 olle 122   {
2989 02 Dec 14 olle 123     Wizard.setCurrentStep(2);
2989 02 Dec 14 olle 124     var frm = document.forms['labenv'];
2989 02 Dec 14 olle 125     frm.reporttype.disabled = true;
2989 02 Dec 14 olle 126     // Hide report period input fields
2989 02 Dec 14 olle 127     document.getElementById("reportPeriodSubSection01").style.display = 'none';
2989 02 Dec 14 olle 128     document.getElementById("reportPeriodSubSection02").style.display = 'none';
2989 02 Dec 14 olle 129     document.getElementById("reportPeriodSubSection04").style.display = 'none';
2989 02 Dec 14 olle 130     // Hide day-time filter input fields
2989 02 Dec 14 olle 131     document.getElementById("dayTimeFilterSubSection01").style.display = 'none';
2989 02 Dec 14 olle 132     document.getElementById("dayTimeFilterSubSection02").style.display = 'none';
2989 02 Dec 14 olle 133     document.getElementById("dayTimeFilterSubSection04").style.display = 'none';
2989 02 Dec 14 olle 134     // Hide weekday filter pop-up menu
2989 02 Dec 14 olle 135     document.getElementById("weekDayFilterSubSection01").style.display = 'none';
2989 02 Dec 14 olle 136     document.getElementById("weekDayFilterSubSection02").style.display = 'none';
2989 02 Dec 14 olle 137     document.getElementById("weekDayFilterSubSection04").style.display = 'none';
2989 02 Dec 14 olle 138     // Hide chart variant pop-up menu
2989 02 Dec 14 olle 139     document.getElementById("chartVariantSubSection01").style.display = 'none';
2989 02 Dec 14 olle 140     document.getElementById("chartVariantSubSection02").style.display = 'none';
2989 02 Dec 14 olle 141     document.getElementById("chartVariantSubSection04").style.display = 'none';
2989 02 Dec 14 olle 142     if (frm.reporttype.value == 'labenvironmentdailydisplay'
2989 02 Dec 14 olle 143       || frm.reporttype.value == 'labenvironmentweeklydisplay'
2989 02 Dec 14 olle 144       || frm.reporttype.value == 'labenvironmentoverviewdisplay')
2989 02 Dec 14 olle 145     {
2989 02 Dec 14 olle 146       // Show report period input fields
2989 02 Dec 14 olle 147       document.getElementById("reportPeriodSubSection01").style.display = 'block';
2989 02 Dec 14 olle 148       document.getElementById("reportPeriodSubSection02").style.display = 'block';
2989 02 Dec 14 olle 149       document.getElementById("reportPeriodSubSection04").style.display = 'block';
2989 02 Dec 14 olle 150       document.getElementById("reportPeriodSubSection01Header").innerHTML="Date";
2989 02 Dec 14 olle 151       document.getElementById("reportPeriodSubSection04HelpText").innerHTML="Date (YYYYMMDD) Blank field gives current date.";
2989 02 Dec 14 olle 152       if (frm.reporttype.value == 'labenvironmentweeklydisplay')
2989 02 Dec 14 olle 153       {
2989 02 Dec 14 olle 154         document.getElementById("reportPeriodSubSection01Header").innerHTML="Start date";
2989 02 Dec 14 olle 155         document.getElementById("reportPeriodSubSection04HelpText").innerHTML="Start date (YYYYMMDD) Blank field gives current date - 6 days.";
2989 02 Dec 14 olle 156       }
2989 02 Dec 14 olle 157       else if (frm.reporttype.value == 'labenvironmentoverviewdisplay')
2989 02 Dec 14 olle 158       {
2989 02 Dec 14 olle 159         document.getElementById("reportPeriodSubSection01Header").innerHTML="Start Date";
2989 02 Dec 14 olle 160         document.getElementById("reportPeriodSubSection04HelpText").innerHTML="Start date (YYYYMMDD) Blank field gives data from start.";
2989 02 Dec 14 olle 161       }
2989 02 Dec 14 olle 162     }
2989 02 Dec 14 olle 163     if (frm.reporttype.value == 'labenvironmentweeklydisplay'
2989 02 Dec 14 olle 164       || frm.reporttype.value == 'labenvironmentoverviewdisplay')
2989 02 Dec 14 olle 165     {
2989 02 Dec 14 olle 166       // Show day-time filter input fields
2989 02 Dec 14 olle 167       document.getElementById("dayTimeFilterSubSection01").style.display = 'block';
2989 02 Dec 14 olle 168       document.getElementById("dayTimeFilterSubSection02").style.display = 'block';
2989 02 Dec 14 olle 169       document.getElementById("dayTimeFilterSubSection04").style.display = 'block';
2989 02 Dec 14 olle 170     }
2989 02 Dec 14 olle 171     if (frm.reporttype.value == 'labenvironmentweeklydisplay'
2989 02 Dec 14 olle 172       || frm.reporttype.value == 'labenvironmentoverviewdisplay')
2989 02 Dec 14 olle 173     {
2989 02 Dec 14 olle 174       // Show weekday filter pop-up menu
2989 02 Dec 14 olle 175       document.getElementById("weekDayFilterSubSection01").style.display = 'block';
2989 02 Dec 14 olle 176       document.getElementById("weekDayFilterSubSection02").style.display = 'block';
2989 02 Dec 14 olle 177       document.getElementById("weekDayFilterSubSection04").style.display = 'block';
2989 02 Dec 14 olle 178     }
2989 02 Dec 14 olle 179     if (frm.reporttype.value == 'labenvironmentdailydisplay'
2989 02 Dec 14 olle 180       || frm.reporttype.value == 'labenvironmentweeklydisplay'
2989 02 Dec 14 olle 181       || frm.reporttype.value == 'labenvironmentoverviewdisplay')
2989 02 Dec 14 olle 182     {
2989 02 Dec 14 olle 183       // Show chart data pop-up menu
2989 02 Dec 14 olle 184       document.getElementById("chartVariantSubSection01").style.display = 'block';
2989 02 Dec 14 olle 185       document.getElementById("chartVariantSubSection02").style.display = 'block';
2989 02 Dec 14 olle 186       document.getElementById("chartVariantSubSection04").style.display = 'block';
2989 02 Dec 14 olle 187     }
2989 02 Dec 14 olle 188     Doc.show('parameterSection');
2989 02 Dec 14 olle 189         
2989 02 Dec 14 olle 190     Doc.show('step-2');
2989 02 Dec 14 olle 191     Doc.show('gocreate');    
2989 02 Dec 14 olle 192     Doc.hide('gonext');
2989 02 Dec 14 olle 193     frm.fromdate.focus();
2989 02 Dec 14 olle 194   }
2989 02 Dec 14 olle 195   
2989 02 Dec 14 olle 196   labenvdbdisp.validateStep2 = function(event)
2989 02 Dec 14 olle 197   {
2989 02 Dec 14 olle 198     labenvdbdisp.dateOnChange();
2989 02 Dec 14 olle 199     //if (!periodIsValid) event.preventDefault();
2989 02 Dec 14 olle 200   }
2989 02 Dec 14 olle 201   
2989 02 Dec 14 olle 202   labenvdbdisp.addEventHandlers = function(elements, eventName, handler)
2989 02 Dec 14 olle 203   {
2989 02 Dec 14 olle 204     for (var i = 0; i < elements.length; i++)
2989 02 Dec 14 olle 205     {
2989 02 Dec 14 olle 206       Events.addEventHandler(elements[i], eventName, handler);
2989 02 Dec 14 olle 207     }
2989 02 Dec 14 olle 208   }
2989 02 Dec 14 olle 209
2989 02 Dec 14 olle 210   labenvdbdisp.fromDateTimeOnChange = function()
2989 02 Dec 14 olle 211   {
2989 02 Dec 14 olle 212     var frm = document.forms['labenv'];
2989 02 Dec 14 olle 213     var todaysDate = new Date();
2989 02 Dec 14 olle 214     fromDateIsValid = false;
2989 02 Dec 14 olle 215     Wizard.setInputStatus('fromdate', '', '');
2989 02 Dec 14 olle 216   
2989 02 Dec 14 olle 217     var fromDate = frm.fromdate.value;
2989 02 Dec 14 olle 218     var fromTime = '0000';
2989 02 Dec 14 olle 219   
2989 02 Dec 14 olle 220     if (fromDate != '' || fromTime != '')
2989 02 Dec 14 olle 221     {
2989 02 Dec 14 olle 222       // Auto-fill the date if it's only given with 4(MMdd) or 6(yyMMdd) digits.
2989 02 Dec 14 olle 223       fromDate = autoFillDate(fromDate);
2989 02 Dec 14 olle 224       frm.fromdate.value = fromDate;
2989 02 Dec 14 olle 225
2989 02 Dec 14 olle 226       if (!Dates.isDate(fromDate, 'yyyyMMdd'))
2989 02 Dec 14 olle 227       {
2989 02 Dec 14 olle 228         Wizard.setInputStatus('fromdate', 'Not a valid date', 'invalid');
2989 02 Dec 14 olle 229         return;
2989 02 Dec 14 olle 230       }    
2989 02 Dec 14 olle 231     
2989 02 Dec 14 olle 232       if (!Dates.isDate(fromDate + ' ' + fromTime, 'yyyyMMdd HHmm'))
2989 02 Dec 14 olle 233       {
2989 02 Dec 14 olle 234         if (fromDate != '') Wizard.setInputStatus('fromdate', 'Not a valid time (if time unknown, also leave date field blank)', 'invalid');
2989 02 Dec 14 olle 235         return;
2989 02 Dec 14 olle 236       }
2989 02 Dec 14 olle 237       Wizard.setInputStatus('fromdate', '', 'valid');
2989 02 Dec 14 olle 238     }
2989 02 Dec 14 olle 239     fromDateIsValid = true;
2989 02 Dec 14 olle 240   }
2989 02 Dec 14 olle 241
2989 02 Dec 14 olle 242   var intervalIsValid = true;
2989 02 Dec 14 olle 243   
2989 02 Dec 14 olle 244   labenvdbdisp.dateOnChange = function()
2989 02 Dec 14 olle 245   {
2989 02 Dec 14 olle 246     var frm = document.forms['labenv'];    
2989 02 Dec 14 olle 247     var fdate;
2989 02 Dec 14 olle 248     var tdate;
2989 02 Dec 14 olle 249     
2989 02 Dec 14 olle 250     intervalIsValid = false;
2989 02 Dec 14 olle 251     Wizard.setInputStatus('displayInterval','','valid');
2989 02 Dec 14 olle 252     if (frm.fromdate.value != null && frm.fromdate.value != '')
2989 02 Dec 14 olle 253     {
2989 02 Dec 14 olle 254       frm.fromdate.value = autoFillDate(frm.fromdate.value);      
2989 02 Dec 14 olle 255       if (!Dates.isDate(frm.fromdate.value, 'yyyyMMdd'))
2989 02 Dec 14 olle 256       {
2989 02 Dec 14 olle 257         Wizard.setInputStatus('displayInterval','Not a valid from-date', 'invalid');
2989 02 Dec 14 olle 258         return;
2989 02 Dec 14 olle 259       }
2989 02 Dec 14 olle 260       else
2989 02 Dec 14 olle 261       {
2989 02 Dec 14 olle 262         fdate = frm.fromdate.value;
2989 02 Dec 14 olle 263         fdate = new Date(fdate.substr(0,4), parseInt(fdate.substr(4,2), 10)-1, fdate.substr(6,2));
2989 02 Dec 14 olle 264       }
2989 02 Dec 14 olle 265     }
2989 02 Dec 14 olle 266
2989 02 Dec 14 olle 267     if (frm.reporttype.value == 'labenvironmentdailydisplay')
2989 02 Dec 14 olle 268     {
2989 02 Dec 14 olle 269       tdate = fdate;
2989 02 Dec 14 olle 270     }
2989 02 Dec 14 olle 271
2989 02 Dec 14 olle 272     if (tdate != null && fdate != null)
2989 02 Dec 14 olle 273     {
2989 02 Dec 14 olle 274       if (fdate > tdate)
2989 02 Dec 14 olle 275       {
2989 02 Dec 14 olle 276         Wizard.setInputStatus('displayInterval', 'Invalid period', 'invalid')
2989 02 Dec 14 olle 277         return;
2989 02 Dec 14 olle 278       }      
2989 02 Dec 14 olle 279     }
2989 02 Dec 14 olle 280     intervalIsValid = true;
2989 02 Dec 14 olle 281   }
2989 02 Dec 14 olle 282
2989 02 Dec 14 olle 283   labenvdbdisp.submit = function(event)
2989 02 Dec 14 olle 284   {
2989 02 Dec 14 olle 285     var frm = document.forms['labenv'];
2989 02 Dec 14 olle 286     var reportType = frm.reporttype.value;    
2989 02 Dec 14 olle 287     
2989 02 Dec 14 olle 288     var url = '../LabEnvironmentDisplay.servlet?ID='+App.getSessionId();
2989 02 Dec 14 olle 289     url += '&cmd='+reportType;
2989 02 Dec 14 olle 290     url += '&fdate='+encodeURIComponent(frm.fromdate.value);
2989 02 Dec 14 olle 291     if (reportType == 'labenvironmentweeklydisplay' || reportType == 'labenvironmentoverviewdisplay')
2989 02 Dec 14 olle 292     {
2989 02 Dec 14 olle 293       url += '&weekdayfilter='+encodeURIComponent(frm.weekdayfilter.value);
2989 02 Dec 14 olle 294       url += '&filterfromtime='+encodeURIComponent(frm.filterfromtime.value);
2989 02 Dec 14 olle 295       url += '&filtertotime='+encodeURIComponent(frm.filtertotime.value);
2989 02 Dec 14 olle 296     }
2989 02 Dec 14 olle 297     url += '&cvariant='+encodeURIComponent(frm.chartvariant.value);
2989 02 Dec 14 olle 298     
2989 02 Dec 14 olle 299     Wizard.showLoadingAnimation('Generating plots...');
2989 02 Dec 14 olle 300     Wizard.asyncJsonRequest(url, labenvdbdisp.onPlotGenerated);
2989 02 Dec 14 olle 301   }
2989 02 Dec 14 olle 302
2989 02 Dec 14 olle 303   labenvdbdisp.onPlotGenerated = function(response)
2989 02 Dec 14 olle 304   {
2989 02 Dec 14 olle 305     var frm = document.forms['labenv'];    
2989 02 Dec 14 olle 306     var reportType = frm.reporttype.value;
2989 02 Dec 14 olle 307     //alert("onPlotGenerated(): reportType = " + reportType);
2989 02 Dec 14 olle 308     if (response.status != 'ok')
2989 02 Dec 14 olle 309     {
2989 02 Dec 14 olle 310       setFatalError(response.message);
2989 02 Dec 14 olle 311       return false;
2989 02 Dec 14 olle 312     }
2989 02 Dec 14 olle 313     var report = response.report;
2989 02 Dec 14 olle 314     var permissionDeniedForPatientName = report.permissionDeniedForPatientName;
2989 02 Dec 14 olle 315     var reportTable;
2989 02 Dec 14 olle 316     var cellElement = document.getElementById('reportdiv');
2989 02 Dec 14 olle 317     
2989 02 Dec 14 olle 318     if (report != null)
2989 02 Dec 14 olle 319     {
2989 02 Dec 14 olle 320       if (reportType == 'labenvironmentdailydisplay' ||
2989 02 Dec 14 olle 321         reportType == 'labenvironmentweeklydisplay' ||
2989 02 Dec 14 olle 322         reportType == 'labenvironmentoverviewdisplay')
2989 02 Dec 14 olle 323       {
2989 02 Dec 14 olle 324         //alert("onPlotGenerated(): Inside plot block for labenvironmentdailydisplay");
2989 02 Dec 14 olle 325         var storageIntervalInSeconds = labenvdbdisp.getStorageIntervalInSeconds();
2989 02 Dec 14 olle 326         var draw_area_wdt = 700;
2989 02 Dec 14 olle 327         var draw_area_hgt = 550;
2989 02 Dec 14 olle 328         var draw_scale_factor = 2;
2989 02 Dec 14 olle 329         var jsonStatisticsPlotArray = report.plotStatistics;
2989 02 Dec 14 olle 330         // Draw plots
2989 02 Dec 14 olle 331         document.getElementById("reportdiv").innerHTML="";
2989 02 Dec 14 olle 332         for (var plotIndex in jsonStatisticsPlotArray)
2989 02 Dec 14 olle 333         {
2989 02 Dec 14 olle 334           //
2989 02 Dec 14 olle 335           // Get plot JSON data container with extra info and plot data
2989 02 Dec 14 olle 336           var plotJsonDataContainer = jsonStatisticsPlotArray[plotIndex];
2989 02 Dec 14 olle 337           // Get plot JSON extra info and plot data
2989 02 Dec 14 olle 338           var plotChartVariant = plotJsonDataContainer['chartVariant'];
2989 02 Dec 14 olle 339           var plotViewType = plotJsonDataContainer['viewType'];
2989 02 Dec 14 olle 340           var plotOptionalHeadline = plotJsonDataContainer['optionalHeadline'];
2989 02 Dec 14 olle 341           var boxPlotJsonData = plotJsonDataContainer['plotData'];
2989 02 Dec 14 olle 342           // Create plot from plot JSON data
2989 02 Dec 14 olle 343           if (plotOptionalHeadline != null && plotOptionalHeadline != '')
2989 02 Dec 14 olle 344           {
2989 02 Dec 14 olle 345             // Print optional headline
2989 02 Dec 14 olle 346             var headlineText = document.createElement('text');
2989 02 Dec 14 olle 347             headlineText.innerHTML = "<BR>" + plotOptionalHeadline + "<BR>";
2989 02 Dec 14 olle 348             cellElement.appendChild(headlineText);
2989 02 Dec 14 olle 349           }
2989 02 Dec 14 olle 350           var plotKey = plotChartVariant + '_' + plotViewType;
2989 02 Dec 14 olle 351           // Add plot
2989 02 Dec 14 olle 352           var canvasInTable = document.createElement('canvas');
2989 02 Dec 14 olle 353           canvasInTable.setAttribute('id', plotKey);
2989 02 Dec 14 olle 354           canvasInTable.setAttribute('width', draw_area_wdt * draw_scale_factor);
2989 02 Dec 14 olle 355           canvasInTable.setAttribute('height', draw_area_hgt * draw_scale_factor);
2989 02 Dec 14 olle 356           createGraphPlot(boxPlotJsonData, canvasInTable, draw_area_wdt, draw_area_hgt, draw_scale_factor, plotViewType, storageIntervalInSeconds);
2989 02 Dec 14 olle 357           cellElement.appendChild(canvasInTable);          
2989 02 Dec 14 olle 358           canvasInTable.addEventListener('mousemove', labenvdbdisp.drawCanvasGuidelines, false);
2989 02 Dec 14 olle 359           canvasInTable.addEventListener('mouseleave', labenvdbdisp.hideCanvasGuidelines, false);
2989 02 Dec 14 olle 360         }
2989 02 Dec 14 olle 361         // Print optional appended info
2989 02 Dec 14 olle 362         var appendedInfo = report.appendedInfo;
2989 02 Dec 14 olle 363         if (appendedInfo != null && appendedInfo != '')
2989 02 Dec 14 olle 364         {
2989 02 Dec 14 olle 365           // Print optional headline
2989 02 Dec 14 olle 366           var infoText = document.createElement('text');
2989 02 Dec 14 olle 367           infoText.innerHTML = "<BR>" + appendedInfo + "<BR>";
2989 02 Dec 14 olle 368           cellElement.appendChild(infoText);
2989 02 Dec 14 olle 369         }
2989 02 Dec 14 olle 370       }
2989 02 Dec 14 olle 371     }
2989 02 Dec 14 olle 372     else
2989 02 Dec 14 olle 373     {
2989 02 Dec 14 olle 374       var messageCell = labenvdbdisp.getTableCellElement('No values could be found during given period', 'reportheader');
2989 02 Dec 14 olle 375       var messageRow = document.createElement('tr');
2989 02 Dec 14 olle 376       messageRow.appendChild(messageCell);      
2989 02 Dec 14 olle 377       var messageTable = labenvdbdisp.getReportTable();
2989 02 Dec 14 olle 378       messageTable.appendChild(messageRow);
2989 02 Dec 14 olle 379       reportTable = messageTable;      
2989 02 Dec 14 olle 380     }
2989 02 Dec 14 olle 381     Doc.show('step-3');
2989 02 Dec 14 olle 382     Doc.show('printButton');
2989 02 Dec 14 olle 383     Doc.show('gorestart');    
2989 02 Dec 14 olle 384   }
2989 02 Dec 14 olle 385
2989 02 Dec 14 olle 386   labenvdbdisp.getReportTable = function()
2989 02 Dec 14 olle 387   {
2989 02 Dec 14 olle 388       var reportTable = document.createElement('table');
2989 02 Dec 14 olle 389       reportTable.setAttribute('class','reporttable');
2989 02 Dec 14 olle 390       reportTable.setAttribute('border','1');      
2989 02 Dec 14 olle 391       return reportTable;
2989 02 Dec 14 olle 392   }
2989 02 Dec 14 olle 393   
2989 02 Dec 14 olle 394   labenvdbdisp.getTableCellElement = function(text, clazz, colspan, rowspan)
2989 02 Dec 14 olle 395   {
2989 02 Dec 14 olle 396     var cellElement = document.createElement('td');
2989 02 Dec 14 olle 397     text = new String(text);    
2989 02 Dec 14 olle 398     var textArray = text.split("\n");    
2989 02 Dec 14 olle 399     if (textArray.length > 1)
2989 02 Dec 14 olle 400     {  
2989 02 Dec 14 olle 401       for (var i=0;i<textArray.length;i++)
2989 02 Dec 14 olle 402       {        
2989 02 Dec 14 olle 403         if (i>0)cellElement.appendChild(document.createElement('br'));
2989 02 Dec 14 olle 404         cellElement.appendChild(document.createTextNode(textArray[i]));
2989 02 Dec 14 olle 405       }      
2989 02 Dec 14 olle 406     }
2989 02 Dec 14 olle 407     else
2989 02 Dec 14 olle 408     {
2989 02 Dec 14 olle 409       cellElement.appendChild(document.createTextNode(text));
2989 02 Dec 14 olle 410     }
2989 02 Dec 14 olle 411     cellElement.setAttribute('class', clazz);
2989 02 Dec 14 olle 412     if (colspan != null) cellElement.setAttribute('colspan', colspan);
2989 02 Dec 14 olle 413     if (rowspan != null) cellElement.setAttribute('rowspan', rowspan);
2989 02 Dec 14 olle 414     
2989 02 Dec 14 olle 415     return cellElement;
2989 02 Dec 14 olle 416   }
2989 02 Dec 14 olle 417   
2989 02 Dec 14 olle 418   var xGuide;
2989 02 Dec 14 olle 419   var yGuide;
2989 02 Dec 14 olle 420   
2989 02 Dec 14 olle 421   labenvdbdisp.drawCanvasGuidelines = function(event)
2989 02 Dec 14 olle 422   {
2989 02 Dec 14 olle 423     if (!xGuide)
2989 02 Dec 14 olle 424     {
2989 02 Dec 14 olle 425       xGuide = document.getElementById('x-guide');
2989 02 Dec 14 olle 426       yGuide = document.getElementById('y-guide');
2989 02 Dec 14 olle 427     }
2989 02 Dec 14 olle 428     var canvas = event.target;
2989 02 Dec 14 olle 429     var centerX = event.clientX;
2989 02 Dec 14 olle 430     var centerY = event.clientY;
2989 02 Dec 14 olle 431     var canvasPos = Doc.getElementPosition(canvas);
4526 19 Jun 17 nicklas 432     var startX = canvasPos.left+60;
4526 19 Jun 17 nicklas 433     var widthX = canvasPos.width-120;
4526 19 Jun 17 nicklas 434     var startY = canvasPos.top+65;
4526 19 Jun 17 nicklas 435     var heightY = canvasPos.height-120;
2989 02 Dec 14 olle 436     if (centerY < startY || centerY > startY+heightY)
2989 02 Dec 14 olle 437     {
2989 02 Dec 14 olle 438       // Hide when mouse is in the text area below or over the plot
2989 02 Dec 14 olle 439       yGuide.style.display = 'none';
2989 02 Dec 14 olle 440     }
2989 02 Dec 14 olle 441     else
2989 02 Dec 14 olle 442     {
2989 02 Dec 14 olle 443       yGuide.style.top = (centerY-2) + 'px';
2989 02 Dec 14 olle 444       yGuide.style.left = startX + 'px';
2989 02 Dec 14 olle 445       yGuide.style.width = widthX + 'px';
2989 02 Dec 14 olle 446       yGuide.style.display = 'block';
2989 02 Dec 14 olle 447     }
2989 02 Dec 14 olle 448     if (centerX < startX || centerX > startX + widthX)
2989 02 Dec 14 olle 449     {
2989 02 Dec 14 olle 450       // Hide when mouse is in the text area to the left or right of the plot
2989 02 Dec 14 olle 451       xGuide.style.display = 'none';
2989 02 Dec 14 olle 452     }
2989 02 Dec 14 olle 453     else
2989 02 Dec 14 olle 454     {
2989 02 Dec 14 olle 455       // Avoid drawing outside the avilable height (causes an extra pair of scroll bars)
2989 02 Dec 14 olle 456       var yLimit = App.getWindowPosition().height;
2989 02 Dec 14 olle 457       if (startY+heightY > yLimit)
2989 02 Dec 14 olle 458       {
2989 02 Dec 14 olle 459         heightY = yLimit-startY;
2989 02 Dec 14 olle 460       }
2989 02 Dec 14 olle 461       xGuide.style.top = startY + 'px';
2989 02 Dec 14 olle 462       xGuide.style.left = (centerX-2) + 'px';
2989 02 Dec 14 olle 463       xGuide.style.height = heightY + 'px';
2989 02 Dec 14 olle 464       xGuide.style.display = 'block';
2989 02 Dec 14 olle 465     }
2989 02 Dec 14 olle 466   }
2989 02 Dec 14 olle 467   
2989 02 Dec 14 olle 468   labenvdbdisp.hideCanvasGuidelines = function(event)
2989 02 Dec 14 olle 469   {
2989 02 Dec 14 olle 470     xGuide.style.display = 'none';
2989 02 Dec 14 olle 471     yGuide.style.display = 'none';
2989 02 Dec 14 olle 472   }
2989 02 Dec 14 olle 473   
2989 02 Dec 14 olle 474   labenvdbdisp.printVersion = function()
2989 02 Dec 14 olle 475   {
2989 02 Dec 14 olle 476     var printNote = '<b>Note!</b> For better printing set page orientation to <i>portrait</i>.';
2989 02 Dec 14 olle 477     printNote += ' Scale down to <i>90%</i> to fit 2 plots per page.';
3735 10 Feb 16 olle 478     LabEnv.openPrintWindow('step-3-content', 'Lab environment display', 'portrait', printNote, '../', 'report.css');
2989 02 Dec 14 olle 479   }
2989 02 Dec 14 olle 480   
2989 02 Dec 14 olle 481   return labenvdbdisp;
2989 02 Dec 14 olle 482 }();
2989 02 Dec 14 olle 483
2989 02 Dec 14 olle 484 Doc.onLoad(LabEnvDbDisp.initPage);