www/biomaterials/samples/samples.js

Code
Comments
Other
Rev Date Author Line
7604 25 Feb 19 nicklas 1 /* $Id $
7604 25 Feb 19 nicklas 2   ------------------------------------------------------------------
7604 25 Feb 19 nicklas 3   Copyright (C) 2013 Nicklas Nordborg
7604 25 Feb 19 nicklas 4
7604 25 Feb 19 nicklas 5   This file is part of BASE - BioArray Software Environment.
7604 25 Feb 19 nicklas 6   Available at http://base.thep.lu.se/
7604 25 Feb 19 nicklas 7
7604 25 Feb 19 nicklas 8   BASE is free software; you can redistribute it and/or
7604 25 Feb 19 nicklas 9   modify it under the terms of the GNU General Public License
7604 25 Feb 19 nicklas 10   as published by the Free Software Foundation; either version 3
7604 25 Feb 19 nicklas 11   of the License, or (at your option) any later version.
7604 25 Feb 19 nicklas 12
7604 25 Feb 19 nicklas 13   BASE is distributed in the hope that it will be useful,
7604 25 Feb 19 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
7604 25 Feb 19 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
7604 25 Feb 19 nicklas 16   GNU General Public License for more details.
7604 25 Feb 19 nicklas 17
7604 25 Feb 19 nicklas 18   You should have received a copy of the GNU General Public License
7604 25 Feb 19 nicklas 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
7604 25 Feb 19 nicklas 20   ------------------------------------------------------------------
7604 25 Feb 19 nicklas 21
7604 25 Feb 19 nicklas 22   @author Nicklas
7604 25 Feb 19 nicklas 23 */
7604 25 Feb 19 nicklas 24 'use strict';
7604 25 Feb 19 nicklas 25
7604 25 Feb 19 nicklas 26 var Samples = function()
7604 25 Feb 19 nicklas 27 {
7604 25 Feb 19 nicklas 28   var samples = {};
7604 25 Feb 19 nicklas 29   
7604 25 Feb 19 nicklas 30   /**
7604 25 Feb 19 nicklas 31     Initialize the page.
7604 25 Feb 19 nicklas 32   */
7604 25 Feb 19 nicklas 33   samples.initPage = function()
7604 25 Feb 19 nicklas 34   {
7604 25 Feb 19 nicklas 35     var pageId = Doc.getPageId();
7604 25 Feb 19 nicklas 36     if (pageId == 'edit-page')
7604 25 Feb 19 nicklas 37     {
7604 25 Feb 19 nicklas 38       // Save + Close buttons
7604 25 Feb 19 nicklas 39       Buttons.addClickHandler('btnSave', samples.save);
7604 25 Feb 19 nicklas 40       Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 41
7604 25 Feb 19 nicklas 42       // Tab validation
7604 25 Feb 19 nicklas 43       TabControl.addTabActivateListener('settings.annotations', samples.loadAnnotationsFrame);
7604 25 Feb 19 nicklas 44       TabControl.addTabValidator('settings.info', samples.validateSample);
7604 25 Feb 19 nicklas 45
7604 25 Feb 19 nicklas 46       // Quantity
7604 25 Feb 19 nicklas 47       Events.addEventHandler('original_quantity', 'keypress', Events.numberOnly);
7604 25 Feb 19 nicklas 48       
7604 25 Feb 19 nicklas 49       // Protocol
7604 25 Feb 19 nicklas 50       Buttons.addClickHandler('protocol_id.select', samples.selectProtocol);
7604 25 Feb 19 nicklas 51       Events.addEventHandler('protocol_id', 'base-selected', Items.onItemSelected);
7604 25 Feb 19 nicklas 52       // Kit
7604 25 Feb 19 nicklas 53       Buttons.addClickHandler('kit_id.select', samples.selectKit);
7604 25 Feb 19 nicklas 54       Events.addEventHandler('kit_id', 'base-selected', Items.onItemSelected);
7604 25 Feb 19 nicklas 55       // Subtype
7604 25 Feb 19 nicklas 56       Events.addEventHandler('subtype_id', 'change', samples.subtypeOnChange);
7604 25 Feb 19 nicklas 57
7604 25 Feb 19 nicklas 58       // Bioplate and biowell
7604 25 Feb 19 nicklas 59       Buttons.addClickHandler('bioplate_id.select', samples.selectBioPlate);
7604 25 Feb 19 nicklas 60       Events.addEventHandler('bioplate_id', 'base-selected', Items.onItemSelected);
7604 25 Feb 19 nicklas 61       Events.addEventHandler('bioplate_id', 'change', samples.bioPlateOnChange);
7604 25 Feb 19 nicklas 62       Buttons.addClickHandler('biowell_id.select', samples.selectBioWell);
7604 25 Feb 19 nicklas 63       Events.addEventHandler('biowell_id', 'base-selected', Items.onItemSelected);
7604 25 Feb 19 nicklas 64       samples.initBioWell();
7604 25 Feb 19 nicklas 65       
7604 25 Feb 19 nicklas 66       // Parent items
7604 25 Feb 19 nicklas 67       Events.addEventHandler('parentType.biosource', 'click', samples.parentTypeOnClick);
7604 25 Feb 19 nicklas 68       Events.addEventHandler('parentType.sample', 'click', samples.parentTypeOnClick);
7604 25 Feb 19 nicklas 69       Buttons.addClickHandler('biosource_id.select', samples.selectBioSource);
7604 25 Feb 19 nicklas 70       Events.addEventHandler('biosource_id', 'base-selected', Items.onItemSelected);
7604 25 Feb 19 nicklas 71       Events.addEventHandler('biosource_id', 'base-selected', samples.bioSourceOnChange);
7604 25 Feb 19 nicklas 72
7604 25 Feb 19 nicklas 73       Events.addEventHandler('samples', 'change', samples.samplesOnChange);
7604 25 Feb 19 nicklas 74       Buttons.addClickHandler('btnAddSamples', samples.addSamplesOnClick);
7604 25 Feb 19 nicklas 75       Events.addEventHandler('btnAddSamples', 'base-selected', samples.addSampleCallback);
7604 25 Feb 19 nicklas 76       
7604 25 Feb 19 nicklas 77       Events.addEventHandler('used_quantity', 'keypress', Events.numberOnly);
7604 25 Feb 19 nicklas 78       Events.addEventHandler('used_quantity', 'keyup', samples.usedQuantityOnChange);
7604 25 Feb 19 nicklas 79
7604 25 Feb 19 nicklas 80       samples.parentTypeOnClick();
7604 25 Feb 19 nicklas 81       
7604 25 Feb 19 nicklas 82     }
7604 25 Feb 19 nicklas 83     else if (pageId == 'view-page')
7604 25 Feb 19 nicklas 84     {
7604 25 Feb 19 nicklas 85       var itemId = Data.get('page-data', 'item-id');
7604 25 Feb 19 nicklas 86       var attributes = {'item-type': 'SAMPLE', 'item-id': itemId};
7604 25 Feb 19 nicklas 87       Buttons.addClickHandler('btnEdit', Buttons.editItem, attributes);
7604 25 Feb 19 nicklas 88       Buttons.addClickHandler('btnDelete', Buttons.deleteItem, attributes);
7604 25 Feb 19 nicklas 89       Buttons.addClickHandler('btnRestore', Buttons.restoreItem, attributes);
7604 25 Feb 19 nicklas 90       Buttons.addClickHandler('btnUsingItems', Buttons.showUsingItems, attributes);
7604 25 Feb 19 nicklas 91       Buttons.addClickHandler('btnDeletePermanently', Buttons.deleteItemPermanently, attributes);
7604 25 Feb 19 nicklas 92       Buttons.addClickHandler('btnShare', Buttons.shareItem, attributes);
7604 25 Feb 19 nicklas 93       Buttons.addClickHandler('btnSetOwner', Buttons.setOwner, attributes);
7604 25 Feb 19 nicklas 94       Buttons.addClickHandler('btnNewSample', samples.newSample, attributes);
7604 25 Feb 19 nicklas 95       Buttons.addClickHandler('btnNewExtract', samples.newExtract, attributes);
7604 25 Feb 19 nicklas 96       Buttons.addClickHandler('btnExport', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 97       Buttons.addClickHandler('btnImport', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 98       Buttons.addClickHandler('btnRunPlugin', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 99       
7604 25 Feb 19 nicklas 100       TabControl.addTabActivateListener('main.events', samples.viewEvents);
7604 25 Feb 19 nicklas 101       TabControl.addTabActivateListener('main.annotations', AnnotationsList.loadOnce);
7604 25 Feb 19 nicklas 102       TabControl.addTabActivateListener('main.overview', Overview.loadOnce);
7604 25 Feb 19 nicklas 103       TabControl.addTabActivateListener('main.history', History.loadOnce);
7604 25 Feb 19 nicklas 104     }
7604 25 Feb 19 nicklas 105     else if (pageId == 'list-page')
7604 25 Feb 19 nicklas 106     {
7604 25 Feb 19 nicklas 107       var attributes = {'item-type': 'SAMPLE'};
7604 25 Feb 19 nicklas 108       var tableAttributes = {'table-id': 'samples'};
7604 25 Feb 19 nicklas 109       Buttons.addClickHandler('btnNewItem', Buttons.newItem, attributes);
7604 25 Feb 19 nicklas 110       Buttons.addClickHandler('btnDeleteItems', Buttons.deleteItems, tableAttributes);
7604 25 Feb 19 nicklas 111       Buttons.addClickHandler('btnRestoreItems', Buttons.restoreItems, tableAttributes);
7604 25 Feb 19 nicklas 112       Buttons.addClickHandler('btnShareItems', Buttons.shareItems, tableAttributes);
7604 25 Feb 19 nicklas 113       Buttons.addClickHandler('btnSetOwner', Buttons.setOwnerOfItems, tableAttributes);
7604 25 Feb 19 nicklas 114       Buttons.addClickHandler('btnColumns', Buttons.configureColumns, tableAttributes);
7604 25 Feb 19 nicklas 115       Buttons.addClickHandler('btnInheritAnnotations', Buttons.inheritAnnotations, tableAttributes);
7604 25 Feb 19 nicklas 116       Buttons.addClickHandler('btnExport', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 117       Buttons.addClickHandler('btnImport', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 118       Buttons.addClickHandler('btnRunPlugin', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 119       Buttons.addClickHandler('btnNewItemList', samples.newItemListOnClick);
7813 19 May 20 nicklas 120       Buttons.addClickHandler('btnAddToItemList', samples.addToItemListOnClick);
7604 25 Feb 19 nicklas 121       Buttons.addClickHandler('btnPlaceOnPlate', samples.placeOnPlateOnClick);
7604 25 Feb 19 nicklas 122       Buttons.addClickHandler('btnNewPooledItem', samples.newPooledItemOnClick);
7604 25 Feb 19 nicklas 123       
7604 25 Feb 19 nicklas 124       Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 125       Buttons.addClickHandler('btnOk', Buttons.returnSelected, tableAttributes);
7604 25 Feb 19 nicklas 126     }
7604 25 Feb 19 nicklas 127   }
7604 25 Feb 19 nicklas 128
7604 25 Feb 19 nicklas 129   // Add event handlers to the 'new sample' icons
7604 25 Feb 19 nicklas 130   samples.initElements = function(element, autoInit)
7604 25 Feb 19 nicklas 131   {
7604 25 Feb 19 nicklas 132     if (autoInit == 'new-sample')
7604 25 Feb 19 nicklas 133     {
7604 25 Feb 19 nicklas 134       Buttons.addClickHandler(element, samples.newSample);
7604 25 Feb 19 nicklas 135     }
7604 25 Feb 19 nicklas 136     else if (autoInit == 'new-extract')
7604 25 Feb 19 nicklas 137     {
7604 25 Feb 19 nicklas 138       Buttons.addClickHandler(element, samples.newExtract);
7604 25 Feb 19 nicklas 139     }
7604 25 Feb 19 nicklas 140   }
7604 25 Feb 19 nicklas 141
7604 25 Feb 19 nicklas 142   /*
7604 25 Feb 19 nicklas 143     Create a new sample with the current sample as the parent
7604 25 Feb 19 nicklas 144   */
7604 25 Feb 19 nicklas 145   samples.newSample = function(event)
7604 25 Feb 19 nicklas 146   {
7604 25 Feb 19 nicklas 147     var sampleId = Data.int(event.currentTarget, 'item-id');
7604 25 Feb 19 nicklas 148     Items.newItem('SAMPLE', '&sample_id='+sampleId);
7604 25 Feb 19 nicklas 149   }
7604 25 Feb 19 nicklas 150   
7604 25 Feb 19 nicklas 151   /*
7604 25 Feb 19 nicklas 152     Create a new extract with the current sample as the parent
7604 25 Feb 19 nicklas 153   */
7604 25 Feb 19 nicklas 154   samples.newExtract = function(event)
7604 25 Feb 19 nicklas 155   {
7604 25 Feb 19 nicklas 156     var sampleId = Data.int(event.currentTarget, 'item-id');
7604 25 Feb 19 nicklas 157     Items.newItem('EXTRACT', '&sample_id='+sampleId);
7604 25 Feb 19 nicklas 158   }
7604 25 Feb 19 nicklas 159
7604 25 Feb 19 nicklas 160   // Create a new item list with the selected items as members
7604 25 Feb 19 nicklas 161   samples.newItemListOnClick = function()
7604 25 Feb 19 nicklas 162   {
7604 25 Feb 19 nicklas 163     var controller = Items.getController('ITEMLIST');
7604 25 Feb 19 nicklas 164     Table.submitToPopup('samples', 'CreateItemList', controller.width, controller.height);
7604 25 Feb 19 nicklas 165   }
7604 25 Feb 19 nicklas 166   
7813 19 May 20 nicklas 167   // Add selected samples to an existing item list
7813 19 May 20 nicklas 168   samples.addToItemListOnClick = function()
7813 19 May 20 nicklas 169   {
7813 19 May 20 nicklas 170     Table.submitToPopup('samples', 'AddItemsToList', 450, 300);
7813 19 May 20 nicklas 171   }
7813 19 May 20 nicklas 172   
7604 25 Feb 19 nicklas 173   samples.placeOnPlateOnClick = function()
7604 25 Feb 19 nicklas 174   {
7604 25 Feb 19 nicklas 175     Table.submitToPopup('samples', 'PlaceOnPlate', 900, 600);
7604 25 Feb 19 nicklas 176   }
7604 25 Feb 19 nicklas 177   
7604 25 Feb 19 nicklas 178   samples.newPooledItemOnClick = function()
7604 25 Feb 19 nicklas 179   {
7604 25 Feb 19 nicklas 180     if (!Table.checkIfSelected('samples'))
7604 25 Feb 19 nicklas 181     {
7604 25 Feb 19 nicklas 182       return;
7604 25 Feb 19 nicklas 183     }
7604 25 Feb 19 nicklas 184     Table.submitToPopup('samples', 'NewPooledItem', 750, 500);
7604 25 Feb 19 nicklas 185   }
7604 25 Feb 19 nicklas 186   
7604 25 Feb 19 nicklas 187   samples.viewEvents = function()
7604 25 Feb 19 nicklas 188   {
7604 25 Feb 19 nicklas 189     var sampleId = Data.get('page-data', 'item-id');
7604 25 Feb 19 nicklas 190     var url = '../events/index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 191     url += '&cmd=List&biomaterial_id='+sampleId;
7604 25 Feb 19 nicklas 192     url += '&biomaterial_type=SAMPLE';
7604 25 Feb 19 nicklas 193     location.replace(url);
7604 25 Feb 19 nicklas 194   }
7604 25 Feb 19 nicklas 195
7604 25 Feb 19 nicklas 196   samples.validateSample = function()
7604 25 Feb 19 nicklas 197   {
7604 25 Feb 19 nicklas 198     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 199     if (Strings.trim(frm.name.value) == '')
7604 25 Feb 19 nicklas 200     {
7604 25 Feb 19 nicklas 201       Forms.showNotification(frm.name, 'You must enter a name');
7604 25 Feb 19 nicklas 202       return false;
7604 25 Feb 19 nicklas 203     }
7604 25 Feb 19 nicklas 204     if (Strings.trim(frm.bioplate_id.value) != 0 && Strings.trim(frm.biowell_id.value) == 0)
7604 25 Feb 19 nicklas 205     {
7604 25 Feb 19 nicklas 206       Forms.showNotification('biowell_id.select', 'You must choose a biowell from the bioplate');
7604 25 Feb 19 nicklas 207       return false;
7604 25 Feb 19 nicklas 208     }
7604 25 Feb 19 nicklas 209     return true;
7604 25 Feb 19 nicklas 210   }
7604 25 Feb 19 nicklas 211   
7604 25 Feb 19 nicklas 212   samples.save = function()
7604 25 Feb 19 nicklas 213   {
7604 25 Feb 19 nicklas 214     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 215     if (TabControl.validateActiveTab('settings'))
7604 25 Feb 19 nicklas 216     {
7604 25 Feb 19 nicklas 217       Annotations.saveModifiedAnnotationsToForm(frm);
7604 25 Feb 19 nicklas 218       Link.exportActions('samples');
7604 25 Feb 19 nicklas 219       frm.submit();
7604 25 Feb 19 nicklas 220     }
7604 25 Feb 19 nicklas 221   }
7604 25 Feb 19 nicklas 222   
7604 25 Feb 19 nicklas 223   samples.selectBioPlate = function()
7604 25 Feb 19 nicklas 224   {
7604 25 Feb 19 nicklas 225     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 226     var url = '&resetTemporary=1';
7604 25 Feb 19 nicklas 227     url += '&tmpfilter:INT:bioPlateType.bioMaterialType='+encodeURIComponent('|'+Data.get('page-data', 'sample-type'));
7604 25 Feb 19 nicklas 228     var subtypeId = ItemSubtype.getSubtypeId('subtype_id');
7604 25 Feb 19 nicklas 229     // Restrict to plates with the given subtype
7604 25 Feb 19 nicklas 230     url += '&tmpfilter:INT:bioPlateType.itemSubtype='+encodeURIComponent(subtypeId ? '|' + subtypeId : '=');
7604 25 Feb 19 nicklas 231     url += '&tmpfilter:BOOLEAN:destroyed=false';
7604 25 Feb 19 nicklas 232     Dialogs.selectItem('BIOPLATE', 'bioplate_id', 0, url);
7604 25 Feb 19 nicklas 233   }
7604 25 Feb 19 nicklas 234
7604 25 Feb 19 nicklas 235
7604 25 Feb 19 nicklas 236   samples.bioPlateOnChange = function()
7604 25 Feb 19 nicklas 237   {
7604 25 Feb 19 nicklas 238     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 239     var list = frm.bioplate_id;
7604 25 Feb 19 nicklas 240     frm.biowell_id.selectedIndex=0;
7604 25 Feb 19 nicklas 241     frm.biowell_id.remove(1);      
7604 25 Feb 19 nicklas 242   }
7604 25 Feb 19 nicklas 243   
7604 25 Feb 19 nicklas 244   samples.initBioWell = function()
7604 25 Feb 19 nicklas 245   {
7604 25 Feb 19 nicklas 246     var biowell = JSON.parse(Data.get('page-data', 'biowell'));
7604 25 Feb 19 nicklas 247     if (biowell)
7604 25 Feb 19 nicklas 248     {
7604 25 Feb 19 nicklas 249       var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 250       var option = new Option(biowell.location, -biowell.id, true, true);
7604 25 Feb 19 nicklas 251       frm.biowell_id[1] = option;
7604 25 Feb 19 nicklas 252     }
7604 25 Feb 19 nicklas 253   }
7604 25 Feb 19 nicklas 254   
7604 25 Feb 19 nicklas 255   samples.selectBioWell = function()
7604 25 Feb 19 nicklas 256   {
7604 25 Feb 19 nicklas 257     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 258     var bioplateId = Math.abs(parseInt(frm.bioplate_id.value))
7604 25 Feb 19 nicklas 259     if (bioplateId == 0)
7604 25 Feb 19 nicklas 260     {
7604 25 Feb 19 nicklas 261       Forms.showNotification('bioplate_id.select', 'You must first select a bioplate', null, 'pointer-below');
7604 25 Feb 19 nicklas 262       return;
7604 25 Feb 19 nicklas 263     }
7604 25 Feb 19 nicklas 264     
7604 25 Feb 19 nicklas 265     var url = '&bioplate_id='+bioplateId;
7604 25 Feb 19 nicklas 266     url += '&resetTemporary=1&tmpfilter:STRING:$mbm.name='+escape('=');
7604 25 Feb 19 nicklas 267     url += '&tmpfilter:STRING:originalBioMaterial.name='+escape('=');
7604 25 Feb 19 nicklas 268     url += '&columns=row,column';
7604 25 Feb 19 nicklas 269
7604 25 Feb 19 nicklas 270     Dialogs.selectItem('BIOWELL', 'biowell_id', 0, url);
7604 25 Feb 19 nicklas 271   }
7604 25 Feb 19 nicklas 272   
7604 25 Feb 19 nicklas 273   samples.loadAnnotationsFrame = function()
7604 25 Feb 19 nicklas 274   {
7604 25 Feb 19 nicklas 275     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 276     var protocolId = 0;
7604 25 Feb 19 nicklas 277     if (frm.protocol_id.length > 0 && !frm.protocol_id.disabled) 
7604 25 Feb 19 nicklas 278     {
7604 25 Feb 19 nicklas 279       protocolId = Math.abs(parseInt(frm.protocol_id.value));        
7604 25 Feb 19 nicklas 280     }
7604 25 Feb 19 nicklas 281     Annotations.autoLoadEditFrame(protocolId, ItemSubtype.getSubtypeId('subtype_id'), samples.getParents());
7604 25 Feb 19 nicklas 282   }
7604 25 Feb 19 nicklas 283   
7604 25 Feb 19 nicklas 284   samples.getParents = function()
7604 25 Feb 19 nicklas 285   {
7604 25 Feb 19 nicklas 286     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 287     var parents = [];
7604 25 Feb 19 nicklas 288     if (frm.parentType[0].checked)
7604 25 Feb 19 nicklas 289     {
7604 25 Feb 19 nicklas 290       var bioSourceId = Math.abs(parseInt(frm.biosource_id.value));
7604 25 Feb 19 nicklas 291       if (bioSourceId > 0) parents[parents.length] = 'BIOSOURCE:'+bioSourceId;
7604 25 Feb 19 nicklas 292     }
7604 25 Feb 19 nicklas 293     else
7604 25 Feb 19 nicklas 294     {
7604 25 Feb 19 nicklas 295       var ids = Link.getIdsInList(frm.samples, 'SAMPLE');
7604 25 Feb 19 nicklas 296       if (ids.length > 0)
7604 25 Feb 19 nicklas 297       {
7604 25 Feb 19 nicklas 298         parents[parents.length] = 'SAMPLE:'+ids.join(':');
7604 25 Feb 19 nicklas 299       }
7604 25 Feb 19 nicklas 300     }
7604 25 Feb 19 nicklas 301     var protocolId = Math.abs(parseInt(frm.protocol_id.value));
7604 25 Feb 19 nicklas 302     if (protocolId > 0) parents[parents.length] = 'PROTOCOL:'+protocolId;
7604 25 Feb 19 nicklas 303     var kitId = Math.abs(parseInt(frm.kit_id.value));
7604 25 Feb 19 nicklas 304     if (kitId > 0) parents[parents.length] = 'KIT:'+kitId;
7604 25 Feb 19 nicklas 305
7604 25 Feb 19 nicklas 306     return parents;
7604 25 Feb 19 nicklas 307   }
7604 25 Feb 19 nicklas 308   
7604 25 Feb 19 nicklas 309   samples.selectProtocol = function()
7604 25 Feb 19 nicklas 310   {
7604 25 Feb 19 nicklas 311     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 312     var url = '&resetTemporary=1';
7604 25 Feb 19 nicklas 313     url += ItemSubtype.createRelatedFilter('subtype_id', 'PROTOCOL', Data.int('page-data', 'sampling-protocoltype-id'));
7604 25 Feb 19 nicklas 314     if (frm.protocol_id.length > 1) 
7604 25 Feb 19 nicklas 315     {
7604 25 Feb 19 nicklas 316       var id = Math.abs(parseInt(frm.protocol_id[1].value));        
7604 25 Feb 19 nicklas 317       url += '&item_id='+id;
7604 25 Feb 19 nicklas 318     }
7604 25 Feb 19 nicklas 319     Dialogs.selectItem('PROTOCOL', 'protocol_id', 0, url);
7604 25 Feb 19 nicklas 320   }
7604 25 Feb 19 nicklas 321   
7604 25 Feb 19 nicklas 322   samples.selectKit = function()
7604 25 Feb 19 nicklas 323   {
7604 25 Feb 19 nicklas 324     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 325     var url = '&resetTemporary=1';
7604 25 Feb 19 nicklas 326     url += '&tmpfilter:BOOLEAN:inactive=0';
7604 25 Feb 19 nicklas 327     url += ItemSubtype.createRelatedFilter('subtype_id', 'KIT', Data.int('page-data', 'sampling-kittype-id'));
7604 25 Feb 19 nicklas 328     if (frm.kit_id.length > 1) 
7604 25 Feb 19 nicklas 329     {
7604 25 Feb 19 nicklas 330       var id = Math.abs(parseInt(frm.kit_id[1].value));        
7604 25 Feb 19 nicklas 331       url += '&item_id='+id;
7604 25 Feb 19 nicklas 332     }
7604 25 Feb 19 nicklas 333     Dialogs.selectItem('KIT', 'kit_id', 0, url);
7604 25 Feb 19 nicklas 334   }
7604 25 Feb 19 nicklas 335   
7604 25 Feb 19 nicklas 336   samples.subtypeOnChange = function()
7604 25 Feb 19 nicklas 337   {
7604 25 Feb 19 nicklas 338     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 339     var subtypeId = ItemSubtype.getSubtypeId('subtype_id');
7604 25 Feb 19 nicklas 340     var recentInfo = ItemSubtype.getRelatedProjectDefaultAndRecentItems('SAMPLE', subtypeId, ['PROTOCOL', 'KIT', 'BIOPLATE', 'BIOSOURCE', 'SAMPLE']);
7604 25 Feb 19 nicklas 341     ItemSubtype.updateSelectionList(frm.protocol_id, recentInfo.PROTOCOL['recent'], recentInfo.PROTOCOL['default']);
7604 25 Feb 19 nicklas 342     ItemSubtype.updateSelectionList(frm.kit_id, recentInfo.KIT['recent']);
7604 25 Feb 19 nicklas 343     ItemSubtype.updateSelectionList(frm.bioplate_id, recentInfo.BIOPLATE['recent']);
7604 25 Feb 19 nicklas 344   }
7604 25 Feb 19 nicklas 345
7604 25 Feb 19 nicklas 346   samples.parentTypeOnClick = function()
7604 25 Feb 19 nicklas 347   {
7604 25 Feb 19 nicklas 348     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 349     var useSamples = frm.parentType[1].checked;
7604 25 Feb 19 nicklas 350     frm.biosource_id.disabled = useSamples;
7604 25 Feb 19 nicklas 351     frm.samples.disabled = !useSamples;
7604 25 Feb 19 nicklas 352     frm.used_quantity.disabled = !useSamples;
7604 25 Feb 19 nicklas 353   }
7604 25 Feb 19 nicklas 354
7604 25 Feb 19 nicklas 355   samples.selectBioSource = function()
7604 25 Feb 19 nicklas 356   {
7604 25 Feb 19 nicklas 357     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 358     var url = '&resetTemporary=1';
7604 25 Feb 19 nicklas 359     url += ItemSubtype.createRelatedFilter('subtype_id', 'BIOSOURCE');
7604 25 Feb 19 nicklas 360     if (frm.biosource_id.length > 1) 
7604 25 Feb 19 nicklas 361     {
7604 25 Feb 19 nicklas 362       var id = Math.abs(parseInt(frm.biosource_id[1].value));        
7604 25 Feb 19 nicklas 363       url += '&item_id='+id;
7604 25 Feb 19 nicklas 364     }
7604 25 Feb 19 nicklas 365     Dialogs.selectItem('BIOSOURCE', 'biosource_id', 0, url);
7604 25 Feb 19 nicklas 366   }
7604 25 Feb 19 nicklas 367   
7604 25 Feb 19 nicklas 368   samples.bioSourceOnChange = function(event)
7604 25 Feb 19 nicklas 369   {
7604 25 Feb 19 nicklas 370     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 371     frm.parentType[0].checked = true;
7604 25 Feb 19 nicklas 372     frm.parentType[1].checked = false;
7604 25 Feb 19 nicklas 373     samples.parentTypeOnClick();
7604 25 Feb 19 nicklas 374   }
7604 25 Feb 19 nicklas 375   
7604 25 Feb 19 nicklas 376   samples.addSamplesOnClick = function(event)
7604 25 Feb 19 nicklas 377   {
7604 25 Feb 19 nicklas 378     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 379     var currentSamples = Link.getIdsInList(frm.samples, 'SAMPLE');
7604 25 Feb 19 nicklas 380     var url = "&resetTemporary=1&exclude="+currentSamples.join(',');
7604 25 Feb 19 nicklas 381     url += ItemSubtype.createRelatedFilter('subtype_id', 'SAMPLE');
7604 25 Feb 19 nicklas 382     Dialogs.selectItem('SAMPLE', event.currentTarget.id, 1, url);
7604 25 Feb 19 nicklas 383   }
7604 25 Feb 19 nicklas 384
7604 25 Feb 19 nicklas 385   samples.addSampleCallback = function(event)
7604 25 Feb 19 nicklas 386   {
7604 25 Feb 19 nicklas 387     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 388     event.detail.name += ' [-]';
7604 25 Feb 19 nicklas 389     Link.addItem('samples', 'SAMPLE', event.detail);
7604 25 Feb 19 nicklas 390     if (event.detail.remaining == 0)
7604 25 Feb 19 nicklas 391     {
7604 25 Feb 19 nicklas 392       frm.parentType[0].checked = false;
7604 25 Feb 19 nicklas 393       frm.parentType[1].checked = true;
7604 25 Feb 19 nicklas 394       samples.parentTypeOnClick();
7604 25 Feb 19 nicklas 395     }
7604 25 Feb 19 nicklas 396   }
7604 25 Feb 19 nicklas 397
7604 25 Feb 19 nicklas 398   samples.usedQuantityOnChange = function()
7604 25 Feb 19 nicklas 399   {
7604 25 Feb 19 nicklas 400     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 401     var usedQuantity = frm.used_quantity.value;
7604 25 Feb 19 nicklas 402     var displayQuantity = usedQuantity == '' ? '-' : usedQuantity+' µg';
7604 25 Feb 19 nicklas 403     for (var i = 0; i < frm.samples.length; i++)
7604 25 Feb 19 nicklas 404     {
7604 25 Feb 19 nicklas 405       var option = frm.samples[i];
7604 25 Feb 19 nicklas 406       if (option.selected && option.item.id)
7604 25 Feb 19 nicklas 407       {
7604 25 Feb 19 nicklas 408         option.item.value = usedQuantity;
7604 25 Feb 19 nicklas 409         var text = option.text.replace(/\[.*\]/, '['+displayQuantity+']');
7604 25 Feb 19 nicklas 410         option.text = text; 
7604 25 Feb 19 nicklas 411       }
7604 25 Feb 19 nicklas 412     }
7604 25 Feb 19 nicklas 413   }
7604 25 Feb 19 nicklas 414   
7604 25 Feb 19 nicklas 415   samples.samplesOnChange = function()
7604 25 Feb 19 nicklas 416   {
7604 25 Feb 19 nicklas 417     var frm = document.forms['sample'];
7604 25 Feb 19 nicklas 418     var item = frm.samples[frm.samples.selectedIndex].item;
7604 25 Feb 19 nicklas 419     if (item && item.id && item.value != undefined)
7604 25 Feb 19 nicklas 420     {
7604 25 Feb 19 nicklas 421       frm.used_quantity.value = item.value;
7604 25 Feb 19 nicklas 422     }
7604 25 Feb 19 nicklas 423     else
7604 25 Feb 19 nicklas 424     {
7604 25 Feb 19 nicklas 425       frm.used_quantity.value = '';
7604 25 Feb 19 nicklas 426     }
7604 25 Feb 19 nicklas 427     frm.used_quantity.focus();
7604 25 Feb 19 nicklas 428   }
7604 25 Feb 19 nicklas 429   
7604 25 Feb 19 nicklas 430   return samples;
7604 25 Feb 19 nicklas 431 }();
7604 25 Feb 19 nicklas 432
7604 25 Feb 19 nicklas 433 Doc.addElementInitializer(Samples.initElements);
7604 25 Feb 19 nicklas 434 Doc.onLoad(Samples.initPage);