8e8d987337d6079c06b6890731449edacfb85a35
kate
  Thu Nov 3 10:18:20 2011 -0700
Fix some problems with IE due to more stringent (?) JS interpreter:  1. Comma after final property in object  2. Static method invocation
diff --git src/hg/js/encodeProject.js src/hg/js/encodeProject.js
index d03a9e0..dc0b030 100644
--- src/hg/js/encodeProject.js
+++ src/hg/js/encodeProject.js
@@ -29,30 +29,45 @@
         }
         return 0;
     }
 
     return {
         setup: function (settings) {
             // Change defaults
             if (settings.server) {
                 server = settings.server;
             }
             if (settings.assembly) {
                 assembly = settings.assembly;
             }
         },
 
+        cmpNoCase: function (a, b) {
+        // Helper function for case-insensitive sort - belongs in
+        // more generic lib
+            var A, B;
+            A = a.toUpperCase();
+            B = b.toUpperCase();
+            if (A < B) {
+                return -1;
+            }
+            if (A > B) {
+                return 1;
+            }
+            return 0;
+        },
+
         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';
                 cartVar = 'hgt_tSearch';
             } else {
                 prog = "hgFileSearch";
@@ -94,62 +109,62 @@
             });
             $.each(dataGroupHash, function (key, item) {
                 if (key === "Other") {
                     otherGroup = item;
                 } else {
                     dataGroups.push(item);
                 }
             });
             dataGroups.sort(cmpCV);
             dataGroups.push(otherGroup);
             $.each(dataGroups, function (i, group) {
                 if (!dataGroups[i]) {
                     // for some reason there's  __ element here (not my property)
                     return true;
                 }
-                dataGroups[i].dataTypes.sort(this.cmpNoCase);
+                dataGroups[i].dataTypes.sort(encodeProject.cmpNoCase);
             });
             return dataGroups;
         },
 
         getCellTiers: function (cellTypes) {
             // Return sorted array of cellTier objects each having a .term,
             // with tier number, .celltypes, 
             // and an array of cell types, alphasorted
             var cellTiers = [],
                 tier;
             $.each(cellTypes, function (i, cellType) {
                 tier = cellType.tier;
                 // ignore untiered cell types (all human should have a tier)
                 if (!tier) {
                     return true;
                 }
                 if (!cellTiers[tier]) {
                     cellTiers[tier] = {
                         term: tier,
                         cellTypes: []
                     };
                 }
                 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(this.cmpNoCase);
+                cellTiers[i].cellTypes.sort(encodeProject.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+)/);
@@ -165,78 +180,63 @@
             }
         },
 
         getAntibodyGroups: function (antibodies) {
             // Return sorted array of antibodyGroup objects each having a .label
             // with group name (Histone Modification or Transcription Factor), 
             // and an array of antibody targets, alphasorted
             var antibodyGroups = [],
                 antibodyGroupHash = {},
                 group, target;
             $.each(antibodies, function (i, antibody) {
                 group = encodeProject.isHistone(antibody.target) ? "Histone Modification" : "Transcription Factor";
                 if (!antibodyGroupHash[group]) {
                     antibodyGroupHash[group] = {
                         label: group,
-                        targets: [],
+                        targets: []
                     };
                 }
                 antibodyGroupHash[group].targets.push(antibody.target);
             });
             $.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(this.cmpNoCase);
+                antibodyGroups[i].targets.sort(encodeProject.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);
         },
 
-        cmpNoCase: function (a, b) {
-        // Helper function for case-insensitive sort - belongs in
-        // more generic lib
-            var A, B;
-            A = a.toUpperCase();
-            B = b.toUpperCase();
-            if (A < B) {
-                return -1;
-            }
-            if (A > B) {
-                return 1;
-            }
-            return 0;
-        },
-
         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) {