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

Code
Comments
Other
Rev Date Author Line
2650 10 Sep 14 nicklas 1 var FlowCell = function()
2650 10 Sep 14 nicklas 2 {
2650 10 Sep 14 nicklas 3   var flowcell = {};
2656 11 Sep 14 nicklas 4   var debug = 0;
2650 10 Sep 14 nicklas 5   var idField;
2650 10 Sep 14 nicklas 6   var flowCellsAreValid = false;
2650 10 Sep 14 nicklas 7
3629 26 Nov 15 nicklas 8   var commentsIsValid = false;
3629 26 Nov 15 nicklas 9   var flowCellIdIsValid = false;
3691 13 Jan 16 nicklas 10   var autoAnalyzeIsValid = false;
2650 10 Sep 14 nicklas 11
2650 10 Sep 14 nicklas 12   // Page initialization
2650 10 Sep 14 nicklas 13   flowcell.initPage = function()
2650 10 Sep 14 nicklas 14   {
2650 10 Sep 14 nicklas 15     // Step 1
2650 10 Sep 14 nicklas 16     Events.addEventHandler('flowcells', 'change', flowcell.flowCellsOnChange);
2650 10 Sep 14 nicklas 17     Events.addEventHandler('step-1', 'wizard-validate', flowcell.validateStep1);
2650 10 Sep 14 nicklas 18     Events.addEventHandler('outcomeSuccess', 'click', flowcell.outcomeOnChange);
2650 10 Sep 14 nicklas 19     Events.addEventHandler('outcomeFailed', 'click', flowcell.outcomeOnChange);
2650 10 Sep 14 nicklas 20     
2650 10 Sep 14 nicklas 21     // Step 2
2650 10 Sep 14 nicklas 22     Events.addEventHandler('step-2', 'wizard-initialize', flowcell.initializeStep2);
2650 10 Sep 14 nicklas 23     Events.addEventHandler('step-2', 'wizard-validate', flowcell.validateStep2);
4293 11 Jan 17 nicklas 24     Events.addEventHandler('startDate', 'change', Wizard.validateDate);
3629 26 Nov 15 nicklas 25     Events.addEventHandler('externalId', 'change', flowcell.flowCellIdOnChange);
3629 26 Nov 15 nicklas 26     Events.addEventHandler('comments', 'change', flowcell.commentsOnChange);
3691 13 Jan 16 nicklas 27
3691 13 Jan 16 nicklas 28     Events.addEventHandler('autoAnalyzeYes', 'click', flowcell.autoAnalyzeOnChange);
3691 13 Jan 16 nicklas 29     Events.addEventHandler('autoAnalyzeNo', 'click', flowcell.autoAnalyzeOnChange);
3691 13 Jan 16 nicklas 30     Events.addEventHandler('clusters', 'change', flowcell.clusterOnChange);
2650 10 Sep 14 nicklas 31     
2650 10 Sep 14 nicklas 32     // Navigation
2650 10 Sep 14 nicklas 33     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
2650 10 Sep 14 nicklas 34     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
2650 10 Sep 14 nicklas 35     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
2650 10 Sep 14 nicklas 36     Buttons.addClickHandler('goregister', Wizard.goRegister);
2650 10 Sep 14 nicklas 37     
2650 10 Sep 14 nicklas 38     // Final registration
2650 10 Sep 14 nicklas 39     Events.addEventHandler('wizard', 'wizard-submit', flowcell.submit);
2650 10 Sep 14 nicklas 40
2650 10 Sep 14 nicklas 41     var url = '../FlowCell.servlet?ID='+App.getSessionId();
5470 05 Jun 19 nicklas 42     url += '&cmd=GetUnprocessedFlowCells&pipeline='+encodeURIComponent(Data.get('page-data', 'pipeline'));
2650 10 Sep 14 nicklas 43     Wizard.showLoadingAnimation('Loading flow cells...');
2650 10 Sep 14 nicklas 44     Wizard.asyncJsonRequest(url, flowcell.initializeStep1);
2650 10 Sep 14 nicklas 45   }
2650 10 Sep 14 nicklas 46
2650 10 Sep 14 nicklas 47
2650 10 Sep 14 nicklas 48   flowcell.initializeStep1 = function(response)
2650 10 Sep 14 nicklas 49   {
2650 10 Sep 14 nicklas 50     var frm = document.forms['reggie'];
2650 10 Sep 14 nicklas 51     var flowCells = response.flowCells;
2650 10 Sep 14 nicklas 52     
2650 10 Sep 14 nicklas 53     if (flowCells.length > 0)
2650 10 Sep 14 nicklas 54     {
2650 10 Sep 14 nicklas 55       for (var fcNo=0; fcNo < flowCells.length; fcNo++)
2650 10 Sep 14 nicklas 56       {
2650 10 Sep 14 nicklas 57         var fc = flowCells[fcNo];
2650 10 Sep 14 nicklas 58         var option = flowcell.getOptionForFlowCell(fc, fcNo);
2650 10 Sep 14 nicklas 59         frm.flowcells[frm.flowcells.length] = option;
2650 10 Sep 14 nicklas 60       }
2650 10 Sep 14 nicklas 61     }
2650 10 Sep 14 nicklas 62     else
2650 10 Sep 14 nicklas 63     {
2650 10 Sep 14 nicklas 64       Wizard.setFatalError('No flow cells available for processing.');
2650 10 Sep 14 nicklas 65       return;
2650 10 Sep 14 nicklas 66     }
2650 10 Sep 14 nicklas 67
2650 10 Sep 14 nicklas 68     Doc.show('step-1');
2650 10 Sep 14 nicklas 69     Doc.show('gonext');
2650 10 Sep 14 nicklas 70     
2650 10 Sep 14 nicklas 71     flowcell.flowCellsOnChange();
2650 10 Sep 14 nicklas 72     flowcell.outcomeOnChange();
2650 10 Sep 14 nicklas 73     frm.flowcells.focus();
2650 10 Sep 14 nicklas 74   }
2650 10 Sep 14 nicklas 75   
2650 10 Sep 14 nicklas 76   flowcell.getOptionForFlowCell = function(fc, fcNo)
2650 10 Sep 14 nicklas 77   {
2650 10 Sep 14 nicklas 78     var name = fc.name +': ';
2650 10 Sep 14 nicklas 79
2650 10 Sep 14 nicklas 80     var numPools = fc.pools.length;
2650 10 Sep 14 nicklas 81     var firstPoolNum = flowcell.getPoolNum(fc.pools[0].name);
2650 10 Sep 14 nicklas 82     var lastPoolNum = flowcell.getPoolNum(fc.pools[fc.pools.length-1].name);
2650 10 Sep 14 nicklas 83
2650 10 Sep 14 nicklas 84     if (lastPoolNum - firstPoolNum == numPools - 1)
2650 10 Sep 14 nicklas 85     {
2650 10 Sep 14 nicklas 86       if (numPools > 1)
2650 10 Sep 14 nicklas 87       {
2650 10 Sep 14 nicklas 88         // Display: PoolN -- PoolY
2650 10 Sep 14 nicklas 89         name += fc.pools[0].name + ' — ' + fc.pools[fc.pools.length-1].name;
2650 10 Sep 14 nicklas 90       }
2650 10 Sep 14 nicklas 91       else
2650 10 Sep 14 nicklas 92       {
2650 10 Sep 14 nicklas 93         name += fc.pools[0].name;
2650 10 Sep 14 nicklas 94       }
2650 10 Sep 14 nicklas 95     }
2650 10 Sep 14 nicklas 96     else
2650 10 Sep 14 nicklas 97     {
2650 10 Sep 14 nicklas 98       // Display: PoolN + x more...
2650 10 Sep 14 nicklas 99       name += fc.pools[0].name + ' + ' + (numPools-1) + ' more...';
2650 10 Sep 14 nicklas 100     }
2650 10 Sep 14 nicklas 101     
5470 05 Jun 19 nicklas 102     name += ' [';
5470 05 Jun 19 nicklas 103     if (fc.FlowCellType) name += fc.FlowCellType + '; ';
5470 05 Jun 19 nicklas 104     name += fc.pipeline + ']';
2650 10 Sep 14 nicklas 105
2650 10 Sep 14 nicklas 106     // Tooltip is always all pools
2650 10 Sep 14 nicklas 107     var title = '';
2650 10 Sep 14 nicklas 108     for (var poolNo=0; poolNo < numPools; poolNo++)
2650 10 Sep 14 nicklas 109     {
2650 10 Sep 14 nicklas 110       var pool = fc.pools[poolNo];
2650 10 Sep 14 nicklas 111       if (poolNo > 0) title += ', ';
2650 10 Sep 14 nicklas 112       title += pool.name;
2650 10 Sep 14 nicklas 113     }
2650 10 Sep 14 nicklas 114     
4583 21 Sep 17 nicklas 115     var option = new Option(name, fc.id, false, fcNo < 1);
2650 10 Sep 14 nicklas 116     option.title = title;
2650 10 Sep 14 nicklas 117     option.flowCell = fc;
2650 10 Sep 14 nicklas 118
2650 10 Sep 14 nicklas 119     return option;
2650 10 Sep 14 nicklas 120   }
2650 10 Sep 14 nicklas 121   
2650 10 Sep 14 nicklas 122   flowcell.getPoolNum = function(poolName)
2650 10 Sep 14 nicklas 123   {
2650 10 Sep 14 nicklas 124     var num = poolName.match(/Pool(\d+)/);
2650 10 Sep 14 nicklas 125     return num ? parseInt(num[1], 10) : null;  
2650 10 Sep 14 nicklas 126   }
2650 10 Sep 14 nicklas 127
2650 10 Sep 14 nicklas 128   flowcell.flowCellsOnChange = function()
2650 10 Sep 14 nicklas 129   {
2650 10 Sep 14 nicklas 130     var frm = document.forms['reggie'];  
2650 10 Sep 14 nicklas 131     flowCellsAreValid = false;
2650 10 Sep 14 nicklas 132     
2650 10 Sep 14 nicklas 133     var numSelected = 0;
2650 10 Sep 14 nicklas 134     for (var i = 0; i < frm.flowcells.length; i++)
2650 10 Sep 14 nicklas 135     {
2650 10 Sep 14 nicklas 136       if (frm.flowcells[i].selected) numSelected++;
2650 10 Sep 14 nicklas 137     }
2650 10 Sep 14 nicklas 138     
2650 10 Sep 14 nicklas 139     if (numSelected < 1 || numSelected > 2)
2650 10 Sep 14 nicklas 140     {
3629 26 Nov 15 nicklas 141       Wizard.setInputStatus('flowcells', 'invalid', 'Select 1 flow cell');
2650 10 Sep 14 nicklas 142       return false;
2650 10 Sep 14 nicklas 143     }
2650 10 Sep 14 nicklas 144     
2650 10 Sep 14 nicklas 145     Wizard.setInputStatus('flowcells', 'valid');
2650 10 Sep 14 nicklas 146     flowCellsAreValid = true;
2650 10 Sep 14 nicklas 147   }
2650 10 Sep 14 nicklas 148
2650 10 Sep 14 nicklas 149   flowcell.outcomeOnChange = function()
2650 10 Sep 14 nicklas 150   {
2650 10 Sep 14 nicklas 151     var frm = document.forms['reggie'];
2650 10 Sep 14 nicklas 152     var failed = Doc.element('outcomeFailed').checked;
3629 26 Nov 15 nicklas 153     Doc.addOrRemoveClass(frm['comments'], 'required', failed);
2650 10 Sep 14 nicklas 154   }
2650 10 Sep 14 nicklas 155   
2650 10 Sep 14 nicklas 156   flowcell.validateStep1 = function(event)
2650 10 Sep 14 nicklas 157   {
2650 10 Sep 14 nicklas 158     if (!flowCellsAreValid) event.preventDefault();
2650 10 Sep 14 nicklas 159   }
2650 10 Sep 14 nicklas 160   
2650 10 Sep 14 nicklas 161   flowcell.initializeStep2 = function()
2650 10 Sep 14 nicklas 162   {
2650 10 Sep 14 nicklas 163     var frm = document.forms['reggie'];
2650 10 Sep 14 nicklas 164     
2650 10 Sep 14 nicklas 165     var failed = frm.outcome[1].checked;
2650 10 Sep 14 nicklas 166     if (failed)
2650 10 Sep 14 nicklas 167     {
2650 10 Sep 14 nicklas 168       Wizard.showGoNextConfirmation(true, 'Check to verify registration of failure');
2650 10 Sep 14 nicklas 169     }
2650 10 Sep 14 nicklas 170
2650 10 Sep 14 nicklas 171     Wizard.setCurrentStep(2);
2650 10 Sep 14 nicklas 172     Doc.show('gocancel');
2650 10 Sep 14 nicklas 173     Doc.show('goregister');
2650 10 Sep 14 nicklas 174     
3629 26 Nov 15 nicklas 175     var fc = frm.flowcells[frm.flowcells.selectedIndex].flowCell;
3629 26 Nov 15 nicklas 176     frm.comments.value = fc.comments;
3629 26 Nov 15 nicklas 177     frm.externalId.value = fc.externalId;
3629 26 Nov 15 nicklas 178     Events.sendChangeEvent('comments');
3629 26 Nov 15 nicklas 179     Events.sendChangeEvent('externalId');
4293 11 Jan 17 nicklas 180     Events.sendChangeEvent('startDate');
3629 26 Nov 15 nicklas 181
4293 11 Jan 17 nicklas 182     frm.externalId.focus();
4293 11 Jan 17 nicklas 183
2650 10 Sep 14 nicklas 184     // Load clustering protocols
3629 26 Nov 15 nicklas 185     Reggie.loadProtocols('SEQUENCING_PROTOCOL', 'sequencingProtocol');
5469 04 Jun 19 nicklas 186     Reggie.loadHardware('SEQUENCER', 'sequencer', 'FLOWCELL_TYPE', fc.FlowCellType);
3691 13 Jan 16 nicklas 187     
3691 13 Jan 16 nicklas 188     if (!failed)
3691 13 Jan 16 nicklas 189     {
6735 09 May 22 nicklas 190       // Load clusters
6633 08 Mar 22 nicklas 191       var url = '../OpenGrid.servlet?ID='+App.getSessionId() + '&cmd=GetHostInfo&config=demux';
3691 13 Jan 16 nicklas 192       Doc.addClass('clusters', 'list-loading');
3691 13 Jan 16 nicklas 193       frm.clusters[0] = new Option('loading...');
3691 13 Jan 16 nicklas 194       Wizard.asyncJsonRequest(url, flowcell.clustersLoaded);
3691 13 Jan 16 nicklas 195       Doc.show('auto-analyze-section');
3717 22 Jan 16 nicklas 196       
3717 22 Jan 16 nicklas 197       // Check debug by default if debug is set or not on a secure server (=production server)
3717 22 Jan 16 nicklas 198       frm.debug.checked = debug || location.protocol != 'https:';
3691 13 Jan 16 nicklas 199     }
3691 13 Jan 16 nicklas 200
2650 10 Sep 14 nicklas 201   }
2650 10 Sep 14 nicklas 202   
3691 13 Jan 16 nicklas 203   flowcell.clustersLoaded = function(response)
3691 13 Jan 16 nicklas 204   {
3691 13 Jan 16 nicklas 205     Doc.removeClass('clusters', 'list-loading');
3691 13 Jan 16 nicklas 206     var frm = document.forms['reggie'];
3691 13 Jan 16 nicklas 207     frm.clusters.length = 0;
4306 17 Jan 17 nicklas 208     var clusters = response.hosts;
3691 13 Jan 16 nicklas 209     if (clusters.length == 0)
3691 13 Jan 16 nicklas 210     {
3691 13 Jan 16 nicklas 211       Doc.element('autoAnalyzeNo').checked = true;
4292 11 Jan 17 nicklas 212       autoAnalyzeIsValid = true;
6735 09 May 22 nicklas 213       Wizard.setInputStatus('autoAnalyze', 'warning', 'No available clusters');
3691 13 Jan 16 nicklas 214       return;
3691 13 Jan 16 nicklas 215     }
3691 13 Jan 16 nicklas 216     
3691 13 Jan 16 nicklas 217     Doc.element('autoAnalyzeNo').disabled = false;
3691 13 Jan 16 nicklas 218     Doc.element('autoAnalyzeYes').disabled = false;
3691 13 Jan 16 nicklas 219     for (var i = 0; i < clusters.length; i++)
3691 13 Jan 16 nicklas 220     {
3691 13 Jan 16 nicklas 221       var cl = clusters[i];
4306 17 Jan 17 nicklas 222       var option = new Option(cl.connection.name, cl.id);
3691 13 Jan 16 nicklas 223       option.cluster = cl;
3691 13 Jan 16 nicklas 224       frm.clusters[frm.clusters.length] = option;
3691 13 Jan 16 nicklas 225     }
3691 13 Jan 16 nicklas 226     flowcell.autoAnalyzeOnChange();
3691 13 Jan 16 nicklas 227   }
3691 13 Jan 16 nicklas 228   
3691 13 Jan 16 nicklas 229   flowcell.clusterOnChange = function()
3691 13 Jan 16 nicklas 230   {
3691 13 Jan 16 nicklas 231     var frm = document.forms['reggie'];
3691 13 Jan 16 nicklas 232     var cluster = frm.clusters[frm.clusters.selectedIndex].cluster;
6980 17 Jan 23 nicklas 233     if (cluster.priorities && cluster.priorities.length > 0)
3691 13 Jan 16 nicklas 234     {
6980 17 Jan 23 nicklas 235       frm.priority.length = 0;
3691 13 Jan 16 nicklas 236       for (var pNo = 0; pNo < cluster.priorities.length; pNo++)
3691 13 Jan 16 nicklas 237       {
3691 13 Jan 16 nicklas 238         var p = cluster.priorities[pNo];
4583 21 Sep 17 nicklas 239         frm.priority[frm.priority.length] = new Option(p.name + ' ('+p.value+')', p.value, p['default'], p['default']);
3691 13 Jan 16 nicklas 240       }
6980 17 Jan 23 nicklas 241       Doc.show('job-priority');
3691 13 Jan 16 nicklas 242     }
3691 13 Jan 16 nicklas 243     else
3691 13 Jan 16 nicklas 244     {
6980 17 Jan 23 nicklas 245       Doc.hide('job-priority');
3691 13 Jan 16 nicklas 246     }
6980 17 Jan 23 nicklas 247     if (cluster.partitions && cluster.partitions.length > 0)
6980 17 Jan 23 nicklas 248     {
6980 17 Jan 23 nicklas 249       frm.partition.length = 0;
6980 17 Jan 23 nicklas 250       for (var pNo = 0; pNo < cluster.partitions.length; pNo++)
6980 17 Jan 23 nicklas 251       {
6980 17 Jan 23 nicklas 252         var p = cluster.partitions[pNo];
6980 17 Jan 23 nicklas 253         var title = p.name;
6980 17 Jan 23 nicklas 254         if (p.description) title += ' ('+p.description+')';
6980 17 Jan 23 nicklas 255         frm.partition[frm.partition.length] = new Option(title, p.value, p['default'], p['default']);
6980 17 Jan 23 nicklas 256       }
6980 17 Jan 23 nicklas 257       Doc.show('job-partition');
6980 17 Jan 23 nicklas 258     }
6980 17 Jan 23 nicklas 259     else
6980 17 Jan 23 nicklas 260     {
6980 17 Jan 23 nicklas 261       Doc.hide('job-partition');
6980 17 Jan 23 nicklas 262     }
3691 13 Jan 16 nicklas 263   }
3691 13 Jan 16 nicklas 264
3691 13 Jan 16 nicklas 265   flowcell.autoAnalyzeOnChange = function()
3691 13 Jan 16 nicklas 266   {
3691 13 Jan 16 nicklas 267     Wizard.setInputStatus('autoAnalyze');
3691 13 Jan 16 nicklas 268     autoAnalyzeIsValid = false;
3691 13 Jan 16 nicklas 269     
3691 13 Jan 16 nicklas 270     var frm = document.forms['reggie'];
3691 13 Jan 16 nicklas 271     var yesChecked = Doc.element('autoAnalyzeYes').checked;
3691 13 Jan 16 nicklas 272     var noChecked = Doc.element('autoAnalyzeNo').checked;
3691 13 Jan 16 nicklas 273     
3691 13 Jan 16 nicklas 274     frm.clusters.disabled = !yesChecked;
3691 13 Jan 16 nicklas 275     frm.priority.disabled = !yesChecked;
6980 17 Jan 23 nicklas 276     frm.partition.disabled = !yesChecked;
3691 13 Jan 16 nicklas 277     frm.debug.disabled = !yesChecked;
3691 13 Jan 16 nicklas 278
3691 13 Jan 16 nicklas 279     if (!yesChecked && !noChecked)
3691 13 Jan 16 nicklas 280     {
3691 13 Jan 16 nicklas 281       Wizard.setInputStatus('autoAnalyze', 'invalid', 'Must select Yes or No');
3691 13 Jan 16 nicklas 282       return;
3691 13 Jan 16 nicklas 283     }
3691 13 Jan 16 nicklas 284     
3691 13 Jan 16 nicklas 285     autoAnalyzeIsValid = true;
3691 13 Jan 16 nicklas 286     Wizard.setInputStatus('autoAnalyze', 'valid');
3691 13 Jan 16 nicklas 287     
3691 13 Jan 16 nicklas 288     if (yesChecked) flowcell.clusterOnChange();
3691 13 Jan 16 nicklas 289   }
3691 13 Jan 16 nicklas 290
3629 26 Nov 15 nicklas 291   // Comments are required when 'Failure' has been selected
6824 30 Aug 22 nicklas 292   flowcell.commentsOnChange = function()
2650 10 Sep 14 nicklas 293   {
2650 10 Sep 14 nicklas 294     var frm = document.forms['reggie'];
2650 10 Sep 14 nicklas 295     
3629 26 Nov 15 nicklas 296     commentsIsValid = false;
3629 26 Nov 15 nicklas 297     Wizard.setInputStatus('comments');
2650 10 Sep 14 nicklas 298     
3629 26 Nov 15 nicklas 299     var comments = frm.comments.value;
2650 10 Sep 14 nicklas 300     if (comments == '')
2650 10 Sep 14 nicklas 301     {
3629 26 Nov 15 nicklas 302       var required = frm.comments.className.indexOf('required') != -1;
2650 10 Sep 14 nicklas 303       if (required)
2650 10 Sep 14 nicklas 304       {
3629 26 Nov 15 nicklas 305         Wizard.setInputStatus('comments', 'invalid', 'Missing');
2650 10 Sep 14 nicklas 306         return;
2650 10 Sep 14 nicklas 307       }
2650 10 Sep 14 nicklas 308     }
2650 10 Sep 14 nicklas 309
3629 26 Nov 15 nicklas 310     Wizard.setInputStatus('comments', 'valid');
3629 26 Nov 15 nicklas 311     commentsIsValid = true;
2650 10 Sep 14 nicklas 312   }
2650 10 Sep 14 nicklas 313
6824 30 Aug 22 nicklas 314   flowcell.flowCellIdOnChange = function()
2650 10 Sep 14 nicklas 315   {
2650 10 Sep 14 nicklas 316     var frm = document.forms['reggie'];
2650 10 Sep 14 nicklas 317     
3629 26 Nov 15 nicklas 318     Wizard.setInputStatus('externalId');
3629 26 Nov 15 nicklas 319     flowCellIdIsValid = false;
2650 10 Sep 14 nicklas 320     
3629 26 Nov 15 nicklas 321     var id = frm.externalId.value;
2650 10 Sep 14 nicklas 322     if (id == '')
2650 10 Sep 14 nicklas 323     {
3629 26 Nov 15 nicklas 324       Wizard.setInputStatus('externalId', 'invalid', 'ID is a required value');
2650 10 Sep 14 nicklas 325       return;
2650 10 Sep 14 nicklas 326     }
2650 10 Sep 14 nicklas 327     
2650 10 Sep 14 nicklas 328     // Check if ID already exists in DB
2650 10 Sep 14 nicklas 329     var url = '../FlowCell.servlet?ID='+App.getSessionId();
2650 10 Sep 14 nicklas 330     url += '&cmd=GetFlowCellByBarcode';
2650 10 Sep 14 nicklas 331     url += '&barcode='+encodeURIComponent(id);
2650 10 Sep 14 nicklas 332     Wizard.showLoadingAnimation('Checking flow cell id...');
2650 10 Sep 14 nicklas 333     Wizard.asyncJsonRequest(url, flowcell.flowCellIdChecked);
2650 10 Sep 14 nicklas 334   }
2650 10 Sep 14 nicklas 335   
2650 10 Sep 14 nicklas 336   flowcell.flowCellIdChecked = function(response)
2650 10 Sep 14 nicklas 337   {
2650 10 Sep 14 nicklas 338     var frm = document.forms['reggie'];
2650 10 Sep 14 nicklas 339     var existing = response.flowCell;
2650 10 Sep 14 nicklas 340     if (existing != null)
2650 10 Sep 14 nicklas 341     {
3629 26 Nov 15 nicklas 342       var id = frm.externalId.value;
3629 26 Nov 15 nicklas 343       Wizard.setInputStatus('externalId', 'invalid', 'Flow cell with ID='+Strings.encodeTags(id)+' already exists: ' + Strings.encodeTags(existing.name));
2650 10 Sep 14 nicklas 344       return;
2650 10 Sep 14 nicklas 345     }
3629 26 Nov 15 nicklas 346     Wizard.setInputStatus('externalId', 'valid');
3629 26 Nov 15 nicklas 347     flowCellIdIsValid = true;
2650 10 Sep 14 nicklas 348   }
2650 10 Sep 14 nicklas 349
2650 10 Sep 14 nicklas 350   flowcell.validateStep2 = function(event)
2650 10 Sep 14 nicklas 351   {
3629 26 Nov 15 nicklas 352     var valid = Wizard.isValid('startDate');
3691 13 Jan 16 nicklas 353     valid &= flowCellIdIsValid  && commentsIsValid && autoAnalyzeIsValid;
3629 26 Nov 15 nicklas 354     if (!valid)
2650 10 Sep 14 nicklas 355     {
2650 10 Sep 14 nicklas 356       event.preventDefault();
2650 10 Sep 14 nicklas 357     }
2650 10 Sep 14 nicklas 358   }
2650 10 Sep 14 nicklas 359
2650 10 Sep 14 nicklas 360
2650 10 Sep 14 nicklas 361   flowcell.submit = function()
2650 10 Sep 14 nicklas 362   {
2650 10 Sep 14 nicklas 363     var frm = document.forms['reggie'];
2650 10 Sep 14 nicklas 364     var failed = Doc.element('outcomeFailed').checked;
3629 26 Nov 15 nicklas 365     
2650 10 Sep 14 nicklas 366     var submitInfo = {};
2650 10 Sep 14 nicklas 367     submitInfo.failed = failed;
2650 10 Sep 14 nicklas 368     
3629 26 Nov 15 nicklas 369     var seqRun = {};
3629 26 Nov 15 nicklas 370     seqRun.startDate = frm.startDate.value;
3629 26 Nov 15 nicklas 371     seqRun.operator = frm.sequencingOperator.value;
3629 26 Nov 15 nicklas 372     seqRun.sequencer = parseInt(frm.sequencer.value, 10);
3629 26 Nov 15 nicklas 373     seqRun.position = frm.sequencerPosition.value;
3629 26 Nov 15 nicklas 374     seqRun.protocol = parseInt(frm.sequencingProtocol.value, 10);
3629 26 Nov 15 nicklas 375     seqRun.comments = frm.comments.value;
3629 26 Nov 15 nicklas 376     submitInfo.sequencingRun = seqRun;
2650 10 Sep 14 nicklas 377     
3629 26 Nov 15 nicklas 378     var fc = frm.flowcells[frm.flowcells.selectedIndex].flowCell;
3629 26 Nov 15 nicklas 379     fc.FlowCellID = frm.externalId.value;
3629 26 Nov 15 nicklas 380     submitInfo.flowCell = fc;
2650 10 Sep 14 nicklas 381     
3691 13 Jan 16 nicklas 382     if (!failed && Doc.element('autoAnalyzeYes').checked)
3691 13 Jan 16 nicklas 383     {
3691 13 Jan 16 nicklas 384       var autoAnalyze = {};
3691 13 Jan 16 nicklas 385       autoAnalyze.cluster = frm.clusters.value;
3691 13 Jan 16 nicklas 386       autoAnalyze.priority = parseInt(frm.priority.value);
6980 17 Jan 23 nicklas 387       if (frm.partition.selectedIndex >= 0)
6980 17 Jan 23 nicklas 388       {
6980 17 Jan 23 nicklas 389         autoAnalyze.partition = frm.partition.value;
6980 17 Jan 23 nicklas 390       }
3691 13 Jan 16 nicklas 391       autoAnalyze.debug = frm.debug.checked;
3691 13 Jan 16 nicklas 392       submitInfo.autoAnalyze = autoAnalyze;
3691 13 Jan 16 nicklas 393     }
3691 13 Jan 16 nicklas 394
3629 26 Nov 15 nicklas 395     var url = '../SequencingRun.servlet?ID='+App.getSessionId();
5488 12 Jun 19 nicklas 396     url += '&cmd=RegisterSequencingStarted&pipeline='+encodeURIComponent(Data.get('page-data', 'pipeline'));
3629 26 Nov 15 nicklas 397     
2650 10 Sep 14 nicklas 398     Wizard.showLoadingAnimation('Performing registration...');
2650 10 Sep 14 nicklas 399     Wizard.asyncJsonRequest(url, flowcell.submissionResults, 'POST', JSON.stringify(submitInfo));
2650 10 Sep 14 nicklas 400   }
2650 10 Sep 14 nicklas 401   
2650 10 Sep 14 nicklas 402   flowcell.submissionResults = function(response)
2650 10 Sep 14 nicklas 403   {
2650 10 Sep 14 nicklas 404     Wizard.showFinalMessage(response.messages);
2650 10 Sep 14 nicklas 405     Doc.show('gorestart');
2650 10 Sep 14 nicklas 406   }
2650 10 Sep 14 nicklas 407
2650 10 Sep 14 nicklas 408   return flowcell;
2650 10 Sep 14 nicklas 409 }();
2650 10 Sep 14 nicklas 410
2650 10 Sep 14 nicklas 411 Doc.onLoad(FlowCell.initPage);
2650 10 Sep 14 nicklas 412