extensions/net.sf.basedb.meludi/trunk/resources/sampleproc/specimen_new_extract_items.js

Code
Comments
Other
Rev Date Author Line
4247 22 Nov 16 olle 1 var SpecimenTubeReg = function()
4247 22 Nov 16 olle 2 {
4247 22 Nov 16 olle 3   var streg = {};
4247 22 Nov 16 olle 4   var debug = 0;
4247 22 Nov 16 olle 5   var myPermissions = {};
4247 22 Nov 16 olle 6   
4247 22 Nov 16 olle 7   var caseInfo;
4247 22 Nov 16 olle 8   
4247 22 Nov 16 olle 9   var sampleItemPrefix = '';
4247 22 Nov 16 olle 10   var sampleItemNumDigits = 5;
4247 22 Nov 16 olle 11   var nofTubesIsValid = false;
4247 22 Nov 16 olle 12   var samplingDateIsValid = true;
4247 22 Nov 16 olle 13   var viableTumourCellsPercentIsValid = true;
4247 22 Nov 16 olle 14
4247 22 Nov 16 olle 15   // Well validation variable for input specimen, DNA, RNA
4247 22 Nov 16 olle 16   var wellIsValid = [];
4247 22 Nov 16 olle 17   // Well validation variables for extracts from specimen
4247 22 Nov 16 olle 18   var dnaWellIsValid = [];
4247 22 Nov 16 olle 19   var rnaWellIsValid = [];
4247 22 Nov 16 olle 20   
4247 22 Nov 16 olle 21   var restartTimer;
4247 22 Nov 16 olle 22   var restartAt;
4247 22 Nov 16 olle 23   
4247 22 Nov 16 olle 24   // Page initialization
4247 22 Nov 16 olle 25   streg.initPage = function()
4247 22 Nov 16 olle 26   {
4247 22 Nov 16 olle 27     // Step 1
4247 22 Nov 16 olle 28     Events.addEventHandler('step-1', 'wizard-validate', streg.validateStep1);
4247 22 Nov 16 olle 29     Events.addEventHandler('caseName', 'keypress', Wizard.goNextOnTabOrEnter);
4247 22 Nov 16 olle 30     
4247 22 Nov 16 olle 31     // Step 2
4247 22 Nov 16 olle 32     Events.addEventHandler('step-2', 'wizard-initialize', streg.initializeStep2);
4247 22 Nov 16 olle 33     Events.addEventHandler('step-2', 'wizard-validate', streg.validateStep2);
4247 22 Nov 16 olle 34
4247 22 Nov 16 olle 35     // Navigation
4247 22 Nov 16 olle 36     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
4247 22 Nov 16 olle 37     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
4247 22 Nov 16 olle 38     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
4247 22 Nov 16 olle 39     Buttons.addClickHandler('goregister', Wizard.goRegister);
4247 22 Nov 16 olle 40     Buttons.addClickHandler('gostop', streg.stopAutoRestart);
4247 22 Nov 16 olle 41     
4247 22 Nov 16 olle 42     // Final registration
4247 22 Nov 16 olle 43     Events.addEventHandler('wizard', 'wizard-submit', streg.submit);
4247 22 Nov 16 olle 44
4247 22 Nov 16 olle 45     // Load configuration
4247 22 Nov 16 olle 46     streg.loadConfiguration();
4247 22 Nov 16 olle 47   }
4247 22 Nov 16 olle 48
4247 22 Nov 16 olle 49   streg.loadConfiguration = function()
4247 22 Nov 16 olle 50   {
4247 22 Nov 16 olle 51     var url = '../Session.servlet?ID='+App.getSessionId();
4247 22 Nov 16 olle 52     url += '&cmd=GetConfiguration'
4247 22 Nov 16 olle 53     var request = Ajax.getXmlHttpRequest();
4247 22 Nov 16 olle 54     request.open("GET", url, true);
4247 22 Nov 16 olle 55     Ajax.setReadyStateHandler(request, streg.onConfiguration, streg.onConfiguration);
4247 22 Nov 16 olle 56     request.send(null);
4247 22 Nov 16 olle 57   }
4247 22 Nov 16 olle 58   
4247 22 Nov 16 olle 59   streg.onConfiguration = function(request)
4247 22 Nov 16 olle 60   {
4247 22 Nov 16 olle 61     var frm = document.forms['meludi'];  
4247 22 Nov 16 olle 62
4247 22 Nov 16 olle 63     if (debug)
4247 22 Nov 16 olle 64     {
4247 22 Nov 16 olle 65       App.debug(Strings.encodeTags(request.responseText));
4247 22 Nov 16 olle 66     }
4247 22 Nov 16 olle 67     
4247 22 Nov 16 olle 68     var response;
4247 22 Nov 16 olle 69     var error = false;
4247 22 Nov 16 olle 70     try
4247 22 Nov 16 olle 71     {
4247 22 Nov 16 olle 72       response = JSON.parse(request.responseText);
4247 22 Nov 16 olle 73       if (response.status != 'ok')
4247 22 Nov 16 olle 74       {
4247 22 Nov 16 olle 75         error = response.message || response.stacktrace || 'Unexpected error';
4247 22 Nov 16 olle 76       }
4247 22 Nov 16 olle 77     }
4247 22 Nov 16 olle 78     catch (ex)
4247 22 Nov 16 olle 79     {
4247 22 Nov 16 olle 80       error = ex;
4247 22 Nov 16 olle 81     }
4247 22 Nov 16 olle 82     if (error) App.debug(error);
4247 22 Nov 16 olle 83
4247 22 Nov 16 olle 84     // Get configuration result    
4247 22 Nov 16 olle 85     var conf = response.configuration;
4247 22 Nov 16 olle 86
4247 22 Nov 16 olle 87     // Get unprocessed items
4247 22 Nov 16 olle 88     var url = '../Extraction.servlet?ID='+App.getSessionId();
4247 22 Nov 16 olle 89     url += '&cmd=GetUnprocessedSpecimens';    
4247 22 Nov 16 olle 90     url += '&withExtracts=false';    
4247 22 Nov 16 olle 91     Wizard.showLoadingAnimation('Loading unprocessed items...');
4247 22 Nov 16 olle 92     Wizard.asyncJsonRequest(url, streg.initializeStep1);
4247 22 Nov 16 olle 93   }
4247 22 Nov 16 olle 94
4247 22 Nov 16 olle 95   streg.initializeStep1 = function(response)
4247 22 Nov 16 olle 96   {
4247 22 Nov 16 olle 97     var frm = document.forms['meludi'];
4247 22 Nov 16 olle 98     var specimens = response.specimens;
4247 22 Nov 16 olle 99     
4247 22 Nov 16 olle 100     var sourceItemList = frm.extractSourceItems;
4247 22 Nov 16 olle 101     if (specimens.length)
4247 22 Nov 16 olle 102     {
4247 22 Nov 16 olle 103       var numItems = specimens.length;
4247 22 Nov 16 olle 104       for (var i=0; i < specimens.length; i++)
4247 22 Nov 16 olle 105       {
4247 22 Nov 16 olle 106         var item = specimens[i];
4247 22 Nov 16 olle 107         var name = (i+1) + ': ' + Strings.encodeTags(item.name);
4247 22 Nov 16 olle 108         if (item.bioWell)
4247 22 Nov 16 olle 109         {
4247 22 Nov 16 olle 110           name += ' -- ' + Strings.encodeTags(item.bioWell.bioPlate.name + ' (' + item.bioWell.location + ')');
4247 22 Nov 16 olle 111         }
4247 22 Nov 16 olle 112         var selected = (i == 0);
4247 22 Nov 16 olle 113         var option = new Option(name, item.id, selected, selected);
4247 22 Nov 16 olle 114         option.item = item;
4247 22 Nov 16 olle 115         sourceItemList.options[sourceItemList.length] = option;
4247 22 Nov 16 olle 116       }
4247 22 Nov 16 olle 117       streg.sourceItemsOnChange();
4247 22 Nov 16 olle 118     }
4247 22 Nov 16 olle 119     else
4247 22 Nov 16 olle 120     {
4247 22 Nov 16 olle 121       Wizard.setFatalError('No items available for processing.');
4247 22 Nov 16 olle 122       return;
4247 22 Nov 16 olle 123     }
4247 22 Nov 16 olle 124
4247 22 Nov 16 olle 125     Doc.show('step-1');
4247 22 Nov 16 olle 126     Doc.show('gonext');
4247 22 Nov 16 olle 127   }
4247 22 Nov 16 olle 128
4247 22 Nov 16 olle 129   streg.sourceItemsOnChange = function()
4247 22 Nov 16 olle 130   {
4247 22 Nov 16 olle 131     sourceItemListIsValid = false;
4247 22 Nov 16 olle 132     Wizard.setInputStatus('extractSourceItems');
4247 22 Nov 16 olle 133     
4247 22 Nov 16 olle 134     var frm = document.forms['meludi'];
4247 22 Nov 16 olle 135     var sourceItemList = frm.extractSourceItems;
4247 22 Nov 16 olle 136     
4247 22 Nov 16 olle 137     var numSelected = 0;
4247 22 Nov 16 olle 138     for (var i = 0; i < sourceItemList.length; i++)
4247 22 Nov 16 olle 139     {
4247 22 Nov 16 olle 140       if (sourceItemList[i].selected) numSelected++;
4247 22 Nov 16 olle 141     }
4247 22 Nov 16 olle 142
4247 22 Nov 16 olle 143     if (numSelected < 1)
4247 22 Nov 16 olle 144     {
4247 22 Nov 16 olle 145       Wizard.setInputStatus('extractSourceItems', 'invalid', 'Must select at least one specimen.');
4247 22 Nov 16 olle 146       return;
4247 22 Nov 16 olle 147     }
4247 22 Nov 16 olle 148     
4247 22 Nov 16 olle 149     sourceItemListIsValid = true;
4247 22 Nov 16 olle 150     Wizard.setInputStatus('extractSourceItems', 'valid');
4247 22 Nov 16 olle 151   }
4247 22 Nov 16 olle 152
4247 22 Nov 16 olle 153 /*
4247 22 Nov 16 olle 154   streg.caseInfoLoadedStep1 = function(response)
4247 22 Nov 16 olle 155   {
4247 22 Nov 16 olle 156     var frm = document.forms['meludi'];  
4247 22 Nov 16 olle 157
4247 22 Nov 16 olle 158     // Disable PAD/CL input field if not Administrator or PatientCurator
4247 22 Nov 16 olle 159     var isAdmin = myPermissions['Administrator'] == 1;
4247 22 Nov 16 olle 160     var isPatCur = myPermissions['PatientCurator'] == 1;
4247 22 Nov 16 olle 161     if (!isAdmin && !isPatCur)
4247 22 Nov 16 olle 162     {
4247 22 Nov 16 olle 163       frm.pad.disabled = true;
4247 22 Nov 16 olle 164     }
4247 22 Nov 16 olle 165
4247 22 Nov 16 olle 166     sampleItemPrefix = response.sampleItemPrefix;
4247 22 Nov 16 olle 167     sampleItemNumDigits = response.sampleItemNumDigits;
4247 22 Nov 16 olle 168     var nofCases = response.count;
4247 22 Nov 16 olle 169     if (nofCases == null)
4247 22 Nov 16 olle 170     {
4247 22 Nov 16 olle 171       nofCases = 0;
4247 22 Nov 16 olle 172     }
4247 22 Nov 16 olle 173     var startNum = nofCases + 1;
4247 22 Nov 16 olle 174     // Pad number with leading zeros to get right number of digits
4247 22 Nov 16 olle 175     startNum = String('0000000000' + startNum).slice(-sampleItemNumDigits);
4247 22 Nov 16 olle 176     var startCase = sampleItemPrefix + startNum;
4247 22 Nov 16 olle 177     frm.caseName.value = startCase;
4247 22 Nov 16 olle 178     Doc.element('caseNameText').innerHTML = 'The case name (barcode) associated with this specimen tube ("' + sampleItemPrefix + '" + ' + sampleItemNumDigits + ' digits).';
4247 22 Nov 16 olle 179     
4247 22 Nov 16 olle 180     Doc.show('step-1');
4247 22 Nov 16 olle 181     Doc.show('gonext');
4247 22 Nov 16 olle 182   }
4247 22 Nov 16 olle 183 */
4247 22 Nov 16 olle 184
4247 22 Nov 16 olle 185   streg.validateStep1 = function(event)
4247 22 Nov 16 olle 186   {
4247 22 Nov 16 olle 187     var frm = document.forms['meludi'];
4247 22 Nov 16 olle 188
4247 22 Nov 16 olle 189 /*    
4247 22 Nov 16 olle 190     var caseName = frm.caseName.value;
4247 22 Nov 16 olle 191     var caseIsValid = false;
4247 22 Nov 16 olle 192     Wizard.setInputStatus('caseName');
4247 22 Nov 16 olle 193     if (caseName == '')
4247 22 Nov 16 olle 194     {
4247 22 Nov 16 olle 195       Wizard.setInputStatus('caseName', 'invalid', 'Missing');
4247 22 Nov 16 olle 196       frm.caseName.focus();
4247 22 Nov 16 olle 197     }
4247 22 Nov 16 olle 198     else if (!Meludi.isValidCaseName2(caseName, sampleItemPrefix, sampleItemNumDigits))
4247 22 Nov 16 olle 199     {
4247 22 Nov 16 olle 200       Wizard.setInputStatus('caseName', 'invalid', 'Only name = "' + sampleItemPrefix + '" + ' + sampleItemNumDigits + ' digits is allowed.');
4247 22 Nov 16 olle 201       frm.caseName.focus();
4247 22 Nov 16 olle 202     }
4247 22 Nov 16 olle 203     else
4247 22 Nov 16 olle 204     {
4247 22 Nov 16 olle 205       Wizard.setInputStatus('caseName', 'valid');
4247 22 Nov 16 olle 206       caseIsValid = true;
4247 22 Nov 16 olle 207     }
4247 22 Nov 16 olle 208     
4247 22 Nov 16 olle 209     // If not valid, we prevent the wizard from moving to the next step
4247 22 Nov 16 olle 210     if (!caseIsValid) event.preventDefault();
4247 22 Nov 16 olle 211 */
4247 22 Nov 16 olle 212   }
4247 22 Nov 16 olle 213   
4247 22 Nov 16 olle 214   streg.initializeStep2 = function()
4247 22 Nov 16 olle 215   {
4247 22 Nov 16 olle 216     var frm = document.forms['meludi'];
4247 22 Nov 16 olle 217
4247 22 Nov 16 olle 218     frm.extractSourceItems.disabled = true;
4247 22 Nov 16 olle 219
4247 22 Nov 16 olle 220     // Get list of selected specimens
4247 22 Nov 16 olle 221     var selItemsList = streg.getSelectedItemsList();
4247 22 Nov 16 olle 222     var numItems = selItemsList.length;
4247 22 Nov 16 olle 223     var tubeContentType = 'Specimen';
4247 22 Nov 16 olle 224     var nofTubes = numItems;
4247 22 Nov 16 olle 225     var extractsFromFirstSpecimenOnly = false;
4247 22 Nov 16 olle 226     var storageBoxSuffix = streg.fetchStorageBoxSuffix(tubeContentType);
4247 22 Nov 16 olle 227     if (nofTubes > 2) Doc.addClass('step-1', 'auto-hide');
4247 22 Nov 16 olle 228     
4247 22 Nov 16 olle 229     var html = '';
4247 22 Nov 16 olle 230
4247 22 Nov 16 olle 231     for (var i=0; i < nofTubes; i++)
4247 22 Nov 16 olle 232     {
4247 22 Nov 16 olle 233       var item = selItemsList[i];
4247 22 Nov 16 olle 234       var tubeContentTypeName = 'Specimen';
4247 22 Nov 16 olle 235       var tubeContentTypeNameInternal = 'specimen';
4247 22 Nov 16 olle 236       var tubeName = item.name;
4247 22 Nov 16 olle 237       html += '<tr class="section-header">';
4247 22 Nov 16 olle 238       html += '<td colspan="4">'+tubeContentTypeName+' Tube '+tubeName+'</td>';
4247 22 Nov 16 olle 239       html += '</tr>';
4247 22 Nov 16 olle 240
4247 22 Nov 16 olle 241       var boxMsg = 'Box-number and position where the '+tubeContentTypeNameInternal+' tube is located.';
4247 22 Nov 16 olle 242       var dnaBoxMsg = 'Box-number and position where the DNA extract will be located.';
4247 22 Nov 16 olle 243       var rnaBoxMsg = 'Box-number and position where the RNA extract will be located.';
4247 22 Nov 16 olle 244       var disabledAttribute = ' disabled';
4247 22 Nov 16 olle 245
4247 22 Nov 16 olle 246       html += '<tr>';
4247 22 Nov 16 olle 247       html += '<td class="subprompt">'+tubeContentTypeName+'&nbsp;'+tubeName+'&nbsp;&nbsp;&nbsp;'+'Box</td>';
4247 22 Nov 16 olle 248       html += '<td class="input">';
4247 22 Nov 16 olle 249       html += '<input type="text" name="box.'+i+'" id="box.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>';
4247 22 Nov 16 olle 250       html += '&nbsp;Row<input type="text" name="row.'+i+'" id="row.'+i+'" style="text-transform:uppercase; width: 3em;" maxlength="2"'+disabledAttribute+'>';
4247 22 Nov 16 olle 251       html += '&nbsp;Column<input type="text" name="column.'+i+'" id="column.'+i+'" style="width: 3em;" maxlength="2"'+disabledAttribute+'>';
4247 22 Nov 16 olle 252       html += '</td>';
4247 22 Nov 16 olle 253       html += '<td class="status" id="box.'+i+'.status"></td>';
4247 22 Nov 16 olle 254       html += '<td class="help"><span id="box.'+i+'.message" class="message"></span>'+boxMsg+'<span id="position.'+i+'.message" class="message"></span></td>';
4247 22 Nov 16 olle 255       html += '</tr>';
4247 22 Nov 16 olle 256
4247 22 Nov 16 olle 257       if (tubeContentType == 'Specimen')
4247 22 Nov 16 olle 258       {
4247 22 Nov 16 olle 259         disabledAttribute = '';
4247 22 Nov 16 olle 260         html += '<tr>';
4247 22 Nov 16 olle 261         html += '<td class="subprompt">DNA extract'+'&nbsp;'+tubeName+'.d&nbsp;&nbsp;&nbsp;'+'Box</td>';
4247 22 Nov 16 olle 262         html += '<td class="input">';
4247 22 Nov 16 olle 263         html += '<input type="text" name="dnaBox.'+i+'" id="dnaBox.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>';
4247 22 Nov 16 olle 264         html += '&nbsp;Row<input type="text" name="dnaRow.'+i+'" id="dnaRow.'+i+'" style="text-transform:uppercase; width: 3em;" maxlength="2"'+disabledAttribute+'>';
4247 22 Nov 16 olle 265         html += '&nbsp;Column<input type="text" name="dnaColumn.'+i+'" id="dnaColumn.'+i+'" style="width: 3em;" maxlength="2"'+disabledAttribute+'>';
4247 22 Nov 16 olle 266         html += '</td>';
4247 22 Nov 16 olle 267         html += '<td class="status" id="dnaBox.'+i+'.status"></td>';
4247 22 Nov 16 olle 268         html += '<td class="help"><span id="dnaBox.'+i+'.message" class="message"></span>'+dnaBoxMsg+'<span id="dnaPosition.'+i+'.message" class="message"></span></td>';
4247 22 Nov 16 olle 269         html += '</tr>';
4247 22 Nov 16 olle 270
4247 22 Nov 16 olle 271         html += '<tr>';
4247 22 Nov 16 olle 272         html += '<td class="subprompt">RNA extract'+'&nbsp;'+tubeName+'.r&nbsp;&nbsp;&nbsp;'+'Box</td>';
4247 22 Nov 16 olle 273         html += '<td class="input">';
4247 22 Nov 16 olle 274         html += '<input type="text" name="rnaBox.'+i+'" id="rnaBox.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>';
4247 22 Nov 16 olle 275         html += '&nbsp;Row<input type="text" name="rnaRow.'+i+'" id="rnaRow.'+i+'" style="text-transform:uppercase; width: 3em;" maxlength="2"'+disabledAttribute+'>';
4247 22 Nov 16 olle 276         html += '&nbsp;Column<input type="text" name="rnaColumn.'+i+'" id="rnaColumn.'+i+'" style="width: 3em;" maxlength="2"'+disabledAttribute+'>';
4247 22 Nov 16 olle 277         html += '</td>';
4247 22 Nov 16 olle 278         html += '<td class="status" id="rnaBox.'+i+'.status"></td>';
4247 22 Nov 16 olle 279         html += '<td class="help"><span id="rnaBox.'+i+'.message" class="message"></span>'+rnaBoxMsg+'<span id="rnaPosition.'+i+'.message" class="message"></span></td>';
4247 22 Nov 16 olle 280         html += '</tr>';
4247 22 Nov 16 olle 281
4247 22 Nov 16 olle 282       }
4247 22 Nov 16 olle 283     }
4247 22 Nov 16 olle 284     Doc.element('specimen-tubes').innerHTML = html;
4247 22 Nov 16 olle 285
4247 22 Nov 16 olle 286     Wizard.setCurrentStep(2);
4247 22 Nov 16 olle 287     Doc.show('goregister');
4247 22 Nov 16 olle 288     Doc.show('gocancel');
4247 22 Nov 16 olle 289     
4247 22 Nov 16 olle 290     var url = '../SpecimenTubeRegistration.servlet?ID='+App.getSessionId();
4247 22 Nov 16 olle 291     url += '&cmd=FindStoragePositions';
4247 22 Nov 16 olle 292     url += '&nofTubes='+nofTubes;
4247 22 Nov 16 olle 293     url += '&storageBoxSuffix='+storageBoxSuffix;
4247 22 Nov 16 olle 294     url += '&extractsFromFirstSpecimenOnly='+extractsFromFirstSpecimenOnly;
4247 22 Nov 16 olle 295     
4247 22 Nov 16 olle 296     Wizard.showLoadingAnimation('Looking for empty box positions...');
4247 22 Nov 16 olle 297     Wizard.asyncJsonRequest(url, streg.storagePositionsLoaded);
4247 22 Nov 16 olle 298   }
4247 22 Nov 16 olle 299
4247 22 Nov 16 olle 300   streg.getSelectedItemsList = function()
4247 22 Nov 16 olle 301   {
4247 22 Nov 16 olle 302     var frm = document.forms['meludi'];
4247 22 Nov 16 olle 303     
4247 22 Nov 16 olle 304     // Get number of selected extract source items
4247 22 Nov 16 olle 305     var numItems = 0;
4247 22 Nov 16 olle 306     var selItemsList = [];
4247 22 Nov 16 olle 307     for (var i = 0; i < frm.extractSourceItems.length; i++)
4247 22 Nov 16 olle 308     {
4247 22 Nov 16 olle 309       if (frm.extractSourceItems[i].selected)
4247 22 Nov 16 olle 310       {
4247 22 Nov 16 olle 311         if (frm.extractSourceItems[i].item != null)
4247 22 Nov 16 olle 312         {
4247 22 Nov 16 olle 313           selItemsList[numItems] = frm.extractSourceItems[i].item;
4247 22 Nov 16 olle 314           numItems++;
4247 22 Nov 16 olle 315         }
4247 22 Nov 16 olle 316       }
4247 22 Nov 16 olle 317     }
4247 22 Nov 16 olle 318     return selItemsList;
4247 22 Nov 16 olle 319   }
4247 22 Nov 16 olle 320
4247 22 Nov 16 olle 321   streg.caseInfoLoaded = function(response)
4247 22 Nov 16 olle 322   {
4247 22 Nov 16 olle 323     var frm = document.forms['meludi'];  
4247 22 Nov 16 olle 324     caseInfo = response.caseInfo;
4247 22 Nov 16 olle 325     
4247 22 Nov 16 olle 326     Wizard.setCurrentStep(2);
4247 22 Nov 16 olle 327     Doc.show('gocancel');
4247 22 Nov 16 olle 328     Doc.show('gonext');
4247 22 Nov 16 olle 329     
4247 22 Nov 16 olle 330     frm.arrivalDate.value = Dates.formatDate(new Date(), 'yyyyMMdd');
4247 22 Nov 16 olle 331
4247 22 Nov 16 olle 332     frm.nofTubes.focus();
4247 22 Nov 16 olle 333     frm.nofTubes.setSelectionRange(0,1);
4247 22 Nov 16 olle 334   }
4247 22 Nov 16 olle 335   
4247 22 Nov 16 olle 336   streg.validateStep2 = function(event)
4247 22 Nov 16 olle 337   {
4247 22 Nov 16 olle 338     var valid = true;
4247 22 Nov 16 olle 339     var frm = document.forms['meludi'];  
4247 22 Nov 16 olle 340
4247 22 Nov 16 olle 341     valid &= nofTubesIsValid;
4247 22 Nov 16 olle 342     valid &= Wizard.isValid('arrivalDate');
4247 22 Nov 16 olle 343     valid &= samplingDateIsValid;
4247 22 Nov 16 olle 344     valid &= viableTumourCellsPercentIsValid;
4247 22 Nov 16 olle 345     
4247 22 Nov 16 olle 346     if (!valid) event.preventDefault();
4247 22 Nov 16 olle 347   }
4247 22 Nov 16 olle 348
4247 22 Nov 16 olle 349   streg.storagePositionsLoaded = function(response)
4247 22 Nov 16 olle 350   {
4247 22 Nov 16 olle 351     var freeWells = response.wells;
4247 22 Nov 16 olle 352     var frm = document.forms['meludi'];
4247 22 Nov 16 olle 353     var tubeContentType = 'Specimen';
4247 22 Nov 16 olle 354     var extractsFromFirstSpecimenOnly = false;
4247 22 Nov 16 olle 355     // Get list of selected specimens
4247 22 Nov 16 olle 356     var selItemsList = streg.getSelectedItemsList();
4247 22 Nov 16 olle 357     var nofTubes = selItemsList.length;
4247 22 Nov 16 olle 358
4247 22 Nov 16 olle 359     if (tubeContentType == 'Specimen')
4247 22 Nov 16 olle 360     {
4247 22 Nov 16 olle 361       for (var i = 0; i < nofTubes; i++)
4247 22 Nov 16 olle 362       {
4247 22 Nov 16 olle 363         // Get info on specimen well from stored info
4247 22 Nov 16 olle 364         var specimen = selItemsList[i];
4247 22 Nov 16 olle 365         var specWell = specimen.bioWell;
4247 22 Nov 16 olle 366         
4247 22 Nov 16 olle 367         wellIndex = 3*i;
4247 22 Nov 16 olle 368         var dnaWell = null;
4247 22 Nov 16 olle 369         if (i == 0 || !extractsFromFirstSpecimenOnly)
4247 22 Nov 16 olle 370         {
4247 22 Nov 16 olle 371           dnaWell = freeWells[wellIndex+1];
4247 22 Nov 16 olle 372           if (!dnaWell || dnaWell == '') 
4247 22 Nov 16 olle 373           {
4247 22 Nov 16 olle 374             Wizard.setInputStatus('dnaBox.'+i, 'invalid', 'Missing box');
4247 22 Nov 16 olle 375             return;
4247 22 Nov 16 olle 376           }
4247 22 Nov 16 olle 377         }
4247 22 Nov 16 olle 378         var rnaWell = null;
4247 22 Nov 16 olle 379         if (i == 0 || !extractsFromFirstSpecimenOnly)
4247 22 Nov 16 olle 380         {
4247 22 Nov 16 olle 381           rnaWell = freeWells[wellIndex+2];
4247 22 Nov 16 olle 382           if (!rnaWell || rnaWell == '') 
4247 22 Nov 16 olle 383           {
4247 22 Nov 16 olle 384             Wizard.setInputStatus('rnaBox.'+i, 'invalid', 'Missing box');
4247 22 Nov 16 olle 385             return;
4247 22 Nov 16 olle 386           }
4247 22 Nov 16 olle 387         }
4247 22 Nov 16 olle 388
4247 22 Nov 16 olle 389         // Update form fields for storage plates
4247 22 Nov 16 olle 390         if (specWell)
4247 22 Nov 16 olle 391         {
4247 22 Nov 16 olle 392           frm['box.'+i].value = specWell.bioPlate.name;
4247 22 Nov 16 olle 393           frm['row.'+i].value = Meludi.wellToAlpha(specWell.row);
4247 22 Nov 16 olle 394           frm['column.'+i].value = specWell.column+1;
4247 22 Nov 16 olle 395         }
4247 22 Nov 16 olle 396       
4247 22 Nov 16 olle 397         if (dnaWell)
4247 22 Nov 16 olle 398         {
4247 22 Nov 16 olle 399           frm['dnaBox.'+i].value = dnaWell.bioPlate.name;
4247 22 Nov 16 olle 400           frm['dnaRow.'+i].value = Meludi.wellToAlpha(dnaWell.row);
4247 22 Nov 16 olle 401           frm['dnaColumn.'+i].value = dnaWell.column+1;
4247 22 Nov 16 olle 402         }
4247 22 Nov 16 olle 403
4247 22 Nov 16 olle 404         if (rnaWell)
4247 22 Nov 16 olle 405         {
4247 22 Nov 16 olle 406           frm['rnaBox.'+i].value = rnaWell.bioPlate.name;
4247 22 Nov 16 olle 407           frm['rnaRow.'+i].value = Meludi.wellToAlpha(rnaWell.row);
4247 22 Nov 16 olle 408           frm['rnaColumn.'+i].value = rnaWell.column+1;
4247 22 Nov 16 olle 409         }
4247 22 Nov 16 olle 410
4247 22 Nov 16 olle 411         // Move focus to next field
4247 22 Nov 16 olle 412         Events.addEventHandler('box.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'row.'+i });
4247 22 Nov 16 olle 413         Events.addEventHandler('row.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'column.'+i });
4247 22 Nov 16 olle 414         Events.addEventHandler('column.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'dnaBox.'+i });
4247 22 Nov 16 olle 415
4247 22 Nov 16 olle 416         Events.addEventHandler('dnaBox.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'dnaRow.'+i });
4247 22 Nov 16 olle 417         Events.addEventHandler('dnaRow.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'dnaColumn.'+i });
4247 22 Nov 16 olle 418         Events.addEventHandler('dnaColumn.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'rnaBox.'+i });
4247 22 Nov 16 olle 419
4247 22 Nov 16 olle 420         Events.addEventHandler('rnaBox.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'rnaRow.'+i });
4247 22 Nov 16 olle 421         Events.addEventHandler('rnaRow.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'rnaColumn.'+i });
4247 22 Nov 16 olle 422
4247 22 Nov 16 olle 423         // Form validation
4247 22 Nov 16 olle 424         Events.addEventHandler('column.'+i, 'keypress', Events.integerOnly);
4247 22 Nov 16 olle 425         Events.addEventHandler('box.'+i, 'change', streg.wellOnChange, { 'boxtype': 'Specimen', 'index': i });
4247 22 Nov 16 olle 426         Events.addEventHandler('row.'+i, 'change', streg.wellOnChange, { 'boxtype': 'Specimen', 'index': i });
4247 22 Nov 16 olle 427         Events.addEventHandler('column.'+i, 'change', streg.wellOnChange, { 'boxtype': 'Specimen', 'index': i });
4247 22 Nov 16 olle 428         Events.addEventHandler('box.'+i, 'keyup', streg.boxOnKeyUp, { 'boxtype': 'Specimen'});
4247 22 Nov 16 olle 429
4247 22 Nov 16 olle 430         Events.addEventHandler('dnaColumn.'+i, 'keypress', Events.integerOnly);
4247 22 Nov 16 olle 431         Events.addEventHandler('dnaBox.'+i, 'change', streg.wellOnChange, { 'boxtype': 'DNA', 'index': i });
4247 22 Nov 16 olle 432         Events.addEventHandler('dnaRow.'+i, 'change', streg.wellOnChange, { 'boxtype': 'DNA', 'index': i });
4247 22 Nov 16 olle 433         Events.addEventHandler('dnaColumn.'+i, 'change', streg.wellOnChange, { 'boxtype': 'DNA', 'index': i });
4247 22 Nov 16 olle 434         Events.addEventHandler('dnaBox.'+i, 'keyup', streg.boxOnKeyUp, { 'boxtype': 'DNA'});
4247 22 Nov 16 olle 435
4247 22 Nov 16 olle 436         Events.addEventHandler('rnaColumn.'+i, 'keypress', Events.integerOnly);
4247 22 Nov 16 olle 437         Events.addEventHandler('rnaBox.'+i, 'change', streg.wellOnChange, { 'boxtype': 'RNA', 'index': i });
4247 22 Nov 16 olle 438         Events.addEventHandler('rnaRow.'+i, 'change', streg.wellOnChange, { 'boxtype': 'RNA', 'index': i });
4247 22 Nov 16 olle 439         Events.addEventHandler('rnaColumn.'+i, 'change', streg.wellOnChange, { 'boxtype': 'RNA', 'index': i });
4247 22 Nov 16 olle 440         Events.addEventHandler('rnaBox.'+i, 'keyup', streg.boxOnKeyUp, { 'boxtype': 'RNA'});
4247 22 Nov 16 olle 441       
4247 22 Nov 16 olle 442         wellIsValid[i] = true;
4247 22 Nov 16 olle 443         dnaWellIsValid[i] = true;
4247 22 Nov 16 olle 444         rnaWellIsValid[i] = true;
4247 22 Nov 16 olle 445         Wizard.setInputStatus('box.'+i, 'valid');
4247 22 Nov 16 olle 446         if (i == 0 || !extractsFromFirstSpecimenOnly)
4247 22 Nov 16 olle 447         {
4247 22 Nov 16 olle 448           Wizard.setInputStatus('dnaBox.'+i, 'valid');
4247 22 Nov 16 olle 449           Wizard.setInputStatus('rnaBox.'+i, 'valid');
4247 22 Nov 16 olle 450         }
4247 22 Nov 16 olle 451       }
4247 22 Nov 16 olle 452     }
4247 22 Nov 16 olle 453   }
4247 22 Nov 16 olle 454
4247 22 Nov 16 olle 455   streg.fetchStorageBoxSuffix = function(tubeContentType)
4247 22 Nov 16 olle 456   {
4247 22 Nov 16 olle 457     var storageBoxSuffix = null;
4247 22 Nov 16 olle 458     if (tubeContentType == 'Specimen')
4247 22 Nov 16 olle 459     {
4247 22 Nov 16 olle 460       storageBoxSuffix = '_sp';
4247 22 Nov 16 olle 461     }
4247 22 Nov 16 olle 462     else if (tubeContentType == 'DNA')
4247 22 Nov 16 olle 463     {
4247 22 Nov 16 olle 464       storageBoxSuffix = '_dna';
4247 22 Nov 16 olle 465     }
4247 22 Nov 16 olle 466     else if (tubeContentType == 'RNA')
4247 22 Nov 16 olle 467     {
4247 22 Nov 16 olle 468       storageBoxSuffix = '_rna';
4247 22 Nov 16 olle 469     }
4247 22 Nov 16 olle 470     else if (tubeContentType == 'DNA_RNA')
4247 22 Nov 16 olle 471     {
4247 22 Nov 16 olle 472       storageBoxSuffix = '_dna_rna';
4247 22 Nov 16 olle 473     }
4247 22 Nov 16 olle 474     return storageBoxSuffix;
4247 22 Nov 16 olle 475   }
4247 22 Nov 16 olle 476   
4247 22 Nov 16 olle 477   streg.boxOnKeyUp = function(event)
4247 22 Nov 16 olle 478   {
4247 22 Nov 16 olle 479     var frm = document.forms['meludi'];
4247 22 Nov 16 olle 480     var tubeContentType = frm.tubeContentType.value;
4247 22 Nov 16 olle 481     
4247 22 Nov 16 olle 482     var boxType = Data.get(event.currentTarget, 'boxtype');
4247 22 Nov 16 olle 483     var index = Data.int(event.currentTarget, 'index');
4247 22 Nov 16 olle 484
4247 22 Nov 16 olle 485     // Get box prefix, default is for input tubes
4247 22 Nov 16 olle 486     var boxPrefix = 'box.';
4247 22 Nov 16 olle 487     if (boxType && boxType == 'DNA')
4247 22 Nov 16 olle 488     {
4247 22 Nov 16 olle 489       boxPrefix = 'dnaBox.';
4247 22 Nov 16 olle 490     }
4247 22 Nov 16 olle 491     if (boxType && boxType == 'RNA')
4247 22 Nov 16 olle 492     {
4247 22 Nov 16 olle 493       boxPrefix = 'rnaBox.';
4247 22 Nov 16 olle 494     }
4247 22 Nov 16 olle 495
4247 22 Nov 16 olle 496     // Check box name
4247 22 Nov 16 olle 497     var boxIsValid = true;
4247 22 Nov 16 olle 498     var box = frm[boxPrefix+index].value;
4247 22 Nov 16 olle 499     Wizard.setInputStatus(boxPrefix+index);
4247 22 Nov 16 olle 500     // Check for prefix "ML_"
4247 22 Nov 16 olle 501     if (box.indexOf('ML_') != 0)
4247 22 Nov 16 olle 502     {
4247 22 Nov 16 olle 503       boxIsValid = false;
4247 22 Nov 16 olle 504     }
4247 22 Nov 16 olle 505     var suffix = '_sp';
4247 22 Nov 16 olle 506     if (tubeContentType == 'DNA' || (boxType && boxType == 'DNA'))
4247 22 Nov 16 olle 507     {
4247 22 Nov 16 olle 508       suffix = '_dna';
4247 22 Nov 16 olle 509     }
4247 22 Nov 16 olle 510     else if (tubeContentType == 'RNA' || (boxType && boxType == 'RNA'))
4247 22 Nov 16 olle 511     {
4247 22 Nov 16 olle 512       suffix = '_rna';
4247 22 Nov 16 olle 513     }
4247 22 Nov 16 olle 514     // Check for suffix
4247 22 Nov 16 olle 515     if (box.indexOf(suffix) != (box.length - suffix.length))
4247 22 Nov 16 olle 516     {
4247 22 Nov 16 olle 517       boxIsValid = false;
4247 22 Nov 16 olle 518     }
4247 22 Nov 16 olle 519     
4247 22 Nov 16 olle 520     if (!boxIsValid)
4247 22 Nov 16 olle 521     {
4247 22 Nov 16 olle 522       Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Box name must start with "ML_" and end with "'+suffix+'"');
4247 22 Nov 16 olle 523       return;
4247 22 Nov 16 olle 524     }
4247 22 Nov 16 olle 525   }
4247 22 Nov 16 olle 526   
4247 22 Nov 16 olle 527   streg.wellOnChange = function(event)
4247 22 Nov 16 olle 528   {
4247 22 Nov 16 olle 529     var frm = document.forms['meludi'];
4247 22 Nov 16 olle 530     var target = event.currentTarget;
4247 22 Nov 16 olle 531
4247 22 Nov 16 olle 532     var boxType = Data.get(target, 'boxtype');
4247 22 Nov 16 olle 533     var index = Data.int(target, 'index');
4247 22 Nov 16 olle 534
4247 22 Nov 16 olle 535     // Get well position prefixes, default is for input tubes
4247 22 Nov 16 olle 536     var boxPrefix = 'box.';
4247 22 Nov 16 olle 537     var rowPrefix = 'row.';
4247 22 Nov 16 olle 538     var columnPrefix = 'column.';
4247 22 Nov 16 olle 539     if (boxType && boxType == 'DNA')
4247 22 Nov 16 olle 540     {
4247 22 Nov 16 olle 541       boxPrefix = 'dnaBox.';
4247 22 Nov 16 olle 542       rowPrefix = 'dnaRow.';
4247 22 Nov 16 olle 543       columnPrefix = 'dnaColumn.';
4247 22 Nov 16 olle 544     }
4247 22 Nov 16 olle 545     if (boxType && boxType == 'RNA')
4247 22 Nov 16 olle 546     {
4247 22 Nov 16 olle 547       boxPrefix = 'rnaBox.';
4247 22 Nov 16 olle 548       rowPrefix = 'rnaRow.';
4247 22 Nov 16 olle 549       columnPrefix = 'rnaColumn.';
4247 22 Nov 16 olle 550     }
4247 22 Nov 16 olle 551     var box = frm[boxPrefix+index].value;
4247 22 Nov 16 olle 552     var row = frm[rowPrefix+index].value;
4247 22 Nov 16 olle 553     var column = frm[columnPrefix+index].value;
4247 22 Nov 16 olle 554     
4247 22 Nov 16 olle 555     //wellIsValid[index] = true;
4247 22 Nov 16 olle 556     if (!boxType || boxType == 'Specimen')
4247 22 Nov 16 olle 557     {
4247 22 Nov 16 olle 558       wellIsValid[index] = false;
4247 22 Nov 16 olle 559     }
4247 22 Nov 16 olle 560     else if (boxType && boxType == 'DNA')
4247 22 Nov 16 olle 561     {
4247 22 Nov 16 olle 562       dnaWellIsValid[index] = false;
4247 22 Nov 16 olle 563     }
4247 22 Nov 16 olle 564     else if (boxType && boxType == 'RNA')
4247 22 Nov 16 olle 565     {
4247 22 Nov 16 olle 566       rnaWellIsValid[index] = false;
4247 22 Nov 16 olle 567     }
4247 22 Nov 16 olle 568     else
4247 22 Nov 16 olle 569     {
4247 22 Nov 16 olle 570       wellIsValid[index] = false;
4247 22 Nov 16 olle 571     }
4247 22 Nov 16 olle 572     Wizard.setInputStatus(boxPrefix+index);
4247 22 Nov 16 olle 573     
4247 22 Nov 16 olle 574     if (box == '') 
4247 22 Nov 16 olle 575     {
4247 22 Nov 16 olle 576       Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Missing box');
4247 22 Nov 16 olle 577       return;
4247 22 Nov 16 olle 578     }
4247 22 Nov 16 olle 579
4247 22 Nov 16 olle 580     // Position errors are reported on box message line    
4247 22 Nov 16 olle 581     if (row == '')
4247 22 Nov 16 olle 582     {
4247 22 Nov 16 olle 583       Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Missing row');
4247 22 Nov 16 olle 584       return;
4247 22 Nov 16 olle 585     }
4247 22 Nov 16 olle 586
4247 22 Nov 16 olle 587     if (column == '')
4247 22 Nov 16 olle 588     {
4247 22 Nov 16 olle 589       Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Missing column');
4247 22 Nov 16 olle 590       return;
4247 22 Nov 16 olle 591     }
4247 22 Nov 16 olle 592     
4247 22 Nov 16 olle 593     // Check for duplicates
4247 22 Nov 16 olle 594     var nofTubes = parseInt(frm.nofTubes.value);
4247 22 Nov 16 olle 595     for (var i=0; i < nofTubes; i++)
4247 22 Nov 16 olle 596     {    
4247 22 Nov 16 olle 597       if (i != index)
4247 22 Nov 16 olle 598       {
4247 22 Nov 16 olle 599         if (box == frm.elements[boxPrefix+i].value && row == frm[rowPrefix+i].value && column == frm[columnPrefix+i].value)
4247 22 Nov 16 olle 600         {
4247 22 Nov 16 olle 601           Wizard.setInputStatus(boxPrefix+index, 'invalid', 'The position is already used once in this wizard');        
4247 22 Nov 16 olle 602           return;
4247 22 Nov 16 olle 603         }
4247 22 Nov 16 olle 604       }
4247 22 Nov 16 olle 605     }
4247 22 Nov 16 olle 606
4247 22 Nov 16 olle 607     Wizard.setInputStatus(boxPrefix+index, 'checking', 'Checking...');
4247 22 Nov 16 olle 608     
4247 22 Nov 16 olle 609     // Seems to be ok -- check if used by another sample
4247 22 Nov 16 olle 610     var request = Ajax.getXmlHttpRequest();
4247 22 Nov 16 olle 611     var url = '../SpecimenTubeRegistration.servlet?ID='+App.getSessionId();
4247 22 Nov 16 olle 612     url += '&cmd=ValidateWell';
4247 22 Nov 16 olle 613     url += '&box=' + encodeURIComponent(box);  
4247 22 Nov 16 olle 614     url += '&row=' + encodeURIComponent(row);
4247 22 Nov 16 olle 615     url += '&column=' + encodeURIComponent(column);
4247 22 Nov 16 olle 616     
4247 22 Nov 16 olle 617     Wizard.asyncJsonRequest(url, function(response) { streg.onBoxValidated(response, boxType, index) } );
4247 22 Nov 16 olle 618   }
4247 22 Nov 16 olle 619   
4247 22 Nov 16 olle 620   streg.onBoxValidated = function(response, boxType, index)
4247 22 Nov 16 olle 621   {
4247 22 Nov 16 olle 622     // Get well position prefixes, default is for input tubes
4247 22 Nov 16 olle 623     var boxPrefix = 'box.';
4247 22 Nov 16 olle 624     if (boxType && boxType == 'DNA')
4247 22 Nov 16 olle 625     {
4247 22 Nov 16 olle 626       boxPrefix = 'dnaBox.';
4247 22 Nov 16 olle 627     }
4247 22 Nov 16 olle 628     if (boxType && boxType == 'RNA')
4247 22 Nov 16 olle 629     {
4247 22 Nov 16 olle 630       boxPrefix = 'rnaBox.';
4247 22 Nov 16 olle 631     }
4247 22 Nov 16 olle 632
4247 22 Nov 16 olle 633     //Wizard.setInputStatus('position.'+index);
4247 22 Nov 16 olle 634     Wizard.setInputStatus(boxPrefix+index);
4247 22 Nov 16 olle 635     if (response.message)
4247 22 Nov 16 olle 636     {
4247 22 Nov 16 olle 637       //Wizard.setInputStatus(response.box ? 'box.'+index : 'position.'+index, 'invalid', Strings.encodeTags(response.message));
4247 22 Nov 16 olle 638       Wizard.setInputStatus(boxPrefix+index, 'invalid', Strings.encodeTags(response.message));
4247 22 Nov 16 olle 639       return;
4247 22 Nov 16 olle 640     }
4247 22 Nov 16 olle 641     
4247 22 Nov 16 olle 642     //wellIsValid[index] = true;
4247 22 Nov 16 olle 643     if (!boxType || boxType == 'Specimen')
4247 22 Nov 16 olle 644     {
4247 22 Nov 16 olle 645       wellIsValid[index] = true;
4247 22 Nov 16 olle 646     }
4247 22 Nov 16 olle 647     else if (boxType && boxType == 'DNA')
4247 22 Nov 16 olle 648     {
4247 22 Nov 16 olle 649       dnaWellIsValid[index] = true;
4247 22 Nov 16 olle 650     }
4247 22 Nov 16 olle 651     else if (boxType && boxType == 'RNA')
4247 22 Nov 16 olle 652     {
4247 22 Nov 16 olle 653       rnaWellIsValid[index] = true;
4247 22 Nov 16 olle 654     }
4247 22 Nov 16 olle 655     else
4247 22 Nov 16 olle 656     {
4247 22 Nov 16 olle 657       wellIsValid[index] = true;
4247 22 Nov 16 olle 658     }
4247 22 Nov 16 olle 659     Wizard.setInputStatus(boxPrefix+index, 'valid');
4247 22 Nov 16 olle 660   }
4247 22 Nov 16 olle 661
4247 22 Nov 16 olle 662   streg.submit = function()
4247 22 Nov 16 olle 663   {
4247 22 Nov 16 olle 664     var frm = document.forms['meludi'];
4247 22 Nov 16 olle 665
4247 22 Nov 16 olle 666     caseInfo = {};
4247 22 Nov 16 olle 667     caseInfo.tubeContentType = 'Specimen';
4247 22 Nov 16 olle 668
4247 22 Nov 16 olle 669     // Get list of selected specimens
4247 22 Nov 16 olle 670     var selItemsList = streg.getSelectedItemsList();
4247 22 Nov 16 olle 671     var nofTubes = selItemsList.length;
4247 22 Nov 16 olle 672     caseInfo.specimen = [];
4247 22 Nov 16 olle 673     for (var i = 0; i < nofTubes; i++)
4247 22 Nov 16 olle 674     {
4247 22 Nov 16 olle 675       var item = selItemsList[i];
4247 22 Nov 16 olle 676       var specimenTube ={};
4247 22 Nov 16 olle 677       specimenTube.name = item.name;
4247 22 Nov 16 olle 678       specimenTube.box = frm['box.'+i].value;
4247 22 Nov 16 olle 679       specimenTube.row = frm['row.'+i].value;
4247 22 Nov 16 olle 680       specimenTube.column = frm['column.'+i].value;
4247 22 Nov 16 olle 681
4247 22 Nov 16 olle 682       // Storage position for DNA extract from specimen
4247 22 Nov 16 olle 683       specimenTube.dnaBox = frm['dnaBox.'+i].value;
4247 22 Nov 16 olle 684       specimenTube.dnaRow = frm['dnaRow.'+i].value;
4247 22 Nov 16 olle 685       specimenTube.dnaColumn = frm['dnaColumn.'+i].value;
4247 22 Nov 16 olle 686
4247 22 Nov 16 olle 687       // Storage position for RNA extract from specimen        
4247 22 Nov 16 olle 688       specimenTube.rnaBox = frm['rnaBox.'+i].value;
4247 22 Nov 16 olle 689       specimenTube.rnaRow = frm['rnaRow.'+i].value;
4247 22 Nov 16 olle 690       specimenTube.rnaColumn = frm['rnaColumn.'+i].value;
4247 22 Nov 16 olle 691
4247 22 Nov 16 olle 692       caseInfo.specimen[i] = specimenTube;
4247 22 Nov 16 olle 693     }
4247 22 Nov 16 olle 694
4247 22 Nov 16 olle 695     var submitInfo = {};
4247 22 Nov 16 olle 696     submitInfo.caseInfo = caseInfo;
4247 22 Nov 16 olle 697
4247 22 Nov 16 olle 698     var url = '../SpecimenTubeRegistration.servlet?ID='+App.getSessionId();
4247 22 Nov 16 olle 699     url += '&cmd=CreateExtractsForExtraSpecimens';
4247 22 Nov 16 olle 700     Wizard.showLoadingAnimation('Performing registration...');
4247 22 Nov 16 olle 701     Wizard.asyncJsonRequest(url, streg.submissionResults, 'POST', JSON.stringify(submitInfo));
4247 22 Nov 16 olle 702   }
4247 22 Nov 16 olle 703   
4247 22 Nov 16 olle 704   streg.submissionResults = function(response)
4247 22 Nov 16 olle 705   {
4247 22 Nov 16 olle 706     Wizard.showFinalMessage(response.messages);
4247 22 Nov 16 olle 707     Doc.show('gorestart');
4247 22 Nov 16 olle 708     Doc.show('gonext-message');
4247 22 Nov 16 olle 709   }
4247 22 Nov 16 olle 710
4247 22 Nov 16 olle 711   streg.countDownToRestart = function()
4247 22 Nov 16 olle 712   {
4247 22 Nov 16 olle 713     var time = restartAt - (new Date()).getTime();
4247 22 Nov 16 olle 714     if (time < 0)
4247 22 Nov 16 olle 715     {
4247 22 Nov 16 olle 716       Wizard.restartWizard();
4247 22 Nov 16 olle 717     }
4247 22 Nov 16 olle 718     else
4247 22 Nov 16 olle 719     {
4247 22 Nov 16 olle 720       Doc.element('gonext-message').innerHTML = '<i>Wizard will restart automatically in ' + Math.ceil(time/1000) + ' seconds...</i>';
4247 22 Nov 16 olle 721     }
4247 22 Nov 16 olle 722   }
4247 22 Nov 16 olle 723   
4247 22 Nov 16 olle 724   streg.stopAutoRestart = function()
4247 22 Nov 16 olle 725   {
4247 22 Nov 16 olle 726     clearTimeout(restartTimer);
4247 22 Nov 16 olle 727     Doc.hide('gonext-message');
4247 22 Nov 16 olle 728     Doc.hide('gostop');
4247 22 Nov 16 olle 729   }
4247 22 Nov 16 olle 730
4247 22 Nov 16 olle 731   return streg;
4247 22 Nov 16 olle 732 }();
4247 22 Nov 16 olle 733
4247 22 Nov 16 olle 734 Doc.onLoad(SpecimenTubeReg.initPage);
4247 22 Nov 16 olle 735