extensions/net.sf.basedb.reggie/trunk/resources/sampleproc/rnaqc_aliquot.js

Code
Comments
Other
Rev Date Author Line
2774 09 Oct 14 nicklas 1 var RnaQcAliquot = function()
2774 09 Oct 14 nicklas 2 {
2774 09 Oct 14 nicklas 3   var rnaqc = {};
2774 09 Oct 14 nicklas 4   
3730 04 Feb 16 nicklas 5   var HISENSE_LIMIT = 50.0;
3545 16 Oct 15 nicklas 6   var ALIQUOT_VOLUME_NORMAL = 2.0;
3545 16 Oct 15 nicklas 7   var ALIQUOT_VOLUME_HISENSE = 6.0;
3550 19 Oct 15 nicklas 8   var ALIQUOT_VOLUME_BA = 1.0;
2774 09 Oct 14 nicklas 9   
2774 09 Oct 14 nicklas 10   var selectedRna;
2774 09 Oct 14 nicklas 11   var selectedBioPlate;
2774 09 Oct 14 nicklas 12   var subtypeRna = null;
2774 09 Oct 14 nicklas 13   var bioPlateNameIsValid = false;
3471 28 Aug 15 nicklas 14   var bioPlateIsValid = false;
2774 09 Oct 14 nicklas 15   
2774 09 Oct 14 nicklas 16   var autoGoNext = 0;
2808 15 Oct 14 nicklas 17   var newRna = [];
2774 09 Oct 14 nicklas 18   
2774 09 Oct 14 nicklas 19   // Page initialization
2774 09 Oct 14 nicklas 20   rnaqc.initPage = function()
2774 09 Oct 14 nicklas 21   {
2774 09 Oct 14 nicklas 22     // Step 1
2774 09 Oct 14 nicklas 23     Events.addEventHandler('step-1', 'wizard-validate', rnaqc.validateStep1);
2774 09 Oct 14 nicklas 24     Buttons.addClickHandler('btnSelectRna', rnaqc.selectRna);
2774 09 Oct 14 nicklas 25     Events.addEventHandler('rna', 'base-selected', rnaqc.onRnaSelected);
2774 09 Oct 14 nicklas 26     
2774 09 Oct 14 nicklas 27     // Step 2
2774 09 Oct 14 nicklas 28     Events.addEventHandler('step-2', 'wizard-initialize', rnaqc.initializeStep2);
2774 09 Oct 14 nicklas 29     Events.addEventHandler('step-2', 'wizard-validate', rnaqc.validateStep2);
2774 09 Oct 14 nicklas 30     Events.addEventHandler('bioPlates', 'change', rnaqc.bioPlateOnChange);
2774 09 Oct 14 nicklas 31     Events.addEventHandler('CALIPER_RNAQC', 'click', rnaqc.bioPlateTypeOnChange);
2774 09 Oct 14 nicklas 32     Events.addEventHandler('BA_RNAQC', 'click', rnaqc.bioPlateTypeOnChange);
2774 09 Oct 14 nicklas 33     Events.addEventHandler('bioPlateName', 'change', rnaqc.bioPlateNameOnChange);
2774 09 Oct 14 nicklas 34
2774 09 Oct 14 nicklas 35     // Step 3
2774 09 Oct 14 nicklas 36     Events.addEventHandler('step-3', 'wizard-initialize', rnaqc.initializeStep3);
2774 09 Oct 14 nicklas 37     Events.addEventHandler('step-3', 'wizard-validate', rnaqc.validateStep3);
2774 09 Oct 14 nicklas 38     
2774 09 Oct 14 nicklas 39     // Navigation
2774 09 Oct 14 nicklas 40     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
2774 09 Oct 14 nicklas 41     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
2774 09 Oct 14 nicklas 42     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
2774 09 Oct 14 nicklas 43     Buttons.addClickHandler('goregister', Wizard.goRegister);
3544 15 Oct 15 nicklas 44     Buttons.addClickHandler('goprint', rnaqc.printVersion);
2774 09 Oct 14 nicklas 45
2774 09 Oct 14 nicklas 46     // Final registration
2774 09 Oct 14 nicklas 47     Events.addEventHandler('wizard', 'wizard-submit', rnaqc.submit);
2774 09 Oct 14 nicklas 48
2774 09 Oct 14 nicklas 49     var rna = Data.json('page-data', 'rna-id');
2774 09 Oct 14 nicklas 50     if (rna.length > 0)
2774 09 Oct 14 nicklas 51     {
2774 09 Oct 14 nicklas 52       Doc.show('step-1');
2774 09 Oct 14 nicklas 53       autoGoNext = rna.length;
2808 15 Oct 14 nicklas 54       // Get more information about the selected rna
2808 15 Oct 14 nicklas 55       var url = '../RnaQc.servlet?ID='+App.getSessionId();
2808 15 Oct 14 nicklas 56       url += '&cmd=GetRnaInfo&rnaIds=' + rna.join(',');
2808 15 Oct 14 nicklas 57       Wizard.asyncJsonRequest(url, rnaqc.onRnaInfoLoaded);
2774 09 Oct 14 nicklas 58     }
2774 09 Oct 14 nicklas 59     else
2774 09 Oct 14 nicklas 60     {
2774 09 Oct 14 nicklas 61       var url = '../RnaQc.servlet?ID='+App.getSessionId();
2774 09 Oct 14 nicklas 62       url += '&cmd=GetRnaExtractsWithoutQc';
2774 09 Oct 14 nicklas 63       Wizard.showLoadingAnimation('Loading RNA extracts...');
2774 09 Oct 14 nicklas 64       Wizard.asyncJsonRequest(url, rnaqc.onRnaLoaded);
2774 09 Oct 14 nicklas 65     }
2774 09 Oct 14 nicklas 66   }
2774 09 Oct 14 nicklas 67   
2774 09 Oct 14 nicklas 68   rnaqc.onRnaLoaded = function(response)
2774 09 Oct 14 nicklas 69   {
2774 09 Oct 14 nicklas 70     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 71     var rnaExtracts = response.rnaExtracts;
2774 09 Oct 14 nicklas 72     
2774 09 Oct 14 nicklas 73     if (rnaExtracts.length > 0)
2774 09 Oct 14 nicklas 74     {
2774 09 Oct 14 nicklas 75       for (var i=0; i < rnaExtracts.length; i++)
2774 09 Oct 14 nicklas 76       {
2774 09 Oct 14 nicklas 77         var selected = i < 12;
2774 09 Oct 14 nicklas 78         var rna = rnaExtracts[i];
2774 09 Oct 14 nicklas 79         rnaqc.addRnaOption(frm.rna, rna, selected);
2774 09 Oct 14 nicklas 80       }
2774 09 Oct 14 nicklas 81     }
2774 09 Oct 14 nicklas 82     else
2774 09 Oct 14 nicklas 83     {  
2774 09 Oct 14 nicklas 84       Wizard.setInputStatus('rna', 'invalid', 'No RNA available for quality control.');
2774 09 Oct 14 nicklas 85     }
2774 09 Oct 14 nicklas 86     
2774 09 Oct 14 nicklas 87     Doc.show('step-1');
2774 09 Oct 14 nicklas 88     Doc.show('gonext');
2774 09 Oct 14 nicklas 89   }
2774 09 Oct 14 nicklas 90   
2774 09 Oct 14 nicklas 91   rnaqc.selectRna = function()
2774 09 Oct 14 nicklas 92   {
2774 09 Oct 14 nicklas 93     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 94     if (frm.rna.disabled) return;
2774 09 Oct 14 nicklas 95     
2774 09 Oct 14 nicklas 96     if (subtypeRna == null)
2774 09 Oct 14 nicklas 97     {
2774 09 Oct 14 nicklas 98       subtypeRna = Reggie.getSubtypeInfo('RNA');
2774 09 Oct 14 nicklas 99     }
2774 09 Oct 14 nicklas 100     
2808 15 Oct 14 nicklas 101     newRna = [];
2774 09 Oct 14 nicklas 102     var url = '&resetTemporary=1';
2774 09 Oct 14 nicklas 103     url += '&tmpfilter:INT:itemSubtype='+subtypeRna.id;
2774 09 Oct 14 nicklas 104     Dialogs.selectItem('EXTRACT', 'rna', 1, url);
2774 09 Oct 14 nicklas 105   }
2774 09 Oct 14 nicklas 106
2774 09 Oct 14 nicklas 107   rnaqc.onRnaSelected = function(event)
2774 09 Oct 14 nicklas 108   {
2774 09 Oct 14 nicklas 109     var rna = event.detail;
2774 09 Oct 14 nicklas 110     
2774 09 Oct 14 nicklas 111     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 112     var rnaList = frm.rna;
2808 15 Oct 14 nicklas 113     var isNew = true;
2774 09 Oct 14 nicklas 114     for (var i = 0; i < rnaList.length; i++)
2774 09 Oct 14 nicklas 115     {
2774 09 Oct 14 nicklas 116       if (rnaList[i].value == rna.id)
2774 09 Oct 14 nicklas 117       {
2774 09 Oct 14 nicklas 118         rnaList[i].selected = true;
2808 15 Oct 14 nicklas 119         isNew = false;
2774 09 Oct 14 nicklas 120       }
2774 09 Oct 14 nicklas 121     }
2774 09 Oct 14 nicklas 122     
2808 15 Oct 14 nicklas 123     if (isNew) newRna[newRna.length] = rna.id;
2808 15 Oct 14 nicklas 124     
2808 15 Oct 14 nicklas 125     if (event.detail.remaining == 0 && newRna.length > 0)
2808 15 Oct 14 nicklas 126     {
2808 15 Oct 14 nicklas 127       // Get more information about the selected rna
2808 15 Oct 14 nicklas 128       var url = '../RnaQc.servlet?ID='+App.getSessionId();
2808 15 Oct 14 nicklas 129       url += '&cmd=GetRnaInfo&rnaIds=' + newRna.join(',');
2808 15 Oct 14 nicklas 130       Wizard.asyncJsonRequest(url, rnaqc.onRnaInfoLoaded);
2808 15 Oct 14 nicklas 131     }
2774 09 Oct 14 nicklas 132   }
2774 09 Oct 14 nicklas 133
2774 09 Oct 14 nicklas 134   rnaqc.onRnaInfoLoaded = function(response)
2774 09 Oct 14 nicklas 135   {
2774 09 Oct 14 nicklas 136     var frm = document.forms['reggie'];
2808 15 Oct 14 nicklas 137     var rnaList = response.rna;
2774 09 Oct 14 nicklas 138
2808 15 Oct 14 nicklas 139     for (var rnaNo = 0; rnaNo < rnaList.length; rnaNo++)
2808 15 Oct 14 nicklas 140     {
2808 15 Oct 14 nicklas 141       var rna = rnaList[rnaNo];
2808 15 Oct 14 nicklas 142       rnaqc.addRnaOption(frm.rna, rna, true);
2808 15 Oct 14 nicklas 143     }
2774 09 Oct 14 nicklas 144     
2774 09 Oct 14 nicklas 145     if (frm.rna.length == autoGoNext)
2774 09 Oct 14 nicklas 146     {
2774 09 Oct 14 nicklas 147       Wizard.goNext(true);
2774 09 Oct 14 nicklas 148     }
2774 09 Oct 14 nicklas 149   }
2774 09 Oct 14 nicklas 150   
2774 09 Oct 14 nicklas 151   rnaqc.addRnaOption = function(list, rna, selected)
2774 09 Oct 14 nicklas 152   {
2774 09 Oct 14 nicklas 153     var name = rna.name;
2774 09 Oct 14 nicklas 154     if (rna.bioWell)
2774 09 Oct 14 nicklas 155     {
2774 09 Oct 14 nicklas 156       name += ' -- ' + rna.bioWell.bioPlate.name + ' (' + Reggie.wellToAlpha(rna.bioWell.row)+(rna.bioWell.column+1)+')';
2774 09 Oct 14 nicklas 157     }
2774 09 Oct 14 nicklas 158
2774 09 Oct 14 nicklas 159     var option = new Option(name, rna.id, selected, selected);
3742 12 Feb 16 nicklas 160     if (rna.specimen && rna.specimen.YellowLabel != null) option.className = 'yellow';
2774 09 Oct 14 nicklas 161     option.rna = rna;
2774 09 Oct 14 nicklas 162     list[list.length] = option;
2774 09 Oct 14 nicklas 163   }
2774 09 Oct 14 nicklas 164   
2774 09 Oct 14 nicklas 165   rnaqc.validateStep1 = function(event)
2774 09 Oct 14 nicklas 166   {
2774 09 Oct 14 nicklas 167     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 168     var rnaList = frm.rna;
2774 09 Oct 14 nicklas 169     
2774 09 Oct 14 nicklas 170     selectedRna = [];
2774 09 Oct 14 nicklas 171     for (var i=0; i < rnaList.length; i++)
2774 09 Oct 14 nicklas 172     {
2774 09 Oct 14 nicklas 173       if (rnaList[i].selected)
2774 09 Oct 14 nicklas 174       {
2774 09 Oct 14 nicklas 175         selectedRna[selectedRna.length] = rnaList[i].rna;
2774 09 Oct 14 nicklas 176       }
2774 09 Oct 14 nicklas 177     }
2774 09 Oct 14 nicklas 178       
2774 09 Oct 14 nicklas 179     if (selectedRna.length == 0)
2774 09 Oct 14 nicklas 180     {
2774 09 Oct 14 nicklas 181       Wizard.setInputStatus('rna', 'invalid', 'Not selected', 'invalid');
2774 09 Oct 14 nicklas 182       event.preventDefault();
2774 09 Oct 14 nicklas 183     }
2774 09 Oct 14 nicklas 184     else
2774 09 Oct 14 nicklas 185     {
2774 09 Oct 14 nicklas 186       Wizard.setInputStatus('rna', 'valid');
2774 09 Oct 14 nicklas 187     }
2774 09 Oct 14 nicklas 188   }
2774 09 Oct 14 nicklas 189
2774 09 Oct 14 nicklas 190   rnaqc.initializeStep2 = function()
2774 09 Oct 14 nicklas 191   {
2774 09 Oct 14 nicklas 192     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 193     Wizard.setCurrentStep(2);
2774 09 Oct 14 nicklas 194     Doc.show('gonext');
3471 28 Aug 15 nicklas 195     Doc.show('gocancel');
2774 09 Oct 14 nicklas 196     
2774 09 Oct 14 nicklas 197     Reggie.loadProtocols('QUALITY_CONTROL', 'protocols');
2774 09 Oct 14 nicklas 198
2774 09 Oct 14 nicklas 199     var url = '../RnaQc.servlet?ID='+App.getSessionId();
2774 09 Oct 14 nicklas 200     url += '&cmd=GetActiveRnaQcBioPlates&numFreeWells=' + selectedRna.length;
2774 09 Oct 14 nicklas 201     Doc.addClass('bioPlates', 'list-loading');
2774 09 Oct 14 nicklas 202     frm.bioPlates[0] = new Option('loading...');
2774 09 Oct 14 nicklas 203     Wizard.asyncJsonRequest(url, rnaqc.bioPlatesLoaded);
2774 09 Oct 14 nicklas 204   }
2774 09 Oct 14 nicklas 205   
2774 09 Oct 14 nicklas 206   rnaqc.bioPlatesLoaded = function(response)
2774 09 Oct 14 nicklas 207   {
2774 09 Oct 14 nicklas 208     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 209     frm.bioPlates.length = 0;
2774 09 Oct 14 nicklas 210     Doc.removeClass('bioPlates', 'list-loading');
2774 09 Oct 14 nicklas 211
2774 09 Oct 14 nicklas 212     var plates = response.plates;
3471 28 Aug 15 nicklas 213     var hasSelected = false;
2774 09 Oct 14 nicklas 214     for (var i = 0; i < plates.length; i++)
2774 09 Oct 14 nicklas 215     {
3471 28 Aug 15 nicklas 216       var plate = plates[i];
3471 28 Aug 15 nicklas 217       var selected = !hasSelected && plate.freeWells >= selectedRna.length;
3471 28 Aug 15 nicklas 218       hasSelected |= selected;
4583 21 Sep 17 nicklas 219       var option = new Option(plate.name + ' -- ' + plate.freeWells + ' free wells', plate.id, selected, selected);
3471 28 Aug 15 nicklas 220       option.plate = plate;
3471 28 Aug 15 nicklas 221       frm.bioPlates[frm.bioPlates.length] = option;
2774 09 Oct 14 nicklas 222     }
4583 21 Sep 17 nicklas 223     frm.bioPlates[frm.bioPlates.length] = new Option('- create new -', 0, false, !hasSelected);
2774 09 Oct 14 nicklas 224   
2774 09 Oct 14 nicklas 225     rnaqc.bioPlateOnChange();
2774 09 Oct 14 nicklas 226     frm.bioPlates.focus();
2774 09 Oct 14 nicklas 227   }
2774 09 Oct 14 nicklas 228   
2774 09 Oct 14 nicklas 229   // If the 'create new' option is selected we need to display that section
2774 09 Oct 14 nicklas 230   rnaqc.bioPlateOnChange = function()
2774 09 Oct 14 nicklas 231   {
2774 09 Oct 14 nicklas 232     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 233     
2774 09 Oct 14 nicklas 234     var createNewSelected = parseInt(frm.bioPlates.value) == 0;
2774 09 Oct 14 nicklas 235     Doc.showHide('createNewBioPlateSection', createNewSelected);
2774 09 Oct 14 nicklas 236     
3471 28 Aug 15 nicklas 237     Wizard.setInputStatus('bioPlates');
3471 28 Aug 15 nicklas 238     bioPlateIsValid = true;
3471 28 Aug 15 nicklas 239     
2774 09 Oct 14 nicklas 240     if (createNewSelected)
2774 09 Oct 14 nicklas 241     {
2774 09 Oct 14 nicklas 242       if (frm.bioPlateName.value == '') 
2774 09 Oct 14 nicklas 243       {
2774 09 Oct 14 nicklas 244         rnaqc.bioPlateTypeOnChange();
2774 09 Oct 14 nicklas 245       }
2774 09 Oct 14 nicklas 246       frm.bioPlateBarcode.focus();
2774 09 Oct 14 nicklas 247     }
3471 28 Aug 15 nicklas 248     else
3471 28 Aug 15 nicklas 249     {
3471 28 Aug 15 nicklas 250       var selected = frm.bioPlates[frm.bioPlates.selectedIndex].plate;
3471 28 Aug 15 nicklas 251       if (selected.freeWells < selectedRna.length)
3471 28 Aug 15 nicklas 252       {
3471 28 Aug 15 nicklas 253         Wizard.setInputStatus('bioPlates', 'invalid', 'Not enough free wells');
3471 28 Aug 15 nicklas 254         bioPlateIsValid = false;
3471 28 Aug 15 nicklas 255       }
3471 28 Aug 15 nicklas 256     }
2774 09 Oct 14 nicklas 257   }
2774 09 Oct 14 nicklas 258
2774 09 Oct 14 nicklas 259   //  We need to get the next auto-generated name for a new CaliperPlate or BAPlate
2774 09 Oct 14 nicklas 260   rnaqc.bioPlateTypeOnChange = function()
2774 09 Oct 14 nicklas 261   {
2774 09 Oct 14 nicklas 262     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 263     var selectedType = Forms.getCheckedRadio(frm.bioPlateType);
2774 09 Oct 14 nicklas 264     if (selectedType.nextPlateName)
2774 09 Oct 14 nicklas 265     {
2774 09 Oct 14 nicklas 266       rnaqc.onNextPlateNameGenerated();
2774 09 Oct 14 nicklas 267     }
2774 09 Oct 14 nicklas 268     else
2774 09 Oct 14 nicklas 269     {
2774 09 Oct 14 nicklas 270       var url = '../RnaQc.servlet?ID='+App.getSessionId();
2774 09 Oct 14 nicklas 271       url += '&cmd=GetNextAutoGeneratedPlateName&bioPlateType=' + selectedType.value;
2774 09 Oct 14 nicklas 272       Wizard.asyncJsonRequest(url, rnaqc.onNextPlateNameGenerated);
2774 09 Oct 14 nicklas 273     }
2774 09 Oct 14 nicklas 274   }
2774 09 Oct 14 nicklas 275
2774 09 Oct 14 nicklas 276   rnaqc.onNextPlateNameGenerated = function(response)
2774 09 Oct 14 nicklas 277   {
2774 09 Oct 14 nicklas 278     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 279     var selectedType = Forms.getCheckedRadio(frm.bioPlateType);
2774 09 Oct 14 nicklas 280     if (response)
2774 09 Oct 14 nicklas 281     {
2774 09 Oct 14 nicklas 282       selectedType.nextPlateName = response.nextPlateName;
2774 09 Oct 14 nicklas 283     }
2774 09 Oct 14 nicklas 284     
2774 09 Oct 14 nicklas 285     frm.bioPlateName.value = selectedType.nextPlateName;
2774 09 Oct 14 nicklas 286     rnaqc.bioPlateNameOnChange();
2774 09 Oct 14 nicklas 287   }
2774 09 Oct 14 nicklas 288
2774 09 Oct 14 nicklas 289   rnaqc.bioPlateNameOnChange = function()
2774 09 Oct 14 nicklas 290   {
2774 09 Oct 14 nicklas 291     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 292     
2774 09 Oct 14 nicklas 293     var bioPlateName = frm.bioPlateName.value;
2774 09 Oct 14 nicklas 294     bioPlateNameIsValid = false;
2774 09 Oct 14 nicklas 295     if (bioPlateName == '')
2774 09 Oct 14 nicklas 296     {
2774 09 Oct 14 nicklas 297       Wizard.setInputStatus('bioPlateName', 'invalid', 'Missing');
2774 09 Oct 14 nicklas 298       return;
2774 09 Oct 14 nicklas 299     }
2774 09 Oct 14 nicklas 300     
2774 09 Oct 14 nicklas 301     bioPlateNameIsValid = true;
2774 09 Oct 14 nicklas 302     if (bioPlateName.indexOf('CaliperPlate') != 0 && bioPlateName.indexOf('BAPlate') != 0)
2774 09 Oct 14 nicklas 303     {
2774 09 Oct 14 nicklas 304       Wizard.setInputStatus('bioPlateName', 'warning', 'Should start with <i>CaliperPlate</code> or <i>BAPlate</i>.');
2774 09 Oct 14 nicklas 305       return;
2774 09 Oct 14 nicklas 306     }
2774 09 Oct 14 nicklas 307
2774 09 Oct 14 nicklas 308     Wizard.setInputStatus('bioPlateName', 'valid');
2774 09 Oct 14 nicklas 309   }
2774 09 Oct 14 nicklas 310   
2774 09 Oct 14 nicklas 311   rnaqc.validateStep2 = function(event)
2774 09 Oct 14 nicklas 312   {
2774 09 Oct 14 nicklas 313     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 314     var bioPlateId = parseInt(frm.bioPlates.value);
3471 28 Aug 15 nicklas 315     if (!bioPlateIsValid || (bioPlateId == 0 && !bioPlateNameIsValid))
2774 09 Oct 14 nicklas 316     {
2774 09 Oct 14 nicklas 317       event.preventDefault();
2774 09 Oct 14 nicklas 318     }
2774 09 Oct 14 nicklas 319   }
2774 09 Oct 14 nicklas 320
2774 09 Oct 14 nicklas 321   rnaqc.initializeStep3 = function()
2774 09 Oct 14 nicklas 322   {
2774 09 Oct 14 nicklas 323     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 324     var bioPlateId = parseInt(frm.bioPlates.value);
2774 09 Oct 14 nicklas 325     
2774 09 Oct 14 nicklas 326     var url = '../RnaQc.servlet?ID='+App.getSessionId();
2774 09 Oct 14 nicklas 327     url += '&cmd=GetFreeWellsInfo&bioPlateId='+bioPlateId;
2774 09 Oct 14 nicklas 328     if (bioPlateId == 0)
2774 09 Oct 14 nicklas 329     {
2774 09 Oct 14 nicklas 330       url += '&bioPlateType=' + Forms.getCheckedRadio(frm.bioPlateType).value;
2774 09 Oct 14 nicklas 331     }
3471 28 Aug 15 nicklas 332     url += '&numAliquots='+selectedRna.length;
2774 09 Oct 14 nicklas 333     Wizard.showLoadingAnimation('Loading information about free wells...');
2774 09 Oct 14 nicklas 334     Wizard.asyncJsonRequest(url, rnaqc.freeWellsLoaded);
2774 09 Oct 14 nicklas 335   }
2774 09 Oct 14 nicklas 336   
2774 09 Oct 14 nicklas 337   rnaqc.freeWellsLoaded = function(response)
2774 09 Oct 14 nicklas 338   {
2774 09 Oct 14 nicklas 339     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 340
2774 09 Oct 14 nicklas 341     selectedBioPlate = response.bioPlate;
2774 09 Oct 14 nicklas 342     if (selectedBioPlate.id == 0)
2774 09 Oct 14 nicklas 343     {
2774 09 Oct 14 nicklas 344       selectedBioPlate.name = frm.bioPlateName.value;
2774 09 Oct 14 nicklas 345       selectedBioPlate.barcode = frm.bioPlateBarcode.value;
2774 09 Oct 14 nicklas 346     }
3550 19 Oct 15 nicklas 347     var isCaliper = Doc.element('CALIPER_RNAQC').checked;
2774 09 Oct 14 nicklas 348     
2774 09 Oct 14 nicklas 349     var html = '<table id="rnaQcTable" class="step-form">';
3544 15 Oct 15 nicklas 350     html += '<thead class="bg-filled-100">';
2774 09 Oct 14 nicklas 351     // First header row
2774 09 Oct 14 nicklas 352     html += '<tr>';
2774 09 Oct 14 nicklas 353     html += '<th>RNA QC</th>';
3612 20 Nov 15 nicklas 354     html += '<th class="dottedleft">Storage</th>';
2774 09 Oct 14 nicklas 355     html += '<th colspan="2" class="dottedleft">' + Strings.encodeTags(selectedBioPlate.name) + '</th>';
2774 09 Oct 14 nicklas 356     html += '<th class="dottedleft">HiSense</th>';
3545 16 Oct 15 nicklas 357     html += '<th>Volume</th>';
6219 20 Apr 21 nicklas 358     html += '<th>Conc.</th>';
2774 09 Oct 14 nicklas 359     html += '<th></th>';
3544 15 Oct 15 nicklas 360     html += '<th class="dottedleft"></th>';
2774 09 Oct 14 nicklas 361     html += '</tr>';
2774 09 Oct 14 nicklas 362     // Second header row
2774 09 Oct 14 nicklas 363     html += '<tr>';
2774 09 Oct 14 nicklas 364     html += '<th></th>';
3612 20 Nov 15 nicklas 365     html += '<th class="dottedleft">box</th>';
3544 15 Oct 15 nicklas 366     html += '<th class="dottedleft">Row</th>';
3544 15 Oct 15 nicklas 367     html += '<th>Column</th>';
6219 20 Apr 21 nicklas 368     html += '<th class="dottedleft">Conc. â€¹ ' + HISENSE_LIMIT + '</th>';
3545 16 Oct 15 nicklas 369     html += '<th>(µl)</th>';
3544 15 Oct 15 nicklas 370     html += '<th>(ng/µl)</th>';
2774 09 Oct 14 nicklas 371     html += '<th></th>';
3544 15 Oct 15 nicklas 372     html += '<th class="dottedleft">Comments</th>';
2774 09 Oct 14 nicklas 373     html += '</tr>';
3544 15 Oct 15 nicklas 374     html += '</thead>';
3544 15 Oct 15 nicklas 375     html += '<tbody>';
2774 09 Oct 14 nicklas 376     
3742 12 Feb 16 nicklas 377     var homeUrl = Data.get('page-data', 'home-url');
3742 12 Feb 16 nicklas 378     var yellowImg = '<img src="'+homeUrl+'/images/yellow-label.png">';
2774 09 Oct 14 nicklas 379     for (var i=0; i < selectedRna.length; i++)
2774 09 Oct 14 nicklas 380     {
2774 09 Oct 14 nicklas 381       var rna = selectedRna[i];
3742 12 Feb 16 nicklas 382       var isYellow = rna.specimen && rna.specimen.YellowLabel != null;
2774 09 Oct 14 nicklas 383       rna.isValid = false;
3545 16 Oct 15 nicklas 384       rna.isValidVolume = true;
2774 09 Oct 14 nicklas 385       
2774 09 Oct 14 nicklas 386       var hiSenseChecked = '';
3550 19 Oct 15 nicklas 387       var hiSenseDisabled = isCaliper ? '' : ' disabled';
6219 20 Apr 21 nicklas 388       var conc = null;
3550 19 Oct 15 nicklas 389       var volume = isCaliper ? ALIQUOT_VOLUME_NORMAL : ALIQUOT_VOLUME_BA;
6219 20 Apr 21 nicklas 390       if (rna.conc)
2774 09 Oct 14 nicklas 391       {
6219 20 Apr 21 nicklas 392         conc = rna.conc;
6219 20 Apr 21 nicklas 393         if (isCaliper && conc < HISENSE_LIMIT)
2774 09 Oct 14 nicklas 394         {
3550 19 Oct 15 nicklas 395           hiSenseChecked = ' checked';
3545 16 Oct 15 nicklas 396           volume = ALIQUOT_VOLUME_HISENSE;
2774 09 Oct 14 nicklas 397         }
2774 09 Oct 14 nicklas 398       }
2774 09 Oct 14 nicklas 399
3742 12 Feb 16 nicklas 400       var img = isYellow ? yellowImg : '';
3742 12 Feb 16 nicklas 401       html += '<tr class="highlight'+(isYellow ? ' yellow-specimen' : '')+'">';
3742 12 Feb 16 nicklas 402       html += '<td class="rna if-yellow">'+img+Strings.encodeTags(rna.nextRnaQcName)+'</td>';
6219 20 Apr 21 nicklas 403       html += '<td class="location dottedleft">'+(rna.bioWell?Strings.encodeTags(rna.bioWell.bioPlate.name + ' ' + rna.bioWell.location):'unknown')+'</td>';
2774 09 Oct 14 nicklas 404       html += '<td class="dottedleft">';
3544 15 Oct 15 nicklas 405       html += '<input name="row.'+i+'" id="row.'+i+'" type="text" class="required" style="width: 3em; text-transform:uppercase;" maxlength="2"></td>';
3544 15 Oct 15 nicklas 406       html += '<td><input name="column.'+i+'" id="column.'+i+'" type="text" class="required" style="width: 3em;" maxlength="3"></td>';
3550 19 Oct 15 nicklas 407       html += '<td class="dottedleft"><input name="hiSense.'+i+'" id="hiSense.'+i+'" type="checkbox" value="1" ' + hiSenseChecked + hiSenseDisabled +'></td>';
3545 16 Oct 15 nicklas 408       html += '<td>';
3545 16 Oct 15 nicklas 409       html += '<input name="volume.'+i+'" id="volume.'+i+'" type="text" class="required" style="width: 3em;" maxlength="3" value="'+volume+'">';
3545 16 Oct 15 nicklas 410       html += '</td>';
6219 20 Apr 21 nicklas 411       html += '<td class="conc">';
6219 20 Apr 21 nicklas 412       if (conc) html += Reggie.formatNumber(conc);
2774 09 Oct 14 nicklas 413       html += '</td>';
2774 09 Oct 14 nicklas 414       html += '<td class="status" id="well.'+i+'.status"></td>';
3544 15 Oct 15 nicklas 415       html += '<td class="remarks help dottedleft"><span id="well.'+i+'.message" class="message"></span></td>';
3544 15 Oct 15 nicklas 416       html += '</tr>';
2774 09 Oct 14 nicklas 417     }
3544 15 Oct 15 nicklas 418     html += '</tbody>';
3544 15 Oct 15 nicklas 419     html += '</table>';
2774 09 Oct 14 nicklas 420     
2774 09 Oct 14 nicklas 421     Doc.element('rnaQc').innerHTML = html;
2774 09 Oct 14 nicklas 422     Wizard.setCurrentStep(3);
2774 09 Oct 14 nicklas 423     Doc.show('goregister');
3544 15 Oct 15 nicklas 424     Doc.show('goprint');
3471 28 Aug 15 nicklas 425     Doc.show('gocancel');
3544 15 Oct 15 nicklas 426     Wizard.showGoNextConfirmation(true, 'Print the lab protocol before continuing with the registration!');
3471 28 Aug 15 nicklas 427
2774 09 Oct 14 nicklas 428     if (selectedRna.length > 12) Doc.addClass('step-3', 'auto-hide');
2774 09 Oct 14 nicklas 429     Wizard.keepSessionAlive();
2774 09 Oct 14 nicklas 430
2774 09 Oct 14 nicklas 431     for (var i=0; i < selectedRna.length; i++)
2774 09 Oct 14 nicklas 432     {
2774 09 Oct 14 nicklas 433       Events.addEventHandler('row.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'column.'+i });
3545 16 Oct 15 nicklas 434       Events.addEventHandler('column.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'volume.'+i });
3545 16 Oct 15 nicklas 435       Events.addEventHandler('volume.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'row.'+(i+1) });
3545 16 Oct 15 nicklas 436       Events.addEventHandler('volume.'+i, 'keypress', Numbers.numberOnly);
2774 09 Oct 14 nicklas 437
2774 09 Oct 14 nicklas 438       Events.addEventHandler('row.'+i, 'focus', rnaqc.wellOnFocus);
2774 09 Oct 14 nicklas 439       Events.addEventHandler('row.'+i, 'change', rnaqc.wellOnChange, { 'index': i });
2774 09 Oct 14 nicklas 440       Events.addEventHandler('column.'+i, 'change', rnaqc.wellOnChange, { 'index': i });
3545 16 Oct 15 nicklas 441       Events.addEventHandler('volume.'+i, 'change', rnaqc.wellOnChange, { 'index': i });
3545 16 Oct 15 nicklas 442       Events.addEventHandler('hiSense.'+i, 'click', rnaqc.hiSenseOnClick, { 'index': i });
2774 09 Oct 14 nicklas 443       
2774 09 Oct 14 nicklas 444       rnaqc.suggestWell(i);
2774 09 Oct 14 nicklas 445     }
2774 09 Oct 14 nicklas 446     
2774 09 Oct 14 nicklas 447     frm['row.'+0].focus();
2774 09 Oct 14 nicklas 448   }
2774 09 Oct 14 nicklas 449
2774 09 Oct 14 nicklas 450   rnaqc.wellOnFocus = function(event)
2774 09 Oct 14 nicklas 451   {
2774 09 Oct 14 nicklas 452     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 453     
2774 09 Oct 14 nicklas 454     var index = Data.int(event.currentTarget, 'index');
2774 09 Oct 14 nicklas 455     var row = frm['row.'+index].value;
2774 09 Oct 14 nicklas 456     var column = frm['column.'+index].value;
2774 09 Oct 14 nicklas 457     
2774 09 Oct 14 nicklas 458     if (row == '' && column == '') 
2774 09 Oct 14 nicklas 459     {
2774 09 Oct 14 nicklas 460       rnaqc.suggestWell(index);
2774 09 Oct 14 nicklas 461     }
2774 09 Oct 14 nicklas 462   }
2774 09 Oct 14 nicklas 463   
2774 09 Oct 14 nicklas 464   rnaqc.suggestWell = function(index)
2774 09 Oct 14 nicklas 465   {
2774 09 Oct 14 nicklas 466     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 467     if (frm['row.'+index].disabled) return;
2774 09 Oct 14 nicklas 468     
2774 09 Oct 14 nicklas 469     var bioWells = selectedBioPlate.bioWells;
2774 09 Oct 14 nicklas 470     
2774 09 Oct 14 nicklas 471     // First, map out the wells already used in the form
2774 09 Oct 14 nicklas 472     var used = [];
2774 09 Oct 14 nicklas 473     for (var i = 0; i < selectedRna.length; i++)
2774 09 Oct 14 nicklas 474     {
2774 09 Oct 14 nicklas 475       var rna = selectedRna[i];
2774 09 Oct 14 nicklas 476       if (rna.isValid)
2774 09 Oct 14 nicklas 477       {
2774 09 Oct 14 nicklas 478         var row = frm['row.'+i].value.toUpperCase();
2774 09 Oct 14 nicklas 479         var column = frm['column.'+i].value;
2774 09 Oct 14 nicklas 480         var key = row+column;
2774 09 Oct 14 nicklas 481         used[key] = true;
2774 09 Oct 14 nicklas 482       }
2774 09 Oct 14 nicklas 483     }
2774 09 Oct 14 nicklas 484     
2774 09 Oct 14 nicklas 485     // Find first unused well not followed by any used well
2774 09 Oct 14 nicklas 486     var lastUnused = -1;
2774 09 Oct 14 nicklas 487     for (var i = 0; i < bioWells.length; i++)
2774 09 Oct 14 nicklas 488     {
2774 09 Oct 14 nicklas 489       var well = bioWells[i];
2774 09 Oct 14 nicklas 490       var row = Reggie.wellToAlpha(well.row);
2774 09 Oct 14 nicklas 491       var column = well.column+1;
2774 09 Oct 14 nicklas 492       var isUsed = used[row+column];
2774 09 Oct 14 nicklas 493       
2774 09 Oct 14 nicklas 494       if (well.canAdd && !isUsed && lastUnused == -1)
2774 09 Oct 14 nicklas 495       {
2774 09 Oct 14 nicklas 496         lastUnused = i;
2774 09 Oct 14 nicklas 497       }
2774 09 Oct 14 nicklas 498       else if (!well.canAdd || isUsed)
2774 09 Oct 14 nicklas 499       {
2774 09 Oct 14 nicklas 500         lastUnused = -1;
2774 09 Oct 14 nicklas 501       }
2774 09 Oct 14 nicklas 502     }
2774 09 Oct 14 nicklas 503     
2774 09 Oct 14 nicklas 504     if (lastUnused >= 0)
2774 09 Oct 14 nicklas 505     {
2774 09 Oct 14 nicklas 506       var well = bioWells[lastUnused];
2774 09 Oct 14 nicklas 507       frm['row.'+index].value = Reggie.wellToAlpha(well.row);
2774 09 Oct 14 nicklas 508       frm['column.'+index].value = well.column+1;
2774 09 Oct 14 nicklas 509       
2774 09 Oct 14 nicklas 510       Wizard.setInputStatus('well.'+index, 'valid');
2774 09 Oct 14 nicklas 511       selectedRna[index].isValid = true;
2774 09 Oct 14 nicklas 512     }
2774 09 Oct 14 nicklas 513   }
2774 09 Oct 14 nicklas 514   
2774 09 Oct 14 nicklas 515   rnaqc.wellOnChange = function(event)
2774 09 Oct 14 nicklas 516   {
2774 09 Oct 14 nicklas 517     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 518
2774 09 Oct 14 nicklas 519     var index = Data.int(event.currentTarget, 'index');
2774 09 Oct 14 nicklas 520     var row = frm['row.'+index].value;
2774 09 Oct 14 nicklas 521     var column = frm['column.'+index].value;
3545 16 Oct 15 nicklas 522     var volume = frm['volume.'+index].value;
2774 09 Oct 14 nicklas 523     
2774 09 Oct 14 nicklas 524     selectedRna[index].isValid = false;
3545 16 Oct 15 nicklas 525     selectedRna[index].isValidVolume = false;
2774 09 Oct 14 nicklas 526     
2774 09 Oct 14 nicklas 527     if (row == '' || column == '')
2774 09 Oct 14 nicklas 528     {
2774 09 Oct 14 nicklas 529       Wizard.setInputStatus('well.'+index, 'invalid', 'Missing row or column');
2774 09 Oct 14 nicklas 530       return;
2774 09 Oct 14 nicklas 531     }
2774 09 Oct 14 nicklas 532     
3545 16 Oct 15 nicklas 533     if (volume == '')
3545 16 Oct 15 nicklas 534     {
3545 16 Oct 15 nicklas 535       Wizard.setInputStatus('well.'+index, 'invalid', 'Missing volume');
3545 16 Oct 15 nicklas 536       return;
3545 16 Oct 15 nicklas 537     }
3545 16 Oct 15 nicklas 538     else if (parseFloat(volume) <= 0 || isNaN(parseFloat(volume)))
3545 16 Oct 15 nicklas 539     {
3545 16 Oct 15 nicklas 540       Wizard.setInputStatus('well.'+index, 'invalid', 'Volume must be &gt; 0');
3545 16 Oct 15 nicklas 541       return;
3545 16 Oct 15 nicklas 542     }
3545 16 Oct 15 nicklas 543     selectedRna[index].isValidVolume = true;
3545 16 Oct 15 nicklas 544     
2774 09 Oct 14 nicklas 545     var rowC = Reggie.alphaToWell(row);
2774 09 Oct 14 nicklas 546     if (rowC < 0 || rowC >= selectedBioPlate.geometry.rows)
2774 09 Oct 14 nicklas 547     {
2774 09 Oct 14 nicklas 548       setInputStatus('well.'+index, 'invalid', 'Row must be between A-' + Reggie.wellToAlpha(selectedBioPlate.geometry.rows-1));
2774 09 Oct 14 nicklas 549       return;
2774 09 Oct 14 nicklas 550     }
2774 09 Oct 14 nicklas 551     
2774 09 Oct 14 nicklas 552     var colC = parseInt(column, 10)-1;
2774 09 Oct 14 nicklas 553     if (isNaN(colC) || colC < 0 || colC >= selectedBioPlate.geometry.columns)
2774 09 Oct 14 nicklas 554     {
2774 09 Oct 14 nicklas 555       Wizard.setInputStatus('well.'+index, 'invalid', 'Column must be between 1-' + selectedBioPlate.geometry.columns);
2774 09 Oct 14 nicklas 556       return;
2774 09 Oct 14 nicklas 557     }
2774 09 Oct 14 nicklas 558     
2774 09 Oct 14 nicklas 559     // Find the selected well
2774 09 Oct 14 nicklas 560     var well = rnaqc.getWellByCoordinate(selectedBioPlate, rowC, colC);
2774 09 Oct 14 nicklas 561     
2774 09 Oct 14 nicklas 562     // Check that it is not already used
2774 09 Oct 14 nicklas 563     if (!well.canAdd)
2774 09 Oct 14 nicklas 564     {
2774 09 Oct 14 nicklas 565       Wizard.setInputStatus('well.'+index, 'invalid', 'The selected well is already used');
2774 09 Oct 14 nicklas 566       return;
2774 09 Oct 14 nicklas 567     }
2774 09 Oct 14 nicklas 568     
2774 09 Oct 14 nicklas 569     // Seems to be ok
2774 09 Oct 14 nicklas 570     Wizard.setInputStatus('well.'+index, 'valid');
2774 09 Oct 14 nicklas 571     selectedRna[index].isValid = true;
2774 09 Oct 14 nicklas 572     
2774 09 Oct 14 nicklas 573     // The final check is a duplication check
2774 09 Oct 14 nicklas 574     rnaqc.duplicateWellCheck();
2774 09 Oct 14 nicklas 575   }
2774 09 Oct 14 nicklas 576
2774 09 Oct 14 nicklas 577   //  Get a well from a plate given a coordinate.
2774 09 Oct 14 nicklas 578   rnaqc.getWellByCoordinate = function(bioPlate, row, col)
2774 09 Oct 14 nicklas 579   {
2774 09 Oct 14 nicklas 580     for (var i = 0; i < bioPlate.bioWells.length; i++)
2774 09 Oct 14 nicklas 581     {
2774 09 Oct 14 nicklas 582       var w = bioPlate.bioWells[i];
2774 09 Oct 14 nicklas 583       if (w.row == row && w.column == col)
2774 09 Oct 14 nicklas 584       {
2774 09 Oct 14 nicklas 585         return w;
2774 09 Oct 14 nicklas 586       }
2774 09 Oct 14 nicklas 587     }
2774 09 Oct 14 nicklas 588     return null;
2774 09 Oct 14 nicklas 589   }
2774 09 Oct 14 nicklas 590
2774 09 Oct 14 nicklas 591   rnaqc.duplicateWellCheck = function()
2774 09 Oct 14 nicklas 592   {
2774 09 Oct 14 nicklas 593     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 594     var used = [];
2774 09 Oct 14 nicklas 595     var index = [];
2774 09 Oct 14 nicklas 596     
2774 09 Oct 14 nicklas 597     for (var i = 0; i < selectedRna.length; i++)
2774 09 Oct 14 nicklas 598     {
2774 09 Oct 14 nicklas 599       var rna = selectedRna[i];
2774 09 Oct 14 nicklas 600
2774 09 Oct 14 nicklas 601       if (rna.isValid)
2774 09 Oct 14 nicklas 602       {
2774 09 Oct 14 nicklas 603         var row = frm['row.'+i].value.toUpperCase();
2774 09 Oct 14 nicklas 604         var column = frm['column.'+i].value;
2774 09 Oct 14 nicklas 605
2774 09 Oct 14 nicklas 606         var key = row+column;
2774 09 Oct 14 nicklas 607         var dupRna = used[key];
2774 09 Oct 14 nicklas 608         if (dupRna)
2774 09 Oct 14 nicklas 609         {
2774 09 Oct 14 nicklas 610           Wizard.setInputStatus('well.'+i, 'invalid', dupRna.nextRnaQcName + ' is using the same well');
2774 09 Oct 14 nicklas 611           Wizard.setInputStatus('well.'+index[key], 'invalid', rna.nextRnaQcName + ' is using the same well');
2774 09 Oct 14 nicklas 612           rna.isDuplicate = true;
2774 09 Oct 14 nicklas 613           dupRna.isDuplicate = true;
2774 09 Oct 14 nicklas 614         }
2774 09 Oct 14 nicklas 615         else
2774 09 Oct 14 nicklas 616         {
2774 09 Oct 14 nicklas 617           rna.isDuplicate = false;
2774 09 Oct 14 nicklas 618           Wizard.setInputStatus('well.'+i, 'valid');
2774 09 Oct 14 nicklas 619         }
2774 09 Oct 14 nicklas 620         used[key] = rna;
2774 09 Oct 14 nicklas 621         index[key] = i;
2774 09 Oct 14 nicklas 622       }
2774 09 Oct 14 nicklas 623     }
2774 09 Oct 14 nicklas 624   }
2774 09 Oct 14 nicklas 625   
3545 16 Oct 15 nicklas 626   rnaqc.hiSenseOnClick = function(event)
3545 16 Oct 15 nicklas 627   {
3545 16 Oct 15 nicklas 628     var frm = document.forms['reggie'];
3545 16 Oct 15 nicklas 629     var index = Data.int(event.currentTarget, 'index');
3545 16 Oct 15 nicklas 630     var hiSenseChecked = event.currentTarget.checked;
3545 16 Oct 15 nicklas 631     
3545 16 Oct 15 nicklas 632     var volume = parseFloat(frm['volume.'+index].value);
3545 16 Oct 15 nicklas 633     // Switch default volume when HiSense is toggled (unless the volume has been modified)
3545 16 Oct 15 nicklas 634     if (volume == (hiSenseChecked ? ALIQUOT_VOLUME_NORMAL : ALIQUOT_VOLUME_HISENSE))
3545 16 Oct 15 nicklas 635     {
3545 16 Oct 15 nicklas 636       frm['volume.'+index].value = hiSenseChecked ? ALIQUOT_VOLUME_HISENSE : ALIQUOT_VOLUME_NORMAL;
3545 16 Oct 15 nicklas 637       Events.sendChangeEvent(frm['volume.'+index]);
3545 16 Oct 15 nicklas 638     }
3545 16 Oct 15 nicklas 639     
3545 16 Oct 15 nicklas 640   }
3544 15 Oct 15 nicklas 641   
3544 15 Oct 15 nicklas 642   rnaqc.printVersion = function()
3544 15 Oct 15 nicklas 643   {
3544 15 Oct 15 nicklas 644     Wizard.hideGoNextConfirmation();
3544 15 Oct 15 nicklas 645     Doc.removeClass('gonext', 'disabled');
3544 15 Oct 15 nicklas 646     var reportName = 'RNAQC Aliquot Protocol';
3544 15 Oct 15 nicklas 647     var printNote = '<b>Note!</b> For better printing set page orientation to <i>portrait</i>.';
3544 15 Oct 15 nicklas 648     Reggie.openPrintWindow('full-protocol', reportName, 'portrait', printNote, '../', 'rnaqc_aliquot.css');
3544 15 Oct 15 nicklas 649   }
3544 15 Oct 15 nicklas 650   
2774 09 Oct 14 nicklas 651   rnaqc.validateStep3 = function(event)
2774 09 Oct 14 nicklas 652   {
2774 09 Oct 14 nicklas 653     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 654
2774 09 Oct 14 nicklas 655     // Check that no wells have an error or is duplicated
2774 09 Oct 14 nicklas 656     for (var i = 0; i < selectedRna.length; i++)
2774 09 Oct 14 nicklas 657     {
2774 09 Oct 14 nicklas 658       var rna = selectedRna[i];
2774 09 Oct 14 nicklas 659       if (!rna.isValid || rna.isDuplicate)
2774 09 Oct 14 nicklas 660       {
2774 09 Oct 14 nicklas 661         event.preventDefault();
3545 16 Oct 15 nicklas 662         // Focus on the 'row' or 'volume' field
3545 16 Oct 15 nicklas 663         frm[(rna.isValidVolume ? 'row.' : 'volume.')+i].focus();
2774 09 Oct 14 nicklas 664         return;
2774 09 Oct 14 nicklas 665       }
2774 09 Oct 14 nicklas 666     }
2774 09 Oct 14 nicklas 667   }
2774 09 Oct 14 nicklas 668
2774 09 Oct 14 nicklas 669   rnaqc.submit = function()
2774 09 Oct 14 nicklas 670   {
2774 09 Oct 14 nicklas 671     var frm = document.forms['reggie'];
2774 09 Oct 14 nicklas 672     
2774 09 Oct 14 nicklas 673     var submitInfo = {};
2774 09 Oct 14 nicklas 674     selectedBioPlate.bioWells = null;
2774 09 Oct 14 nicklas 675     submitInfo.bioplate = selectedBioPlate;
2774 09 Oct 14 nicklas 676     
2774 09 Oct 14 nicklas 677     submitInfo.protocol = parseInt(frm.protocols.value, 10);
2774 09 Oct 14 nicklas 678     
2774 09 Oct 14 nicklas 679     var rnaQcExtracts = [];
2774 09 Oct 14 nicklas 680     for (var i=0; i < selectedRna.length; i++)
2774 09 Oct 14 nicklas 681     {
2774 09 Oct 14 nicklas 682       var rnaQc = {};
2774 09 Oct 14 nicklas 683       rnaQc.parentId = selectedRna[i].id;
2774 09 Oct 14 nicklas 684       rnaQc.name = selectedRna[i].nextRnaQcName;
2774 09 Oct 14 nicklas 685       rnaQc.row = frm['row.'+i].value;
2774 09 Oct 14 nicklas 686       rnaQc.column = frm['column.'+i].value;
2774 09 Oct 14 nicklas 687       rnaQc.QCHiSense = frm['hiSense.'+i].checked ? true : false;
3545 16 Oct 15 nicklas 688       rnaQc.volume = parseFloat(frm['volume.'+i].value);
2774 09 Oct 14 nicklas 689       rnaQcExtracts[rnaQcExtracts.length] = rnaQc;
2774 09 Oct 14 nicklas 690     }
2774 09 Oct 14 nicklas 691     submitInfo.rnaQcExtracts = rnaQcExtracts;
2774 09 Oct 14 nicklas 692
2774 09 Oct 14 nicklas 693     var url = '../RnaQc.servlet?ID='+App.getSessionId();
2774 09 Oct 14 nicklas 694     url += '&cmd=PlaceRnaQcAliquots';
2774 09 Oct 14 nicklas 695     Wizard.showLoadingAnimation('Performing registration...');
2774 09 Oct 14 nicklas 696     Wizard.asyncJsonRequest(url, rnaqc.submissionResults, 'POST', JSON.stringify(submitInfo));
2774 09 Oct 14 nicklas 697   }
2774 09 Oct 14 nicklas 698
2774 09 Oct 14 nicklas 699   rnaqc.submissionResults = function(response)
2774 09 Oct 14 nicklas 700   {
2774 09 Oct 14 nicklas 701     Wizard.showFinalMessage(response.messages);
2774 09 Oct 14 nicklas 702     Doc.show('gorestart');
2774 09 Oct 14 nicklas 703   }
2774 09 Oct 14 nicklas 704
2774 09 Oct 14 nicklas 705   return rnaqc;
2774 09 Oct 14 nicklas 706 }();
2774 09 Oct 14 nicklas 707
2774 09 Oct 14 nicklas 708 Doc.onLoad(RnaQcAliquot.initPage);
2774 09 Oct 14 nicklas 709