extensions/net.sf.basedb.reggie/trunk/resources/analysis/demux_start.js

Code
Comments
Other
Rev Date Author Line
2622 02 Sep 14 nicklas 1 var Demux = function()
2622 02 Sep 14 nicklas 2 {
2622 02 Sep 14 nicklas 3   var demux = {};
2656 11 Sep 14 nicklas 4   var debug = 0;
5479 10 Jun 19 nicklas 5
5479 10 Jun 19 nicklas 6   var pipeline = null;
2622 02 Sep 14 nicklas 7   var subtypeSequencingRun = null;
5479 10 Jun 19 nicklas 8   var annotationTypePipeline = null;
5479 10 Jun 19 nicklas 9   var seqRunsAreValid = false;
2622 02 Sep 14 nicklas 10   var clusterIsValid = false;
2808 15 Oct 14 nicklas 11   var newSeqRuns;
6280 09 Jun 21 nicklas 12   var allLibs = [];
2622 02 Sep 14 nicklas 13   
2622 02 Sep 14 nicklas 14   // Page initialization
2622 02 Sep 14 nicklas 15   demux.initPage = function()
2622 02 Sep 14 nicklas 16   {
2622 02 Sep 14 nicklas 17     
2622 02 Sep 14 nicklas 18     // Step 1
2622 02 Sep 14 nicklas 19     Buttons.addClickHandler('btnSelectSeqRuns', demux.selectSeqencingRuns);
2622 02 Sep 14 nicklas 20     Events.addEventHandler('seqRuns', 'base-selected', demux.setSeqRunCallback);
2628 02 Sep 14 nicklas 21     Events.addEventHandler('seqRuns', 'change', demux.seqRunsOnChange);
2622 02 Sep 14 nicklas 22     Events.addEventHandler('step-1', 'wizard-validate', demux.validateStep1);
2622 02 Sep 14 nicklas 23
2622 02 Sep 14 nicklas 24     // Step 2
2622 02 Sep 14 nicklas 25     Events.addEventHandler('step-2', 'wizard-initialize', demux.initializeStep2);
2622 02 Sep 14 nicklas 26     Events.addEventHandler('step-2', 'wizard-validate', demux.validateStep2);
2622 02 Sep 14 nicklas 27     Events.addEventHandler('clusters', 'change', demux.clusterOnChange);
7372 06 Oct 23 nicklas 28     Events.addEventHandler('debug', 'change', demux.debugOnChange);
7372 06 Oct 23 nicklas 29     Events.addEventHandler('override', 'change', demux.overrideOnChange);
3128 10 Feb 15 nicklas 30     Events.addEventHandler('demuxSoftware', 'change', demux.softwareOnChange);
3128 10 Feb 15 nicklas 31     Events.addEventHandler('mergeSoftware', 'change', demux.softwareOnChange);
6280 09 Jun 21 nicklas 32     Buttons.addClickHandler('donotuseinfo', demux.showDoNotUseInfo);
6280 09 Jun 21 nicklas 33     Buttons.addClickHandler('libsAll', demux.selectLibsAll);
6280 09 Jun 21 nicklas 34     Buttons.addClickHandler('libsExceptDoNotUse', demux.selectLibsAllExceptDoNotUse);
6280 09 Jun 21 nicklas 35     Buttons.addClickHandler('libsSelected', demux.selectLibsForDemux);
2622 02 Sep 14 nicklas 36     
2622 02 Sep 14 nicklas 37     // Navigation
2622 02 Sep 14 nicklas 38     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
2622 02 Sep 14 nicklas 39     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
2622 02 Sep 14 nicklas 40     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
2622 02 Sep 14 nicklas 41     Buttons.addClickHandler('goregister', Wizard.goRegister);
2622 02 Sep 14 nicklas 42       
2622 02 Sep 14 nicklas 43     // Final registration
2622 02 Sep 14 nicklas 44     Events.addEventHandler('wizard', 'wizard-submit', demux.submit);
2622 02 Sep 14 nicklas 45     
2622 02 Sep 14 nicklas 46
2622 02 Sep 14 nicklas 47     Wizard.showLoadingAnimation('Loading bioassays...');
2622 02 Sep 14 nicklas 48     var url = '../DemuxMerge.servlet?ID='+App.getSessionId();
5479 10 Jun 19 nicklas 49     url += '&cmd=GetConfirmedSequencingRuns&pipeline='+encodeURIComponent(Data.get('page-data', 'pipeline'));
2622 02 Sep 14 nicklas 50     Wizard.asyncJsonRequest(url, demux.initializeStep1);
2622 02 Sep 14 nicklas 51   }
2622 02 Sep 14 nicklas 52   
2622 02 Sep 14 nicklas 53   // --- Step 1 -----------------------------------
2622 02 Sep 14 nicklas 54   demux.initializeStep1 = function(response)
2622 02 Sep 14 nicklas 55   {
5479 10 Jun 19 nicklas 56     pipeline = response.pipeline; // We need the 'name' value here to be able to filter in "Select manually"
2622 02 Sep 14 nicklas 57     var seqRuns = response.sequencingRuns;
2627 02 Sep 14 nicklas 58     seqRuns.sort(demux.sortByPool);
2622 02 Sep 14 nicklas 59     var frm = document.forms['reggie'];  
2622 02 Sep 14 nicklas 60
2622 02 Sep 14 nicklas 61     if (seqRuns.length > 0)
2622 02 Sep 14 nicklas 62     {
2622 02 Sep 14 nicklas 63       for (var runNo=0; runNo < seqRuns.length; runNo++)
2622 02 Sep 14 nicklas 64       {
2622 02 Sep 14 nicklas 65         var seqRun = seqRuns[runNo];
2622 02 Sep 14 nicklas 66         var option = demux.getOptionForSeqRun(seqRun);
2622 02 Sep 14 nicklas 67         frm.seqRuns.options[frm.seqRuns.length] = option;
2622 02 Sep 14 nicklas 68       }
5479 10 Jun 19 nicklas 69       demux.seqRunsOnChange();
2622 02 Sep 14 nicklas 70     }
2622 02 Sep 14 nicklas 71     else
2622 02 Sep 14 nicklas 72     {
2622 02 Sep 14 nicklas 73       Wizard.setInputStatus('seqRuns', 'invalid', 'No new sequencing runs available for processing');
2622 02 Sep 14 nicklas 74     }
2622 02 Sep 14 nicklas 75     
2622 02 Sep 14 nicklas 76     Doc.show('step-1');
2622 02 Sep 14 nicklas 77     Doc.show('gonext');
2622 02 Sep 14 nicklas 78
2622 02 Sep 14 nicklas 79     frm.seqRuns.focus();
2622 02 Sep 14 nicklas 80   }
2622 02 Sep 14 nicklas 81   
2622 02 Sep 14 nicklas 82   demux.validateStep1 = function(event)
2622 02 Sep 14 nicklas 83   {
5479 10 Jun 19 nicklas 84     if (!seqRunsAreValid) event.preventDefault();
2622 02 Sep 14 nicklas 85   }
2622 02 Sep 14 nicklas 86   
2627 02 Sep 14 nicklas 87   /**
2627 02 Sep 14 nicklas 88     Sort by the name of the first pool.
2627 02 Sep 14 nicklas 89   */
2627 02 Sep 14 nicklas 90   demux.sortByPool = function(a, b)
2627 02 Sep 14 nicklas 91   {
2627 02 Sep 14 nicklas 92     var p1 = a.flowCell.pools[0].name;
2627 02 Sep 14 nicklas 93     var p2 = b.flowCell.pools[0].name;
2627 02 Sep 14 nicklas 94     if (p1 < p2) return -1;
2627 02 Sep 14 nicklas 95     if (p1 > p2) return 1;
2627 02 Sep 14 nicklas 96     if (a.name < b.name) return -1;
2627 02 Sep 14 nicklas 97     if (a.name > b.name) return 1;
2627 02 Sep 14 nicklas 98     return a.id - b.id;
2627 02 Sep 14 nicklas 99   }
2627 02 Sep 14 nicklas 100   
2622 02 Sep 14 nicklas 101   demux.getOptionForSeqRun = function(seqRun)
2622 02 Sep 14 nicklas 102   {
2622 02 Sep 14 nicklas 103     var flowCell = seqRun.flowCell;
2622 02 Sep 14 nicklas 104     var name = seqRun.name+': ';
2622 02 Sep 14 nicklas 105     var numPools = flowCell.pools.length;
2622 02 Sep 14 nicklas 106     var firstPoolNum = demux.getPoolNum(flowCell.pools[0].name);
2622 02 Sep 14 nicklas 107     var lastPoolNum = demux.getPoolNum(flowCell.pools[flowCell.pools.length-1].name);
2622 02 Sep 14 nicklas 108
2622 02 Sep 14 nicklas 109     if (lastPoolNum - firstPoolNum == numPools - 1)
2622 02 Sep 14 nicklas 110     {
2622 02 Sep 14 nicklas 111       if (numPools > 1)
2622 02 Sep 14 nicklas 112       {
2622 02 Sep 14 nicklas 113         // Display: PoolN -- PoolY
2622 02 Sep 14 nicklas 114         name += flowCell.pools[0].name + ' — ' + flowCell.pools[flowCell.pools.length-1].name;
2622 02 Sep 14 nicklas 115       }
2622 02 Sep 14 nicklas 116       else
2622 02 Sep 14 nicklas 117       {
2622 02 Sep 14 nicklas 118         name += flowCell.pools[0].name;
2622 02 Sep 14 nicklas 119       }
2622 02 Sep 14 nicklas 120     }
2622 02 Sep 14 nicklas 121     else
2622 02 Sep 14 nicklas 122     {
2622 02 Sep 14 nicklas 123       // Display: PoolN + x more...
2622 02 Sep 14 nicklas 124       name += flowCell.pools[0].name + ' + ' + (numPools-1) + ' more...';
2622 02 Sep 14 nicklas 125     }
5479 10 Jun 19 nicklas 126     
5479 10 Jun 19 nicklas 127     var opt = [];
5479 10 Jun 19 nicklas 128     opt[opt.length] = flowCell.libraries.length + ' libraries';
5479 10 Jun 19 nicklas 129     if (flowCell.FlowCellType) opt[opt.length] = flowCell.FlowCellType;
5479 10 Jun 19 nicklas 130     opt[opt.length] = seqRun.pipeline;
5479 10 Jun 19 nicklas 131     name += ' [' + opt.join('; ') + ']';
5479 10 Jun 19 nicklas 132
2640 08 Sep 14 nicklas 133     if (seqRun.AutoProcess == 'ReProcess')
2640 08 Sep 14 nicklas 134     {
2640 08 Sep 14 nicklas 135       name += ' [R]';
2640 08 Sep 14 nicklas 136     }
2648 10 Sep 14 nicklas 137     
4985 28 Sep 18 nicklas 138     // Count the number of libraries marked with DoNotUse
4985 28 Sep 18 nicklas 139     var numDoNotUse = 0;
4985 28 Sep 18 nicklas 140     for (var libNo = 0; libNo < flowCell.libraries.length; libNo++)
4985 28 Sep 18 nicklas 141     {
4985 28 Sep 18 nicklas 142       if (flowCell.libraries[libNo].DO_NOT_USE) numDoNotUse++;
4985 28 Sep 18 nicklas 143     }
4985 28 Sep 18 nicklas 144     flowCell.numDoNotUse = numDoNotUse;
4985 28 Sep 18 nicklas 145     
2622 02 Sep 14 nicklas 146     // Tooltip is always all pools
2622 02 Sep 14 nicklas 147     var title = '';
2622 02 Sep 14 nicklas 148     for (var poolNo=0; poolNo < numPools; poolNo++)
2622 02 Sep 14 nicklas 149     {
2622 02 Sep 14 nicklas 150       var pool = flowCell.pools[poolNo];
2622 02 Sep 14 nicklas 151       if (poolNo > 0) title += ', ';
2622 02 Sep 14 nicklas 152       title += pool.name;
2622 02 Sep 14 nicklas 153     }
2622 02 Sep 14 nicklas 154
2622 02 Sep 14 nicklas 155     var option = new Option(name, seqRun.id);
2622 02 Sep 14 nicklas 156     option.title = title;
2622 02 Sep 14 nicklas 157     option.seqRun = seqRun;  
2622 02 Sep 14 nicklas 158     return option;
2622 02 Sep 14 nicklas 159   }
2622 02 Sep 14 nicklas 160
2622 02 Sep 14 nicklas 161   demux.getPoolNum = function(poolName)
2622 02 Sep 14 nicklas 162   {
2622 02 Sep 14 nicklas 163     var num = poolName.match(/Pool(\d+)/);
2622 02 Sep 14 nicklas 164     return num ? parseInt(num[1], 10) : null;
2622 02 Sep 14 nicklas 165   }
2622 02 Sep 14 nicklas 166
2622 02 Sep 14 nicklas 167   demux.selectSeqencingRuns = function()
2622 02 Sep 14 nicklas 168   {
2622 02 Sep 14 nicklas 169     var frm = document.forms['reggie'];
2622 02 Sep 14 nicklas 170     if (frm.seqRuns.disabled) return;
2622 02 Sep 14 nicklas 171     
2622 02 Sep 14 nicklas 172     if (subtypeSequencingRun == null)
2622 02 Sep 14 nicklas 173     {
2622 02 Sep 14 nicklas 174       subtypeSequencingRun = Reggie.getSubtypeInfo('SEQUENCING_RUN');
2622 02 Sep 14 nicklas 175     }
5479 10 Jun 19 nicklas 176     if (annotationTypePipeline == null)
5479 10 Jun 19 nicklas 177     {
5479 10 Jun 19 nicklas 178       annotationTypePipeline = Reggie.getAnnotationTypeInfo('PIPELINE');
5479 10 Jun 19 nicklas 179     }
2622 02 Sep 14 nicklas 180     
2808 15 Oct 14 nicklas 181     newSeqRuns = [];
2622 02 Sep 14 nicklas 182     var url = '&resetTemporary=1';
2622 02 Sep 14 nicklas 183     url += '&tmpfilter:INT:itemSubtype='+subtypeSequencingRun.id;
5479 10 Jun 19 nicklas 184     url += '&tmpfilter:STRING:'+encodeURIComponent('#')+annotationTypePipeline.id+'='+encodeURIComponent(pipeline.name);
2622 02 Sep 14 nicklas 185     Dialogs.selectItem('DERIVEDBIOASSAY', 'seqRuns', 1, url);
2622 02 Sep 14 nicklas 186   }
2622 02 Sep 14 nicklas 187
2622 02 Sep 14 nicklas 188   demux.setSeqRunCallback = function(event)
2622 02 Sep 14 nicklas 189   {
2622 02 Sep 14 nicklas 190     var frm = document.forms['reggie'];
2622 02 Sep 14 nicklas 191     var seqRunList = frm.seqRuns;
2808 15 Oct 14 nicklas 192
2808 15 Oct 14 nicklas 193     var isNew = true;
2622 02 Sep 14 nicklas 194     for (var i = 0; i < seqRunList.length; i++)
2622 02 Sep 14 nicklas 195     {
2622 02 Sep 14 nicklas 196       if (seqRunList[i].value == event.detail.id)
2622 02 Sep 14 nicklas 197       {
2622 02 Sep 14 nicklas 198         seqRunList[i].selected = true;
2808 15 Oct 14 nicklas 199         isNew = false;
2808 15 Oct 14 nicklas 200       }
2808 15 Oct 14 nicklas 201     }
2808 15 Oct 14 nicklas 202     
2808 15 Oct 14 nicklas 203     if (isNew) newSeqRuns[newSeqRuns.length] = event.detail.id;
2808 15 Oct 14 nicklas 204     
2808 15 Oct 14 nicklas 205     if (event.detail.remaining == 0)
2808 15 Oct 14 nicklas 206     {
2808 15 Oct 14 nicklas 207       if (newSeqRuns.length > 0)
2808 15 Oct 14 nicklas 208       {
2808 15 Oct 14 nicklas 209         // Get more information about the selected sequencing run
2808 15 Oct 14 nicklas 210         var url = '../DemuxMerge.servlet?ID='+App.getSessionId();
2808 15 Oct 14 nicklas 211         url += '&cmd=GetSequencingRunInfo&ids=' + newSeqRuns.join(',');
2808 15 Oct 14 nicklas 212         Wizard.asyncJsonRequest(url, demux.seqRunInfoLoaded);
2808 15 Oct 14 nicklas 213       }
2808 15 Oct 14 nicklas 214       else
2808 15 Oct 14 nicklas 215       {
2628 02 Sep 14 nicklas 216         demux.seqRunsOnChange();
2622 02 Sep 14 nicklas 217       }
2622 02 Sep 14 nicklas 218     }
2622 02 Sep 14 nicklas 219   }
2622 02 Sep 14 nicklas 220   
2622 02 Sep 14 nicklas 221   demux.seqRunInfoLoaded = function(response)
2622 02 Sep 14 nicklas 222   {
2622 02 Sep 14 nicklas 223     var frm = document.forms['reggie'];
2808 15 Oct 14 nicklas 224     var seqRuns = response.sequencingRuns;
2622 02 Sep 14 nicklas 225     var seqRunList = frm.seqRuns;
2808 15 Oct 14 nicklas 226     for (var seqNo = 0; seqNo < seqRuns.length; seqNo++)
2808 15 Oct 14 nicklas 227     {
2808 15 Oct 14 nicklas 228       var seqRun = seqRuns[seqNo];
2808 15 Oct 14 nicklas 229       var option = demux.getOptionForSeqRun(seqRun);
2808 15 Oct 14 nicklas 230       option.selected = true;
2808 15 Oct 14 nicklas 231       seqRunList[seqRunList.length] = option;
2808 15 Oct 14 nicklas 232     }
2628 02 Sep 14 nicklas 233     demux.seqRunsOnChange();
2628 02 Sep 14 nicklas 234   }
2628 02 Sep 14 nicklas 235
2628 02 Sep 14 nicklas 236   // Check if all selected sequencing runs have the same pools
2628 02 Sep 14 nicklas 237   demux.seqRunsOnChange = function()
2628 02 Sep 14 nicklas 238   {
5479 10 Jun 19 nicklas 239     seqRunsAreValid = false;
5479 10 Jun 19 nicklas 240     
2628 02 Sep 14 nicklas 241     var frm = document.forms['reggie'];
2628 02 Sep 14 nicklas 242     var numSelected = 0;
2628 02 Sep 14 nicklas 243     var pools;
4985 28 Sep 18 nicklas 244     var numDoNotUse = 0;
5479 10 Jun 19 nicklas 245     var hasPoolMix = false;
6214 15 Apr 21 nicklas 246     var invalidSelection = null;
2622 02 Sep 14 nicklas 247     Wizard.setInputStatus('seqRuns');
2628 02 Sep 14 nicklas 248     for (var seqNo = 0; seqNo < frm.seqRuns.length; seqNo++)
2628 02 Sep 14 nicklas 249     {
2628 02 Sep 14 nicklas 250       if (frm.seqRuns[seqNo].selected)
2628 02 Sep 14 nicklas 251       {
5479 10 Jun 19 nicklas 252         var sr = frm.seqRuns[seqNo].seqRun;
5479 10 Jun 19 nicklas 253         if (sr.pipeline && sr.pipeline != pipeline.name)
5479 10 Jun 19 nicklas 254         {
6214 15 Apr 21 nicklas 255           invalidSelection = Strings.encodeTags(sr.name+' ('+sr.pipeline)+') is not intended for the '+pipeline.name+' pipeline.';
5479 10 Jun 19 nicklas 256         }
6214 15 Apr 21 nicklas 257         else if (!sr.DataFilesFolder)
6214 15 Apr 21 nicklas 258         {
6214 15 Apr 21 nicklas 259           invalidSelection = Strings.encodeTags(sr.name+' is missing DataFilesFolder information');
6214 15 Apr 21 nicklas 260         }
5479 10 Jun 19 nicklas 261
5479 10 Jun 19 nicklas 262         numSelected++;
2628 02 Sep 14 nicklas 263         if (numSelected == 1)
2628 02 Sep 14 nicklas 264         {
5479 10 Jun 19 nicklas 265           pools = sr.flowCell.pools;
5479 10 Jun 19 nicklas 266           numDoNotUse = sr.flowCell.numDoNotUse;
2628 02 Sep 14 nicklas 267         }
2628 02 Sep 14 nicklas 268         else
2628 02 Sep 14 nicklas 269         {
5479 10 Jun 19 nicklas 270           if (!demux.compareListOfPools(pools, sr.flowCell.pools))
2628 02 Sep 14 nicklas 271           {
5479 10 Jun 19 nicklas 272             hasPoolMix = true;
2628 02 Sep 14 nicklas 273           }
2628 02 Sep 14 nicklas 274         }
2628 02 Sep 14 nicklas 275       }
2628 02 Sep 14 nicklas 276     }
2628 02 Sep 14 nicklas 277     if (numSelected == 0)
2628 02 Sep 14 nicklas 278     {
2628 02 Sep 14 nicklas 279       Wizard.setInputStatus('seqRuns', 'invalid', 'Select at least one sequencing run');
4985 28 Sep 18 nicklas 280       return;
2628 02 Sep 14 nicklas 281     }
6214 15 Apr 21 nicklas 282     if (invalidSelection) 
4985 28 Sep 18 nicklas 283     {
6214 15 Apr 21 nicklas 284       Wizard.setInputStatus('seqRuns', 'invalid', invalidSelection);
5479 10 Jun 19 nicklas 285       return;
5479 10 Jun 19 nicklas 286     }
5479 10 Jun 19 nicklas 287
5479 10 Jun 19 nicklas 288     seqRunsAreValid = true;
5479 10 Jun 19 nicklas 289     if (hasPoolMix)
5479 10 Jun 19 nicklas 290     {
5479 10 Jun 19 nicklas 291       Wizard.setInputStatus('seqRuns', 'warning', 'The selected sequencing runs have different pools');
5479 10 Jun 19 nicklas 292     }
5479 10 Jun 19 nicklas 293     else if (numDoNotUse > 0)
5479 10 Jun 19 nicklas 294     {
4985 28 Sep 18 nicklas 295       var msg = numDoNotUse == 1 ? '1 library is marked with DoNotUse.' :
4985 28 Sep 18 nicklas 296         numDoNotUse + ' libraries are marked with DoNotUse.'
4985 28 Sep 18 nicklas 297       Wizard.setInputStatus('seqRuns', 'warning', msg);
4985 28 Sep 18 nicklas 298     }
2628 02 Sep 14 nicklas 299     else
2628 02 Sep 14 nicklas 300     {
2628 02 Sep 14 nicklas 301       Wizard.setInputStatus('seqRuns', 'valid');
2628 02 Sep 14 nicklas 302     }
2622 02 Sep 14 nicklas 303   }
2622 02 Sep 14 nicklas 304   
2628 02 Sep 14 nicklas 305   // Check if two lists of pools are the same or not
2628 02 Sep 14 nicklas 306   demux.compareListOfPools = function(p1, p2)
2628 02 Sep 14 nicklas 307   {
2628 02 Sep 14 nicklas 308     if (p1.length != p2.length) return false;
2628 02 Sep 14 nicklas 309     for (var i = 0; i < p1.length; i++)
2628 02 Sep 14 nicklas 310     {
2628 02 Sep 14 nicklas 311       if (p1[i].id != p2[i].id) return false;
2628 02 Sep 14 nicklas 312     }
2628 02 Sep 14 nicklas 313     return true;
2628 02 Sep 14 nicklas 314   }
2628 02 Sep 14 nicklas 315   
2622 02 Sep 14 nicklas 316   demux.initializeStep2 = function()
2622 02 Sep 14 nicklas 317   {
2622 02 Sep 14 nicklas 318     var frm = document.forms['reggie'];
2622 02 Sep 14 nicklas 319     
2622 02 Sep 14 nicklas 320     // ReadString input fields
2622 02 Sep 14 nicklas 321     var html = '';
6280 09 Jun 21 nicklas 322     var numDoNotUse = 0;
6280 09 Jun 21 nicklas 323     var uniqueLibs = {};
2622 02 Sep 14 nicklas 324     for (var seqNo = 0; seqNo < frm.seqRuns.length; seqNo++)
2622 02 Sep 14 nicklas 325     {
2622 02 Sep 14 nicklas 326       if (frm.seqRuns[seqNo].selected)
2622 02 Sep 14 nicklas 327       {
2622 02 Sep 14 nicklas 328         var seqRun = frm.seqRuns[seqNo].seqRun;
2622 02 Sep 14 nicklas 329         var fc = seqRun.flowCell;
6280 09 Jun 21 nicklas 330         for (var libNo = 0; libNo < fc.libraries.length; libNo++)
6280 09 Jun 21 nicklas 331         {
6280 09 Jun 21 nicklas 332           var lib = fc.libraries[libNo];
6280 09 Jun 21 nicklas 333           if (!uniqueLibs[lib.name])
6280 09 Jun 21 nicklas 334           {
6280 09 Jun 21 nicklas 335             if (lib.DO_NOT_USE) numDoNotUse++;
6280 09 Jun 21 nicklas 336             allLibs[allLibs.length] = lib;
6280 09 Jun 21 nicklas 337             uniqueLibs[lib.name] = true;
6280 09 Jun 21 nicklas 338           }
6280 09 Jun 21 nicklas 339         }
6280 09 Jun 21 nicklas 340         
2622 02 Sep 14 nicklas 341         var readStringId = 'readString.'+seqNo;
2622 02 Sep 14 nicklas 342         html += '<tr>';
2657 11 Sep 14 nicklas 343         html += '<td class="prompt" colspan="2">'+Strings.encodeTags(frm.seqRuns[seqNo].text)+'</td>';
2657 11 Sep 14 nicklas 344         html += '<td class="status"></td>';
2657 11 Sep 14 nicklas 345         html += '<td class="help"></td>';
2657 11 Sep 14 nicklas 346         html += '</tr>';
2657 11 Sep 14 nicklas 347
2657 11 Sep 14 nicklas 348         html += '<tr>';
2657 11 Sep 14 nicklas 349         html += '<td class="subprompt">Sequencing cycles</td>';
2622 02 Sep 14 nicklas 350         html += '<td>'+Strings.encodeTags(seqRun.SequencingCycles)+'</td>';
2622 02 Sep 14 nicklas 351         html += '<td class="status"></td>';
2622 02 Sep 14 nicklas 352         html += '<td class="help"></td>';
2622 02 Sep 14 nicklas 353         html += '</tr>';
2622 02 Sep 14 nicklas 354         
2622 02 Sep 14 nicklas 355         html += '<tr>';
2622 02 Sep 14 nicklas 356         html += '<td class="subprompt">ReadString</td>';
5479 10 Jun 19 nicklas 357         html += '<td><input type="text" class="required" name="'+readStringId+'" id="'+readStringId+'" value="'+Strings.encodeTags(seqRun.ReadString)+'" style="width: 15em;"></td>';
2622 02 Sep 14 nicklas 358         html += '<td class="status" id="'+readStringId+'.status"></td>';
2622 02 Sep 14 nicklas 359         html += '<td class="help"><span id="'+readStringId+'.message"></span></td>';
2622 02 Sep 14 nicklas 360         html += '</tr>';
2622 02 Sep 14 nicklas 361         
2622 02 Sep 14 nicklas 362         html += '<tr>';
2622 02 Sep 14 nicklas 363         html += '<td class="subprompt">Omit lanes</td>';
2622 02 Sep 14 nicklas 364         html += '<td>';
2622 02 Sep 14 nicklas 365         for (var laneNo = 1; laneNo <= fc.numLanes; laneNo++)
2622 02 Sep 14 nicklas 366         {
2622 02 Sep 14 nicklas 367           var checked = fc.FailedLanes.indexOf(laneNo) >= 0 ? 'checked' : '';
2622 02 Sep 14 nicklas 368           html += '<label><input type="checkbox" name="omitLanes.'+seqNo+'" value="'+laneNo+'" ' + checked + '>'+laneNo+'</label> ';
2622 02 Sep 14 nicklas 369         }
2622 02 Sep 14 nicklas 370         html += '</td>';
2622 02 Sep 14 nicklas 371         html += '<td class="status"></td>';
2622 02 Sep 14 nicklas 372         html += '<td class="help">By default, failed lanes are omitted</td>';
2622 02 Sep 14 nicklas 373         html += '</tr>';
2622 02 Sep 14 nicklas 374         
2642 09 Sep 14 nicklas 375         html += '<tr>';
2642 09 Sep 14 nicklas 376         html += '<td class="subprompt"></td>';
3026 11 Dec 14 nicklas 377         html += '<td><div id="check.'+seqNo+'" class="button basicbutton interactable" data-seqrun-id="'+seqRun.id+'"><img src="../images/validate.png" alt="Check data files&amp;hellip;">Check data files&hellip;</div></td>';
2642 09 Sep 14 nicklas 378         html += '<td class="status"></td>';
2642 09 Sep 14 nicklas 379         html += '<td class="help"></td>';
2642 09 Sep 14 nicklas 380         html += '</tr>';
2622 02 Sep 14 nicklas 381       }
2622 02 Sep 14 nicklas 382     }
2622 02 Sep 14 nicklas 383     Doc.element('SequencingRun-section').innerHTML = html;
2622 02 Sep 14 nicklas 384     for (var seqNo = 0; seqNo < frm.seqRuns.length; seqNo++)
2622 02 Sep 14 nicklas 385     {
2622 02 Sep 14 nicklas 386       if (frm.seqRuns[seqNo].selected)
2622 02 Sep 14 nicklas 387       {
2622 02 Sep 14 nicklas 388         demux.readStringOnBlur(frm['readString.'+seqNo]);
2622 02 Sep 14 nicklas 389         Events.addEventHandler('readString.'+seqNo, 'blur', demux.readStringOnBlur);
2642 09 Sep 14 nicklas 390         Buttons.addClickHandler('check.'+seqNo, demux.checkDataFilesOnClick);
2622 02 Sep 14 nicklas 391       }
2622 02 Sep 14 nicklas 392     }
2622 02 Sep 14 nicklas 393     
6280 09 Jun 21 nicklas 394     if (numDoNotUse > 0)
6280 09 Jun 21 nicklas 395     {
6280 09 Jun 21 nicklas 396       Doc.element('numDoNotUseLibs').innerHTML = numDoNotUse == 1 ? '1 library' : numDoNotUse + ' libraries';
6280 09 Jun 21 nicklas 397       Doc.show('doNotUseOption');
6280 09 Jun 21 nicklas 398       Wizard.setInputStatus('whichLibs', 'warning', 'By default, libraries marked with DoNotUse are omitted.')
6280 09 Jun 21 nicklas 399       Forms.checkRadio(frm.whichLibs, 'allExceptDoNotUse');
6280 09 Jun 21 nicklas 400     }
6280 09 Jun 21 nicklas 401     
2622 02 Sep 14 nicklas 402     Wizard.setCurrentStep(2);
2622 02 Sep 14 nicklas 403     Doc.show('gocancel');
2622 02 Sep 14 nicklas 404     Doc.show('goregister');
2622 02 Sep 14 nicklas 405     
2622 02 Sep 14 nicklas 406     // Check debug by default if debug is set or not on a secure server (=production server)
2622 02 Sep 14 nicklas 407     frm.debug.checked = debug || location.protocol != 'https:';
2622 02 Sep 14 nicklas 408
6213 15 Apr 21 nicklas 409     Reggie.loadProtocols('DEMUX_PROTOCOL', 'demuxProtocol', 'PIPELINE,DEMUX_TYPE', pipeline.name+',Picard');
6213 15 Apr 21 nicklas 410     Reggie.loadSoftware('DEMUX_SOFTWARE', 'demuxSoftware', 'PIPELINE,DEMUX_TYPE,PARAMETER_SET', pipeline.name+',Picard');
6213 15 Apr 21 nicklas 411     Reggie.loadProtocols('MERGE_PROTOCOL', 'mergeProtocol', 'PIPELINE,MERGE_TYPE', pipeline.name+',Default');
6213 15 Apr 21 nicklas 412     Reggie.loadSoftware('MERGE_SOFTWARE', 'mergeSoftware', 'PIPELINE,MERGE_TYPE,PARAMETER_SET', pipeline.name+',Default');
2622 02 Sep 14 nicklas 413
6735 09 May 22 nicklas 414     // Load clusters
5613 18 Sep 19 nicklas 415     var url = '../OpenGrid.servlet?ID='+App.getSessionId() + '&cmd=GetHostInfo&config='+(pipeline.id == 'MIPS' ? 'demux-mips' : 'demux');
2622 02 Sep 14 nicklas 416     Doc.addClass('clusters', 'list-loading');
2622 02 Sep 14 nicklas 417     frm.clusters[0] = new Option('loading...');
2622 02 Sep 14 nicklas 418     Wizard.asyncJsonRequest(url, demux.clustersLoaded);
2622 02 Sep 14 nicklas 419   }
2622 02 Sep 14 nicklas 420
4985 28 Sep 18 nicklas 421   demux.showDoNotUseInfo = function(event)
4985 28 Sep 18 nicklas 422   {
6280 09 Jun 21 nicklas 423     var libs = allLibs;
4985 28 Sep 18 nicklas 424     
4985 28 Sep 18 nicklas 425     var msg = '<table>';
4985 28 Sep 18 nicklas 426     for (var libNo = 0; libNo < libs.length; libNo++)
4985 28 Sep 18 nicklas 427     {
4985 28 Sep 18 nicklas 428       var lib = libs[libNo];
4985 28 Sep 18 nicklas 429       if (lib.DO_NOT_USE)
4985 28 Sep 18 nicklas 430       {
6280 09 Jun 21 nicklas 431         msg += '<tr><td><b>'+Strings.encodeTags(lib.name) + '</b></td><td><span class="itemsubtype">[' + Strings.encodeTags(lib.DO_NOT_USE) + ']</span></td>';
4985 28 Sep 18 nicklas 432         msg += '<td>'+ Strings.encodeTags(lib.DO_NOT_USE_COMMENT) + '</td></tr>';
4985 28 Sep 18 nicklas 433       }
4985 28 Sep 18 nicklas 434     }
4985 28 Sep 18 nicklas 435     msg += '</table>';
4985 28 Sep 18 nicklas 436     Forms.showNotification(event.currentTarget, msg, 'donotuseinfo', 'pointer-left');
4985 28 Sep 18 nicklas 437   }
4985 28 Sep 18 nicklas 438   
6280 09 Jun 21 nicklas 439   demux.selectLibsAll = function()
6280 09 Jun 21 nicklas 440   {
6280 09 Jun 21 nicklas 441     Wizard.setInputStatus('whichLibs', 'valid');
6280 09 Jun 21 nicklas 442   }
6280 09 Jun 21 nicklas 443
6280 09 Jun 21 nicklas 444   demux.selectLibsAllExceptDoNotUse = function()
6280 09 Jun 21 nicklas 445   {
6280 09 Jun 21 nicklas 446     Wizard.setInputStatus('whichLibs', 'valid');
6280 09 Jun 21 nicklas 447   }
6280 09 Jun 21 nicklas 448   
6280 09 Jun 21 nicklas 449   demux.selectLibsForDemux = function()
6280 09 Jun 21 nicklas 450   {
6280 09 Jun 21 nicklas 451     Wizard.setInputStatus('whichLibs');
6280 09 Jun 21 nicklas 452     var url = 'select_libs.jsp?ID='+App.getSessionId();
6280 09 Jun 21 nicklas 453     Dialogs.openPopup(url, 'SelectLibsForDemux', 800, 600);
6280 09 Jun 21 nicklas 454   }
6280 09 Jun 21 nicklas 455   
6280 09 Jun 21 nicklas 456   demux.getAllLibraries = function()
6280 09 Jun 21 nicklas 457   {
6280 09 Jun 21 nicklas 458     return allLibs;
6280 09 Jun 21 nicklas 459   }
6280 09 Jun 21 nicklas 460   
2622 02 Sep 14 nicklas 461   demux.clustersLoaded = function(response)
2622 02 Sep 14 nicklas 462   {
2622 02 Sep 14 nicklas 463     Doc.removeClass('clusters', 'list-loading');
2622 02 Sep 14 nicklas 464     var frm = document.forms['reggie'];
4306 17 Jan 17 nicklas 465     var clusters = response.hosts;
2622 02 Sep 14 nicklas 466     frm.clusters.length = 0;
2622 02 Sep 14 nicklas 467     for (var i = 0; i < clusters.length; i++)
2622 02 Sep 14 nicklas 468     {
2622 02 Sep 14 nicklas 469       var cl = clusters[i];
4306 17 Jan 17 nicklas 470       var option = new Option(cl.connection.name, cl.id);
2622 02 Sep 14 nicklas 471       option.cluster = cl;
2622 02 Sep 14 nicklas 472       frm.clusters[frm.clusters.length] = option;
2622 02 Sep 14 nicklas 473       Wizard.setInputStatus('clusters', 'valid');
2622 02 Sep 14 nicklas 474       clusterIsValid = true;
2622 02 Sep 14 nicklas 475     }
2622 02 Sep 14 nicklas 476     if (frm.clusters.length == 0)
2622 02 Sep 14 nicklas 477     {
6735 09 May 22 nicklas 478       Wizard.setInputStatus('clusters', 'invalid', 'No available clusters');
2622 02 Sep 14 nicklas 479       clusterIsValid = false;
2622 02 Sep 14 nicklas 480     }
2622 02 Sep 14 nicklas 481     else
2622 02 Sep 14 nicklas 482     {
2622 02 Sep 14 nicklas 483       demux.clusterOnChange();
2622 02 Sep 14 nicklas 484     }
2622 02 Sep 14 nicklas 485   }
2622 02 Sep 14 nicklas 486
2642 09 Sep 14 nicklas 487   demux.checkDataFilesOnClick = function(event)
2642 09 Sep 14 nicklas 488   {
2642 09 Sep 14 nicklas 489     var frm = document.forms['reggie'];
2642 09 Sep 14 nicklas 490     var seqNo = parseInt(event.currentTarget.id.substring(6));
2642 09 Sep 14 nicklas 491     var url = 'check_data_files.jsp?ID='+App.getSessionId();
2642 09 Sep 14 nicklas 492     url += '&seqrun='+Data.get(event.currentTarget, 'seqrun-id');
2642 09 Sep 14 nicklas 493     url += '&readString='+encodeURIComponent(frm['readString.'+seqNo].value);
2910 10 Nov 14 nicklas 494     
2910 10 Nov 14 nicklas 495     var omitLanes = [];
2910 10 Nov 14 nicklas 496     var checkboxes = frm['omitLanes.'+seqNo];
2910 10 Nov 14 nicklas 497     for (var i = 0; i < checkboxes.length; i++)
2910 10 Nov 14 nicklas 498     {
2910 10 Nov 14 nicklas 499       if (checkboxes[i].checked) 
2910 10 Nov 14 nicklas 500       {
2910 10 Nov 14 nicklas 501         omitLanes[omitLanes.length] = parseInt(checkboxes[i].value);
2910 10 Nov 14 nicklas 502       }
2910 10 Nov 14 nicklas 503     }
2910 10 Nov 14 nicklas 504     if (omitLanes.length > 0) url += '&omitLanes='+omitLanes.join(',');
2910 10 Nov 14 nicklas 505     
2642 09 Sep 14 nicklas 506     Dialogs.openPopup(url, 'CheckDataFiles', 900, 600);
2642 09 Sep 14 nicklas 507   }
2642 09 Sep 14 nicklas 508
2642 09 Sep 14 nicklas 509   
2622 02 Sep 14 nicklas 510   demux.clusterOnChange = function()
2622 02 Sep 14 nicklas 511   {
2622 02 Sep 14 nicklas 512     var frm = document.forms['reggie'];
2622 02 Sep 14 nicklas 513     var cluster = frm.clusters[frm.clusters.selectedIndex].cluster;
2622 02 Sep 14 nicklas 514     if (cluster.priorities && cluster.priorities.length > 0)
2622 02 Sep 14 nicklas 515     {
2622 02 Sep 14 nicklas 516       frm.priority.length = 0;
2622 02 Sep 14 nicklas 517       for (var pNo = 0; pNo < cluster.priorities.length; pNo++)
2622 02 Sep 14 nicklas 518       {
2622 02 Sep 14 nicklas 519         var p = cluster.priorities[pNo];
4583 21 Sep 17 nicklas 520         frm.priority[frm.priority.length] = new Option(p.name + ' ('+p.value+')', p.value, p['default'], p['default']);
2622 02 Sep 14 nicklas 521       }
2622 02 Sep 14 nicklas 522       Doc.show('job-priority');
2622 02 Sep 14 nicklas 523     }
2622 02 Sep 14 nicklas 524     else
2622 02 Sep 14 nicklas 525     {
2622 02 Sep 14 nicklas 526       Doc.hide('job-priority');
2622 02 Sep 14 nicklas 527     }
6980 17 Jan 23 nicklas 528     if (cluster.partitions && cluster.partitions.length > 0)
6980 17 Jan 23 nicklas 529     {
6980 17 Jan 23 nicklas 530       frm.partition.length = 0;
6980 17 Jan 23 nicklas 531       for (var pNo = 0; pNo < cluster.partitions.length; pNo++)
6980 17 Jan 23 nicklas 532       {
6980 17 Jan 23 nicklas 533         var p = cluster.partitions[pNo];
6980 17 Jan 23 nicklas 534         var title = p.name;
6980 17 Jan 23 nicklas 535         if (p.description) title += ' ('+p.description+')';
6980 17 Jan 23 nicklas 536         frm.partition[frm.partition.length] = new Option(title, p.value, p['default'], p['default']);
6980 17 Jan 23 nicklas 537       }
6980 17 Jan 23 nicklas 538       Doc.show('job-partition');
6980 17 Jan 23 nicklas 539     }
6980 17 Jan 23 nicklas 540     else
6980 17 Jan 23 nicklas 541     {
6980 17 Jan 23 nicklas 542       Doc.hide('job-partition');
6980 17 Jan 23 nicklas 543     }
7372 06 Oct 23 nicklas 544     demux.updateSubmitOptions();
7372 06 Oct 23 nicklas 545   }
7372 06 Oct 23 nicklas 546   
7372 06 Oct 23 nicklas 547   demux.debugOnChange = function()
7372 06 Oct 23 nicklas 548   {
7372 06 Oct 23 nicklas 549     demux.updateSubmitOptions();
7372 06 Oct 23 nicklas 550   }
7372 06 Oct 23 nicklas 551   
7372 06 Oct 23 nicklas 552   demux.updateSubmitOptions = function()
7372 06 Oct 23 nicklas 553   {
7372 06 Oct 23 nicklas 554     var frm = document.forms['reggie'];
7372 06 Oct 23 nicklas 555     var config = frm.clusters[frm.clusters.selectedIndex]?.cluster?.config?.demux;
7372 06 Oct 23 nicklas 556     if (config)
2960 19 Nov 14 nicklas 557     {
7372 06 Oct 23 nicklas 558       var parameterSet = frm.demuxSoftware[frm.demuxSoftware.selectedIndex]?.item?.ParameterSet;
7372 06 Oct 23 nicklas 559       Doc.element('submitOptions').innerHTML = Reggie.getSubmitOptions(config, frm.debug.checked, parameterSet);
7372 06 Oct 23 nicklas 560       frm.override.disabled = false;
2960 19 Nov 14 nicklas 561     }
2622 02 Sep 14 nicklas 562   }
7372 06 Oct 23 nicklas 563   
7372 06 Oct 23 nicklas 564   demux.overrideOnChange = function()
2960 19 Nov 14 nicklas 565   {
2960 19 Nov 14 nicklas 566     var frm = document.forms['reggie'];
7372 06 Oct 23 nicklas 567     Doc.showHide('submitOptions', !frm.override.checked);
7372 06 Oct 23 nicklas 568     Doc.showHide('submitOptionsOverride', frm.override.checked);
7372 06 Oct 23 nicklas 569     if (frm.submitOptionsOverride.value=='') 
2960 19 Nov 14 nicklas 570     {
7372 06 Oct 23 nicklas 571       frm.submitOptionsOverride.value = Doc.element('submitOptions').innerHTML;
2960 19 Nov 14 nicklas 572     }
2960 19 Nov 14 nicklas 573   }
2960 19 Nov 14 nicklas 574   
2622 02 Sep 14 nicklas 575   demux.readStringOnBlur = function(eventOrTarget)
2622 02 Sep 14 nicklas 576   {
2622 02 Sep 14 nicklas 577     var target = eventOrTarget.currentTarget || eventOrTarget;
2622 02 Sep 14 nicklas 578     var isValid = false;
2622 02 Sep 14 nicklas 579
2622 02 Sep 14 nicklas 580     Wizard.setInputStatus(target.id);
2622 02 Sep 14 nicklas 581     var readString = target.value;
2622 02 Sep 14 nicklas 582     
5532 27 Jun 19 nicklas 583     if (!readString.match(/^(\d+[TBMS])+$/))
2622 02 Sep 14 nicklas 584     {
2622 02 Sep 14 nicklas 585       Wizard.setInputStatus(target.id, 'invalid', 'Invalid read string');
2622 02 Sep 14 nicklas 586     }
2622 02 Sep 14 nicklas 587     else
2622 02 Sep 14 nicklas 588     {
2622 02 Sep 14 nicklas 589       isValid = true;
2622 02 Sep 14 nicklas 590       Wizard.setInputStatus(target.id, 'valid');
2622 02 Sep 14 nicklas 591     }
2622 02 Sep 14 nicklas 592     
2622 02 Sep 14 nicklas 593     Data.set(target, 'valid', isValid ? 1 : 0);
2622 02 Sep 14 nicklas 594   }
2622 02 Sep 14 nicklas 595
3128 10 Feb 15 nicklas 596   demux.softwareOnChange = function(event)
3128 10 Feb 15 nicklas 597   {
3128 10 Feb 15 nicklas 598     var target = event.currentTarget;
3128 10 Feb 15 nicklas 599     var item = target[target.selectedIndex].item;
3128 10 Feb 15 nicklas 600     if (!item) item = {};
3128 10 Feb 15 nicklas 601     
3128 10 Feb 15 nicklas 602     Doc.element(target.id+'.parameterSet').innerHTML = Strings.encodeTags(item.ParameterSet || 'default');
3128 10 Feb 15 nicklas 603     Doc.element(target.id+'.description').innerHTML = Strings.encodeTags(item.description);
3128 10 Feb 15 nicklas 604     Wizard.setInputStatus(target.id, 'valid');
3128 10 Feb 15 nicklas 605
3128 10 Feb 15 nicklas 606     if (item.ParameterSet)
3128 10 Feb 15 nicklas 607     {
3128 10 Feb 15 nicklas 608       var url = '../Install.servlet?ID='+App.getSessionId();
3128 10 Feb 15 nicklas 609       url += '&cmd=GetParameterSetInfo';
3128 10 Feb 15 nicklas 610       url += '&parameterSet='+encodeURIComponent(item.ParameterSet);
3128 10 Feb 15 nicklas 611       url += '&targetId='+target.id;
3128 10 Feb 15 nicklas 612       Wizard.asyncJsonRequest(url, demux.parameterSetInfoLoaded);
3128 10 Feb 15 nicklas 613     }
7372 06 Oct 23 nicklas 614     demux.updateSubmitOptions();
3128 10 Feb 15 nicklas 615   }
3128 10 Feb 15 nicklas 616   
3128 10 Feb 15 nicklas 617   demux.parameterSetInfoLoaded = function(response)
3128 10 Feb 15 nicklas 618   {
3128 10 Feb 15 nicklas 619     if (!response.parameters || response.parameters.length == 0)
3128 10 Feb 15 nicklas 620     {
3128 10 Feb 15 nicklas 621       Wizard.setInputStatus(response.targetId, 'warning', 'Can\'t find \'' + Strings.encodeTags(response.parameterSet) + '\' parameter set in reggie-config.xml');
3128 10 Feb 15 nicklas 622     }
3128 10 Feb 15 nicklas 623   }
3128 10 Feb 15 nicklas 624
3128 10 Feb 15 nicklas 625   
2622 02 Sep 14 nicklas 626   demux.validateStep2 = function(event)
2622 02 Sep 14 nicklas 627   {
6280 09 Jun 21 nicklas 628     var frm = document.forms['reggie'];
6280 09 Jun 21 nicklas 629     if (frm.whichLibs.value == 'selected')
6280 09 Jun 21 nicklas 630     {
6280 09 Jun 21 nicklas 631       var numSelected = 0;
6280 09 Jun 21 nicklas 632       for (var libNo = 0; libNo < allLibs.length; libNo++)
6280 09 Jun 21 nicklas 633       {
6280 09 Jun 21 nicklas 634         if (allLibs[libNo].selected) numSelected++;
6280 09 Jun 21 nicklas 635       }
6280 09 Jun 21 nicklas 636       if (numSelected == 0)
6280 09 Jun 21 nicklas 637       {
6280 09 Jun 21 nicklas 638         Wizard.setInputStatus('whichLibs', 'invalid', 'Please select at least one library');
6280 09 Jun 21 nicklas 639         event.preventDefault();
6280 09 Jun 21 nicklas 640         return;
6280 09 Jun 21 nicklas 641       }
6280 09 Jun 21 nicklas 642     }
2622 02 Sep 14 nicklas 643     
7372 06 Oct 23 nicklas 644     if (!clusterIsValid)
2622 02 Sep 14 nicklas 645     {
2622 02 Sep 14 nicklas 646       event.preventDefault();
2622 02 Sep 14 nicklas 647       return;
2622 02 Sep 14 nicklas 648     }
2622 02 Sep 14 nicklas 649       
2622 02 Sep 14 nicklas 650     for (var seqNo = 0; seqNo < frm.seqRuns.length; seqNo++)
2622 02 Sep 14 nicklas 651     {
2622 02 Sep 14 nicklas 652       if (frm.seqRuns[seqNo].selected) 
2622 02 Sep 14 nicklas 653       {
2622 02 Sep 14 nicklas 654         if (!Wizard.isValid(frm['readString.'+seqNo]))
2622 02 Sep 14 nicklas 655         {
2622 02 Sep 14 nicklas 656           event.preventDefault();
2622 02 Sep 14 nicklas 657           return;
2622 02 Sep 14 nicklas 658         }
2622 02 Sep 14 nicklas 659       }
2622 02 Sep 14 nicklas 660     }
2622 02 Sep 14 nicklas 661   }
2622 02 Sep 14 nicklas 662   
2622 02 Sep 14 nicklas 663   demux.submit = function()
2622 02 Sep 14 nicklas 664   {
2622 02 Sep 14 nicklas 665     var frm = document.forms['reggie'];
2622 02 Sep 14 nicklas 666     var submitInfo = {};
2622 02 Sep 14 nicklas 667     submitInfo.demuxSoftware = parseInt(frm.demuxSoftware.value);
2622 02 Sep 14 nicklas 668     submitInfo.demuxProtocol = parseInt(frm.demuxProtocol.value);
2622 02 Sep 14 nicklas 669     submitInfo.mergeSoftware = parseInt(frm.mergeSoftware.value);
2622 02 Sep 14 nicklas 670     submitInfo.mergeProtocol = parseInt(frm.mergeProtocol.value);
2622 02 Sep 14 nicklas 671     submitInfo.cluster = frm.clusters.value;
2622 02 Sep 14 nicklas 672     if (frm.priority.selectedIndex >= 0)
2622 02 Sep 14 nicklas 673     {
2622 02 Sep 14 nicklas 674       submitInfo.priority = parseInt(frm.priority.value);
2622 02 Sep 14 nicklas 675     }
6980 17 Jan 23 nicklas 676     if (frm.partition.selectedIndex >= 0)
6980 17 Jan 23 nicklas 677     {
6980 17 Jan 23 nicklas 678       submitInfo.partition = frm.partition.value;
6980 17 Jan 23 nicklas 679     }
7372 06 Oct 23 nicklas 680     if (frm.override.checked)
7372 06 Oct 23 nicklas 681     {
7372 06 Oct 23 nicklas 682       submitInfo.submitOptionsOverride = frm.submitOptionsOverride.value;
7372 06 Oct 23 nicklas 683     }
2622 02 Sep 14 nicklas 684     submitInfo.debug = frm.debug.checked;
3029 11 Dec 14 nicklas 685     submitInfo.autoConfirm = frm.autoConfirm.checked;
6280 09 Jun 21 nicklas 686     submitInfo.whichLibs = frm.whichLibs.value;
6280 09 Jun 21 nicklas 687     if (frm.whichLibs.value == 'selected')
6280 09 Jun 21 nicklas 688     {
6280 09 Jun 21 nicklas 689       var ignoreLibs = [];
6280 09 Jun 21 nicklas 690       for (var libNo = 0; libNo < allLibs.length; libNo++)
6280 09 Jun 21 nicklas 691       {
6280 09 Jun 21 nicklas 692         var lib = allLibs[libNo];
6280 09 Jun 21 nicklas 693         if (!lib.selected) ignoreLibs[ignoreLibs.length] = lib.id;
6280 09 Jun 21 nicklas 694       }
6280 09 Jun 21 nicklas 695       submitInfo.ignoreLibs = ignoreLibs;
6280 09 Jun 21 nicklas 696     }
2622 02 Sep 14 nicklas 697     
2622 02 Sep 14 nicklas 698     var sequencingRuns = [];
2622 02 Sep 14 nicklas 699     submitInfo.sequencingRuns = sequencingRuns;
2622 02 Sep 14 nicklas 700     
2622 02 Sep 14 nicklas 701     for (var seqNo = 0; seqNo < frm.seqRuns.length; seqNo++)
2622 02 Sep 14 nicklas 702     {
2622 02 Sep 14 nicklas 703       if (frm.seqRuns[seqNo].selected) 
2622 02 Sep 14 nicklas 704       {
2622 02 Sep 14 nicklas 705         var seqRun = {};
2622 02 Sep 14 nicklas 706         seqRun.id = frm.seqRuns[seqNo].seqRun.id;
2622 02 Sep 14 nicklas 707         seqRun.ReadString = frm['readString.'+seqNo].value;
2622 02 Sep 14 nicklas 708         
2622 02 Sep 14 nicklas 709         var omitLanes = [];
2622 02 Sep 14 nicklas 710         var checkboxes = frm['omitLanes.'+seqNo];
2622 02 Sep 14 nicklas 711         for (var i = 0; i < checkboxes.length; i++)
2622 02 Sep 14 nicklas 712         {
2622 02 Sep 14 nicklas 713           if (checkboxes[i].checked) 
2622 02 Sep 14 nicklas 714           {
2622 02 Sep 14 nicklas 715             omitLanes[omitLanes.length] = parseInt(checkboxes[i].value);
2622 02 Sep 14 nicklas 716           }
2622 02 Sep 14 nicklas 717         }
2622 02 Sep 14 nicklas 718         seqRun.OmitLanes = omitLanes;
2622 02 Sep 14 nicklas 719         sequencingRuns[sequencingRuns.length] = seqRun;
2622 02 Sep 14 nicklas 720       }
2622 02 Sep 14 nicklas 721     }
2622 02 Sep 14 nicklas 722     
2622 02 Sep 14 nicklas 723     var url = '../DemuxMerge.servlet?ID='+App.getSessionId();
6280 09 Jun 21 nicklas 724     url += '&cmd=StartDemuxAndMerge&pipeline='+encodeURIComponent(Data.get('page-data', 'pipeline'));    
2622 02 Sep 14 nicklas 725     Wizard.showLoadingAnimation('Performing registration...');
2622 02 Sep 14 nicklas 726     Wizard.asyncJsonRequest(url, demux.submissionResults, 'POST', JSON.stringify(submitInfo));
2622 02 Sep 14 nicklas 727   }
2622 02 Sep 14 nicklas 728   
2622 02 Sep 14 nicklas 729   demux.submissionResults = function(response)
2622 02 Sep 14 nicklas 730   {
2622 02 Sep 14 nicklas 731     Wizard.showFinalMessage(response.messages);
2622 02 Sep 14 nicklas 732     Doc.show('gorestart');
2622 02 Sep 14 nicklas 733   }
2622 02 Sep 14 nicklas 734
2622 02 Sep 14 nicklas 735   return demux;
2622 02 Sep 14 nicklas 736 }();
2622 02 Sep 14 nicklas 737
2622 02 Sep 14 nicklas 738 Doc.onLoad(Demux.initPage);
2622 02 Sep 14 nicklas 739