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

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