extensions/net.sf.basedb.meludi/trunk/resources/personal/ffpe_section_tumour_cell_pct_alt_rec.js

Code
Comments
Other
Rev Date Author Line
5848 02 Mar 20 olle 1 var Istat = function()
5848 02 Mar 20 olle 2 {
5848 02 Mar 20 olle 3   var istat = {};
5848 02 Mar 20 olle 4   var debug = 0;
5848 02 Mar 20 olle 5   
5848 02 Mar 20 olle 6   var refVariantDefault = 'kit1_standard';
5848 02 Mar 20 olle 7
5848 02 Mar 20 olle 8   // Well validation variable for input specimen, DNA, RNA
5848 02 Mar 20 olle 9   var wellIsValid = [];
5848 02 Mar 20 olle 10   // Well validation variables for extracts from specimen
5848 02 Mar 20 olle 11   var dnaWellIsValid = [];
5848 02 Mar 20 olle 12   var rnaWellIsValid = [];
5848 02 Mar 20 olle 13   
5848 02 Mar 20 olle 14   // Page initialization
5848 02 Mar 20 olle 15   istat.initPage = function()
5848 02 Mar 20 olle 16   {
5848 02 Mar 20 olle 17     // Step 1
5848 02 Mar 20 olle 18     Events.addEventHandler('step-1', 'wizard-validate', istat.validateStep1);
5848 02 Mar 20 olle 19     Events.addEventHandler('extractSourceItems', 'change', istat.sourceItemsOnChange);
5848 02 Mar 20 olle 20
5848 02 Mar 20 olle 21     // Step 2
5848 02 Mar 20 olle 22     Events.addEventHandler('step-2', 'wizard-initialize', istat.initializeStep2);
5848 02 Mar 20 olle 23     Events.addEventHandler('step-2', 'wizard-validate', istat.validateStep2);
5848 02 Mar 20 olle 24
5848 02 Mar 20 olle 25     // Navigation
5848 02 Mar 20 olle 26     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
5848 02 Mar 20 olle 27     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
5848 02 Mar 20 olle 28     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
5848 02 Mar 20 olle 29     Buttons.addClickHandler('goregister', Wizard.goRegister);
5848 02 Mar 20 olle 30     
5848 02 Mar 20 olle 31     // Final registration
5848 02 Mar 20 olle 32     Events.addEventHandler('wizard', 'wizard-submit', istat.submit);
5848 02 Mar 20 olle 33
5848 02 Mar 20 olle 34     // Get FFPE block items
5848 02 Mar 20 olle 35     //var url = '../Extraction.servlet?ID='+App.getSessionId();
5848 02 Mar 20 olle 36     //url += '&cmd=GetFfpeBlocksUnusedForSection';    
5848 02 Mar 20 olle 37     //Wizard.showLoadingAnimation('Loading unprocessed items...');
5848 02 Mar 20 olle 38     //Wizard.asyncJsonRequest(url, istat.initializeStep1old);
5848 02 Mar 20 olle 39
5848 02 Mar 20 olle 40     // Get unprocessed items
5848 02 Mar 20 olle 41     var url = '../Extraction.servlet?ID='+App.getSessionId();
5848 02 Mar 20 olle 42     url += '&cmd=GetUnprocessedItems';    
5848 02 Mar 20 olle 43     Wizard.showLoadingAnimation('Loading unprocessed items...');
5848 02 Mar 20 olle 44     Wizard.asyncJsonRequest(url, istat.initializeStep1);
5848 02 Mar 20 olle 45   }
5848 02 Mar 20 olle 46   
5848 02 Mar 20 olle 47   istat.initializeStep1 = function(response)
5848 02 Mar 20 olle 48   {
5848 02 Mar 20 olle 49     var frm = document.forms['meludi'];
5848 02 Mar 20 olle 50     var specimens = response.specimens;
5848 02 Mar 20 olle 51     var rnas = response.rnas;
5848 02 Mar 20 olle 52     var dnas = response.dnas;
5848 02 Mar 20 olle 53     var items = response.items;
5848 02 Mar 20 olle 54     
5848 02 Mar 20 olle 55     var sourceItemList = frm.extractSourceItems;
5848 02 Mar 20 olle 56     if (items.length)
5848 02 Mar 20 olle 57     {
5848 02 Mar 20 olle 58       var numItems = items.length;
5848 02 Mar 20 olle 59       for (var i=0; i < items.length; i++)
5848 02 Mar 20 olle 60       {
5848 02 Mar 20 olle 61         var item = items[i];
5848 02 Mar 20 olle 62         var name = (i+1) + ': ' + Strings.encodeTags(item.name);
5848 02 Mar 20 olle 63         if (item.bioWell)
5848 02 Mar 20 olle 64         {
5848 02 Mar 20 olle 65           name += ' -- ' + Strings.encodeTags(item.bioWell.bioPlate.name + ' (' + item.bioWell.location + ')');
5848 02 Mar 20 olle 66         }
5848 02 Mar 20 olle 67         var selected = i < 24;
5848 02 Mar 20 olle 68         // Identification of item via id works here as specimens and extracts
5848 02 Mar 20 olle 69         // are stored in the same database table using discriminators, and are
5848 02 Mar 20 olle 70         // therefore guaranteed to not have the same id value as another item in the table.
5848 02 Mar 20 olle 71         var option = new Option(name, item.id, selected, selected);
5848 02 Mar 20 olle 72         option.item = item;
5848 02 Mar 20 olle 73         sourceItemList.options[sourceItemList.length] = option;
5848 02 Mar 20 olle 74       }
5848 02 Mar 20 olle 75       istat.sourceItemsOnChange();
5848 02 Mar 20 olle 76     }
5848 02 Mar 20 olle 77     else
5848 02 Mar 20 olle 78     {
5848 02 Mar 20 olle 79       Wizard.setFatalError('No items available for processing.');
5848 02 Mar 20 olle 80       return;
5848 02 Mar 20 olle 81     }
5848 02 Mar 20 olle 82
5848 02 Mar 20 olle 83     Doc.show('step-1');
5848 02 Mar 20 olle 84     Doc.show('gonext');
5848 02 Mar 20 olle 85   }
5848 02 Mar 20 olle 86   
5848 02 Mar 20 olle 87   istat.initializeStep1old = function(response)
5848 02 Mar 20 olle 88   {
5848 02 Mar 20 olle 89     var frm = document.forms['meludi'];
5848 02 Mar 20 olle 90     var items = response.items;
5848 02 Mar 20 olle 91     
5848 02 Mar 20 olle 92     var sourceItemList = frm.extractSourceItems;
5848 02 Mar 20 olle 93     if (items.length)
5848 02 Mar 20 olle 94     {
5848 02 Mar 20 olle 95       var numItems = items.length;
5848 02 Mar 20 olle 96       for (var i=0; i < items.length; i++)
5848 02 Mar 20 olle 97       {
5848 02 Mar 20 olle 98         var item = items[i];
5848 02 Mar 20 olle 99         var name = (i+1) + ': ' + Strings.encodeTags(item.name);
5848 02 Mar 20 olle 100         if (item.pad)
5848 02 Mar 20 olle 101         {
5848 02 Mar 20 olle 102           name += ' -- (PAD: ' + Strings.encodeTags(item.pad + ')');
5848 02 Mar 20 olle 103         }
5848 02 Mar 20 olle 104         var selected = i < 8;
5848 02 Mar 20 olle 105         var option = new Option(name, item.id, selected, selected);
5848 02 Mar 20 olle 106         option.item = item;
5848 02 Mar 20 olle 107         if (item.yellowLabel)
5848 02 Mar 20 olle 108         {
5848 02 Mar 20 olle 109           option.className = 'yellow';
5848 02 Mar 20 olle 110         }
5848 02 Mar 20 olle 111         sourceItemList.options[sourceItemList.length] = option;
5848 02 Mar 20 olle 112       }
5848 02 Mar 20 olle 113       istat.sourceItemsOnChange();
5848 02 Mar 20 olle 114     }
5848 02 Mar 20 olle 115     else
5848 02 Mar 20 olle 116     {
5848 02 Mar 20 olle 117       Wizard.setFatalError('No sectioned FFPE block items available.');
5848 02 Mar 20 olle 118       return;
5848 02 Mar 20 olle 119     }
5848 02 Mar 20 olle 120
5848 02 Mar 20 olle 121     Wizard.setCurrentStep(1);
5848 02 Mar 20 olle 122     Doc.show('step-1');
5848 02 Mar 20 olle 123     Doc.show('gonext');
5848 02 Mar 20 olle 124   }
5848 02 Mar 20 olle 125
5848 02 Mar 20 olle 126   istat.sourceItemsOnChange = function()
5848 02 Mar 20 olle 127   {
5848 02 Mar 20 olle 128     sourceItemListIsValid = false;
5848 02 Mar 20 olle 129     Wizard.setInputStatus('extractSourceItems');
5848 02 Mar 20 olle 130     
5848 02 Mar 20 olle 131     var frm = document.forms['meludi'];
5848 02 Mar 20 olle 132     var sourceItemList = frm.extractSourceItems;
5848 02 Mar 20 olle 133     
5848 02 Mar 20 olle 134     var numSelected = 0;
5848 02 Mar 20 olle 135     for (var i = 0; i < sourceItemList.length; i++)
5848 02 Mar 20 olle 136     {
5848 02 Mar 20 olle 137       if (sourceItemList[i].selected) numSelected++;
5848 02 Mar 20 olle 138     }
5848 02 Mar 20 olle 139
5848 02 Mar 20 olle 140     if (numSelected < 1)
5848 02 Mar 20 olle 141     {
5848 02 Mar 20 olle 142       Wizard.setInputStatus('extractSourceItems', 'invalid', 'Must select a number of FFPE section (specimen) items.');
5848 02 Mar 20 olle 143       return;
5848 02 Mar 20 olle 144     }
5848 02 Mar 20 olle 145     
5848 02 Mar 20 olle 146     sourceItemListIsValid = true;
5848 02 Mar 20 olle 147     Wizard.setInputStatus('extractSourceItems', 'valid');
5848 02 Mar 20 olle 148   }
5848 02 Mar 20 olle 149
5848 02 Mar 20 olle 150   istat.validateStep1 = function(event)
5848 02 Mar 20 olle 151   {
5848 02 Mar 20 olle 152     if (!sourceItemListIsValid)
5848 02 Mar 20 olle 153     {
5848 02 Mar 20 olle 154       event.preventDefault();
5848 02 Mar 20 olle 155     }
5848 02 Mar 20 olle 156     var valid = true;
5848 02 Mar 20 olle 157   }
5848 02 Mar 20 olle 158
5848 02 Mar 20 olle 159   istat.initializeStep2 = function()
5848 02 Mar 20 olle 160   {
5848 02 Mar 20 olle 161     var frm = document.forms['meludi'];
5848 02 Mar 20 olle 162     var ffpeSectionList = istat.getSelectedItemsList();
5848 02 Mar 20 olle 163
5848 02 Mar 20 olle 164     Doc.addClass('extractSourceItems', 'disabled');
5848 02 Mar 20 olle 165
5848 02 Mar 20 olle 166     var nofSections = ffpeSectionList.length;
5848 02 Mar 20 olle 167         
5848 02 Mar 20 olle 168     var html = '';
5848 02 Mar 20 olle 169
5848 02 Mar 20 olle 170 /*
5848 02 Mar 20 olle 171     // Add buttons for adding standard comments for all FFPE blocks
5848 02 Mar 20 olle 172     html += '<tr class="section-header">';
5848 02 Mar 20 olle 173     html += '<td colspan="4">Standard comments</td>';
5848 02 Mar 20 olle 174     html += '</tr>';
5848 02 Mar 20 olle 175
5848 02 Mar 20 olle 176     html += '<tr class="align-top">';
5848 02 Mar 20 olle 177     html += '<td class="subprompt"></td>';
5848 02 Mar 20 olle 178     html += '<td><div class="button basicbutton interactable" id="addCarvedOutComment" style="font-weight: normal;">Add &quot;Utkarvad&quot; (Carved out)</div></td>';
5848 02 Mar 20 olle 179     html += '<td class="status" id="addCarvedOutComment.status"></td>';
5848 02 Mar 20 olle 180     html += '<td class="help"><span id="addCarvedOutComment.message" class="message"></span>Click button to add standard comment for all items.</td>';    
5848 02 Mar 20 olle 181     html += '</tr>';
5848 02 Mar 20 olle 182
5848 02 Mar 20 olle 183     html += '<tr class="align-top">';
5848 02 Mar 20 olle 184     html += '<td class="subprompt"></td>';
5848 02 Mar 20 olle 185     html += '<td><div class="button basicbutton interactable" id="addMnbComment" style="font-weight: normal;">Add &quot;MNB&quot; (Medium needle biopsy)</div></td>';
5848 02 Mar 20 olle 186     html += '<td class="status" id="addMnbComment.status"></td>';
5848 02 Mar 20 olle 187     html += '<td class="help"><span id="addMnbComment.message" class="message"></span>Click button to add standard comment for all items.</td>';    
5848 02 Mar 20 olle 188     html += '</tr>';
5848 02 Mar 20 olle 189 */
5848 02 Mar 20 olle 190
5848 02 Mar 20 olle 191     for (var i=0; i < nofSections; i++)
5848 02 Mar 20 olle 192     {
5848 02 Mar 20 olle 193       var ffpeSection = ffpeSectionList[i];
5848 02 Mar 20 olle 194       var ffpeSectionName = ffpeSection.name;
5848 02 Mar 20 olle 195       //var ffpeSectionName = ffpeBlockName + '.s';
5848 02 Mar 20 olle 196       //var pad = ffpeSection.pad;
5848 02 Mar 20 olle 197       //var materialNumber = ffpeSection.materialNumber;
5848 02 Mar 20 olle 198 /*
5848 02 Mar 20 olle 199       var yellowLabelCheck = '';
5848 02 Mar 20 olle 200       if (ffpeSection.yellowLabel == 'yellow')
5848 02 Mar 20 olle 201       {
5848 02 Mar 20 olle 202         yellowLabelCheck = 'checked';
5848 02 Mar 20 olle 203       }
5848 02 Mar 20 olle 204 */
5848 02 Mar 20 olle 205       var operatorDeliveryComment = ffpeSection.operatorDeliveryComment;
5848 02 Mar 20 olle 206       var heGlassFbox = ffpeSection.histology.FStain.bioWell.bioPlate.storage.tray;
5848 02 Mar 20 olle 207       var heGlassFpos = ffpeSection.histology.FStain.bioWell.bioPlate.storage.position;
5848 02 Mar 20 olle 208       var heGlassFtumourCellPct = ffpeSection.histology.FStain.tumourCellsPct;
5848 02 Mar 20 olle 209       var heGlassEbox = ffpeSection.histology.EStain.bioWell.bioPlate.storage.tray;
5848 02 Mar 20 olle 210       var heGlassEpos = ffpeSection.histology.EStain.bioWell.bioPlate.storage.position;
5848 02 Mar 20 olle 211       var heGlassEtumourCellPct = ffpeSection.histology.EStain.tumourCellsPct;
5848 02 Mar 20 olle 212       if (heGlassFtumourCellPct == null)
5848 02 Mar 20 olle 213       {
5848 02 Mar 20 olle 214         heGlassFtumourCellPct = '';
5848 02 Mar 20 olle 215       }
5848 02 Mar 20 olle 216       if (heGlassEtumourCellPct == null)
5848 02 Mar 20 olle 217       {
5848 02 Mar 20 olle 218         heGlassEtumourCellPct = '';
5848 02 Mar 20 olle 219       }
5848 02 Mar 20 olle 220 //alert("ffpe_section_tumour_cell_pct_alt_rec.js::initializeStep2(): i = " + i + " ffpeSectionName = " + ffpeSectionName + " pad = " + pad + " yellowLabelCheck = " + yellowLabelCheck + " ffpeSection = "  + JSON.stringify(ffpeSection));
5848 02 Mar 20 olle 221 //alert("ffpe_section_tumour_cell_pct_alt_rec.js::initializeStep2(): i = " + i + " ffpeSectionName = " + ffpeSectionName + " heGlassFbox = " + heGlassFbox + " heGlassFpos = " + heGlassFpos + " heGlassFtumourCellPct = "  + heGlassFtumourCellPct);
5848 02 Mar 20 olle 222       //var tubeIdentifier = 'TubeId' + blockName + i;
5848 02 Mar 20 olle 223       var tubeIdentifier = ffpeSectionName;
5848 02 Mar 20 olle 224
5848 02 Mar 20 olle 225       html += '<tr class="section-header">';
5848 02 Mar 20 olle 226       html += '<td colspan="4">FFPE section '+ffpeSectionName+'</td>';
5848 02 Mar 20 olle 227       html += '</tr>';
5848 02 Mar 20 olle 228
5848 02 Mar 20 olle 229 /*      
5848 02 Mar 20 olle 230       var padMsg = 'PAD number for '+ffpeSectionName+'.';
5848 02 Mar 20 olle 231       var materialNumberMsg = 'Material number (FFPE block number) for '+ffpeSectionName+'.';
5848 02 Mar 20 olle 232       var yellowLabelMsg = 'Assigned yellow label for '+ffpeSectionName+' (selected for processing).';
5848 02 Mar 20 olle 233 */
5848 02 Mar 20 olle 234       var nofSectionsMsg = 'Number of sections for '+ffpeSectionName+'.';
5848 02 Mar 20 olle 235       //var pctViabTumourCellsMsg = '% Viable tumour cells for '+ffpeSectionName+'.';
5848 02 Mar 20 olle 236       var opDelCmtMsg = 'Information specific for for '+ffpeSectionName+'.';
5848 02 Mar 20 olle 237       var disabledAttribute = '';
5848 02 Mar 20 olle 238
5848 02 Mar 20 olle 239 /*
5848 02 Mar 20 olle 240       // PAD number (info only)
5848 02 Mar 20 olle 241       html += '<tr>';
5848 02 Mar 20 olle 242       html += '<td class="subprompt">PAD</td>';
5848 02 Mar 20 olle 243       html += '<td>'+pad+'</td>';
5848 02 Mar 20 olle 244       html += '<td class="status" id="pad.'+i+'.status"></td>';
5848 02 Mar 20 olle 245       html += '<td class="help"><span id="pad.'+i+'.message" class="message"></span>'+padMsg+'<span id="pad.'+i+'.message" class="message"></span></td>';
5848 02 Mar 20 olle 246       html += '</tr>';
5848 02 Mar 20 olle 247
5848 02 Mar 20 olle 248       // Material number (info only)
5848 02 Mar 20 olle 249       html += '<tr>';
5848 02 Mar 20 olle 250       html += '<td class="subprompt">Material number</td>';
5848 02 Mar 20 olle 251       html += '<td>'+materialNumber+'</td>';
5848 02 Mar 20 olle 252       html += '<td class="status" id="materialNumber.'+i+'.status"></td>';
5848 02 Mar 20 olle 253       html += '<td class="help"><span id="materialNumber.'+i+'.message" class="message"></span>'+materialNumberMsg+'<span id="pad.'+i+'.message" class="message"></span></td>';
5848 02 Mar 20 olle 254       html += '</tr>';
5848 02 Mar 20 olle 255
5848 02 Mar 20 olle 256       // Yellow label check box (info only)
5848 02 Mar 20 olle 257       html += '<tr>';
5848 02 Mar 20 olle 258       html += '<td class="subprompt">Selected for processing</td>';
5848 02 Mar 20 olle 259       html += '<td class="input">';
5848 02 Mar 20 olle 260       html += '<label id="yellowLabel.'+i+'"><input type="checkbox" name="yellowLabel.'+i+'" id="yellowLabel.'+i+'" '+yellowLabelCheck+' '+disabledAttribute+' disabled>Yellow label</label>';
5848 02 Mar 20 olle 261       html += '</td>';
5848 02 Mar 20 olle 262       html += '<td class="status" id="yellowLabel.'+i+'.status"></td>';
5848 02 Mar 20 olle 263       html += '<td class="help"><span id="yellowLabel.'+i+'.message" class="message"></span>'+yellowLabelMsg+'<span id="yellowLabel.'+i+'.message" class="message"></span></td>';
5848 02 Mar 20 olle 264       html += '</tr>';
5848 02 Mar 20 olle 265 */
5848 02 Mar 20 olle 266
5848 02 Mar 20 olle 267       var tubeContentTypeNameInternal = 'FFPE section';
5848 02 Mar 20 olle 268       var tubeContentType = 'FFPE section';
5848 02 Mar 20 olle 269       var tubeContentTypeName = 'Specimen';
5848 02 Mar 20 olle 270       var tubeName = ffpeSectionName;
5848 02 Mar 20 olle 271       var extractsFromFirstSpecimenOnly = false;
5848 02 Mar 20 olle 272
5848 02 Mar 20 olle 273       //var boxMsg = 'No storage space allocated for specimen; all amount expected to be used.';
5848 02 Mar 20 olle 274       //var dnaBoxMsg = 'Box-number and position where the DNA extract will be placed.';
5848 02 Mar 20 olle 275       //var rnaBoxMsg = 'Box-number and position where the RNA extract will be placed.';
5848 02 Mar 20 olle 276       var heGlassFBoxMsg = 'Box-number and position where the H&E glass "F" is placed.';
5848 02 Mar 20 olle 277       var heGlassEBoxMsg = 'Box-number and position where the H&E glass "E" is placed.';
5848 02 Mar 20 olle 278       var disabledAttribute = '';
5848 02 Mar 20 olle 279       var pctTumourCellsFMsg = '% Tumour cells for '+ffpeSectionName+'.F.'
5848 02 Mar 20 olle 280       var pctTumourCellsEMsg = '% Tumour cells for '+ffpeSectionName+'.E.'
5848 02 Mar 20 olle 281
5848 02 Mar 20 olle 282 /*
5848 02 Mar 20 olle 283       html += '<tr>';
5848 02 Mar 20 olle 284       html += '<td class="subprompt">'+tubeContentTypeName+'&nbsp;'+tubeName+'&nbsp;&nbsp;&nbsp;'+'Box</td>';
5848 02 Mar 20 olle 285       html += '<td class="input">';
5848 02 Mar 20 olle 286       html += '<input type="text" name="box.'+i+'" id="box.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>';
5848 02 Mar 20 olle 287       html += '&nbsp;Row<input type="text" name="row.'+i+'" id="row.'+i+'" style="text-transform:uppercase; width: 3em;" maxlength="2"'+disabledAttribute+'>';
5848 02 Mar 20 olle 288       html += '&nbsp;Column<input type="text" name="column.'+i+'" id="column.'+i+'" style="width: 3em;" maxlength="2"'+disabledAttribute+'>';
5848 02 Mar 20 olle 289       html += '</td>';
5848 02 Mar 20 olle 290       html += '<td class="status" id="box.'+i+'.status"></td>';
5848 02 Mar 20 olle 291       html += '<td class="help"><span id="box.'+i+'.message" class="message"></span>'+boxMsg+'<span id="position.'+i+'.message" class="message"></span></td>';
5848 02 Mar 20 olle 292       html += '</tr>';
5848 02 Mar 20 olle 293
5848 02 Mar 20 olle 294       disabledAttribute = '';
5848 02 Mar 20 olle 295       if (i == 0 || !extractsFromFirstSpecimenOnly)
5848 02 Mar 20 olle 296       {
5848 02 Mar 20 olle 297         html += '<tr>';
5848 02 Mar 20 olle 298         html += '<td class="subprompt">DNA extract'+'&nbsp;'+tubeName+'.d&nbsp;&nbsp;&nbsp;'+'Box</td>';
5848 02 Mar 20 olle 299         html += '<td class="text">';
5848 02 Mar 20 olle 300         html += '<input type="text" name="dnaBox.'+i+'" id="dnaBox.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>';
5848 02 Mar 20 olle 301         html += '&nbsp;Row<input type="text" name="dnaRow.'+i+'" id="dnaRow.'+i+'" style="text-transform:uppercase; width: 3em;" maxlength="2"'+disabledAttribute+'>';
5848 02 Mar 20 olle 302         html += '&nbsp;Column<input type="text" name="dnaColumn.'+i+'" id="dnaColumn.'+i+'" style="width: 3em;" maxlength="2"'+disabledAttribute+'>';
5848 02 Mar 20 olle 303         html += '</td>';
5848 02 Mar 20 olle 304         html += '<td class="status" id="dnaBox.'+i+'.status"></td>';
5848 02 Mar 20 olle 305         html += '<td class="help"><span id="dnaBox.'+i+'.message" class="message"></span>'+dnaBoxMsg+'<span id="dnaPosition.'+i+'.message" class="message"></span></td>';
5848 02 Mar 20 olle 306         html += '</tr>';
5848 02 Mar 20 olle 307
5848 02 Mar 20 olle 308         html += '<tr>';
5848 02 Mar 20 olle 309         html += '<td class="subprompt">RNA extract'+'&nbsp;'+tubeName+'.r&nbsp;&nbsp;&nbsp;'+'Box</td>';
5848 02 Mar 20 olle 310         html += '<td class="text">';
5848 02 Mar 20 olle 311         html += '<input type="text" name="rnaBox.'+i+'" id="rnaBox.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>';
5848 02 Mar 20 olle 312         html += '&nbsp;Row<input type="text" name="rnaRow.'+i+'" id="rnaRow.'+i+'" style="text-transform:uppercase; width: 3em;" maxlength="2"'+disabledAttribute+'>';
5848 02 Mar 20 olle 313         html += '&nbsp;Column<input type="text" name="rnaColumn.'+i+'" id="rnaColumn.'+i+'" style="width: 3em;" maxlength="2"'+disabledAttribute+'>';
5848 02 Mar 20 olle 314         html += '</td>';
5848 02 Mar 20 olle 315         html += '<td class="status" id="rnaBox.'+i+'.status"></td>';
5848 02 Mar 20 olle 316         html += '<td class="help"><span id="rnaBox.'+i+'.message" class="message"></span>'+rnaBoxMsg+'<span id="rnaPosition.'+i+'.message" class="message"></span></td>';
5848 02 Mar 20 olle 317         html += '</tr>';
5848 02 Mar 20 olle 318       }
5848 02 Mar 20 olle 319 */
5848 02 Mar 20 olle 320
5848 02 Mar 20 olle 321 /*
5848 02 Mar 20 olle 322       // Number of sections
5848 02 Mar 20 olle 323       html += '<tr>';
5848 02 Mar 20 olle 324       html += '<td class="subprompt">Number of sections</td>';
5848 02 Mar 20 olle 325       html += '<td class="input">';
5848 02 Mar 20 olle 326       //html += '<input type="text" name="nofSections.'+i+'" id="nofSections.'+i+'" style="width: 3em;" maxlength="2" value="1" '+disabledAttribute+'>';
5848 02 Mar 20 olle 327       html += '<input type="text" name="nofSections.'+i+'" id="nofSections.'+i+'" style="width: 3em;" maxlength="2" value="" '+disabledAttribute+'>';
5848 02 Mar 20 olle 328       html += '</td>';
5848 02 Mar 20 olle 329       html += '<td class="status" id="nofSections.'+i+'.status"></td>';
5848 02 Mar 20 olle 330       html += '<td class="help"><span id="nofSections.'+i+'.message" class="message"></span>'+nofSectionsMsg+'<span id="nofSections.'+i+'.message" class="message"></span></td>';
5848 02 Mar 20 olle 331       html += '</tr>';
5848 02 Mar 20 olle 332 */
5848 02 Mar 20 olle 333
5848 02 Mar 20 olle 334       // Operator delivery comment
5848 02 Mar 20 olle 335       html += '<tr class="align-top">';
5848 02 Mar 20 olle 336       html += '<td class="subprompt">Operator delivery comment</td>';
5848 02 Mar 20 olle 337       html += '<td class="input"><textarea rows="3" name="comment.'+i+'" id="comment.'+i+'" disabled>'+operatorDeliveryComment+'</textarea></td>';
5848 02 Mar 20 olle 338       html += '<td class="status" id="comment.'+i+'.status"></td>';
5848 02 Mar 20 olle 339       html += '<td class="help"><span id="comment.'+i+'.message" class="message"></span>'+opDelCmtMsg+'</td>';    
5848 02 Mar 20 olle 340       html += '</tr>';
5848 02 Mar 20 olle 341
5848 02 Mar 20 olle 342       // H&E glass "Front"
5848 02 Mar 20 olle 343       html += '<tr>';
5848 02 Mar 20 olle 344       html += '<td class="subprompt">H&E glass'+'&nbsp;'+ffpeSectionName+'.F&nbsp;&nbsp;&nbsp;'+'Box</td>';
5848 02 Mar 20 olle 345       html += '<td class="input">';
5848 02 Mar 20 olle 346       html += '<input type="text" name="heGlassFBox.'+i+'" id="heGlassFBox.'+i+'" style="width: 12em;" maxlength="12" disabled value="'+heGlassFbox+'"'+'>';
5848 02 Mar 20 olle 347       //html += '&nbsp;Tray<input type="text" name="heGlassFTray.'+i+'" id="heGlassFTray.'+i+'" style="text-transform:uppercase; width: 3em;" maxlength="2"'+disabledAttribute+'>';
5848 02 Mar 20 olle 348       html += '&nbsp;Position<input type="text" name="heGlassFPosition.'+i+'" id="heGlassFPosition.'+i+'" style="width: 3em;" maxlength="2" disabled value="'+heGlassFpos+'"'+'>';
5848 02 Mar 20 olle 349       html += '</td>';
5848 02 Mar 20 olle 350       html += '<td class="status" id="heGlassFBox.'+i+'.status"></td>';
5848 02 Mar 20 olle 351       html += '<td class="help"><span id="heGlassFBox.'+i+'.message" class="message"></span>'+heGlassFBoxMsg+'<span id="heGlassFPosition.'+i+'.message" class="message"></span></td>';
5848 02 Mar 20 olle 352       html += '</tr>';
5848 02 Mar 20 olle 353
5848 02 Mar 20 olle 354       // H&E glass "Front" percentage of tumor cells 
5848 02 Mar 20 olle 355       html += '<tr>';
5848 02 Mar 20 olle 356       html += '<td class="subprompt">% Tumour cells</td>';
5848 02 Mar 20 olle 357       html += '<td class="input">';
5848 02 Mar 20 olle 358       html += '<input type="text" name="pctTumourCellsF.'+i+'" id="pctTumourCellsF.'+i+'" style="width: 3em;" maxlength="3"'+disabledAttribute+' value="'+heGlassFtumourCellPct+'"'+'>';
5848 02 Mar 20 olle 359       html += '</td>';
5848 02 Mar 20 olle 360       html += '<td class="status" id="pctTumourCellsF.'+i+'.status"></td>';
5848 02 Mar 20 olle 361       html += '<td class="help"><span id="pctTumourCellsF.'+i+'.message" class="message"></span>'+pctTumourCellsFMsg+'<span id="pctTumourCellsF.'+i+'.message" class="message"></span></td>';
5848 02 Mar 20 olle 362       html += '</tr>';
5848 02 Mar 20 olle 363
5848 02 Mar 20 olle 364       // H&E glass "End"
5848 02 Mar 20 olle 365       html += '<tr>';
5848 02 Mar 20 olle 366       html += '<td class="subprompt">H&E glass'+'&nbsp;'+ffpeSectionName+'.E&nbsp;&nbsp;&nbsp;'+'Box</td>';
5848 02 Mar 20 olle 367       html += '<td class="input">';
5848 02 Mar 20 olle 368       html += '<input type="text" name="heGlassEBox.'+i+'" id="heGlassEBox.'+i+'" style="width: 12em;" maxlength="12" disabled value="'+heGlassEbox+'"'+'>';
5848 02 Mar 20 olle 369       //html += '&nbsp;Tray<input type="text" name="heGlassETray.'+i+'" id="heGlassETray.'+i+'" style="text-transform:uppercase; width: 3em;" maxlength="2"'+disabledAttribute+'>';
5848 02 Mar 20 olle 370       html += '&nbsp;Position<input type="text" name="heGlassEPosition.'+i+'" id="heGlassEPosition.'+i+'" style="width: 3em;" maxlength="2" disabled value="'+heGlassEpos+'"'+'>';
5848 02 Mar 20 olle 371       html += '</td>';
5848 02 Mar 20 olle 372       html += '<td class="status" id="heGlassEBox.'+i+'.status"></td>';
5848 02 Mar 20 olle 373       html += '<td class="help"><span id="heGlassEBox.'+i+'.message" class="message"></span>'+heGlassEBoxMsg+'<span id="heGlassEPosition.'+i+'.message" class="message"></span></td>';
5848 02 Mar 20 olle 374       html += '</tr>';
5848 02 Mar 20 olle 375
5848 02 Mar 20 olle 376       // H&E glass "End" percentage of tumor cells 
5848 02 Mar 20 olle 377       html += '<tr>';
5848 02 Mar 20 olle 378       html += '<td class="subprompt">% Tumour cells</td>';
5848 02 Mar 20 olle 379       html += '<td class="input">';
5848 02 Mar 20 olle 380       html += '<input type="text" name="pctTumourCellsE.'+i+'" id="pctTumourCellsE.'+i+'" style="width: 3em;" maxlength="3"'+disabledAttribute+' value="'+heGlassEtumourCellPct+'"'+'>';
5848 02 Mar 20 olle 381       html += '</td>';
5848 02 Mar 20 olle 382       html += '<td class="status" id="pctTumourCellsE.'+i+'.status"></td>';
5848 02 Mar 20 olle 383       html += '<td class="help"><span id="pctTumourCellsE.'+i+'.message" class="message"></span>'+pctTumourCellsEMsg+'<span id="pctTumourCellsE.'+i+'.message" class="message"></span></td>';
5848 02 Mar 20 olle 384       html += '</tr>';
5848 02 Mar 20 olle 385     }
5848 02 Mar 20 olle 386     Doc.element('ffpe-sections').innerHTML = html;
5848 02 Mar 20 olle 387     
5848 02 Mar 20 olle 388 /*
5848 02 Mar 20 olle 389     // Add click handlers for buttons for adding standard comments for all specimens/RNA/DNA
5848 02 Mar 20 olle 390     var addCarvedOutCommentGeneralButton = Doc.element('addCarvedOutComment');
5848 02 Mar 20 olle 391     Buttons.addClickHandler(addCarvedOutCommentGeneralButton, istat.addCommentGeneral, {'nofBlocks': nofBlocks, 'text-field': 'comment.', 'text': 'Utkarvad.'});
5848 02 Mar 20 olle 392     var addMnbCommentGeneralButton = Doc.element('addMnbComment');
5848 02 Mar 20 olle 393     Buttons.addClickHandler(addMnbCommentGeneralButton, istat.addCommentGeneral, {'nofBlocks': nofBlocks, 'text-field': 'comment.', 'text': 'MNB.'});
5848 02 Mar 20 olle 394 */
5848 02 Mar 20 olle 395
5848 02 Mar 20 olle 396     Doc.hide('gonext');
5848 02 Mar 20 olle 397     Doc.show('goregister');
5848 02 Mar 20 olle 398     Doc.show('gocancel');
5848 02 Mar 20 olle 399
5848 02 Mar 20 olle 400     //frm['nofSections.0'].focus();
5848 02 Mar 20 olle 401     Wizard.setCurrentStep(2);
5848 02 Mar 20 olle 402     Doc.show('step-2');
5848 02 Mar 20 olle 403
5848 02 Mar 20 olle 404 /*
5848 02 Mar 20 olle 405     var storageBoxSuffix = '_sp';
5848 02 Mar 20 olle 406     
5848 02 Mar 20 olle 407     //var url = '../SpecimenTubeRegistration.servlet?ID='+App.getSessionId();
5848 02 Mar 20 olle 408     var url = '../BaseLineRegistration.servlet?ID='+App.getSessionId();
5848 02 Mar 20 olle 409     url += '&cmd=FindStoragePositions';  
5848 02 Mar 20 olle 410     //url += '&nofTubes='+frm.nofTubes.value;
5848 02 Mar 20 olle 411     url += '&nofTubes='+nofBlocks;
5848 02 Mar 20 olle 412     url += '&storageBoxSuffix='+storageBoxSuffix;
5848 02 Mar 20 olle 413     url += '&extractsFromFirstSpecimenOnly='+extractsFromFirstSpecimenOnly;
5848 02 Mar 20 olle 414     
5848 02 Mar 20 olle 415     Wizard.showLoadingAnimation('Looking for empty box positions...');
5848 02 Mar 20 olle 416     Wizard.asyncJsonRequest(url, istat.storagePositionsLoaded);
5848 02 Mar 20 olle 417 */
5848 02 Mar 20 olle 418   }
5848 02 Mar 20 olle 419
5848 02 Mar 20 olle 420   istat.addCommentGeneral = function(event)
5848 02 Mar 20 olle 421   {
5848 02 Mar 20 olle 422     var nofBlocks = Data.get(event.currentTarget, 'nofBlocks', event.currentTarget.id);
5848 02 Mar 20 olle 423     var textFieldBase = Data.get(event.currentTarget, 'text-field', event.currentTarget.id);
5848 02 Mar 20 olle 424     // Get standard comment text to add
5848 02 Mar 20 olle 425     var text = Data.get(event.currentTarget, 'text', event.currentTarget.id);
5848 02 Mar 20 olle 426     // Loop over comment fields to update
5848 02 Mar 20 olle 427     for (var i=0; i < nofBlocks; i++)
5848 02 Mar 20 olle 428     {
5848 02 Mar 20 olle 429       var textField = Doc.element(textFieldBase+i);
5848 02 Mar 20 olle 430       if (textField)
5848 02 Mar 20 olle 431       {
5848 02 Mar 20 olle 432         if (text && text != '')
5848 02 Mar 20 olle 433         {
5848 02 Mar 20 olle 434           // Check if current comment field already contains text
5848 02 Mar 20 olle 435           if (textField.value != '')
5848 02 Mar 20 olle 436           {
5848 02 Mar 20 olle 437             // Add space to text in current comment field
5848 02 Mar 20 olle 438             textField.value += ' ';
5848 02 Mar 20 olle 439           }
5848 02 Mar 20 olle 440           // Add standard comment text
5848 02 Mar 20 olle 441           textField.value += text;
5848 02 Mar 20 olle 442         }
5848 02 Mar 20 olle 443       }
5848 02 Mar 20 olle 444     }
5848 02 Mar 20 olle 445   }
5848 02 Mar 20 olle 446   
5848 02 Mar 20 olle 447   istat.boxOnKeyUp = function(event)
5848 02 Mar 20 olle 448   {
5848 02 Mar 20 olle 449     var frm = document.forms['meludi'];
5848 02 Mar 20 olle 450     var tubeContentType = frm.tubeContentType.value;
5848 02 Mar 20 olle 451     
5848 02 Mar 20 olle 452     var boxType = Data.get(event.currentTarget, 'boxtype');
5848 02 Mar 20 olle 453     var index = Data.int(event.currentTarget, 'index');
5848 02 Mar 20 olle 454
5848 02 Mar 20 olle 455     // Get box prefix, default is for input tubes
5848 02 Mar 20 olle 456     var boxPrefix = 'box.';
5848 02 Mar 20 olle 457     if (boxType && boxType == 'DNA')
5848 02 Mar 20 olle 458     {
5848 02 Mar 20 olle 459       boxPrefix = 'dnaBox.';
5848 02 Mar 20 olle 460     }
5848 02 Mar 20 olle 461     if (boxType && boxType == 'RNA')
5848 02 Mar 20 olle 462     {
5848 02 Mar 20 olle 463       boxPrefix = 'rnaBox.';
5848 02 Mar 20 olle 464     }
5848 02 Mar 20 olle 465
5848 02 Mar 20 olle 466     // Check box name
5848 02 Mar 20 olle 467     var boxIsValid = true;
5848 02 Mar 20 olle 468     var box = frm[boxPrefix+index].value;
5848 02 Mar 20 olle 469     Wizard.setInputStatus(boxPrefix+index);
5848 02 Mar 20 olle 470     // Check for prefix "ML_"
5848 02 Mar 20 olle 471     if (box.indexOf('ML_') != 0)
5848 02 Mar 20 olle 472     {
5848 02 Mar 20 olle 473       boxIsValid = false;
5848 02 Mar 20 olle 474     }
5848 02 Mar 20 olle 475     var suffix = '_sp';
5848 02 Mar 20 olle 476     if (tubeContentType == 'DNA' || (boxType && boxType == 'DNA'))
5848 02 Mar 20 olle 477     {
5848 02 Mar 20 olle 478       suffix = '_dna';
5848 02 Mar 20 olle 479     }
5848 02 Mar 20 olle 480     else if (tubeContentType == 'RNA' || (boxType && boxType == 'RNA'))
5848 02 Mar 20 olle 481     {
5848 02 Mar 20 olle 482       suffix = '_rna';
5848 02 Mar 20 olle 483     }
5848 02 Mar 20 olle 484     // Check for suffix
5848 02 Mar 20 olle 485     if (box.indexOf(suffix) != (box.length - suffix.length))
5848 02 Mar 20 olle 486     {
5848 02 Mar 20 olle 487       boxIsValid = false;
5848 02 Mar 20 olle 488     }
5848 02 Mar 20 olle 489     
5848 02 Mar 20 olle 490     if (!boxIsValid)
5848 02 Mar 20 olle 491     {
5848 02 Mar 20 olle 492       Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Box name must start with "ML_" and end with "'+suffix+'"');
5848 02 Mar 20 olle 493       return;
5848 02 Mar 20 olle 494     }
5848 02 Mar 20 olle 495   }
5848 02 Mar 20 olle 496   
5848 02 Mar 20 olle 497   istat.wellOnChange = function(event)
5848 02 Mar 20 olle 498   {
5848 02 Mar 20 olle 499     var frm = document.forms['meludi'];
5848 02 Mar 20 olle 500     var target = event.currentTarget;
5848 02 Mar 20 olle 501
5848 02 Mar 20 olle 502     var boxType = Data.get(target, 'boxtype');
5848 02 Mar 20 olle 503     var index = Data.int(target, 'index');
5848 02 Mar 20 olle 504
5848 02 Mar 20 olle 505     // Get well position prefixes, default is for input tubes
5848 02 Mar 20 olle 506     var boxPrefix = 'box.';
5848 02 Mar 20 olle 507     var rowPrefix = 'row.';
5848 02 Mar 20 olle 508     var columnPrefix = 'column.';
5848 02 Mar 20 olle 509     if (boxType && boxType == 'DNA')
5848 02 Mar 20 olle 510     {
5848 02 Mar 20 olle 511       boxPrefix = 'dnaBox.';
5848 02 Mar 20 olle 512       rowPrefix = 'dnaRow.';
5848 02 Mar 20 olle 513       columnPrefix = 'dnaColumn.';
5848 02 Mar 20 olle 514     }
5848 02 Mar 20 olle 515     if (boxType && boxType == 'RNA')
5848 02 Mar 20 olle 516     {
5848 02 Mar 20 olle 517       boxPrefix = 'rnaBox.';
5848 02 Mar 20 olle 518       rowPrefix = 'rnaRow.';
5848 02 Mar 20 olle 519       columnPrefix = 'rnaColumn.';
5848 02 Mar 20 olle 520     }
5848 02 Mar 20 olle 521     var box = frm[boxPrefix+index].value;
5848 02 Mar 20 olle 522     var row = frm[rowPrefix+index].value;
5848 02 Mar 20 olle 523     var column = frm[columnPrefix+index].value;
5848 02 Mar 20 olle 524     
5848 02 Mar 20 olle 525     //wellIsValid[index] = true;
5848 02 Mar 20 olle 526     if (!boxType || boxType == 'Specimen')
5848 02 Mar 20 olle 527     {
5848 02 Mar 20 olle 528       wellIsValid[index] = false;
5848 02 Mar 20 olle 529     }
5848 02 Mar 20 olle 530     else if (boxType && boxType == 'DNA')
5848 02 Mar 20 olle 531     {
5848 02 Mar 20 olle 532       dnaWellIsValid[index] = false;
5848 02 Mar 20 olle 533     }
5848 02 Mar 20 olle 534     else if (boxType && boxType == 'RNA')
5848 02 Mar 20 olle 535     {
5848 02 Mar 20 olle 536       rnaWellIsValid[index] = false;
5848 02 Mar 20 olle 537     }
5848 02 Mar 20 olle 538     else
5848 02 Mar 20 olle 539     {
5848 02 Mar 20 olle 540       wellIsValid[index] = false;
5848 02 Mar 20 olle 541     }
5848 02 Mar 20 olle 542     Wizard.setInputStatus(boxPrefix+index);
5848 02 Mar 20 olle 543 /*
5848 02 Mar 20 olle 544     Wizard.setInputStatus('position.'+index);
5848 02 Mar 20 olle 545 */
5848 02 Mar 20 olle 546     
5848 02 Mar 20 olle 547     if (box == '') 
5848 02 Mar 20 olle 548     {
5848 02 Mar 20 olle 549       Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Missing box');
5848 02 Mar 20 olle 550       return;
5848 02 Mar 20 olle 551     }
5848 02 Mar 20 olle 552
5848 02 Mar 20 olle 553     // Position errors are reported on box message line    
5848 02 Mar 20 olle 554     if (row == '')
5848 02 Mar 20 olle 555     {
5848 02 Mar 20 olle 556       Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Missing row');
5848 02 Mar 20 olle 557       return;
5848 02 Mar 20 olle 558     }
5848 02 Mar 20 olle 559
5848 02 Mar 20 olle 560     if (column == '')
5848 02 Mar 20 olle 561     {
5848 02 Mar 20 olle 562       Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Missing column');
5848 02 Mar 20 olle 563       return;
5848 02 Mar 20 olle 564     }
5848 02 Mar 20 olle 565     
5848 02 Mar 20 olle 566     // Check for duplicates
5848 02 Mar 20 olle 567     var nofTubes = parseInt(frm.nofTubes.value);
5848 02 Mar 20 olle 568     for (var i=0; i < nofTubes; i++)
5848 02 Mar 20 olle 569     {    
5848 02 Mar 20 olle 570       if (i != index)
5848 02 Mar 20 olle 571       {
5848 02 Mar 20 olle 572         if (box == frm.elements[boxPrefix+i].value && row == frm[rowPrefix+i].value && column == frm[columnPrefix+i].value)
5848 02 Mar 20 olle 573         {
5848 02 Mar 20 olle 574           Wizard.setInputStatus(boxPrefix+index, 'invalid', 'The position is already used once in this wizard');        
5848 02 Mar 20 olle 575           return;
5848 02 Mar 20 olle 576         }
5848 02 Mar 20 olle 577       }
5848 02 Mar 20 olle 578     }
5848 02 Mar 20 olle 579
5848 02 Mar 20 olle 580     //Wizard.setInputStatus('position.'+index, 'checking', 'Checking...');
5848 02 Mar 20 olle 581     Wizard.setInputStatus(boxPrefix+index, 'checking', 'Checking...');
5848 02 Mar 20 olle 582     
5848 02 Mar 20 olle 583     // Seems to be ok -- check if used by another sample
5848 02 Mar 20 olle 584     var request = Ajax.getXmlHttpRequest();
5848 02 Mar 20 olle 585     var url = '../SpecimenTubeRegistration.servlet?ID='+App.getSessionId();
5848 02 Mar 20 olle 586     url += '&cmd=ValidateWell';
5848 02 Mar 20 olle 587     url += '&box=' + encodeURIComponent(box);  
5848 02 Mar 20 olle 588     url += '&row=' + encodeURIComponent(row);
5848 02 Mar 20 olle 589     url += '&column=' + encodeURIComponent(column);
5848 02 Mar 20 olle 590     
5848 02 Mar 20 olle 591     Wizard.asyncJsonRequest(url, function(response) { istat.onBoxValidated(response, boxType, index) } );
5848 02 Mar 20 olle 592   }
5848 02 Mar 20 olle 593   
5848 02 Mar 20 olle 594   istat.onBoxValidated = function(response, boxType, index)
5848 02 Mar 20 olle 595   {
5848 02 Mar 20 olle 596     // Get well position prefixes, default is for input tubes
5848 02 Mar 20 olle 597     var boxPrefix = 'box.';
5848 02 Mar 20 olle 598     if (boxType && boxType == 'DNA')
5848 02 Mar 20 olle 599     {
5848 02 Mar 20 olle 600       boxPrefix = 'dnaBox.';
5848 02 Mar 20 olle 601     }
5848 02 Mar 20 olle 602     if (boxType && boxType == 'RNA')
5848 02 Mar 20 olle 603     {
5848 02 Mar 20 olle 604       boxPrefix = 'rnaBox.';
5848 02 Mar 20 olle 605     }
5848 02 Mar 20 olle 606
5848 02 Mar 20 olle 607     //Wizard.setInputStatus('position.'+index);
5848 02 Mar 20 olle 608     Wizard.setInputStatus(boxPrefix+index);
5848 02 Mar 20 olle 609     if (response.message)
5848 02 Mar 20 olle 610     {
5848 02 Mar 20 olle 611       //Wizard.setInputStatus(response.box ? 'box.'+index : 'position.'+index, 'invalid', Strings.encodeTags(response.message));
5848 02 Mar 20 olle 612       Wizard.setInputStatus(boxPrefix+index, 'invalid', Strings.encodeTags(response.message));
5848 02 Mar 20 olle 613       return;
5848 02 Mar 20 olle 614     }
5848 02 Mar 20 olle 615     
5848 02 Mar 20 olle 616     //wellIsValid[index] = true;
5848 02 Mar 20 olle 617     if (!boxType || boxType == 'Specimen')
5848 02 Mar 20 olle 618     {
5848 02 Mar 20 olle 619       wellIsValid[index] = true;
5848 02 Mar 20 olle 620     }
5848 02 Mar 20 olle 621     else if (boxType && boxType == 'DNA')
5848 02 Mar 20 olle 622     {
5848 02 Mar 20 olle 623       dnaWellIsValid[index] = true;
5848 02 Mar 20 olle 624     }
5848 02 Mar 20 olle 625     else if (boxType && boxType == 'RNA')
5848 02 Mar 20 olle 626     {
5848 02 Mar 20 olle 627       rnaWellIsValid[index] = true;
5848 02 Mar 20 olle 628     }
5848 02 Mar 20 olle 629     else
5848 02 Mar 20 olle 630     {
5848 02 Mar 20 olle 631       wellIsValid[index] = true;
5848 02 Mar 20 olle 632     }
5848 02 Mar 20 olle 633     Wizard.setInputStatus(boxPrefix+index, 'valid');
5848 02 Mar 20 olle 634 /*
5848 02 Mar 20 olle 635     Wizard.setInputStatus('position.'+index, 'valid');
5848 02 Mar 20 olle 636 */
5848 02 Mar 20 olle 637   }
5848 02 Mar 20 olle 638
5848 02 Mar 20 olle 639   
5848 02 Mar 20 olle 640   istat.nofSectionsOnChange = function(event)
5848 02 Mar 20 olle 641   {
5848 02 Mar 20 olle 642     var frm = document.forms['meludi'];
5848 02 Mar 20 olle 643     var target = event.currentTarget;
5848 02 Mar 20 olle 644
5848 02 Mar 20 olle 645     var index = Data.int(target, 'index');
5848 02 Mar 20 olle 646     var nofSections = frm['nofSections.'+index].value;
5848 02 Mar 20 olle 647
5848 02 Mar 20 olle 648     Wizard.setInputStatus('nofSections.'+index);
5848 02 Mar 20 olle 649
5848 02 Mar 20 olle 650     if (nofSections == '')
5848 02 Mar 20 olle 651     {
5848 02 Mar 20 olle 652       Wizard.setInputStatus('nofSections'+index, 'invalid', 'Missing');
5848 02 Mar 20 olle 653       return;
5848 02 Mar 20 olle 654     }
5848 02 Mar 20 olle 655     if (parseInt(nofSections) < 1)
5848 02 Mar 20 olle 656     {
5848 02 Mar 20 olle 657       Wizard.setInputStatus('nofSections'+index, 'invalid', 'Must be at least 1');
5848 02 Mar 20 olle 658       return;    
5848 02 Mar 20 olle 659     }
5848 02 Mar 20 olle 660     Wizard.setInputStatus('nofSections'+index, 'valid');
5848 02 Mar 20 olle 661   }
5848 02 Mar 20 olle 662
5848 02 Mar 20 olle 663   istat.validateStep2 = function(event)
5848 02 Mar 20 olle 664   {
5848 02 Mar 20 olle 665     var valid = true;
5848 02 Mar 20 olle 666     //var frm = document.forms['meludi'];
5848 02 Mar 20 olle 667
5848 02 Mar 20 olle 668 /*
5848 02 Mar 20 olle 669     // Check that all FFPE blocks have PAD numbers
5848 02 Mar 20 olle 670     var nofBlocks = ffpeBlockList.length;
5848 02 Mar 20 olle 671     for (var i = 0; i < nofBlocks; i++)
5848 02 Mar 20 olle 672     {
5848 02 Mar 20 olle 673       if (frm['pad.'+i].value == '')
5848 02 Mar 20 olle 674       {
5848 02 Mar 20 olle 675         Wizard.setInputStatus('pad.'+i, 'warning', 'Missing');
5848 02 Mar 20 olle 676         valid = false;
5848 02 Mar 20 olle 677       }
5848 02 Mar 20 olle 678     }
5848 02 Mar 20 olle 679 */
5848 02 Mar 20 olle 680     if (!valid)
5848 02 Mar 20 olle 681     {
5848 02 Mar 20 olle 682       event.preventDefault();
5848 02 Mar 20 olle 683     }
5848 02 Mar 20 olle 684   }
5848 02 Mar 20 olle 685
5848 02 Mar 20 olle 686   istat.submit = function()
5848 02 Mar 20 olle 687   {
5848 02 Mar 20 olle 688     var frm = document.forms['meludi'];
5848 02 Mar 20 olle 689     var ffpeSectionList = istat.getSelectedItemsList();
5848 02 Mar 20 olle 690     
5848 02 Mar 20 olle 691     var ffpeSectionInfo = {};
5848 02 Mar 20 olle 692     var nofSections = ffpeSectionList.length;
5848 02 Mar 20 olle 693     ffpeSectionInfo.ffpeSections = [];
5848 02 Mar 20 olle 694     for (var i = 0; i < nofSections; i++)
5848 02 Mar 20 olle 695     {
5848 02 Mar 20 olle 696       var ffpeSection ={};
5848 02 Mar 20 olle 697       ffpeSection.name = ffpeSectionList[i].name;
5848 02 Mar 20 olle 698 /*
5848 02 Mar 20 olle 699       ffpeSection.blockName = ffpeBlockList[i].name;
5848 02 Mar 20 olle 700       //ffpeBlock.samplingDate = frm['samplingDate'].value;
5848 02 Mar 20 olle 701       //ffpeSection.arrivalDate = frm['arrivalDate'].value;
5848 02 Mar 20 olle 702       ffpeSection.pad = ffpeBlockList[i].pad;
5848 02 Mar 20 olle 703       ffpeSection.materialNumber = ffpeBlockList[i].materialNumber;
5848 02 Mar 20 olle 704       ffpeSection.yellowLabel = null;
5848 02 Mar 20 olle 705       var yellowLabelCB = false;
5848 02 Mar 20 olle 706       yellowLabelCB = frm['yellowLabel.'+i].checked;
5848 02 Mar 20 olle 707       if (yellowLabelCB)
5848 02 Mar 20 olle 708       {
5848 02 Mar 20 olle 709         ffpeSection.yellowLabel = 'yellow';
5848 02 Mar 20 olle 710       }
5848 02 Mar 20 olle 711       ffpeSection.nofSections = frm['nofSections.'+i].value;
5848 02 Mar 20 olle 712       //ffpeSection.viableTumourCellsPercent = frm['pctViabTumourCells.'+i].value;
5848 02 Mar 20 olle 713       ffpeSection.comment = frm['comment.'+i].value;
5848 02 Mar 20 olle 714       //ffpeBlock.operator = frm['operator'].value;
5848 02 Mar 20 olle 715       
5848 02 Mar 20 olle 716       ffpeSection.dnaBox = frm['dnaBox.'+i].value;
5848 02 Mar 20 olle 717       ffpeSection.dnaRow = frm['dnaRow.'+i].value;
5848 02 Mar 20 olle 718       ffpeSection.dnaColumn = frm['dnaColumn.'+i].value;
5848 02 Mar 20 olle 719       
5848 02 Mar 20 olle 720       ffpeSection.rnaBox = frm['rnaBox.'+i].value;
5848 02 Mar 20 olle 721       ffpeSection.rnaRow = frm['rnaRow.'+i].value;
5848 02 Mar 20 olle 722       ffpeSection.rnaColumn = frm['rnaColumn.'+i].value;
5848 02 Mar 20 olle 723 */
5848 02 Mar 20 olle 724
5848 02 Mar 20 olle 725       ffpeSection.heGlassFBox = frm['heGlassFBox.'+i].value;
5848 02 Mar 20 olle 726       ffpeSection.heGlassFPosition = frm['heGlassFPosition.'+i].value;
5848 02 Mar 20 olle 727       ffpeSection.pctTumourCellsF = frm['pctTumourCellsF.'+i].value;
5848 02 Mar 20 olle 728
5848 02 Mar 20 olle 729       ffpeSection.heGlassEBox = frm['heGlassEBox.'+i].value;
5848 02 Mar 20 olle 730       ffpeSection.heGlassEPosition = frm['heGlassEPosition.'+i].value;
5848 02 Mar 20 olle 731       ffpeSection.pctTumourCellsE = frm['pctTumourCellsE.'+i].value;
5848 02 Mar 20 olle 732       //
5848 02 Mar 20 olle 733       ffpeSectionInfo.ffpeSections[i] = ffpeSection;
5848 02 Mar 20 olle 734     }
5848 02 Mar 20 olle 735     var submitInfo = {};
5848 02 Mar 20 olle 736     submitInfo.ffpeSectionInfo = ffpeSectionInfo;
5848 02 Mar 20 olle 737
5848 02 Mar 20 olle 738     var url = '../BaseLineRegistration.servlet?ID='+App.getSessionId();
5848 02 Mar 20 olle 739     url += '&cmd=RegisterFFPESectionTumourCellPct';
5848 02 Mar 20 olle 740     Wizard.showLoadingAnimation('Registering FFPE section tumour cell percentage ...');
5848 02 Mar 20 olle 741     Wizard.asyncJsonRequest(url, istat.submissionResults, 'POST', JSON.stringify(submitInfo));
5848 02 Mar 20 olle 742   }
5848 02 Mar 20 olle 743   
5848 02 Mar 20 olle 744   istat.submissionResults = function(response)
5848 02 Mar 20 olle 745   {
5848 02 Mar 20 olle 746     Wizard.showFinalMessage(response.messages);
5848 02 Mar 20 olle 747     Doc.show('gorestart');
5848 02 Mar 20 olle 748   }
5848 02 Mar 20 olle 749
5848 02 Mar 20 olle 750   istat.getSelectedItemsList = function()
5848 02 Mar 20 olle 751   {
5848 02 Mar 20 olle 752     var frm = document.forms['meludi'];
5848 02 Mar 20 olle 753     
5848 02 Mar 20 olle 754     // Get number of selected extract source items
5848 02 Mar 20 olle 755     var numItems = 0;
5848 02 Mar 20 olle 756     var selItemsList = [];
5848 02 Mar 20 olle 757     for (var i = 0; i < frm.extractSourceItems.length; i++)
5848 02 Mar 20 olle 758     {
5848 02 Mar 20 olle 759       if (frm.extractSourceItems[i].selected)
5848 02 Mar 20 olle 760       {
5848 02 Mar 20 olle 761         if (frm.extractSourceItems[i].item != null)
5848 02 Mar 20 olle 762         {
5848 02 Mar 20 olle 763           selItemsList[numItems] = frm.extractSourceItems[i].item;
5848 02 Mar 20 olle 764           numItems++;
5848 02 Mar 20 olle 765         }
5848 02 Mar 20 olle 766       }
5848 02 Mar 20 olle 767     }
5848 02 Mar 20 olle 768     return selItemsList;
5848 02 Mar 20 olle 769   }
5848 02 Mar 20 olle 770
5848 02 Mar 20 olle 771   return istat;
5848 02 Mar 20 olle 772 }();
5848 02 Mar 20 olle 773
5848 02 Mar 20 olle 774 Doc.onLoad(Istat.initPage);
5848 02 Mar 20 olle 775