extensions/net.sf.basedb.reggie/trunk/resources/sequencing/sequencing_external.js

Code
Comments
Other
Rev Date Author Line
5867 18 Mar 20 nicklas 1 var Sequencing = function()
5867 18 Mar 20 nicklas 2 {
5867 18 Mar 20 nicklas 3   var seq = {};
5901 15 Apr 20 nicklas 4   var debug = 0;
5867 18 Mar 20 nicklas 5
5867 18 Mar 20 nicklas 6   var flowCellIdIsValid = false;
5867 18 Mar 20 nicklas 7   var sampleSheetIsValid = false;
5867 18 Mar 20 nicklas 8   var autoAnalyzeIsValid = false;
5867 18 Mar 20 nicklas 9   
5867 18 Mar 20 nicklas 10   var checkedLibraries;
5867 18 Mar 20 nicklas 11
5867 18 Mar 20 nicklas 12   // Page initialization
5867 18 Mar 20 nicklas 13   seq.initPage = function()
5867 18 Mar 20 nicklas 14   {
5867 18 Mar 20 nicklas 15     // Step 1
5867 18 Mar 20 nicklas 16     Events.addEventHandler('flowCellId', 'blur', seq.flowCellIdOnChange);
5867 18 Mar 20 nicklas 17     Events.addEventHandler('sampleSheetFile', 'change', seq.sampleSheetFileOnChange);
5867 18 Mar 20 nicklas 18     Events.addEventHandler('startDate', 'change', Wizard.validateDate);
5867 18 Mar 20 nicklas 19
5867 18 Mar 20 nicklas 20     Events.addEventHandler('step-1', 'wizard-validate', seq.validateStep1);
5867 18 Mar 20 nicklas 21
5867 18 Mar 20 nicklas 22     Events.addEventHandler('autoAnalyzeYes', 'click', seq.autoAnalyzeOnChange);
5867 18 Mar 20 nicklas 23     Events.addEventHandler('autoAnalyzeNo', 'click', seq.autoAnalyzeOnChange);
5867 18 Mar 20 nicklas 24     Events.addEventHandler('clusters', 'change', seq.clusterOnChange);
5867 18 Mar 20 nicklas 25
5867 18 Mar 20 nicklas 26     // Navigation
5867 18 Mar 20 nicklas 27     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
5867 18 Mar 20 nicklas 28     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
5867 18 Mar 20 nicklas 29     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
5867 18 Mar 20 nicklas 30     Buttons.addClickHandler('goregister', Wizard.goRegister);
5867 18 Mar 20 nicklas 31     
5867 18 Mar 20 nicklas 32     // Final registration
5867 18 Mar 20 nicklas 33     Events.addEventHandler('wizard', 'wizard-submit', seq.submit);
5867 18 Mar 20 nicklas 34
5867 18 Mar 20 nicklas 35     Doc.show('step-1');
5867 18 Mar 20 nicklas 36     Doc.show('goregister');
5867 18 Mar 20 nicklas 37     Doc.element('flowCellId').focus();
5886 30 Mar 20 nicklas 38
5886 30 Mar 20 nicklas 39     // Load Library protocols
5899 15 Apr 20 nicklas 40     Reggie.loadProtocols('LIBRARY_PROTOCOL', 'libProtocol', 'LIBPREP_TARGET', 'External');
5867 18 Mar 20 nicklas 41     
5867 18 Mar 20 nicklas 42     var frm = document.forms['reggie'];
6735 09 May 22 nicklas 43     // Load clusters
6633 08 Mar 22 nicklas 44     var url = '../OpenGrid.servlet?ID='+App.getSessionId() + '&cmd=GetHostInfo&config=demux';
5867 18 Mar 20 nicklas 45     Doc.addClass('clusters', 'list-loading');
5867 18 Mar 20 nicklas 46     frm.clusters[0] = new Option('loading...');
5867 18 Mar 20 nicklas 47     Wizard.asyncJsonRequest(url, seq.clustersLoaded);
5867 18 Mar 20 nicklas 48     
5867 18 Mar 20 nicklas 49     // Check debug by default if debug is set or not on a secure server (=production server)
5867 18 Mar 20 nicklas 50     frm.debug.checked = debug || location.protocol != 'https:';
5885 30 Mar 20 nicklas 51     
5885 30 Mar 20 nicklas 52     if (debug)
5885 30 Mar 20 nicklas 53     {
5885 30 Mar 20 nicklas 54       var url = '../LibPrep.servlet?ID='+App.getSessionId();
5885 30 Mar 20 nicklas 55       url += '&cmd=GetLibraryPlatesForLibPrep&plateType=EXTERNAL_LIBRARY';
5885 30 Mar 20 nicklas 56       Wizard.asyncJsonRequest(url, seq.initDebugTools);
5885 30 Mar 20 nicklas 57     }
5885 30 Mar 20 nicklas 58
5867 18 Mar 20 nicklas 59   }
5867 18 Mar 20 nicklas 60
5867 18 Mar 20 nicklas 61   
6824 30 Aug 22 nicklas 62   seq.flowCellIdOnChange = function()
5867 18 Mar 20 nicklas 63   {
5867 18 Mar 20 nicklas 64     var frm = document.forms['reggie'];
5867 18 Mar 20 nicklas 65     
5867 18 Mar 20 nicklas 66     Wizard.setInputStatus('flowCellId');
5867 18 Mar 20 nicklas 67     flowCellIdIsValid = false;
5867 18 Mar 20 nicklas 68     
5867 18 Mar 20 nicklas 69     var id = frm.flowCellId.value;
5867 18 Mar 20 nicklas 70     if (id == '')
5867 18 Mar 20 nicklas 71     {
5867 18 Mar 20 nicklas 72       Wizard.setInputStatus('flowCellId', 'invalid', 'ID is a required value');
5867 18 Mar 20 nicklas 73       return;
5867 18 Mar 20 nicklas 74     }
5867 18 Mar 20 nicklas 75     
5867 18 Mar 20 nicklas 76     // Check if ID already exists in DB
5867 18 Mar 20 nicklas 77     var url = '../FlowCell.servlet?ID='+App.getSessionId();
5867 18 Mar 20 nicklas 78     url += '&cmd=GetFlowCellByBarcode';
5867 18 Mar 20 nicklas 79     url += '&barcode='+encodeURIComponent(id);
5867 18 Mar 20 nicklas 80     Wizard.showLoadingAnimation('Checking flow cell id...');
5867 18 Mar 20 nicklas 81     Wizard.asyncJsonRequest(url, seq.flowCellIdChecked);
5867 18 Mar 20 nicklas 82   }
5867 18 Mar 20 nicklas 83   
5867 18 Mar 20 nicklas 84   seq.flowCellIdChecked = function(response)
5867 18 Mar 20 nicklas 85   {
5867 18 Mar 20 nicklas 86     var frm = document.forms['reggie'];
5867 18 Mar 20 nicklas 87     var existing = response.flowCell;
5867 18 Mar 20 nicklas 88     if (existing != null)
5867 18 Mar 20 nicklas 89     {
5867 18 Mar 20 nicklas 90       var id = frm.flowCellId.value;
5867 18 Mar 20 nicklas 91       Wizard.setInputStatus('flowCellId', 'invalid', 'Flow cell with ID='+Strings.encodeTags(id)+' already exists: ' + Strings.encodeTags(existing.name));
5867 18 Mar 20 nicklas 92       return;
5867 18 Mar 20 nicklas 93     }
5867 18 Mar 20 nicklas 94     Wizard.setInputStatus('flowCellId', 'valid');
5867 18 Mar 20 nicklas 95     flowCellIdIsValid = true;
5867 18 Mar 20 nicklas 96   }
5867 18 Mar 20 nicklas 97
5867 18 Mar 20 nicklas 98   
5867 18 Mar 20 nicklas 99   seq.sampleSheetFileOnChange = function()
5867 18 Mar 20 nicklas 100   {
5867 18 Mar 20 nicklas 101     var frm = document.forms['reggie'];
5867 18 Mar 20 nicklas 102     var file = frm.sampleSheetFile.files[0];
5867 18 Mar 20 nicklas 103     
5867 18 Mar 20 nicklas 104     Wizard.hideWizardStatus();
5867 18 Mar 20 nicklas 105     Wizard.setInputStatus('sampleSheetFile');
5867 18 Mar 20 nicklas 106     sampleSheetIsValid = false;
5867 18 Mar 20 nicklas 107     
5867 18 Mar 20 nicklas 108     var reader = new FileReader();
5867 18 Mar 20 nicklas 109     reader.onload = seq.sampleSheetFileLoaded;
5867 18 Mar 20 nicklas 110     reader.readAsText(file);
5867 18 Mar 20 nicklas 111   }
5867 18 Mar 20 nicklas 112
5867 18 Mar 20 nicklas 113   seq.sampleSheetFileLoaded = function(event)
5867 18 Mar 20 nicklas 114   {
5867 18 Mar 20 nicklas 115     seq.parseSampleSheet(event.target.result);
5867 18 Mar 20 nicklas 116   }
5867 18 Mar 20 nicklas 117
5867 18 Mar 20 nicklas 118   seq.parseSampleSheet = function(data)
5867 18 Mar 20 nicklas 119   {
5867 18 Mar 20 nicklas 120     Wizard.setInputStatus('sampleSheetFile');
5867 18 Mar 20 nicklas 121     sampleSheetIsValid = false;
5867 18 Mar 20 nicklas 122
5867 18 Mar 20 nicklas 123     var lines = data.split(/[\n\r]+/);
5867 18 Mar 20 nicklas 124     var lineNo = 0;
5867 18 Mar 20 nicklas 125     
5867 18 Mar 20 nicklas 126     // Parse out some headers
5867 18 Mar 20 nicklas 127     while (lineNo < lines.length) 
5867 18 Mar 20 nicklas 128     {
5867 18 Mar 20 nicklas 129       var line = lines[lineNo];
5867 18 Mar 20 nicklas 130       lineNo++;
5867 18 Mar 20 nicklas 131       
5867 18 Mar 20 nicklas 132       if (line.indexOf('[Data]') >= 0) break;  // Break when we reach the [Data] section
5867 18 Mar 20 nicklas 133       
5867 18 Mar 20 nicklas 134       var columns = line.split(/,/);
5867 18 Mar 20 nicklas 135       if (columns[0] == 'Date')
5867 18 Mar 20 nicklas 136       {
5867 18 Mar 20 nicklas 137         var startDate = Dates.parseString(columns[1], 'M/d/y');
5867 18 Mar 20 nicklas 138         Doc.element('startDate').value = startDate == null ? columns[1] : Dates.formatDate(startDate, 'yyyyMMdd');
5867 18 Mar 20 nicklas 139         Events.sendChangeEvent('startDate');
5867 18 Mar 20 nicklas 140       }
5867 18 Mar 20 nicklas 141       if (columns[0] == 'Instrument Type')
5867 18 Mar 20 nicklas 142       {
5867 18 Mar 20 nicklas 143         var instrumentType = columns[1];
5867 18 Mar 20 nicklas 144         if (instrumentType == 'NovaSeq')
5867 18 Mar 20 nicklas 145         {
5867 18 Mar 20 nicklas 146           Wizard.setInputStatus('flowCellType', 'valid');
5867 18 Mar 20 nicklas 147         }
5867 18 Mar 20 nicklas 148         else
5867 18 Mar 20 nicklas 149         {
5867 18 Mar 20 nicklas 150           Wizard.setInputStatus('flowCellType', 'warning', 'Instrument type='+Strings.encodeTags(instrumentType)+' in the file.');
5867 18 Mar 20 nicklas 151         }
5867 18 Mar 20 nicklas 152       }
5867 18 Mar 20 nicklas 153     }
5867 18 Mar 20 nicklas 154     
5867 18 Mar 20 nicklas 155     if (lineNo >= lines.length)
5867 18 Mar 20 nicklas 156     {
5867 18 Mar 20 nicklas 157       Wizard.setInputStatus('sampleSheetFile', 'invalid', 'Could not find [Data] section.');
5867 18 Mar 20 nicklas 158       return;
5867 18 Mar 20 nicklas 159     }
5867 18 Mar 20 nicklas 160     
5867 18 Mar 20 nicklas 161     var headers = lines[lineNo].split(/,/);
5867 18 Mar 20 nicklas 162     var numHeaders = headers.length;
5867 18 Mar 20 nicklas 163     
5889 06 Apr 20 nicklas 164     var sampleIdIndex = seq.findColumn(headers, 'Sample_ID', lineNo);
5889 06 Apr 20 nicklas 165     if (sampleIdIndex == -1) return;
5889 06 Apr 20 nicklas 166
5889 06 Apr 20 nicklas 167     var sampleNameIndex = seq.findColumn(headers, 'Sample_Name', lineNo);
5889 06 Apr 20 nicklas 168     if (sampleNameIndex == -1) return;
5867 18 Mar 20 nicklas 169     
5867 18 Mar 20 nicklas 170     var barcodeIndex = seq.findColumn(headers, 'I7_Index_ID', lineNo);
5867 18 Mar 20 nicklas 171     if (barcodeIndex == -1) return;
5867 18 Mar 20 nicklas 172     
5867 18 Mar 20 nicklas 173     var idx1 = seq.findColumn(headers, 'index', lineNo);
5867 18 Mar 20 nicklas 174     if (idx1 == -1) return;
5867 18 Mar 20 nicklas 175
5867 18 Mar 20 nicklas 176     var idx2 = seq.findColumn(headers, 'index2', lineNo);
5867 18 Mar 20 nicklas 177     if (idx2 == -1) return;
5867 18 Mar 20 nicklas 178
5870 20 Mar 20 nicklas 179     var plateIndex = seq.findColumn(headers, 'Sample_Plate', lineNo, true);
5870 20 Mar 20 nicklas 180     var wellIndex = seq.findColumn(headers, 'Sample_Well', lineNo, true);
5870 20 Mar 20 nicklas 181     
5867 18 Mar 20 nicklas 182     lineNo++;
5867 18 Mar 20 nicklas 183     var libs = [];
5867 18 Mar 20 nicklas 184     while (lineNo < lines.length)
5867 18 Mar 20 nicklas 185     {
5867 18 Mar 20 nicklas 186       var columns = lines[lineNo].split(/,/);
5867 18 Mar 20 nicklas 187       if (numHeaders == columns.length)
5867 18 Mar 20 nicklas 188       {
5867 18 Mar 20 nicklas 189         libs[libs.length] = { 
5867 18 Mar 20 nicklas 190             'lineNo': lineNo, 
5909 17 Apr 20 nicklas 191             'sampleId': columns[sampleIdIndex], 
5909 17 Apr 20 nicklas 192             'sampleName': columns[sampleNameIndex], 
5867 18 Mar 20 nicklas 193             'barcode': columns[barcodeIndex],
5867 18 Mar 20 nicklas 194             'index1': columns[idx1], 
5870 20 Mar 20 nicklas 195             'index2': columns[idx2],
5870 20 Mar 20 nicklas 196             'plate': plateIndex >= 0 ? columns[plateIndex] : null,
5870 20 Mar 20 nicklas 197             'well': wellIndex >= 0 ? columns[wellIndex] : null
5867 18 Mar 20 nicklas 198           };
5867 18 Mar 20 nicklas 199       }
5867 18 Mar 20 nicklas 200       lineNo++;
5867 18 Mar 20 nicklas 201     }
5867 18 Mar 20 nicklas 202   
5867 18 Mar 20 nicklas 203     var submitInfo = {};
5867 18 Mar 20 nicklas 204     submitInfo.libraries = libs;
5867 18 Mar 20 nicklas 205     
5867 18 Mar 20 nicklas 206     var url = '../SequencingRun.servlet?ID='+App.getSessionId();
5867 18 Mar 20 nicklas 207     url += '&cmd=CheckExternalSequencing';
5867 18 Mar 20 nicklas 208     Wizard.setInputStatus('sampleSheetFile', 'checking', 'Checking...');
5867 18 Mar 20 nicklas 209     Wizard.showLoadingAnimation('Checking sample sheet...');
5867 18 Mar 20 nicklas 210     Wizard.asyncJsonRequest(url, seq.sampleSheetChecked, 'POST', JSON.stringify(submitInfo));
5867 18 Mar 20 nicklas 211   }
5867 18 Mar 20 nicklas 212   
5867 18 Mar 20 nicklas 213   // Find a column with the given header
5870 20 Mar 20 nicklas 214   seq.findColumn = function(columns, header, lineNo, optional)
5867 18 Mar 20 nicklas 215   {
5867 18 Mar 20 nicklas 216     var colIndex = columns.indexOf(header);
5870 20 Mar 20 nicklas 217     if (colIndex == -1 && !optional)
5867 18 Mar 20 nicklas 218     {
5867 18 Mar 20 nicklas 219       Wizard.setInputStatus('sampleSheetFile', 'invalid', 'On line '+lineNo+'; Can\'t find "' + header + '" column.');
5867 18 Mar 20 nicklas 220     }
5867 18 Mar 20 nicklas 221     return colIndex;
5867 18 Mar 20 nicklas 222   }
5867 18 Mar 20 nicklas 223   
5867 18 Mar 20 nicklas 224   seq.sampleSheetChecked = function(response)
5867 18 Mar 20 nicklas 225   {
5867 18 Mar 20 nicklas 226     Wizard.setInputStatus('sampleSheetFile');
5867 18 Mar 20 nicklas 227     sampleSheetIsValid = false;
5867 18 Mar 20 nicklas 228
5867 18 Mar 20 nicklas 229     Wizard.showFinalMessage(response.messages);
5867 18 Mar 20 nicklas 230     
5867 18 Mar 20 nicklas 231     if (response.numErrors > 0)
5867 18 Mar 20 nicklas 232     {
5867 18 Mar 20 nicklas 233       Wizard.setInputStatus('sampleSheetFile', 'invalid', 'The sample sheet has ' + response.numErrors + ' errors.');
5867 18 Mar 20 nicklas 234     }
5867 18 Mar 20 nicklas 235     else
5867 18 Mar 20 nicklas 236     {
5867 18 Mar 20 nicklas 237       Wizard.setInputStatus('sampleSheetFile', 'valid');
5867 18 Mar 20 nicklas 238       checkedLibraries = response.libraries;
5867 18 Mar 20 nicklas 239       sampleSheetIsValid = true;
5867 18 Mar 20 nicklas 240     }
5867 18 Mar 20 nicklas 241   }
5867 18 Mar 20 nicklas 242   
5867 18 Mar 20 nicklas 243   seq.clustersLoaded = function(response)
5867 18 Mar 20 nicklas 244   {
5867 18 Mar 20 nicklas 245     Doc.removeClass('clusters', 'list-loading');
5867 18 Mar 20 nicklas 246     var frm = document.forms['reggie'];
5867 18 Mar 20 nicklas 247     frm.clusters.length = 0;
5867 18 Mar 20 nicklas 248     var clusters = response.hosts;
5867 18 Mar 20 nicklas 249     if (clusters.length == 0)
5867 18 Mar 20 nicklas 250     {
5867 18 Mar 20 nicklas 251       Doc.element('autoAnalyzeNo').checked = true;
5867 18 Mar 20 nicklas 252       autoAnalyzeIsValid = true;
6735 09 May 22 nicklas 253       Wizard.setInputStatus('autoAnalyze', 'warning', 'No available cluster');
5867 18 Mar 20 nicklas 254       return;
5867 18 Mar 20 nicklas 255     }
5867 18 Mar 20 nicklas 256     
5867 18 Mar 20 nicklas 257     Doc.element('autoAnalyzeNo').disabled = false;
5867 18 Mar 20 nicklas 258     Doc.element('autoAnalyzeYes').disabled = false;
5867 18 Mar 20 nicklas 259     for (var i = 0; i < clusters.length; i++)
5867 18 Mar 20 nicklas 260     {
5867 18 Mar 20 nicklas 261       var cl = clusters[i];
5867 18 Mar 20 nicklas 262       var option = new Option(cl.connection.name, cl.id);
5867 18 Mar 20 nicklas 263       option.cluster = cl;
5867 18 Mar 20 nicklas 264       frm.clusters[frm.clusters.length] = option;
5867 18 Mar 20 nicklas 265     }
5867 18 Mar 20 nicklas 266     seq.autoAnalyzeOnChange();
5867 18 Mar 20 nicklas 267   }
5867 18 Mar 20 nicklas 268   
5867 18 Mar 20 nicklas 269   seq.clusterOnChange = function()
5867 18 Mar 20 nicklas 270   {
5867 18 Mar 20 nicklas 271     var frm = document.forms['reggie'];
5867 18 Mar 20 nicklas 272     var cluster = frm.clusters[frm.clusters.selectedIndex].cluster;
6980 17 Jan 23 nicklas 273     if (cluster.priorities && cluster.priorities.length > 0)
5867 18 Mar 20 nicklas 274     {
6980 17 Jan 23 nicklas 275       frm.priority.length = 0;
5867 18 Mar 20 nicklas 276       for (var pNo = 0; pNo < cluster.priorities.length; pNo++)
5867 18 Mar 20 nicklas 277       {
5867 18 Mar 20 nicklas 278         var p = cluster.priorities[pNo];
5867 18 Mar 20 nicklas 279         frm.priority[frm.priority.length] = new Option(p.name + ' ('+p.value+')', p.value, p['default'], p['default']);
5867 18 Mar 20 nicklas 280       }
6980 17 Jan 23 nicklas 281       Doc.show('job-priority');
5867 18 Mar 20 nicklas 282     }
5867 18 Mar 20 nicklas 283     else
5867 18 Mar 20 nicklas 284     {
6980 17 Jan 23 nicklas 285       Doc.hide('job-priority');
5867 18 Mar 20 nicklas 286     }
6980 17 Jan 23 nicklas 287     if (cluster.partitions && cluster.partitions.length > 0)
6980 17 Jan 23 nicklas 288     {
6980 17 Jan 23 nicklas 289       frm.partition.length = 0;
6980 17 Jan 23 nicklas 290       for (var pNo = 0; pNo < cluster.partitions.length; pNo++)
6980 17 Jan 23 nicklas 291       {
6980 17 Jan 23 nicklas 292         var p = cluster.partitions[pNo];
6980 17 Jan 23 nicklas 293         var title = p.name;
6980 17 Jan 23 nicklas 294         if (p.description) title += ' ('+p.description+')';
6980 17 Jan 23 nicklas 295         frm.partition[frm.partition.length] = new Option(title, p.value, p['default'], p['default']);
6980 17 Jan 23 nicklas 296       }
6980 17 Jan 23 nicklas 297       Doc.show('job-partition');
6980 17 Jan 23 nicklas 298     }
6980 17 Jan 23 nicklas 299     else
6980 17 Jan 23 nicklas 300     {
6980 17 Jan 23 nicklas 301       Doc.hide('job-partition');
6980 17 Jan 23 nicklas 302     }
5867 18 Mar 20 nicklas 303   }
5867 18 Mar 20 nicklas 304
5867 18 Mar 20 nicklas 305   seq.autoAnalyzeOnChange = function()
5867 18 Mar 20 nicklas 306   {
5867 18 Mar 20 nicklas 307     Wizard.setInputStatus('autoAnalyze');
5867 18 Mar 20 nicklas 308     autoAnalyzeIsValid = false;
5867 18 Mar 20 nicklas 309     
5867 18 Mar 20 nicklas 310     var frm = document.forms['reggie'];
5867 18 Mar 20 nicklas 311     var yesChecked = Doc.element('autoAnalyzeYes').checked;
5867 18 Mar 20 nicklas 312     var noChecked = Doc.element('autoAnalyzeNo').checked;
5867 18 Mar 20 nicklas 313     
5867 18 Mar 20 nicklas 314     frm.clusters.disabled = !yesChecked;
5867 18 Mar 20 nicklas 315     frm.priority.disabled = !yesChecked;
6980 17 Jan 23 nicklas 316     frm.partition.disabled = !yesChecked;
5867 18 Mar 20 nicklas 317     frm.debug.disabled = !yesChecked;
5867 18 Mar 20 nicklas 318
5867 18 Mar 20 nicklas 319     if (!yesChecked && !noChecked)
5867 18 Mar 20 nicklas 320     {
5867 18 Mar 20 nicklas 321       Wizard.setInputStatus('autoAnalyze', 'invalid', 'Must select Yes or No');
5867 18 Mar 20 nicklas 322       return;
5867 18 Mar 20 nicklas 323     }
5867 18 Mar 20 nicklas 324     
5867 18 Mar 20 nicklas 325     autoAnalyzeIsValid = true;
5867 18 Mar 20 nicklas 326     Wizard.setInputStatus('autoAnalyze', 'valid');
5867 18 Mar 20 nicklas 327     
5867 18 Mar 20 nicklas 328     if (yesChecked) seq.clusterOnChange();
5867 18 Mar 20 nicklas 329   }
5867 18 Mar 20 nicklas 330
5867 18 Mar 20 nicklas 331   
5867 18 Mar 20 nicklas 332   seq.validateStep1 = function(event)
5867 18 Mar 20 nicklas 333   {
5867 18 Mar 20 nicklas 334     var valid = flowCellIdIsValid;
5867 18 Mar 20 nicklas 335     valid &= sampleSheetIsValid;
5867 18 Mar 20 nicklas 336     valid &= Wizard.isValid('startDate');
5867 18 Mar 20 nicklas 337     valid &= autoAnalyzeIsValid;
5867 18 Mar 20 nicklas 338   
5867 18 Mar 20 nicklas 339     if (!valid) event.preventDefault();
5867 18 Mar 20 nicklas 340   }
5867 18 Mar 20 nicklas 341
5867 18 Mar 20 nicklas 342   seq.submit = function()
5867 18 Mar 20 nicklas 343   {
5867 18 Mar 20 nicklas 344     var frm = document.forms['reggie'];
5867 18 Mar 20 nicklas 345     Wizard.hideWizardStatus();
5867 18 Mar 20 nicklas 346     
5867 18 Mar 20 nicklas 347     var submitInfo = {};
5867 18 Mar 20 nicklas 348     
5867 18 Mar 20 nicklas 349     submitInfo.libraries = checkedLibraries;
5870 20 Mar 20 nicklas 350     submitInfo.operator = frm.operator.value;
5886 30 Mar 20 nicklas 351     submitInfo.libProtocol = parseInt(frm.libProtocol.value, 10);
5867 18 Mar 20 nicklas 352     submitInfo.flowCellId = frm.flowCellId.value;
5867 18 Mar 20 nicklas 353     submitInfo.startDate = frm.startDate.value;
5867 18 Mar 20 nicklas 354     submitInfo.flowCellType = frm.flowCellType.value;
5867 18 Mar 20 nicklas 355     submitInfo.numLanes = parseInt(frm.num_lanes.value);
5867 18 Mar 20 nicklas 356     submitInfo.comments = frm.comments.value;
5867 18 Mar 20 nicklas 357     
5867 18 Mar 20 nicklas 358     if (Doc.element('autoAnalyzeYes').checked)
5867 18 Mar 20 nicklas 359     {
5867 18 Mar 20 nicklas 360       var autoAnalyze = {};
5867 18 Mar 20 nicklas 361       autoAnalyze.cluster = frm.clusters.value;
5867 18 Mar 20 nicklas 362       autoAnalyze.priority = parseInt(frm.priority.value);
6980 17 Jan 23 nicklas 363       if (frm.partition.selectedIndex >= 0)
6980 17 Jan 23 nicklas 364       {
6980 17 Jan 23 nicklas 365         autoAnalyze.partition = frm.partition.value;
6980 17 Jan 23 nicklas 366       }
5867 18 Mar 20 nicklas 367       autoAnalyze.debug = frm.debug.checked;
5867 18 Mar 20 nicklas 368       submitInfo.autoAnalyze = autoAnalyze;
5867 18 Mar 20 nicklas 369     }
5867 18 Mar 20 nicklas 370
5867 18 Mar 20 nicklas 371     var url = '../SequencingRun.servlet?ID='+App.getSessionId();
5867 18 Mar 20 nicklas 372     url += '&cmd=RegisterExternalSequencing';
5867 18 Mar 20 nicklas 373     
5867 18 Mar 20 nicklas 374     Wizard.showLoadingAnimation('Performing registration...');
5867 18 Mar 20 nicklas 375     Wizard.asyncJsonRequest(url, seq.submissionResults, 'POST', JSON.stringify(submitInfo));
5867 18 Mar 20 nicklas 376   }
5867 18 Mar 20 nicklas 377   
5867 18 Mar 20 nicklas 378   seq.submissionResults = function(response)
5867 18 Mar 20 nicklas 379   {
5867 18 Mar 20 nicklas 380     Wizard.showFinalMessage(response.messages);
5867 18 Mar 20 nicklas 381     Doc.show('gorestart');
5867 18 Mar 20 nicklas 382   }
5885 30 Mar 20 nicklas 383   
5885 30 Mar 20 nicklas 384   
5885 30 Mar 20 nicklas 385   seq.initDebugTools = function(response)
5885 30 Mar 20 nicklas 386   {
5885 30 Mar 20 nicklas 387     var bioplates = response.bioplates;
5885 30 Mar 20 nicklas 388     var frm = document.forms['reggie'];  
5885 30 Mar 20 nicklas 389     var plates = frm.libplate;
5885 30 Mar 20 nicklas 390     if (bioplates.length > 0)
5885 30 Mar 20 nicklas 391     {
5885 30 Mar 20 nicklas 392       for (var i=0; i < bioplates.length; i++)
5885 30 Mar 20 nicklas 393       {
5885 30 Mar 20 nicklas 394         var bioplate = bioplates[i];
5885 30 Mar 20 nicklas 395         plates.options[plates.length] = new Option(bioplate.name + ' (' + bioplate.usedWells + ' libraries)', bioplate.id);
5885 30 Mar 20 nicklas 396       }
5885 30 Mar 20 nicklas 397       
5885 30 Mar 20 nicklas 398       Buttons.addClickHandler('btnFakeSampleSheet', seq.generateFakeSampleSheet);
5885 30 Mar 20 nicklas 399       Wizard.showDebugTools();
5885 30 Mar 20 nicklas 400     }
5885 30 Mar 20 nicklas 401   }
5885 30 Mar 20 nicklas 402   
5885 30 Mar 20 nicklas 403   seq.generateFakeSampleSheet = function()
5885 30 Mar 20 nicklas 404   {
5885 30 Mar 20 nicklas 405     var frm = document.forms['reggie'];  
5885 30 Mar 20 nicklas 406     var url = '../SequencingRun.servlet?ID='+App.getSessionId();
5885 30 Mar 20 nicklas 407     url += '&cmd=GenerateFakeSampleSheet';
5885 30 Mar 20 nicklas 408     url += '&plateId='+frm.libplate.value;
5885 30 Mar 20 nicklas 409     
5885 30 Mar 20 nicklas 410     Wizard.showLoadingAnimation('Generating sample sheet...');
5885 30 Mar 20 nicklas 411     Wizard.asyncJsonRequest(url, seq.sampleSheetGenerated);
5885 30 Mar 20 nicklas 412   }
5867 18 Mar 20 nicklas 413
5885 30 Mar 20 nicklas 414   seq.sampleSheetGenerated = function(response)
5885 30 Mar 20 nicklas 415   {
5885 30 Mar 20 nicklas 416     seq.parseSampleSheet(response.sampleSheet);
5885 30 Mar 20 nicklas 417   }
5885 30 Mar 20 nicklas 418   
5867 18 Mar 20 nicklas 419   return seq;
5867 18 Mar 20 nicklas 420 }();
5867 18 Mar 20 nicklas 421
5867 18 Mar 20 nicklas 422 Doc.onLoad(Sequencing.initPage);
5867 18 Mar 20 nicklas 423