2636 |
04 Sep 14 |
nicklas |
var Demux = function() |
2636 |
04 Sep 14 |
nicklas |
2 |
{ |
2636 |
04 Sep 14 |
nicklas |
var demux = {}; |
2656 |
11 Sep 14 |
nicklas |
var debug = 0; |
2636 |
04 Sep 14 |
nicklas |
5 |
|
2682 |
18 Sep 14 |
nicklas |
var ADAPTER_SIZE = 59; |
2636 |
04 Sep 14 |
nicklas |
var JOB_IMAGE = { 'DONE': 'ok.png', 'ERROR': 'error.png'}; |
2636 |
04 Sep 14 |
nicklas |
8 |
|
2636 |
04 Sep 14 |
nicklas |
// Page initialization |
2636 |
04 Sep 14 |
nicklas |
demux.initPage = function() |
2636 |
04 Sep 14 |
nicklas |
11 |
{ |
2636 |
04 Sep 14 |
nicklas |
// Step 1 |
2636 |
04 Sep 14 |
nicklas |
Events.addEventHandler('demuxJobs', 'change', demux.demuxJobOnChange); |
2636 |
04 Sep 14 |
nicklas |
14 |
|
2636 |
04 Sep 14 |
nicklas |
// Step 2 |
2636 |
04 Sep 14 |
nicklas |
Events.addEventHandler('step-2', 'wizard-initialize', demux.initializeStep2); |
2636 |
04 Sep 14 |
nicklas |
Events.addEventHandler('outcomeSuccessful', 'click', demux.outcomeOnChange); |
2636 |
04 Sep 14 |
nicklas |
Events.addEventHandler('outcomeFailed', 'click', demux.outcomeOnChange); |
2636 |
04 Sep 14 |
nicklas |
Events.addEventHandler('deleteItemsCreatedByFailedJob', 'click', demux.outcomeOnChange); |
2636 |
04 Sep 14 |
nicklas |
20 |
|
2636 |
04 Sep 14 |
nicklas |
// Navigation |
2636 |
04 Sep 14 |
nicklas |
Buttons.addClickHandler('gocancel', Wizard.cancelWizard); |
2636 |
04 Sep 14 |
nicklas |
Buttons.addClickHandler('gorestart', Wizard.restartWizard); |
2636 |
04 Sep 14 |
nicklas |
Buttons.addClickHandler('gonext', Wizard.goNextOnClick); |
2636 |
04 Sep 14 |
nicklas |
Buttons.addClickHandler('goregister', Wizard.goRegister); |
2636 |
04 Sep 14 |
nicklas |
26 |
|
2636 |
04 Sep 14 |
nicklas |
// Final registration |
2636 |
04 Sep 14 |
nicklas |
Events.addEventHandler('wizard', 'wizard-submit', demux.submit); |
2636 |
04 Sep 14 |
nicklas |
29 |
|
2636 |
04 Sep 14 |
nicklas |
Wizard.showLoadingAnimation('Loading bioassays...'); |
2636 |
04 Sep 14 |
nicklas |
var url = '../DemuxMerge.servlet?ID='+App.getSessionId(); |
5493 |
13 Jun 19 |
nicklas |
url += '&cmd=GetUnconfirmedDemuxJobs&pipeline=RNA_SEQ'; |
2636 |
04 Sep 14 |
nicklas |
Wizard.asyncJsonRequest(url, demux.initializeStep1); |
2636 |
04 Sep 14 |
nicklas |
34 |
} |
2636 |
04 Sep 14 |
nicklas |
35 |
|
2636 |
04 Sep 14 |
nicklas |
// --- Step 1 ----------------------------------- |
2636 |
04 Sep 14 |
nicklas |
demux.initializeStep1 = function(response) |
2636 |
04 Sep 14 |
nicklas |
38 |
{ |
2636 |
04 Sep 14 |
nicklas |
var frm = document.forms['reggie']; |
2636 |
04 Sep 14 |
nicklas |
var jobs = response.jobs; |
2636 |
04 Sep 14 |
nicklas |
if (jobs.length == 0) |
2636 |
04 Sep 14 |
nicklas |
42 |
{ |
2636 |
04 Sep 14 |
nicklas |
Wizard.setFatalError('No jobs available for confirmation.'); |
2636 |
04 Sep 14 |
nicklas |
return; |
2636 |
04 Sep 14 |
nicklas |
45 |
} |
2636 |
04 Sep 14 |
nicklas |
46 |
|
2636 |
04 Sep 14 |
nicklas |
for (var jobNo=0; jobNo < jobs.length; jobNo++) |
2636 |
04 Sep 14 |
nicklas |
48 |
{ |
2636 |
04 Sep 14 |
nicklas |
var job = jobs[jobNo]; |
2636 |
04 Sep 14 |
nicklas |
var name = job.status == 'ERROR' ? job.name + ' ( ! )' : job.name; |
3723 |
25 Jan 16 |
nicklas |
if (job.partial) |
3723 |
25 Jan 16 |
nicklas |
52 |
{ |
3723 |
25 Jan 16 |
nicklas |
name += ' [partially confirmed]'; |
3723 |
25 Jan 16 |
nicklas |
54 |
} |
2636 |
04 Sep 14 |
nicklas |
var option = new Option(name, job.id); |
2636 |
04 Sep 14 |
nicklas |
option.job = job; |
2636 |
04 Sep 14 |
nicklas |
frm.demuxJobs.options[frm.demuxJobs.length] = option; |
2636 |
04 Sep 14 |
nicklas |
58 |
} |
2636 |
04 Sep 14 |
nicklas |
59 |
|
2636 |
04 Sep 14 |
nicklas |
demux.demuxJobOnChange(); |
2636 |
04 Sep 14 |
nicklas |
61 |
|
2636 |
04 Sep 14 |
nicklas |
Doc.show('step-1'); |
2636 |
04 Sep 14 |
nicklas |
Doc.show('gonext'); |
2636 |
04 Sep 14 |
nicklas |
64 |
|
2636 |
04 Sep 14 |
nicklas |
frm.demuxJobs.focus(); |
2636 |
04 Sep 14 |
nicklas |
66 |
} |
2636 |
04 Sep 14 |
nicklas |
67 |
|
2636 |
04 Sep 14 |
nicklas |
demux.demuxJobOnChange = function() |
2636 |
04 Sep 14 |
nicklas |
69 |
{ |
2636 |
04 Sep 14 |
nicklas |
var frm = document.forms['reggie']; |
2636 |
04 Sep 14 |
nicklas |
var job = frm.demuxJobs[frm.demuxJobs.selectedIndex].job; |
2636 |
04 Sep 14 |
nicklas |
72 |
|
2636 |
04 Sep 14 |
nicklas |
Doc.element('startDate').innerHTML = Reggie.reformatDate(job.started); |
2636 |
04 Sep 14 |
nicklas |
Doc.element('endDate').innerHTML = Reggie.reformatDate(job.ended); |
2636 |
04 Sep 14 |
nicklas |
Doc.element('jobStatus').innerHTML = '<img src="../images/'+JOB_IMAGE[job.status]+'"> '+Strings.encodeTags(job.statusMessage); |
2636 |
04 Sep 14 |
nicklas |
76 |
|
2636 |
04 Sep 14 |
nicklas |
var demuxedSequences = job.demuxedSequences; |
5620 |
20 Sep 19 |
nicklas |
var fcHtml = '<table id="fc-info-table"><tr>'; |
5620 |
20 Sep 19 |
nicklas |
fcHtml += '<th>ID</th>'; |
5620 |
20 Sep 19 |
nicklas |
fcHtml += '<th>PF_READS</th>'; |
5620 |
20 Sep 19 |
nicklas |
fcHtml += '<th>PF_UNUSED_PCT</th>'; |
5620 |
20 Sep 19 |
nicklas |
fcHtml += '<th>PF_NNNN_PCT</th>'; |
5620 |
20 Sep 19 |
nicklas |
fcHtml += '<th>Demultiplex metrics</th>'; |
5620 |
20 Sep 19 |
nicklas |
fcHtml += '<th>Warnings</th></tr>'; |
2636 |
04 Sep 14 |
nicklas |
var fcNames = ''; |
2636 |
04 Sep 14 |
nicklas |
var warningsHtml = ''; |
3140 |
24 Feb 15 |
nicklas |
var skippedTilesHtml = ''; |
2636 |
04 Sep 14 |
nicklas |
for (var dxNo = 0; dxNo < demuxedSequences.length; dxNo++) |
2636 |
04 Sep 14 |
nicklas |
89 |
{ |
2636 |
04 Sep 14 |
nicklas |
var dx = demuxedSequences[dxNo]; |
2636 |
04 Sep 14 |
nicklas |
var fc = dx.seqRun.flowCell; |
2636 |
04 Sep 14 |
nicklas |
92 |
|
3181 |
18 Mar 15 |
nicklas |
var pfReads = dx.PF_READS == null ? '-' : Reggie.formatNumber(dx.PF_READS/1000000, 'M', 2); |
2636 |
04 Sep 14 |
nicklas |
var pfUnused = dx.PF_UNUSED_PCT == null ? '-' : Reggie.formatNumber(dx.PF_UNUSED_PCT, '%', 2); |
2636 |
04 Sep 14 |
nicklas |
var pfNNNN = dx.PF_NNNN_PCT == null ? '-' : Reggie.formatNumber(dx.PF_NNNN_PCT, '%', 2); |
2636 |
04 Sep 14 |
nicklas |
96 |
|
2636 |
04 Sep 14 |
nicklas |
if (fcNames.length > 0) fcNames += ', '; |
2636 |
04 Sep 14 |
nicklas |
fcNames += Strings.encodeTags(fc.FlowCellID); |
2636 |
04 Sep 14 |
nicklas |
99 |
|
2636 |
04 Sep 14 |
nicklas |
fcHtml += '<tr><td>'+Strings.encodeTags(fc.FlowCellID)+'</td>'; |
2636 |
04 Sep 14 |
nicklas |
fcHtml += '<td>' + pfReads + '</td>'; |
2636 |
04 Sep 14 |
nicklas |
fcHtml += '<td>' + pfUnused + ' </td>'; |
2636 |
04 Sep 14 |
nicklas |
fcHtml += '<td>' + pfNNNN + '</td>'; |
5620 |
20 Sep 19 |
nicklas |
fcHtml += '<td>'; |
5620 |
20 Sep 19 |
nicklas |
if (dx.DemultiplexMetrics) |
5620 |
20 Sep 19 |
nicklas |
106 |
{ |
5620 |
20 Sep 19 |
nicklas |
fcHtml += '<span class="link metrics-link" data-file-id="'+dx.DemultiplexMetrics.id+'" title="View metrics data from the demux">'+dx.DemultiplexMetrics.name+'</span>'; |
5620 |
20 Sep 19 |
nicklas |
108 |
} |
5620 |
20 Sep 19 |
nicklas |
fcHtml += '</td>'; |
2683 |
18 Sep 14 |
nicklas |
fcHtml += '<td>'+dx.DEMUX_WARNING.length+'</td>'; |
2683 |
18 Sep 14 |
nicklas |
fcHtml += '</tr>'; |
2636 |
04 Sep 14 |
nicklas |
112 |
|
2636 |
04 Sep 14 |
nicklas |
var pools = fc.pools; |
5526 |
25 Jun 19 |
nicklas |
var poolNames = []; |
5526 |
25 Jun 19 |
nicklas |
var libPlateNames = []; |
2636 |
04 Sep 14 |
nicklas |
for (var poolNo = 0; poolNo < pools.length; poolNo++) |
2636 |
04 Sep 14 |
nicklas |
117 |
{ |
2636 |
04 Sep 14 |
nicklas |
var pool = pools[poolNo]; |
5526 |
25 Jun 19 |
nicklas |
poolNames[poolNames.length] = pool.name; |
5526 |
25 Jun 19 |
nicklas |
if (pool.libPlates) |
2636 |
04 Sep 14 |
nicklas |
121 |
{ |
5526 |
25 Jun 19 |
nicklas |
for (var plateNo = 0; plateNo < pool.libPlates.length; plateNo++) |
5526 |
25 Jun 19 |
nicklas |
123 |
{ |
5526 |
25 Jun 19 |
nicklas |
var plateName = pool.libPlates[plateNo].name; |
5526 |
25 Jun 19 |
nicklas |
if (libPlateNames.indexOf(plateName) == -1) |
5526 |
25 Jun 19 |
nicklas |
126 |
{ |
5526 |
25 Jun 19 |
nicklas |
libPlateNames[libPlateNames.length] = plateName; |
5526 |
25 Jun 19 |
nicklas |
128 |
} |
5526 |
25 Jun 19 |
nicklas |
129 |
} |
2636 |
04 Sep 14 |
nicklas |
130 |
} |
2636 |
04 Sep 14 |
nicklas |
131 |
} |
2636 |
04 Sep 14 |
nicklas |
132 |
|
2636 |
04 Sep 14 |
nicklas |
if (dx.DEMUX_WARNING.length > 0) |
2636 |
04 Sep 14 |
nicklas |
134 |
{ |
2636 |
04 Sep 14 |
nicklas |
for (var warnNo = 0; warnNo < dx.DEMUX_WARNING.length; warnNo++) |
2636 |
04 Sep 14 |
nicklas |
136 |
{ |
2636 |
04 Sep 14 |
nicklas |
warningsHtml += '<li class="warning">'+Strings.encodeTags(fc.FlowCellID)+': '+Strings.encodeTags(dx.DEMUX_WARNING[warnNo]); |
2636 |
04 Sep 14 |
nicklas |
138 |
} |
2636 |
04 Sep 14 |
nicklas |
139 |
} |
3140 |
24 Feb 15 |
nicklas |
140 |
|
3140 |
24 Feb 15 |
nicklas |
if (dx.SKIPPED_TILES.length > 0) |
3140 |
24 Feb 15 |
nicklas |
142 |
{ |
3140 |
24 Feb 15 |
nicklas |
dx.SKIPPED_TILES.sort(); |
3140 |
24 Feb 15 |
nicklas |
var lastLaneNo = 0; |
3140 |
24 Feb 15 |
nicklas |
for (var tileNo = 0; tileNo < dx.SKIPPED_TILES.length; tileNo++) |
3140 |
24 Feb 15 |
nicklas |
146 |
{ |
3140 |
24 Feb 15 |
nicklas |
var tmp = dx.SKIPPED_TILES[tileNo]; |
3140 |
24 Feb 15 |
nicklas |
var i = tmp.indexOf(':'); |
3140 |
24 Feb 15 |
nicklas |
var laneNo = tmp.substring(0, i); |
3140 |
24 Feb 15 |
nicklas |
var tile = tmp.substring(i+1); |
3140 |
24 Feb 15 |
nicklas |
if (lastLaneNo != laneNo) |
3140 |
24 Feb 15 |
nicklas |
152 |
{ |
3140 |
24 Feb 15 |
nicklas |
skippedTilesHtml += '<li class="warning">' + Strings.encodeTags(fc.FlowCellID) + ' - lane ' +laneNo + ': '; |
3140 |
24 Feb 15 |
nicklas |
lastLaneNo = laneNo; |
3140 |
24 Feb 15 |
nicklas |
155 |
} |
3140 |
24 Feb 15 |
nicklas |
else |
3140 |
24 Feb 15 |
nicklas |
157 |
{ |
3140 |
24 Feb 15 |
nicklas |
skippedTilesHtml += ', '; |
3140 |
24 Feb 15 |
nicklas |
159 |
} |
3140 |
24 Feb 15 |
nicklas |
skippedTilesHtml += Strings.encodeTags(tile); |
3140 |
24 Feb 15 |
nicklas |
161 |
} |
3140 |
24 Feb 15 |
nicklas |
162 |
} |
2636 |
04 Sep 14 |
nicklas |
163 |
} |
2636 |
04 Sep 14 |
nicklas |
fcHtml += '</table>'; |
2636 |
04 Sep 14 |
nicklas |
165 |
|
2636 |
04 Sep 14 |
nicklas |
Doc.element('flowCellsInDemux').innerHTML = job.status == 'ERROR' ? fcNames : fcHtml; |
5526 |
25 Jun 19 |
nicklas |
Doc.element('pools').innerHTML = Strings.encodeTags(poolNames.join(', ')); |
5526 |
25 Jun 19 |
nicklas |
Doc.element('libPlates').innerHTML = Strings.encodeTags(libPlateNames.join(', ')) || 'n/a'; |
2636 |
04 Sep 14 |
nicklas |
Doc.element('comments').innerHTML = Strings.encodeTags(job.comments); |
2636 |
04 Sep 14 |
nicklas |
Doc.element('warnings').innerHTML = warningsHtml; |
3140 |
24 Feb 15 |
nicklas |
Doc.element('skippedTiles').innerHTML = skippedTilesHtml; |
3140 |
24 Feb 15 |
nicklas |
Doc.showHide('skippedTilesRow', skippedTilesHtml != ''); |
5620 |
20 Sep 19 |
nicklas |
173 |
|
5620 |
20 Sep 19 |
nicklas |
// Add click handler to file links |
5620 |
20 Sep 19 |
nicklas |
var clickableItems = document.getElementsByClassName('metrics-link'); |
5620 |
20 Sep 19 |
nicklas |
for (var i = 0; i < clickableItems.length; i++) |
5620 |
20 Sep 19 |
nicklas |
177 |
{ |
5620 |
20 Sep 19 |
nicklas |
Events.addEventHandler(clickableItems[i], 'click', Files.viewFileOnClick); |
5620 |
20 Sep 19 |
nicklas |
179 |
} |
2636 |
04 Sep 14 |
nicklas |
180 |
} |
2636 |
04 Sep 14 |
nicklas |
181 |
|
2636 |
04 Sep 14 |
nicklas |
182 |
|
2636 |
04 Sep 14 |
nicklas |
demux.initializeStep2 = function() |
2636 |
04 Sep 14 |
nicklas |
184 |
{ |
2636 |
04 Sep 14 |
nicklas |
var frm = document.forms['reggie']; |
2636 |
04 Sep 14 |
nicklas |
var job = frm.demuxJobs[frm.demuxJobs.selectedIndex].job; |
3723 |
25 Jan 16 |
nicklas |
187 |
|
3723 |
25 Jan 16 |
nicklas |
if (job.partial) |
3723 |
25 Jan 16 |
nicklas |
189 |
{ |
3723 |
25 Jan 16 |
nicklas |
Doc.element('outcomeFailed').disabled = true; |
3723 |
25 Jan 16 |
nicklas |
Wizard.setInputStatus('outcome', 'warning', 'Some libraries have already been confirmed.'); |
3723 |
25 Jan 16 |
nicklas |
192 |
} |
2636 |
04 Sep 14 |
nicklas |
193 |
|
2636 |
04 Sep 14 |
nicklas |
var url = '../DemuxMerge.servlet?ID='+App.getSessionId(); |
2636 |
04 Sep 14 |
nicklas |
url += '&cmd=GetMergedSequences&job='+job.id; |
2636 |
04 Sep 14 |
nicklas |
196 |
|
2636 |
04 Sep 14 |
nicklas |
Wizard.showLoadingAnimation('Loading merged sequences...'); |
2636 |
04 Sep 14 |
nicklas |
Wizard.asyncJsonRequest(url, demux.mergedSequencesLoaded); |
2636 |
04 Sep 14 |
nicklas |
199 |
} |
2636 |
04 Sep 14 |
nicklas |
200 |
|
2636 |
04 Sep 14 |
nicklas |
demux.mergedSequencesLoaded = function(response) |
2636 |
04 Sep 14 |
nicklas |
202 |
{ |
2636 |
04 Sep 14 |
nicklas |
var frm = document.forms['reggie']; |
2636 |
04 Sep 14 |
nicklas |
var job = frm.demuxJobs[frm.demuxJobs.selectedIndex].job; |
2636 |
04 Sep 14 |
nicklas |
var isError = job.status == 'ERROR'; |
2636 |
04 Sep 14 |
nicklas |
206 |
|
2636 |
04 Sep 14 |
nicklas |
Wizard.setCurrentStep(2); |
2636 |
04 Sep 14 |
nicklas |
Doc.show('goregister'); |
2636 |
04 Sep 14 |
nicklas |
Doc.show('gocancel'); |
2636 |
04 Sep 14 |
nicklas |
210 |
|
2636 |
04 Sep 14 |
nicklas |
var mergedSeq = response.mergedSequences; |
2819 |
16 Oct 14 |
nicklas |
mergedSeq.sort(demux.sortByPool); |
2636 |
04 Sep 14 |
nicklas |
job.mergedSequences = mergedSeq; |
3049 |
17 Dec 14 |
nicklas |
var minPtReads = job.limits.minPtReads; |
2636 |
04 Sep 14 |
nicklas |
215 |
|
2636 |
04 Sep 14 |
nicklas |
var html = '<table id="mergedSequencesTable">'; |
3026 |
11 Dec 14 |
nicklas |
html += '<thead class="bg-filled-100">'; |
2636 |
04 Sep 14 |
nicklas |
// Header row |
2636 |
04 Sep 14 |
nicklas |
html += '<tr>'; |
2819 |
16 Oct 14 |
nicklas |
html += '<th></th>'; |
2819 |
16 Oct 14 |
nicklas |
html += '<th class="dottedleft"></th>'; |
3181 |
18 Mar 15 |
nicklas |
html += '<th class="dottedleft" colspan="5">Reads (Millions)</th>'; |
2682 |
18 Sep 14 |
nicklas |
html += '<th class="dottedleft" colspan="4">Fragment size</th>'; |
6809 |
24 Aug 22 |
nicklas |
html += '<th class="dottedleft" colspan="4">Actions</th>'; |
2636 |
04 Sep 14 |
nicklas |
html += '<th class="dottedleft">Comment</th>'; |
2636 |
04 Sep 14 |
nicklas |
html += '</tr>'; |
2636 |
04 Sep 14 |
nicklas |
html += '<tr>'; |
2819 |
16 Oct 14 |
nicklas |
html += '<th>Library</th>'; |
2819 |
16 Oct 14 |
nicklas |
html += '<th class="dottedleft">Pools</th>'; |
2636 |
04 Sep 14 |
nicklas |
html += '<th class="dottedleft">READS</th>'; |
2636 |
04 Sep 14 |
nicklas |
html += '<th>PF_READS</th>'; |
2689 |
23 Sep 14 |
nicklas |
html += '<th>ADAPTER_READS</th>'; |
2636 |
04 Sep 14 |
nicklas |
html += '<th>PT_READS</th>'; |
2682 |
18 Sep 14 |
nicklas |
html += '<th class="warning-col"></th>'; |
3320 |
11 May 15 |
nicklas |
html += '<th class="dottedleft">Size*¹</th>'; |
2682 |
18 Sep 14 |
nicklas |
html += '<th>Avg²</th>'; |
2682 |
18 Sep 14 |
nicklas |
html += '<th>Stdev²</th>'; |
2682 |
18 Sep 14 |
nicklas |
html += '<th class="warning-col"></th>'; |
6670 |
07 Apr 22 |
nicklas |
html += '<th class="dottedleft"><span id="flagrna" data-prefix="flag" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Flag RNA</span></th>'; |
6670 |
07 Apr 22 |
nicklas |
html += '<th><span id="legacy" data-prefix="legacy" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Legacy</span></th>'; |
6670 |
07 Apr 22 |
nicklas |
html += '<th><span id="hisat" data-prefix="hisat" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Hisat</span></th>'; |
6809 |
24 Aug 22 |
nicklas |
html += '<th><span id="hisat2023" data-prefix="hisat2023" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Hisat/2023</span></th>'; |
2636 |
04 Sep 14 |
nicklas |
html += '<th class="dottedleft"></th>'; |
2636 |
04 Sep 14 |
nicklas |
html += '</tr>'; |
2636 |
04 Sep 14 |
nicklas |
html += '</thead>'; |
2636 |
04 Sep 14 |
nicklas |
html += '<tbody>'; |
2636 |
04 Sep 14 |
nicklas |
247 |
|
3768 |
24 Feb 16 |
nicklas |
var yellowImg = '<img src="../images/yellow-label.png">'; |
2819 |
16 Oct 14 |
nicklas |
var lastPoolName = mergedSeq[0].pools[0].name; |
2636 |
04 Sep 14 |
nicklas |
for (var mergedNo = 0; mergedNo < mergedSeq.length; mergedNo++) |
2636 |
04 Sep 14 |
nicklas |
251 |
{ |
2636 |
04 Sep 14 |
nicklas |
var merged = mergedSeq[mergedNo]; |
2682 |
18 Sep 14 |
nicklas |
var lib = merged.lib; |
2819 |
16 Oct 14 |
nicklas |
var pools = merged.pools; |
2682 |
18 Sep 14 |
nicklas |
255 |
|
2636 |
04 Sep 14 |
nicklas |
merged.stratagene = Reggie.isStratagene(merged.name); |
2636 |
04 Sep 14 |
nicklas |
merged.external = Reggie.isExternal(merged.name); |
3768 |
24 Feb 16 |
nicklas |
var isYellow = lib.specimen && lib.specimen.YellowLabel != null; |
3768 |
24 Feb 16 |
nicklas |
var img = isYellow ? yellowImg : ''; |
2636 |
04 Sep 14 |
nicklas |
260 |
|
2636 |
04 Sep 14 |
nicklas |
var reads = merged.READS == null ? '-' : Reggie.formatNumber(merged.READS/1000000, null, 2); |
2636 |
04 Sep 14 |
nicklas |
var pfReads = merged.PF_READS == null ? '-' : Reggie.formatNumber(merged.PF_READS/1000000, null, 2); |
2636 |
04 Sep 14 |
nicklas |
var ptReads = merged.PT_READS == null ? '-' : Reggie.formatNumber(merged.PT_READS/1000000, null, 2); |
2736 |
06 Oct 14 |
nicklas |
var ptPercent = merged.PF_READS > 0 && merged.PT_READS != null ? Math.round(100*merged.PT_READS/merged.PF_READS) : Number.NaN; |
2689 |
23 Sep 14 |
nicklas |
var adapterReads = merged.ADAPTER_READS == null ? '-' : Reggie.formatNumber(merged.ADAPTER_READS/1000000, null, 2); |
2736 |
06 Oct 14 |
nicklas |
var adapterPercent = merged.PF_READS > 0 && merged.ADAPTER_READS != null ? Math.round(100*merged.ADAPTER_READS/merged.PF_READS) : Number.NaN; |
3049 |
17 Dec 14 |
nicklas |
267 |
|
3049 |
17 Dec 14 |
nicklas |
var flagChecked = false; |
5552 |
12 Aug 19 |
nicklas |
var alignChecked = !merged.stratagene; |
3723 |
25 Jan 16 |
nicklas |
merged.alreadyConfirmed = merged.AnalysisResult != null; |
2736 |
06 Oct 14 |
nicklas |
271 |
|
3768 |
24 Feb 16 |
nicklas |
html += '<tr class="highlight ' + (isYellow ? 'yellow-specimen' : '') + '"'; |
2819 |
16 Oct 14 |
nicklas |
if (pools[0].name != lastPoolName) |
2819 |
16 Oct 14 |
nicklas |
274 |
{ |
2819 |
16 Oct 14 |
nicklas |
lastPoolName = pools[0].name; |
2819 |
16 Oct 14 |
nicklas |
html += 'style="border-top: 1px solid #000000;"'; |
2819 |
16 Oct 14 |
nicklas |
277 |
} |
3768 |
24 Feb 16 |
nicklas |
html += '><td class="prompt if-yellow">'+img+Strings.encodeTags(merged.name)+'</td>'; |
2819 |
16 Oct 14 |
nicklas |
html += '<td class="dottedleft">'; |
2819 |
16 Oct 14 |
nicklas |
for (var poolNo = 0; poolNo < pools.length; poolNo++) |
2819 |
16 Oct 14 |
nicklas |
281 |
{ |
2819 |
16 Oct 14 |
nicklas |
if (poolNo > 0) html += ', '; |
2819 |
16 Oct 14 |
nicklas |
html += Strings.encodeTags(pools[poolNo].name); |
2819 |
16 Oct 14 |
nicklas |
284 |
} |
2819 |
16 Oct 14 |
nicklas |
html += '</td>'; |
2636 |
04 Sep 14 |
nicklas |
html += '<td class="dottedleft">'+reads+'</td>'; |
2636 |
04 Sep 14 |
nicklas |
html += '<td>'+pfReads+'</td>'; |
2736 |
06 Oct 14 |
nicklas |
html += '<td>'+adapterReads+(isNaN(adapterPercent) ? '' : ' ('+adapterPercent+'%)') +'</td>'; |
2736 |
06 Oct 14 |
nicklas |
html += '<td>'+ptReads+(isNaN(ptPercent) ? '' : ' ('+ptPercent+'%)') + '</td>'; |
2682 |
18 Sep 14 |
nicklas |
html += '<td class="warning-col">'; |
3049 |
17 Dec 14 |
nicklas |
if (merged.PT_READS == null || merged.PT_READS < minPtReads) |
2682 |
18 Sep 14 |
nicklas |
292 |
{ |
3049 |
17 Dec 14 |
nicklas |
html += '<img src="../images/warning.png" title="Less than '+Reggie.formatCount(minPtReads) + ' passed Trimmomatic">'; |
3049 |
17 Dec 14 |
nicklas |
flagChecked = true; |
3049 |
17 Dec 14 |
nicklas |
alignChecked = false; |
2682 |
18 Sep 14 |
nicklas |
296 |
} |
2682 |
18 Sep 14 |
nicklas |
html += '</td>'; |
2636 |
04 Sep 14 |
nicklas |
298 |
|
3320 |
11 May 15 |
nicklas |
var lib_size = Math.round(lib.CA_Size || lib.library_size_est) - ADAPTER_SIZE * 2; |
2682 |
18 Sep 14 |
nicklas |
300 |
|
2682 |
18 Sep 14 |
nicklas |
html += '<td class="dottedleft">'+lib_size+'</td>'; |
2736 |
06 Oct 14 |
nicklas |
html += '<td>'+(merged.FragmentSizeAvg || '-')+'</td>'; |
2736 |
06 Oct 14 |
nicklas |
html += '<td>'+(merged.FragmentSizeStdev || '-')+'</td>'; |
2682 |
18 Sep 14 |
nicklas |
html += '<td class="warning-col">'; |
2736 |
06 Oct 14 |
nicklas |
if (merged.FragmentSizeAvg != null && merged.FragmentSizeStdev != null) |
2682 |
18 Sep 14 |
nicklas |
306 |
{ |
2736 |
06 Oct 14 |
nicklas |
var delta = lib_size - merged.FragmentSizeAvg; |
2736 |
06 Oct 14 |
nicklas |
if (Math.abs(delta) > merged.FragmentSizeStdev) |
2736 |
06 Oct 14 |
nicklas |
309 |
{ |
2736 |
06 Oct 14 |
nicklas |
html += '<img src="../images/warning.png" title="Fragment size differ from CA_Size: ' + delta+'">'; |
2736 |
06 Oct 14 |
nicklas |
311 |
} |
2682 |
18 Sep 14 |
nicklas |
312 |
} |
2682 |
18 Sep 14 |
nicklas |
html += '</td>'; |
2682 |
18 Sep 14 |
nicklas |
314 |
|
3723 |
25 Jan 16 |
nicklas |
if (merged.alreadyConfirmed) |
2636 |
04 Sep 14 |
nicklas |
316 |
{ |
4597 |
27 Sep 17 |
nicklas |
html += '<td class="dottedleft" colspan="3"></td>'; |
3723 |
25 Jan 16 |
nicklas |
html += '<td class="dottedleft italic comment" style="padding-left: 2px;">Already confirmed</td>'; |
2636 |
04 Sep 14 |
nicklas |
319 |
} |
2636 |
04 Sep 14 |
nicklas |
else |
2636 |
04 Sep 14 |
nicklas |
321 |
{ |
3723 |
25 Jan 16 |
nicklas |
// Do not allow flagging external or stratagene |
3723 |
25 Jan 16 |
nicklas |
if (merged.stratagene || merged.external) |
3723 |
25 Jan 16 |
nicklas |
324 |
{ |
3723 |
25 Jan 16 |
nicklas |
html += '<td class="dottedleft">-</td>'; |
3723 |
25 Jan 16 |
nicklas |
326 |
} |
3723 |
25 Jan 16 |
nicklas |
else |
3723 |
25 Jan 16 |
nicklas |
328 |
{ |
3723 |
25 Jan 16 |
nicklas |
html += '<td class="dottedleft"><input type="checkbox" name="flag.'+merged.id+'"'+(flagChecked ? ' checked':'')+'></td>'; |
3723 |
25 Jan 16 |
nicklas |
330 |
} |
3723 |
25 Jan 16 |
nicklas |
331 |
|
4597 |
27 Sep 17 |
nicklas |
html += '<td><input type="checkbox" name="legacy.'+merged.id+'" '+(alignChecked ? ' checked':'')+'></td>'; |
4597 |
27 Sep 17 |
nicklas |
html += '<td><input type="checkbox" name="hisat.'+merged.id+'" '+(alignChecked ? ' checked':'')+'></td>'; |
6809 |
24 Aug 22 |
nicklas |
html += '<td><input type="checkbox" name="hisat2023.'+merged.id+'" '+(alignChecked ? ' checked':'')+'></td>'; |
3723 |
25 Jan 16 |
nicklas |
html += '<td class="dottedleft comment"><input type="text" name="comment.'+merged.id+'"></td>'; |
2636 |
04 Sep 14 |
nicklas |
336 |
} |
2636 |
04 Sep 14 |
nicklas |
html += '</tr>'; |
2636 |
04 Sep 14 |
nicklas |
338 |
} |
2636 |
04 Sep 14 |
nicklas |
html += '</tbody>'; |
2636 |
04 Sep 14 |
nicklas |
html += '</table>'; |
2636 |
04 Sep 14 |
nicklas |
Doc.element('mergedSequences').innerHTML = html; |
6670 |
07 Apr 22 |
nicklas |
342 |
|
6670 |
07 Apr 22 |
nicklas |
Events.addEventHandler('flagrna', 'click', demux.toggleSelection); |
6670 |
07 Apr 22 |
nicklas |
Events.addEventHandler('legacy', 'click', demux.toggleSelection); |
6670 |
07 Apr 22 |
nicklas |
Events.addEventHandler('hisat', 'click', demux.toggleSelection); |
6809 |
24 Aug 22 |
nicklas |
Events.addEventHandler('hisat2023', 'click', demux.toggleSelection); |
6670 |
07 Apr 22 |
nicklas |
347 |
|
2636 |
04 Sep 14 |
nicklas |
if (isError) |
2636 |
04 Sep 14 |
nicklas |
349 |
{ |
2636 |
04 Sep 14 |
nicklas |
Doc.element('outcomeSuccessful').disabled = true; |
2636 |
04 Sep 14 |
nicklas |
Doc.element('outcomeFailed').checked = true; |
2681 |
18 Sep 14 |
nicklas |
frm.deleteItemsCreatedByFailedJob.checked = true; |
2681 |
18 Sep 14 |
nicklas |
frm.demuxAgain.checked = true; |
2636 |
04 Sep 14 |
nicklas |
demux.outcomeOnChange(); |
2636 |
04 Sep 14 |
nicklas |
355 |
} |
2636 |
04 Sep 14 |
nicklas |
356 |
} |
2819 |
16 Oct 14 |
nicklas |
357 |
|
2819 |
16 Oct 14 |
nicklas |
358 |
/** |
2819 |
16 Oct 14 |
nicklas |
Sort by the name of the first pool. |
2819 |
16 Oct 14 |
nicklas |
360 |
*/ |
2819 |
16 Oct 14 |
nicklas |
demux.sortByPool = function(a, b) |
2819 |
16 Oct 14 |
nicklas |
362 |
{ |
2819 |
16 Oct 14 |
nicklas |
var p1 = a.pools[0].name; |
2819 |
16 Oct 14 |
nicklas |
var p2 = b.pools[0].name; |
2819 |
16 Oct 14 |
nicklas |
if (p1 < p2) return -1; |
2819 |
16 Oct 14 |
nicklas |
if (p1 > p2) return 1; |
2819 |
16 Oct 14 |
nicklas |
if (a.name < b.name) return -1; |
2819 |
16 Oct 14 |
nicklas |
if (a.name > b.name) return 1; |
2819 |
16 Oct 14 |
nicklas |
return a.id - b.id; |
2819 |
16 Oct 14 |
nicklas |
370 |
} |
2636 |
04 Sep 14 |
nicklas |
371 |
|
2636 |
04 Sep 14 |
nicklas |
demux.outcomeOnChange = function() |
2636 |
04 Sep 14 |
nicklas |
373 |
{ |
2636 |
04 Sep 14 |
nicklas |
var frm = document.forms['reggie']; |
2636 |
04 Sep 14 |
nicklas |
var failed = Doc.element('outcomeFailed').checked; |
2636 |
04 Sep 14 |
nicklas |
var deleteItems = frm.deleteItemsCreatedByFailedJob.checked; |
2636 |
04 Sep 14 |
nicklas |
frm.flagPools.disabled = !failed; |
2681 |
18 Sep 14 |
nicklas |
frm.demuxAgain.disabled = !failed; |
2681 |
18 Sep 14 |
nicklas |
frm.deleteItemsCreatedByFailedJob.disabled = !failed; |
2636 |
04 Sep 14 |
nicklas |
if (frm.flagPools.disabled) frm.flagPools.checked = false; |
2681 |
18 Sep 14 |
nicklas |
if (frm.demuxAgain.disabled) frm.demuxAgain.checked = false; |
2681 |
18 Sep 14 |
nicklas |
if (frm.deleteItemsCreatedByFailedJob.disabled) frm.deleteItemsCreatedByFailedJob.checked = false; |
2636 |
04 Sep 14 |
nicklas |
383 |
|
2636 |
04 Sep 14 |
nicklas |
var job = frm.demuxJobs[frm.demuxJobs.selectedIndex].job; |
2636 |
04 Sep 14 |
nicklas |
var mergedSequences = job.mergedSequences; |
2636 |
04 Sep 14 |
nicklas |
386 |
|
2636 |
04 Sep 14 |
nicklas |
for (var mergeNo = 0; mergeNo < mergedSequences.length; mergeNo++) |
2636 |
04 Sep 14 |
nicklas |
388 |
{ |
2636 |
04 Sep 14 |
nicklas |
var merge = mergedSequences[mergeNo]; |
2636 |
04 Sep 14 |
nicklas |
if (frm['flag.'+merge.id]) |
2636 |
04 Sep 14 |
nicklas |
391 |
{ |
2636 |
04 Sep 14 |
nicklas |
frm['flag.'+merge.id].disabled = failed; |
3483 |
09 Sep 15 |
nicklas |
demux.resetCheckbox(frm['flag.'+merge.id]); |
2636 |
04 Sep 14 |
nicklas |
394 |
} |
4597 |
27 Sep 17 |
nicklas |
if (frm['legacy.'+merge.id]) |
3723 |
25 Jan 16 |
nicklas |
396 |
{ |
4597 |
27 Sep 17 |
nicklas |
frm['legacy.'+merge.id].disabled = failed; |
4597 |
27 Sep 17 |
nicklas |
demux.resetCheckbox(frm['legacy.'+merge.id]); |
3723 |
25 Jan 16 |
nicklas |
399 |
} |
4597 |
27 Sep 17 |
nicklas |
if (frm['hisat.'+merge.id]) |
4597 |
27 Sep 17 |
nicklas |
401 |
{ |
4597 |
27 Sep 17 |
nicklas |
frm['hisat.'+merge.id].disabled = failed; |
4597 |
27 Sep 17 |
nicklas |
demux.resetCheckbox(frm['hisat.'+merge.id]); |
4597 |
27 Sep 17 |
nicklas |
404 |
} |
6809 |
24 Aug 22 |
nicklas |
if (frm['hisat2023.'+merge.id]) |
6809 |
24 Aug 22 |
nicklas |
406 |
{ |
6809 |
24 Aug 22 |
nicklas |
frm['hisat2023.'+merge.id].disabled = failed; |
6809 |
24 Aug 22 |
nicklas |
demux.resetCheckbox(frm['hisat2023.'+merge.id]); |
6809 |
24 Aug 22 |
nicklas |
409 |
} |
3723 |
25 Jan 16 |
nicklas |
if (frm['comment.'+merge.id]) |
3723 |
25 Jan 16 |
nicklas |
411 |
{ |
3723 |
25 Jan 16 |
nicklas |
frm['comment.'+merge.id].disabled = deleteItems; |
3723 |
25 Jan 16 |
nicklas |
413 |
} |
2636 |
04 Sep 14 |
nicklas |
414 |
} |
2636 |
04 Sep 14 |
nicklas |
415 |
} |
2636 |
04 Sep 14 |
nicklas |
416 |
|
6670 |
07 Apr 22 |
nicklas |
demux.toggleSelection = function(event) |
6670 |
07 Apr 22 |
nicklas |
418 |
{ |
6670 |
07 Apr 22 |
nicklas |
var prefix = Data.get(event.currentTarget, 'prefix'); |
6670 |
07 Apr 22 |
nicklas |
var specialKey = event.altKey || event.ctrlKey || event.shiftKey; |
6670 |
07 Apr 22 |
nicklas |
421 |
|
6670 |
07 Apr 22 |
nicklas |
var frm = document.forms['reggie']; |
6670 |
07 Apr 22 |
nicklas |
var job = frm.demuxJobs[frm.demuxJobs.selectedIndex].job; |
6670 |
07 Apr 22 |
nicklas |
var mergedSequences = job.mergedSequences; |
6670 |
07 Apr 22 |
nicklas |
for (var mergedNo = 0; mergedNo < mergedSequences.length; mergedNo++) |
6670 |
07 Apr 22 |
nicklas |
426 |
{ |
6670 |
07 Apr 22 |
nicklas |
var merged = mergedSequences[mergedNo]; |
6670 |
07 Apr 22 |
nicklas |
var chk = frm[prefix+'.'+merged.id]; |
6670 |
07 Apr 22 |
nicklas |
if (chk && !chk.disabled) |
6670 |
07 Apr 22 |
nicklas |
430 |
{ |
6670 |
07 Apr 22 |
nicklas |
chk.checked = specialKey ? false : !chk.checked; |
6670 |
07 Apr 22 |
nicklas |
432 |
} |
6670 |
07 Apr 22 |
nicklas |
433 |
} |
6670 |
07 Apr 22 |
nicklas |
434 |
} |
6670 |
07 Apr 22 |
nicklas |
435 |
|
3483 |
09 Sep 15 |
nicklas |
436 |
/** |
3483 |
09 Sep 15 |
nicklas |
A disabled checkbox is forced to be unchecked, the old value is stored in |
3483 |
09 Sep 15 |
nicklas |
'oldChecked'. An enabled checkbox with 'oldChecked' set is checked. |
3483 |
09 Sep 15 |
nicklas |
439 |
*/ |
3483 |
09 Sep 15 |
nicklas |
demux.resetCheckbox = function(checkbox) |
3483 |
09 Sep 15 |
nicklas |
441 |
{ |
3483 |
09 Sep 15 |
nicklas |
if (checkbox.disabled) |
3483 |
09 Sep 15 |
nicklas |
443 |
{ |
3483 |
09 Sep 15 |
nicklas |
checkbox.oldChecked = checkbox.checked; |
3483 |
09 Sep 15 |
nicklas |
checkbox.checked = false; |
3483 |
09 Sep 15 |
nicklas |
446 |
} |
3483 |
09 Sep 15 |
nicklas |
else if (checkbox.oldChecked != null) |
3483 |
09 Sep 15 |
nicklas |
448 |
{ |
3483 |
09 Sep 15 |
nicklas |
checkbox.checked = checkbox.oldChecked; |
3483 |
09 Sep 15 |
nicklas |
checkbox.oldChecked = null; |
3483 |
09 Sep 15 |
nicklas |
451 |
} |
3483 |
09 Sep 15 |
nicklas |
452 |
} |
2636 |
04 Sep 14 |
nicklas |
453 |
|
2636 |
04 Sep 14 |
nicklas |
demux.submit = function() |
2636 |
04 Sep 14 |
nicklas |
455 |
{ |
2636 |
04 Sep 14 |
nicklas |
456 |
|
2636 |
04 Sep 14 |
nicklas |
var frm = document.forms['reggie']; |
2636 |
04 Sep 14 |
nicklas |
var failed = Doc.element('outcomeFailed').checked; |
2636 |
04 Sep 14 |
nicklas |
var submitInfo = {}; |
2636 |
04 Sep 14 |
nicklas |
submitInfo.failed = failed; |
2636 |
04 Sep 14 |
nicklas |
submitInfo.flagPools = frm.flagPools.checked; |
2636 |
04 Sep 14 |
nicklas |
submitInfo.deleteItemsCreatedByFailedJob = frm.deleteItemsCreatedByFailedJob.checked; |
2640 |
08 Sep 14 |
nicklas |
submitInfo.demuxAgain = frm.demuxAgain.checked; |
2636 |
04 Sep 14 |
nicklas |
464 |
|
2636 |
04 Sep 14 |
nicklas |
var job = frm.demuxJobs[frm.demuxJobs.selectedIndex].job; |
2636 |
04 Sep 14 |
nicklas |
var demuxedSequences = job.demuxedSequences; |
2636 |
04 Sep 14 |
nicklas |
var mergedSequences = job.mergedSequences; |
2636 |
04 Sep 14 |
nicklas |
468 |
|
2636 |
04 Sep 14 |
nicklas |
var dx = []; |
2636 |
04 Sep 14 |
nicklas |
submitInfo.demuxedSequences = dx; |
2636 |
04 Sep 14 |
nicklas |
for (var demuxNo = 0; demuxNo < demuxedSequences.length; demuxNo++) |
2636 |
04 Sep 14 |
nicklas |
472 |
{ |
2636 |
04 Sep 14 |
nicklas |
var tmp = {}; |
2636 |
04 Sep 14 |
nicklas |
tmp.id = demuxedSequences[demuxNo].id; |
2636 |
04 Sep 14 |
nicklas |
dx[dx.length] = tmp; |
2636 |
04 Sep 14 |
nicklas |
476 |
} |
2636 |
04 Sep 14 |
nicklas |
477 |
|
2636 |
04 Sep 14 |
nicklas |
var merged = []; |
2636 |
04 Sep 14 |
nicklas |
submitInfo.mergedSequences = merged; |
2636 |
04 Sep 14 |
nicklas |
for (var mergeNo = 0; mergeNo < mergedSequences.length; mergeNo++) |
2636 |
04 Sep 14 |
nicklas |
481 |
{ |
2636 |
04 Sep 14 |
nicklas |
var merge = mergedSequences[mergeNo]; |
3723 |
25 Jan 16 |
nicklas |
if (!merge.alreadyConfirmed) |
3723 |
25 Jan 16 |
nicklas |
484 |
{ |
3723 |
25 Jan 16 |
nicklas |
var tmp = {}; |
3723 |
25 Jan 16 |
nicklas |
tmp.id = merge.id; |
3723 |
25 Jan 16 |
nicklas |
tmp.flag = frm['flag.'+merge.id] && frm['flag.'+merge.id].checked; |
4597 |
27 Sep 17 |
nicklas |
tmp.legacyAlign = frm['legacy.'+merge.id].checked; |
4597 |
27 Sep 17 |
nicklas |
tmp.hisatAlign = frm['hisat.'+merge.id].checked; |
6809 |
24 Aug 22 |
nicklas |
tmp.hisat2023Align = frm['hisat2023.'+merge.id].checked; |
3723 |
25 Jan 16 |
nicklas |
tmp.comment = frm['comment.'+merge.id].value; |
3723 |
25 Jan 16 |
nicklas |
merged[merged.length] = tmp; |
3723 |
25 Jan 16 |
nicklas |
493 |
} |
2636 |
04 Sep 14 |
nicklas |
494 |
} |
2636 |
04 Sep 14 |
nicklas |
495 |
|
2636 |
04 Sep 14 |
nicklas |
var url = '../DemuxMerge.servlet?ID='+App.getSessionId(); |
5551 |
12 Aug 19 |
nicklas |
url += '&cmd=RegisterDemuxAndMerge&pipeline=RNA_SEQ'; |
2636 |
04 Sep 14 |
nicklas |
498 |
|
2636 |
04 Sep 14 |
nicklas |
Wizard.showLoadingAnimation('Performing registration...'); |
2636 |
04 Sep 14 |
nicklas |
Wizard.asyncJsonRequest(url, demux.submissionResults, 'POST', JSON.stringify(submitInfo)); |
2636 |
04 Sep 14 |
nicklas |
501 |
} |
2636 |
04 Sep 14 |
nicklas |
502 |
|
2636 |
04 Sep 14 |
nicklas |
demux.submissionResults = function(response) |
2636 |
04 Sep 14 |
nicklas |
504 |
{ |
2636 |
04 Sep 14 |
nicklas |
Wizard.showFinalMessage(response.messages); |
2636 |
04 Sep 14 |
nicklas |
Doc.show('gorestart'); |
2636 |
04 Sep 14 |
nicklas |
507 |
} |
2636 |
04 Sep 14 |
nicklas |
508 |
|
2636 |
04 Sep 14 |
nicklas |
509 |
|
2636 |
04 Sep 14 |
nicklas |
return demux; |
2636 |
04 Sep 14 |
nicklas |
511 |
}(); |
2636 |
04 Sep 14 |
nicklas |
512 |
|
2636 |
04 Sep 14 |
nicklas |
Doc.onLoad(Demux.initPage); |
2636 |
04 Sep 14 |
nicklas |
514 |
|