f20f28b07df4e9738560a839a7636a7708d64969
kate
  Mon Oct 31 20:23:33 2011 -0700
Add filtering by assembly
diff --git src/hg/js/encodeProject.js src/hg/js/encodeProject.js
index 91f7fed..e7ea264 100644
--- src/hg/js/encodeProject.js
+++ src/hg/js/encodeProject.js
@@ -1,28 +1,30 @@
 /* encodeProject - javascript utilities for ENCODE-specific things 
  such as controlled vocabulary and experiment table
 
  Formatted: jsbeautify.py -j -k
  Syntax checked: jslint --indent=4 --plusplus=true --strict=false --browser=true
 */
 /*global $ */
 
 var encodeProject = (function () {
     var server = "genome.ucsc.edu",
         assembly = "hg19",
         cgi = "/cgi-bin/hgApi?";
 
+    var accessionPrefix = 'wgEncodeE?';
+
     function cmpNoCase(a, b) {
         // Helper function for case-insensitive sort
         var A, B;
         A = a.toUpperCase();
         B = b.toUpperCase();
         if (A < B) {
             return -1;
         }
         if (A > B) {
             return 1;
         }
         return 0;
     }
 
     // TODO: modularize by extending Array.sort ?
@@ -36,31 +38,31 @@
             return -1;
         }
         if (A > B) {
             return 1;
         }
         return 0;
     }
 
     return {
         setup: function (settings) {
             // Change defaults
             if (settings.server) {
                 server = settings.server;
             }
             if (settings.assembly) {
-                server = settings.assembly;
+                assembly = settings.assembly;
             }
         },
 
         addSearchPanel: function (divId) {
             // Create panel of radio buttons for user to select search type
             // Add to passed in HTML div ID; e.g. #searchTypePanel
             return $(divId).append('<span id="searchPanelTitle"><strong>Search for:</strong></span><input type="radio" name="searchType" id="searchTracks" value="tracks" checked="checked">Tracks<input type="radio" name="searchType" id="searchFiles" value="files">Files');
         },
 
         getSearchUrl: function (assembly, vars) {
             // Return URL for search of type requested in search panel
 
             var prog, cartVar, url;
             if ($('input:radio[name=searchType]:checked').val() === "tracks") {
                 prog = 'hgTracks';
@@ -143,30 +145,33 @@
                 cellTiers[tier].cellTypes.push(cellType.term);
             });
             cellTiers.sort(cmpCV);
             $.each(cellTiers, function (i, tier) {
                 if (!cellTiers[i]) {
                     // for some reason there's  __ element here (not my property)
                     return true;
                 }
                 cellTiers[i].cellTypes.sort(cmpNoCase);
             });
             return cellTiers;
         },
 
         isHistone: function (target) {
             // Helper function, returns true if antibody target histone modification
+            if (target === undefined) {
+               return false;
+            }
             return target.match(/^H[234]/);
         },
 
         antibodyFromExp: function (experiment) {
             // Get antibody from expVars field of experiment
             var match = experiment.expVars.match(/antibody=(\S+)/);
             if (match) {
                 return match[1];
             }
         },
 
         targetFromAntibody: function (antibody, antibodyCV) {
             // Get target for antibody from antibody controlled vocab
             if (antibodyCV[antibody]) {
                 return antibodyCV[antibody].target;
@@ -197,38 +202,50 @@
             });
             $.each(antibodyGroupHash, function (key, item) {
                 antibodyGroups.push(item);
             });
             antibodyGroups.sort(cmpCV);
             $.each(antibodyGroups, function (i, group) {
                 if (!antibodyGroups[i]) {
                     // for some reason there's  __ element here (not my property)
                     return true;
                 }
                 antibodyGroups[i].targets.sort(cmpNoCase);
             });
             return antibodyGroups;
         },
 
+        getExpIdHash: function (expIds) {
+            // Return hash of experiment ID's
+            var expIdHash = {};
+            $.each(expIds, function (i, expId) {
+                expIdHash[expId.expId] = true;
+            });
+            return expIdHash;
+        },
+
+        // UNTESTED
+        expIdFromAccession: function(accession) {
+            return accession.slice(accessionPrefix.length);
+        },
+
         serverRequests: {
             // Requests for data from server API
             experiment: "cmd=encodeExperiments",
-
+            expId: "cmd=encodeExpId",
             dataType: "cmd=cv&type=dataType",
-
             cellType: "cmd=cv&type=cellType",
-
             antibody: "cmd=cv&type=antibody"
         },
 
         loadAllFromServer: function (requests, handler) {
             // Execute requests to server via ajax
             var serverData = [],
                 count = requests.length;
 
             $.each(requests, function (i, request) {
                 $.getJSON("http://" + server + cgi + "db=" + assembly + "&" + request, function (data) {
                     serverData[i] = data;
                     if (--count === 0) {
                         handler(serverData);
                     }
                 });