www/biomaterials/bioplates/bioplates.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 BioPlates = function()
7604 25 Feb 19 nicklas 27 {
7604 25 Feb 19 nicklas 28   var bioplates = {};
7604 25 Feb 19 nicklas 29   var wellInfoCache = [];
7604 25 Feb 19 nicklas 30   
7604 25 Feb 19 nicklas 31   /**
7604 25 Feb 19 nicklas 32     Initialize the page.
7604 25 Feb 19 nicklas 33   */
7604 25 Feb 19 nicklas 34   bioplates.initPage = function()
7604 25 Feb 19 nicklas 35   {
7604 25 Feb 19 nicklas 36     var pageId = Doc.getPageId();
7604 25 Feb 19 nicklas 37     if (pageId == 'edit-page')
7604 25 Feb 19 nicklas 38     {
7604 25 Feb 19 nicklas 39       Buttons.addClickHandler('btnSave', bioplates.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', bioplates.loadAnnotationsFrame);
7604 25 Feb 19 nicklas 44       TabControl.addTabValidator('settings.info', bioplates.validateBioPlate);
7604 25 Feb 19 nicklas 45
7604 25 Feb 19 nicklas 46       // Plate geometry
7604 25 Feb 19 nicklas 47       if (Doc.element('plategeometry_id'))
7604 25 Feb 19 nicklas 48       {
7604 25 Feb 19 nicklas 49         Buttons.addClickHandler('plategeometry_id.select', bioplates.selectPlateGeometry);
7604 25 Feb 19 nicklas 50         Events.addEventHandler('plategeometry_id', 'base-selected', bioplates.setPlateGeometryCallback);
7604 25 Feb 19 nicklas 51
7604 25 Feb 19 nicklas 52         // Bioplate type
7604 25 Feb 19 nicklas 53         Buttons.addClickHandler('bioplatetype_id.select', bioplates.selectBioPlateType);
7604 25 Feb 19 nicklas 54         Events.addEventHandler('bioplatetype_id', 'base-selected', bioplates.setBioPlateTypeCallback);
7604 25 Feb 19 nicklas 55         Events.addEventHandler('bioplatetype_id', 'change', bioplates.bioPlateTypeOnChange);
7604 25 Feb 19 nicklas 56         bioplates.bioPlateTypeOnChange();
7604 25 Feb 19 nicklas 57       }
7604 25 Feb 19 nicklas 58
7604 25 Feb 19 nicklas 59       // Storage location
7604 25 Feb 19 nicklas 60       Buttons.addClickHandler('storage_id.select', bioplates.selectStorageLocation);
7604 25 Feb 19 nicklas 61       Events.addEventHandler('storage_id', 'base-selected', bioplates.setStorageLocationCallback);
7604 25 Feb 19 nicklas 62     }
7604 25 Feb 19 nicklas 63     else if (pageId == 'view-page')
7604 25 Feb 19 nicklas 64     {
7604 25 Feb 19 nicklas 65       var itemId = Data.get('page-data', 'item-id');
7604 25 Feb 19 nicklas 66       var attributes = {'item-type': 'BIOPLATE', 'item-id': itemId};
7604 25 Feb 19 nicklas 67       Buttons.addClickHandler('btnEdit', Buttons.editItem, attributes);
7604 25 Feb 19 nicklas 68       Buttons.addClickHandler('btnDelete', Buttons.deleteItem, attributes);
7604 25 Feb 19 nicklas 69       Buttons.addClickHandler('btnRestore', Buttons.restoreItem, attributes);
7604 25 Feb 19 nicklas 70       Buttons.addClickHandler('btnUsingItems', Buttons.showUsingItems, attributes);
7604 25 Feb 19 nicklas 71       Buttons.addClickHandler('btnDeletePermanently', Buttons.deleteItemPermanently, attributes);
7604 25 Feb 19 nicklas 72       Buttons.addClickHandler('btnShare', Buttons.shareItem, attributes);
7604 25 Feb 19 nicklas 73       Buttons.addClickHandler('btnSetOwner', Buttons.setOwner, attributes);
7604 25 Feb 19 nicklas 74       Buttons.addClickHandler('btnExport', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 75       Buttons.addClickHandler('btnImport', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 76       Buttons.addClickHandler('btnRunPlugin', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 77       
7604 25 Feb 19 nicklas 78       Buttons.addClickHandler('btnMoveBioMaterial', bioplates.moveBioMaterial);
7604 25 Feb 19 nicklas 79       Buttons.addClickHandler('btnCreateChildBioPlate', bioplates.createChildBioPlate);
7604 25 Feb 19 nicklas 80       
7604 25 Feb 19 nicklas 81       TabControl.addTabActivateListener('main.annotations', AnnotationsList.loadOnce);
7604 25 Feb 19 nicklas 82       TabControl.addTabActivateListener('main.overview', Overview.loadOnce);
7604 25 Feb 19 nicklas 83       TabControl.addTabActivateListener('main.history', History.loadOnce);
7604 25 Feb 19 nicklas 84       TabControl.addTabActivateListener('main.events', bioplates.viewEvents);
7604 25 Feb 19 nicklas 85       TabControl.addTabActivateListener('main.wells', bioplates.viewWells);
7604 25 Feb 19 nicklas 86       
7604 25 Feb 19 nicklas 87       Events.addEventHandler('bioplate', 'mouseleave', bioplates.hideWellInfo);
7604 25 Feb 19 nicklas 88     }
7604 25 Feb 19 nicklas 89     else if (pageId == 'list-page')
7604 25 Feb 19 nicklas 90     {
7604 25 Feb 19 nicklas 91       var attributes = {'item-type': 'BIOPLATE'};
7604 25 Feb 19 nicklas 92       var tableAttributes = {'table-id': 'bioplates'};
7604 25 Feb 19 nicklas 93       Buttons.addClickHandler('btnNewItem', Buttons.newItem, attributes);
7604 25 Feb 19 nicklas 94       Buttons.addClickHandler('btnDeleteItems', Buttons.deleteItems, tableAttributes);
7604 25 Feb 19 nicklas 95       Buttons.addClickHandler('btnRestoreItems', Buttons.restoreItems, tableAttributes);
7604 25 Feb 19 nicklas 96       Buttons.addClickHandler('btnShareItems', Buttons.shareItems, tableAttributes);
7604 25 Feb 19 nicklas 97       Buttons.addClickHandler('btnSetOwner', Buttons.setOwnerOfItems, tableAttributes);
7604 25 Feb 19 nicklas 98       Buttons.addClickHandler('btnColumns', Buttons.configureColumns, tableAttributes);
7604 25 Feb 19 nicklas 99       Buttons.addClickHandler('btnExport', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 100       Buttons.addClickHandler('btnImport', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 101       Buttons.addClickHandler('btnRunPlugin', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 102
7604 25 Feb 19 nicklas 103       Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 104       Buttons.addClickHandler('btnOk', Buttons.returnSelected, tableAttributes);
7604 25 Feb 19 nicklas 105     }
7604 25 Feb 19 nicklas 106   }
7604 25 Feb 19 nicklas 107   
7604 25 Feb 19 nicklas 108   // Add event handlers to the 'well' icons
7604 25 Feb 19 nicklas 109   bioplates.initElements = function(element, autoInit)
7604 25 Feb 19 nicklas 110   {
7604 25 Feb 19 nicklas 111     if (autoInit == 'well')
7604 25 Feb 19 nicklas 112     {
7604 25 Feb 19 nicklas 113       if (Data.int(element, 'allow-edit'))
7604 25 Feb 19 nicklas 114       {
7604 25 Feb 19 nicklas 115         Events.addEventHandler(element, 'click', bioplates.editWell);
7604 25 Feb 19 nicklas 116       }
7604 25 Feb 19 nicklas 117       if (Data.int(element, 'show-info'))
7604 25 Feb 19 nicklas 118       {
7604 25 Feb 19 nicklas 119         Events.addEventHandler(element, 'mouseover', bioplates.showWellInfo);
7604 25 Feb 19 nicklas 120       }
7604 25 Feb 19 nicklas 121       else
7604 25 Feb 19 nicklas 122       {
7604 25 Feb 19 nicklas 123         Events.addEventHandler(element, 'mouseover', bioplates.hideWellInfo);
7604 25 Feb 19 nicklas 124       }
7604 25 Feb 19 nicklas 125     }
7604 25 Feb 19 nicklas 126   }
7604 25 Feb 19 nicklas 127
7604 25 Feb 19 nicklas 128   bioplates.loadAnnotationsFrame = function()
7604 25 Feb 19 nicklas 129   {
7604 25 Feb 19 nicklas 130     Annotations.autoLoadEditFrame(null, null, bioplates.getParents());
7604 25 Feb 19 nicklas 131   }
7604 25 Feb 19 nicklas 132   
7604 25 Feb 19 nicklas 133   bioplates.getParents = function()
7604 25 Feb 19 nicklas 134   {
7604 25 Feb 19 nicklas 135     var frm = document.forms['bioplate'];
7604 25 Feb 19 nicklas 136     var parents = new Array();
7604 25 Feb 19 nicklas 137     var storageId = Math.abs(parseInt(frm.storage_id.value));
7604 25 Feb 19 nicklas 138     if (storageId > 0) parents[parents.length] = 'HARDWARE:'+storageId;
7604 25 Feb 19 nicklas 139     return parents;
7604 25 Feb 19 nicklas 140   }
7604 25 Feb 19 nicklas 141
7604 25 Feb 19 nicklas 142   
7604 25 Feb 19 nicklas 143   bioplates.viewWells = function()
7604 25 Feb 19 nicklas 144   {
7604 25 Feb 19 nicklas 145     var bioplateId = Data.get('page-data', 'item-id');
7604 25 Feb 19 nicklas 146     var url = 'wells/index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 147     url += '&bioplate_id='+bioplateId;
7604 25 Feb 19 nicklas 148     location.replace(url);
7604 25 Feb 19 nicklas 149   }
7604 25 Feb 19 nicklas 150   
7604 25 Feb 19 nicklas 151   bioplates.viewEvents = function()
7604 25 Feb 19 nicklas 152   {
7604 25 Feb 19 nicklas 153     var bioplateId = Data.get('page-data', 'item-id');
7604 25 Feb 19 nicklas 154     var url = 'events/index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 155     url += '&bioplate_id='+bioplateId;
7604 25 Feb 19 nicklas 156     location.replace(url);
7604 25 Feb 19 nicklas 157   }
7604 25 Feb 19 nicklas 158   
7604 25 Feb 19 nicklas 159   bioplates.moveBioMaterial = function()
7604 25 Feb 19 nicklas 160   {
7604 25 Feb 19 nicklas 161     var bioplateId = Data.get('page-data', 'item-id');
7604 25 Feb 19 nicklas 162     var url = 'index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 163     url += '&cmd=MoveBioMaterial';
7604 25 Feb 19 nicklas 164     url += '&item_id='+bioplateId;
7604 25 Feb 19 nicklas 165     Dialogs.openPopup(url, 'MoveBioMaterial', 900, 600);
7604 25 Feb 19 nicklas 166   }
7604 25 Feb 19 nicklas 167   
7604 25 Feb 19 nicklas 168   bioplates.createChildBioPlate = function()
7604 25 Feb 19 nicklas 169   {
7604 25 Feb 19 nicklas 170     var bioplateId = Data.get('page-data', 'item-id');
7604 25 Feb 19 nicklas 171     var url = 'index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 172     url += '&cmd=CreateChildBioPlate';
7604 25 Feb 19 nicklas 173     url += '&item_id='+bioplateId;
7604 25 Feb 19 nicklas 174     Dialogs.openPopup(url, 'CreateChildBioPlate', 900, 600);
7604 25 Feb 19 nicklas 175   }
7604 25 Feb 19 nicklas 176   
7604 25 Feb 19 nicklas 177   bioplates.editWell = function(event)
7604 25 Feb 19 nicklas 178   {
7604 25 Feb 19 nicklas 179     var well = event.currentTarget;
7604 25 Feb 19 nicklas 180     var wellId = Data.get(well, 'item-id');
7604 25 Feb 19 nicklas 181     Items.editItem('BIOWELL', wellId);
7604 25 Feb 19 nicklas 182   }
7604 25 Feb 19 nicklas 183   
7604 25 Feb 19 nicklas 184   bioplates.showWellInfo = function(event)
7604 25 Feb 19 nicklas 185   {
7604 25 Feb 19 nicklas 186     var well = event.currentTarget;
7604 25 Feb 19 nicklas 187     var wellId = Data.get(well, 'item-id');
7604 25 Feb 19 nicklas 188     var coordinate = Data.get(well, 'coordinate');
7604 25 Feb 19 nicklas 189     
7604 25 Feb 19 nicklas 190     // Display the 'wellInfo' postit note
7604 25 Feb 19 nicklas 191     var wellInfo = Doc.element('wellInfo');
7604 25 Feb 19 nicklas 192     var wellTd = Doc.element('well.' + wellId);
7604 25 Feb 19 nicklas 193     var contentPos = Doc.getElementPosition('main.content');
7604 25 Feb 19 nicklas 194     var pos = Doc.getElementPosition(wellTd);
7604 25 Feb 19 nicklas 195     var wiPos = Doc.getElementPosition('wellInfo');
7604 25 Feb 19 nicklas 196     wellInfo.style.left = (pos.left + pos.width - contentPos.left - 5) + 'px';
7604 25 Feb 19 nicklas 197     wellInfo.style.top = (pos.top - contentPos.top - 10) + 'px';
7604 25 Feb 19 nicklas 198     Doc.show('wellInfo');
7604 25 Feb 19 nicklas 199
7604 25 Feb 19 nicklas 200     // Get the well information
7604 25 Feb 19 nicklas 201     var info = wellInfoCache['well.'+wellId];
7604 25 Feb 19 nicklas 202     if (!info)
7604 25 Feb 19 nicklas 203     {
7604 25 Feb 19 nicklas 204       // Use Ajax to load the information
7604 25 Feb 19 nicklas 205       wellInfo.innerHTML = '[' + coordinate + '] loading, please wait...';
7604 25 Feb 19 nicklas 206       info = bioplates.loadWellInfo(wellId);
7604 25 Feb 19 nicklas 207     }
7604 25 Feb 19 nicklas 208     var html;
7604 25 Feb 19 nicklas 209     var bioMaterial = info.bioMaterial;
7604 25 Feb 19 nicklas 210     if (bioMaterial)
7604 25 Feb 19 nicklas 211     {
7604 25 Feb 19 nicklas 212       if (bioMaterial.denied)
7604 25 Feb 19 nicklas 213       {
7604 25 Feb 19 nicklas 214         html = 'Denied';
7604 25 Feb 19 nicklas 215       }
7604 25 Feb 19 nicklas 216       else
7604 25 Feb 19 nicklas 217       {
7604 25 Feb 19 nicklas 218         var id = bioMaterial.id;
7604 25 Feb 19 nicklas 219         var type = bioMaterial.type;
7604 25 Feb 19 nicklas 220         var subtype = bioMaterial.subtype;
7604 25 Feb 19 nicklas 221         html = '<span class="link"';
7604 25 Feb 19 nicklas 222         html += ' data-item-type="'+type+'" data-item-id="'+id+'"';
7604 25 Feb 19 nicklas 223         html += ' data-no-edit="'+bioMaterial.editable ? 0 : 1+'"';
7604 25 Feb 19 nicklas 224         html += ' title="View this item';
7604 25 Feb 19 nicklas 225         if (bioMaterial.editable) html += ' (use CTRL, ALT or SHIFT to edit)';        
7604 25 Feb 19 nicklas 226         html += '">'+bioMaterial.name+'</span>';
7604 25 Feb 19 nicklas 227         html += ': <b>' + type + '</b>';
7604 25 Feb 19 nicklas 228         if (subtype) html += ' <span class="itemsubtype">[' + subtype.name + ']</span>';
7604 25 Feb 19 nicklas 229         html += '<br>'+bioMaterial.description;
7604 25 Feb 19 nicklas 230       }
7604 25 Feb 19 nicklas 231     }
7604 25 Feb 19 nicklas 232     else
7604 25 Feb 19 nicklas 233     {
7604 25 Feb 19 nicklas 234       html = 'Empty';
7604 25 Feb 19 nicklas 235     }
7604 25 Feb 19 nicklas 236     wellInfo.innerHTML = html;
7604 25 Feb 19 nicklas 237     Events.addEventHandler(wellInfo.getElementsByClassName('link')[0], 'click', Items.itemOnClick);
7604 25 Feb 19 nicklas 238   }
7604 25 Feb 19 nicklas 239
7604 25 Feb 19 nicklas 240   bioplates.hideWellInfo = function()
7604 25 Feb 19 nicklas 241   {
7604 25 Feb 19 nicklas 242     Doc.hide('wellInfo');
7604 25 Feb 19 nicklas 243   }
7604 25 Feb 19 nicklas 244
7604 25 Feb 19 nicklas 245   bioplates.loadWellInfo = function(wellId)
7604 25 Feb 19 nicklas 246   {
7604 25 Feb 19 nicklas 247     var request = Ajax.getXmlHttpRequest();
7604 25 Feb 19 nicklas 248     var url = 'wells/ajax.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 249     url += '&cmd=WellInfo&encodeStrings=1&item_id=' + wellId;
7604 25 Feb 19 nicklas 250     request.open("GET", url, false); 
7604 25 Feb 19 nicklas 251     
7604 25 Feb 19 nicklas 252     // NOTE! 'false' causes code to wait for the response. aka. 'Synchronous AJAX' or SJAX.
7604 25 Feb 19 nicklas 253     request.send(null);
7604 25 Feb 19 nicklas 254     var response = JSON.parse(request.responseText);
7604 25 Feb 19 nicklas 255     if (response.status != 'ok')
7604 25 Feb 19 nicklas 256     {
7604 25 Feb 19 nicklas 257       alert(response.message);
7604 25 Feb 19 nicklas 258       return false;
7604 25 Feb 19 nicklas 259     }
7604 25 Feb 19 nicklas 260
7604 25 Feb 19 nicklas 261     wellInfoCache['well.'+wellId] = response;
7604 25 Feb 19 nicklas 262     return response;
7604 25 Feb 19 nicklas 263   }
7604 25 Feb 19 nicklas 264
7604 25 Feb 19 nicklas 265   
7604 25 Feb 19 nicklas 266   bioplates.validateBioPlate = function()
7604 25 Feb 19 nicklas 267   {
7604 25 Feb 19 nicklas 268     var frm = document.forms['bioplate'];
7604 25 Feb 19 nicklas 269     if (Strings.trim(frm.name.value) == '')
7604 25 Feb 19 nicklas 270     {
7604 25 Feb 19 nicklas 271       Forms.showNotification(frm.name, 'You must enter a name');
7604 25 Feb 19 nicklas 272       return false;
7604 25 Feb 19 nicklas 273     }
7604 25 Feb 19 nicklas 274     if (frm.bioplatetype_id && frm.bioplatetype_id.length == 0)
7604 25 Feb 19 nicklas 275     {
7604 25 Feb 19 nicklas 276       Forms.showNotification('bioplatetype_id.select', 'You must select a bioplate type');
7604 25 Feb 19 nicklas 277       return false;
7604 25 Feb 19 nicklas 278     }
7604 25 Feb 19 nicklas 279     if (frm.plategeometry_id && frm.plategeometry_id.length == 0)
7604 25 Feb 19 nicklas 280     {
7604 25 Feb 19 nicklas 281       Forms.showNotification('plategeometry_id.select', 'You must select a plate geometry');
7604 25 Feb 19 nicklas 282       return false;
7604 25 Feb 19 nicklas 283     }
7604 25 Feb 19 nicklas 284     return true;
7604 25 Feb 19 nicklas 285   }
7604 25 Feb 19 nicklas 286
7604 25 Feb 19 nicklas 287   // Submit the form
7604 25 Feb 19 nicklas 288   bioplates.save = function()
7604 25 Feb 19 nicklas 289   {
7604 25 Feb 19 nicklas 290     var frm = document.forms['bioplate'];
7604 25 Feb 19 nicklas 291     if (TabControl.validateActiveTab('settings'))
7604 25 Feb 19 nicklas 292     {
7604 25 Feb 19 nicklas 293       Annotations.saveModifiedAnnotationsToForm(frm);
7604 25 Feb 19 nicklas 294       frm.submit();
7604 25 Feb 19 nicklas 295     }
7604 25 Feb 19 nicklas 296   }
7604 25 Feb 19 nicklas 297
7604 25 Feb 19 nicklas 298   bioplates.selectPlateGeometry = function()
7604 25 Feb 19 nicklas 299   {
7604 25 Feb 19 nicklas 300     var frm = document.forms['bioplate'];
7604 25 Feb 19 nicklas 301     var url = '';
7604 25 Feb 19 nicklas 302     if (frm.plategeometry_id.length > 0) 
7604 25 Feb 19 nicklas 303     {
7604 25 Feb 19 nicklas 304       url += '&item_id='+frm.plategeometry_id[0].value;
7604 25 Feb 19 nicklas 305     }
7604 25 Feb 19 nicklas 306     Dialogs.selectItem('PLATEGEOMETRY', 'plategeometry_id', 0, url);
7604 25 Feb 19 nicklas 307   }
7604 25 Feb 19 nicklas 308   
7604 25 Feb 19 nicklas 309   bioplates.setPlateGeometryCallback = function(event)
7604 25 Feb 19 nicklas 310   {
7604 25 Feb 19 nicklas 311     var frm = document.forms['bioplate'];
7604 25 Feb 19 nicklas 312     var list = frm.plategeometry_id;
7604 25 Feb 19 nicklas 313     if (list.length < 1 || list[0].disabled)
7604 25 Feb 19 nicklas 314     {
7604 25 Feb 19 nicklas 315       Forms.addListOption(list, 0, new Option());
7604 25 Feb 19 nicklas 316     }
7604 25 Feb 19 nicklas 317     list[0].value = event.detail.id;
7604 25 Feb 19 nicklas 318     list[0].text = event.detail.name;
7604 25 Feb 19 nicklas 319     list.selectedIndex = 0;
7604 25 Feb 19 nicklas 320   }
7604 25 Feb 19 nicklas 321
7604 25 Feb 19 nicklas 322   bioplates.selectBioPlateType = function()
7604 25 Feb 19 nicklas 323   {
7604 25 Feb 19 nicklas 324     var frm = document.forms['bioplate'];
7604 25 Feb 19 nicklas 325     var url = '';
7604 25 Feb 19 nicklas 326     if (frm.bioplatetype_id.length > 0) 
7604 25 Feb 19 nicklas 327     {
7604 25 Feb 19 nicklas 328       url += '&item_id='+frm.bioplatetype_id[0].value;
7604 25 Feb 19 nicklas 329     }
7604 25 Feb 19 nicklas 330     Dialogs.selectItem('BIOPLATETYPE', 'bioplatetype_id', 0, url);    
7604 25 Feb 19 nicklas 331   }
7604 25 Feb 19 nicklas 332   
7604 25 Feb 19 nicklas 333   bioplates.setBioPlateTypeCallback = function(event)
7604 25 Feb 19 nicklas 334   {
7604 25 Feb 19 nicklas 335     
7604 25 Feb 19 nicklas 336     var frm = document.forms['bioplate'];
7604 25 Feb 19 nicklas 337     var list = frm.bioplatetype_id;
7604 25 Feb 19 nicklas 338     if (list.length < 1 || list[0].disabled)
7604 25 Feb 19 nicklas 339     {
7604 25 Feb 19 nicklas 340       Forms.addListOption(list, 0, new Option());
7604 25 Feb 19 nicklas 341     }
7604 25 Feb 19 nicklas 342     list[0].value = event.detail.id;
7604 25 Feb 19 nicklas 343     list[0].text = event.detail.name;
7604 25 Feb 19 nicklas 344     list.selectedIndex = 0;
7604 25 Feb 19 nicklas 345     bioplates.bioPlateTypeOnChange();
7604 25 Feb 19 nicklas 346   }
7604 25 Feb 19 nicklas 347
7604 25 Feb 19 nicklas 348   bioplates.bioPlateTypeOnChange = function()
7604 25 Feb 19 nicklas 349   {
7604 25 Feb 19 nicklas 350     var frm = document.forms['bioplate'];
7604 25 Feb 19 nicklas 351     if (frm.bioplatetype_id.selectedIndex < 0) return;
7604 25 Feb 19 nicklas 352     
7604 25 Feb 19 nicklas 353     var bioPlateTypeInfo = bioplates.getBioPlateTypeInfo(frm.bioplatetype_id.value);
7604 25 Feb 19 nicklas 354     var freezerTypeId = Data.get('storage_id', 'freezer-id');
7604 25 Feb 19 nicklas 355     var storageTypeId = bioPlateTypeInfo.storageType ?  bioPlateTypeInfo.storageType.id : freezerTypeId;
7604 25 Feb 19 nicklas 356     Data.set('storage_id', 'storage-type-id', storageTypeId);
7604 25 Feb 19 nicklas 357     var recentInfo = ItemSubtype.getProjectDefaultAndRecentItems('BIOPLATE', storageTypeId);
7604 25 Feb 19 nicklas 358     ItemSubtype.updateSelectionList(frm.storage_id, recentInfo['recent'], recentInfo['default']);
7604 25 Feb 19 nicklas 359   }
7604 25 Feb 19 nicklas 360   
7604 25 Feb 19 nicklas 361   
7604 25 Feb 19 nicklas 362   bioplates.getBioPlateTypeInfo = function(bioPlateTypeId)
7604 25 Feb 19 nicklas 363   {
7604 25 Feb 19 nicklas 364     var request = Ajax.getXmlHttpRequest();
7703 11 Apr 19 nicklas 365     var url = '../bioplatetypes/ajax.jsp?ID=' + App.getSessionId();
7604 25 Feb 19 nicklas 366     url += '&cmd=GetPlateTypeInfo';
7604 25 Feb 19 nicklas 367     url += '&item_id='+bioPlateTypeId;
7604 25 Feb 19 nicklas 368     request.open("GET", url, false); 
7604 25 Feb 19 nicklas 369     request.send(null);
7604 25 Feb 19 nicklas 370     return JSON.parse(request.responseText);
7604 25 Feb 19 nicklas 371   }
7604 25 Feb 19 nicklas 372   
7604 25 Feb 19 nicklas 373   bioplates.selectStorageLocation = function()
7604 25 Feb 19 nicklas 374   {
7604 25 Feb 19 nicklas 375     var frm = document.forms['bioplate'];
7604 25 Feb 19 nicklas 376     var url = '';
7604 25 Feb 19 nicklas 377     if (frm.storage_id.length > 1) 
7604 25 Feb 19 nicklas 378     {
7604 25 Feb 19 nicklas 379       var id = Math.abs(parseInt(frm.storage_id[1].value));        
7604 25 Feb 19 nicklas 380       url += '&item_id='+id;
7604 25 Feb 19 nicklas 381     }
7604 25 Feb 19 nicklas 382     var storageTypeId = Data.get('storage_id', 'storage-type-id', Data.get('storage_id', 'freezer-id'));
7604 25 Feb 19 nicklas 383     url += '&resetTemporary=1&tmpfilter:INT:itemSubtype='+storageTypeId;
7604 25 Feb 19 nicklas 384     Dialogs.selectItem('HARDWARE', 'storage_id', 0, url);
7604 25 Feb 19 nicklas 385   }
7604 25 Feb 19 nicklas 386   
7604 25 Feb 19 nicklas 387   bioplates.setStorageLocationCallback = function(event)
7604 25 Feb 19 nicklas 388   {
7604 25 Feb 19 nicklas 389     var frm = document.forms['bioplate'];
7604 25 Feb 19 nicklas 390     if (frm.storage_id.length < 1)
7604 25 Feb 19 nicklas 391     {
7604 25 Feb 19 nicklas 392       frm.storage_id[frm.storage_id.length] = new Option();
7604 25 Feb 19 nicklas 393     }
7604 25 Feb 19 nicklas 394     frm.storage_id[0].value = event.detail.id;
7604 25 Feb 19 nicklas 395     frm.storage_id[0].text = event.detail.name;
7604 25 Feb 19 nicklas 396     frm.storage_id.selectedIndex = 0;
7604 25 Feb 19 nicklas 397   }
7604 25 Feb 19 nicklas 398
7604 25 Feb 19 nicklas 399   return bioplates;
7604 25 Feb 19 nicklas 400 }();
7604 25 Feb 19 nicklas 401
7604 25 Feb 19 nicklas 402 Doc.addElementInitializer(BioPlates.initElements);
7604 25 Feb 19 nicklas 403 Doc.onLoad(BioPlates.initPage);