#Includes special functions for tracks unique to the v5 browser. Functions that are used for tracks across multiple browsers should go in ../include/functions

B97coords = function (B97_coords) { 
 var coords_split = B97_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the B97 browser' href='https://jbrowse.maizegdb.org?data=B97&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 CML103coords = function (Cml103_coords) { 
 var coords_split = Cml103_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the CML103 browser' href='https://jbrowse.maizegdb.org?data=CML103&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 CML228coords = function (Cml228_coords) { 
 var coords_split = Cml228_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the CML228 browser' href='https://jbrowse.maizegdb.org?data=CML228&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 CML247coords = function (Cml247_coords) { 
 var coords_split = Cml247_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the CML247 browser' href='https://jbrowse.maizegdb.org?data=CML247&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 CML277coords = function (Cml277_coords) { 
 var coords_split = Cml277_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the CML277 browser' href='https://jbrowse.maizegdb.org?data=CML277&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 CML322coords = function (Cml322_coords) { 
 var coords_split = Cml322_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the CML322 browser' href='https://jbrowse.maizegdb.org?data=CML322&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 CML333coords = function (Cml333_coords) { 
 var coords_split = Cml333_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the CML333 browser' href='https://jbrowse.maizegdb.org?data=CML333&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 CML52coords = function (Cml52_coords) { 
 var coords_split = Cml52_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the CML52 browser' href='https://jbrowse.maizegdb.org?data=CML52&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 CML69coords = function (Cml69_coords) { 
 var coords_split = Cml69_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the CML69 browser' href='https://jbrowse.maizegdb.org?data=CML69&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 HP301coords = function (Hp301_coords) { 
 var coords_split = Hp301_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the HP301 browser' href='https://jbrowse.maizegdb.org?data=HP301&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 IL14Hcoords = function (Il14h_coords) { 
 var coords_split = Il14h_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the IL14H browser' href='https://jbrowse.maizegdb.org?data=IL14H&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 Ki11coords = function (Ki11_coords) { 
 var coords_split = Ki11_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the Ki11 browser' href='https://jbrowse.maizegdb.org?data=Ki11&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 Ki3coords = function (Ki3_coords) { 
 var coords_split = Ki3_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the Ki3 browser' href='https://jbrowse.maizegdb.org?data=Ki3&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 Ky21coords = function (Ky21_coords) { 
 var coords_split = Ky21_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the Ky21 browser' href='https://jbrowse.maizegdb.org?data=Ky21&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 M162Wcoords = function (M162w_coords) { 
 var coords_split = M162w_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the M162W browser' href='https://jbrowse.maizegdb.org?data=M162W&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 M37Wcoords = function (M37w_coords) { 
 var coords_split = M37w_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the M37W browser' href='https://jbrowse.maizegdb.org?data=M37W&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 Mo18Wcoords = function (Mo18w_coords) { 
 var coords_split = Mo18w_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the Mo18W browser' href='https://jbrowse.maizegdb.org?data=Mo18W&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 Ms71coords = function (Ms71_coords) { 
 var coords_split = Ms71_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the Ms71 browser' href='https://jbrowse.maizegdb.org?data=Ms71&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 NC350coords = function (Nc350_coords) { 
 var coords_split = Nc350_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the NC350 browser' href='https://jbrowse.maizegdb.org?data=NC350&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 NC358coords = function (Nc358_coords) { 
 var coords_split = Nc358_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the NC358 browser' href='https://jbrowse.maizegdb.org?data=NC358&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 Oh43coords = function (Oh43_coords) { 
 var coords_split = Oh43_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the Oh43 browser' href='https://jbrowse.maizegdb.org?data=Oh43&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 Oh7Bcoords = function (Oh7b_coords) { 
 var coords_split = Oh7b_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the Oh7B browser' href='https://jbrowse.maizegdb.org?data=Oh7B&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 P39coords = function (P39_coords) { 
 var coords_split = P39_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the P39 browser' href='https://jbrowse.maizegdb.org?data=P39&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 Tx303coords = function (Tx303_coords) { 
 var coords_split = Tx303_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the Tx303 browser' href='https://jbrowse.maizegdb.org?data=Tx303&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
 Tzi8coords = function (Tzi8_coords) { 
 var coords_split = Tzi8_coords.split(":");
    var chr = coords_split[0];
    var pos_split = coords_split[1].split("_");
    var start = pos_split[0];
    var end = pos_split[1];
    var padding = 5000;
    var loc = chr + ":" + eval(parseInt(start) - padding) + ".." + eval(parseInt(end) + padding);
    var highlight = chr + ":" + start + ".." + end;
    return "<a title='View this SNP on the Tzi8 browser' href='https://jbrowse.maizegdb.org?data=Tzi8&loc="+loc+"&highlight="+highlight+"&tracks=gwas_snps%2Cgene_models'>"+highlight+"</a>";
 }
 
  #EVA links for GWAS Chinese SNP track
 evalinks = function(allele_rs, feature) {
  if(allele_rs != "NA") {
    return "<a href='https://www.ebi.ac.uk/eva/?variant&accessionID="+allele_rs+"&species=zmays_agpv4&assemblyAccession=GCA_000005005.6' target='_blank'>"+allele_rs+"</a>";
  }
  return allele_rs;
 }
 
  #NCBI colors
 ncbicolors = function (feature) {
     var colors = {
     'BestRefSeq' : 'gold',
     'Gnomon' : 'mediumseagreen',
     'RefSeq' : 'firebrick',
     'tRNAscan-SE' : 'royalblue',
     'BestRefSeq%2CGnomon' : 'yellowgreen',
     'cmsearch' : 'darkorchid',
     'Curated Genomic' : 'silver'
     };
     var source = feature.get('source');
     return colors[source];
 }
 
  #DBxref links for the NCBI annotation track
 ncbidblinks = function(dbxref, feature) {
   var html = "";
   var dbxref_arr = [];
   if (typeof dbxref == "string") {
    dbxref_arr[0] = dbxref;
   }
   else {
    dbxref_arr = dbxref;
   }
   if (dbxref_arr[0].includes("GeneID")) {
     var id_parts = dbxref_arr[0].split(":");
     html += id_parts[0] + ": <a href='https://www.ncbi.nlm.nih.gov/gene/?term=" + id_parts[1] +"' target='_blank'>"+id_parts[1]+"</a>";
   }
   if (dbxref_arr.length > 1) {
       if (dbxref_arr[1].includes("miRBase")) {
         var id_parts = dbxref_arr[1].split(":");
         html += id_parts[0] + ": <a href='http://www.mirbase.org/cgi-bin/mirna_entry.pl?acc=" + id_parts[1] + "' target='_blank'>"+id_parts[1]+"</a>";
       }
   }
   if (html == "") {
      console.log("No dbxref links set");
      html = dbxref;
   }
  return html;
 }
 
  #NCBI Gnomon gene model colors
 gnomoncolors = function (feature) {
     var colors = {
     'Chainer' : 'crimson',
     'Gnomon' : 'mediumseagreen',
     'Chainer_GapFilled' : 'orange',
     'FullAbInitio' : 'forestgreen',
     'PartAbInitio' : 'teal',
     };
     var source = feature.get('source');
     return colors[source];
 }
 
 #Links for dbxref in AcDs track
 acdslinks = function(pangenome, feature) {
   var dbxref = feature.get('dbxref');
   var html = "";
   if (typeof dbxref == "object") {
       for (i=0, len=dbxref.length; i<len; i++) {
         var id = dbxref[i].split(":");
         html += "<a href='https://www.ncbi.nlm.nih.gov/nuccore/"+id[1]+"' target='_blank'>"+dbxref[i]+"</a><br>";
       }
   }
   else {
         var id = dbxref.split(":");
         html += "<a href='https://www.ncbi.nlm.nih.gov/nuccore/"+id[1]+"' target='_blank'>"+dbxref+"</a><br>";
   }
   return html;
 }

 #Color code for single/double placement features in AcDs track
 acdscolors = function(feature) {
   var placement = feature.get('placement');
   if (placement == "Single") {
     return "seagreen";
   }
   return "royalblue";
 }

 #Links from Available From in Ac/Ds track
 availfromlinks = function(name, feature) {
   var avail = feature.get('Available_from');
   var name = feature.get('Name');
   var stock = feature.get('Stock');
   if (avail == "Stock_Center") {
       return "<a href='https://www.maizegdb.org/data_center/stock/"+stock+"' target='_blank'>Order the stock</a> containing "+name+" from the Stock Center.";
   }
   return "Contact <a href='https://www.maizegdb.org/person/16898' target='_blank'>Erik Vollbrecht</a> to order the stock containing "+name+".";
 }
 
    #BonnMu Links
 bonnmustocklinks = function(name, feature) {
   var img = feature.get('img');
   var name = feature.get('Name');
   var stock = feature.get('Stock');
   var img_html = "";
   if (typeof img == "object") {
       for (i=0, len=img.length; i<len; i++) {
		 if (img[i] != "None") {
			if (i > 0) {
				img_html += "<br>";
			}
			img_html += "<a href='https://images.maizegdb.org/BonnMuImages2024/"+img[i]+".JPG' target='_blank'>"+stock[i]+"<br><img height='200px' src='https://images.maizegdb.org/BonnMuImages2024/"+img[i]+".JPG'/></a>";
		 }
       }
   }
   else {
		img_html = (img == "None") ? img : "<a href='https://images.maizegdb.org/BonnMuImages2024/"+img+".JPG' target='_blank'>"+stock+"<br><img height='230px' src='https://images.maizegdb.org/BonnMuImages2024/"+img+".JPG'/></a>";
   }
   return img_html;
 }
 
  dbSNPv4links = function (v4_coords, feature) { 
    var coords_split = v4_coords.split(":");
    var name = feature.get('name');
    var chr = coords_split[0];
    var pos = coords_split[1];
    var padding = 50;
    var start = eval(parseInt(pos) - padding);
    var end = eval(parseInt(pos) + padding);
    var loc = chr + ":" + start + ".." + end;
    var highlight = name + "%40yellow";
    return "<a title='View this SNP on the B73v4 browser' href='https://www.maizegdb.org/gbrowse/maize_v4?q="+loc+";l=dbSNP;h_feat="+highlight+"' target='_blank'>"+v4_coords+"</a>";
 }

 SNP50v3links = function (v3_coords, feature) { 
    var coords_split = v3_coords.split(":");
    var name = feature.get('name');
    var chr = coords_split[0];
    var pos = coords_split[1];
    var padding = 50;
    var start = eval(parseInt(pos) - padding);
    var end = eval(parseInt(pos) + padding);
    var loc = chr + ":" + start + ".." + end;
    var highlight = name + "%40yellow";
    return "<a title='View this SNP on the B73v3 browser' href='https://www.maizegdb.org/gbrowse/maize_v3?q="+loc+";l=50SNP_dbSNP;h_feat="+highlight+"' target='_blank'>"+v3_coords+"</a>";
 }

 #SNP50 track color code
 snp50colors = function(feature) {
    var placement = feature.get('locus_id');
    if (placement == "null") {
       return "black";
    }
    return "darkviolet";
 }                   
 
 #Links for Stocks in UniformMu track
 ufmustocklinks = function(pangenome, feature) {
   var stocks = feature.get('stock');
   var stocks_html = "";
   if (typeof stocks == "object") {
       for (i=0, len=stocks.length; i<len; i++) {
         stocks_html += "<a href='https://www.maizegdb.org/data_center/stock/"+stocks[i]+"' target='_blank'>"+stocks[i]+"</a><br>";
       }
   }
   else {
       stocks_html += "<a href='https://www.maizegdb.org/data_center/stock/"+stocks+"' target='_blank'>"+stocks+"</a>";
   }
   return stocks_html;
 }
 
 #Links for other Mu positions in UniformMu track
 ufmulinks = function(pangenome, feature) {
   var mu = feature.get('mu_pos');
   var mu_html = "";
   if (typeof mu == "object") {
       for (i=0, len=mu.length; i<len; i++) {
         mu_html += "<a href='/?data=v5test&loc="+mu[i]+"' target='_blank'>"+mu[i]+"</a><br>";
       }
   }
   else {
       mu_html += "<a href='/?data=v5test&loc="+mu+"' target='_blank'>"+mu+"</a>";
   }
   return mu_html;
 }
 
    #Sirevirus colors
 sireviruscolors = function(feature) {
    var stars = feature.get('Type');
     var colors = {
     'D12mer' : 'crimson',
     'D8mer' : 'darkorange',
     'envelope-like' : 'saddlebrown',
     'Intergrase_core_domain' : 'indigo',
     'long_terminal_repeat' : 'gray',
     'P12mer' : 'royalblue',
     'P8mer' : 'forestgreen',
     'RT_core_domain' : 'violet',
     'Sirevirus' : 'goldenrod',
     };
     return colors[stars];
 }  

    #alphafold colors
  alphafoldcolors = function(feature) {
    var score = feature.get('alphafold_score');
    if (!score) {
        score = feature.get('Esm_score');
    }
    if (score > 90) {
        return "blue";
    }
    else if (score > 70) {
        return "lightskyblue";
    }
    else if (score > 50) {
        return "gold";
    }
    return "darkorange";
 } 
 
      #Tu2022 ARF colors
 tu2022colors = function(feature) {
    var type = feature.get('Type');
     var colors = {
     'region_rep1' : '#8B0013',
     'summit_rep1' : '#8B0013',
     'region_rep2' : '#138B00',
     'summit_rep2' : '#138B00'
     };
     return colors[type];
 }
 
    #Promoter colors
 promotercolors = function(feature) {
    var type = feature.get('Type');
     var colors = {
     'promoter50' : 'crimson',
     'promoter100' : 'darkorange',
     'promoter250' : 'gold',
     'promoter500' : 'seagreen',
     'promoter1000' : 'royalblue',
     'nucleotide_motif' : 'indigo'
     };
     return colors[type];
 }
 
   #Li 2022 SNP colors
 li2022traitcolors = function (feature) {
     var trait_colors = {
     'anthesis-to-silking interval': 'mediumorchid',
     'cob weight': '#DDB500',
     'days to anthesis': 'mediumpurple',
     'days to silking': 'mediumorchid',
     'ear height': '#DDB500',
     'ear length': '#DDB500',
     'ear weight': '#DDB500',
     'ear diameter': '#DDB500',
     'grain yield per plant': 'peru',
     'hundred kernel volume': 'goldenrod',
     'hundred kernel weight': 'goldenrod',
     'kernel ratio': 'goldenrod',
     'kernel row number': 'goldenrod',
     'kernel weight per ear': 'goldenrod',
     'kernel number per row': 'goldenrod',
     'kernel width': 'goldenrod',
     'kernel length': 'goldenrod',
     'plant height': 'darkgreen',
     'reduced relative ear height': '#DDB500',
     'tassel branch number': 'rebeccapurple',
     'tassel length': 'rebeccapurple'
     };
     var name = feature.get('trait');
     return trait_colors[name];
 }
 
  #Color code for TE-like methylation tracks
 uniprotcolors_old = function(feature) {
   var identity = parseFloat(feature.get('Identity'));
   var green, red = 0;
   const MAX_COLOR = 235;
   if (identity >= 0.75) {
     green = MAX_COLOR;
     red = MAX_COLOR * (1 - identity) * 2;
   }
   else if (identity < 0.75 && identity >= 0.50) {
    green = MAX_COLOR;
    red = MAX_COLOR * (1 - identity) * 2;
   }
   else if (identity < 0.50 && identity >= 0.25) {
    red = MAX_COLOR;
    green = MAX_COLOR * (identity * 2);
   }
   else {
     red = MAX_COLOR;
     green = MAX_COLOR * (identity * 2);
   }
   return "rgb("+red+", "+green+", 0)";
 }
 
 uniprotcolors = function(feature) {
    var identity = parseFloat(feature.get('Identity'));
       if (identity >= 0.75) {
     return "blue";
   }
   else if (identity < 0.75 && identity >= 0.50) {
    return "lightskyblue";
   }
   else if (identity < 0.50 && identity >= 0.25) {
    return "gold";
   }
   else {
     return "darkorange";
   }
 }
 
 #Uniprot names
 uniprotnames = function(name, feature) {
    var gene_id = feature.get('gene_id');
    var uniprot_desc = feature.get('uniprot_desc');
    var name = feature.get('name');
    var desc = (gene_id == "NA") ? "("+uniprot_desc+")" : "("+gene_id+", "+uniprot_desc+")";
    return  "<a href='https://www.uniprot.org/uniprot/"+name+"' target='_blank'>"+name+"</a> " + desc;
 }
 
 #Color code for new Uniprot tracks (from Laura Tibbs-Cortes)
 uniprotcolors2 = function(feature) {
   var identity = parseFloat(feature.get('Identity'));
   var blue, green, red = 0;
   const MAX_COLOR = 255;
   if (identity >= 0.75) {
     blue = 0;
     red = MAX_COLOR;
     green = MAX_COLOR * (1 - identity) * 2;
   }
   else if (identity < 0.75 && identity >= 0.50) {
    red = MAX_COLOR * (0.25 + identity);
    blue = MAX_COLOR * (0.75 - identity) * 2;
    green = MAX_COLOR - 20;
   }
   else if (identity < 0.50 && identity >= 0.25) {
    green = MAX_COLOR;
    blue = MAX_COLOR * (0.5 + identity);
    red = 0;
   }
   else {
     blue = MAX_COLOR;
     green = MAX_COLOR * (identity * 2);
     red = 0;
   }
   return "rgb("+red+", "+green+", 0)";
 }

 #TF links for Transcription Factor annotation track
 tflinks = function(name, feature) {
    return "<a href='https://grassius.org/proteininfor/Maize/"+name+"' target='_blank'>"+name+"</a>";
 } 
 
 #TF links for Transcription Factor annotation track
 tffamilylinks = function(name, feature) {
    return "<a href='https://grassius.org/family/Maize/"+name+"' target='_blank'>"+name+"</a>";
 }
 
 #TF links for Transcription Factor annotation track
 tfclonelinks = function(name, feature) {
    if (name === "N/A") {
        return name;
    }
	return "<a href='https://grassius.org/tfomeinfor/"+name+"' target='_blank'>"+name+"</a>";
 }
 
  #Color code features in PeptideAtlas track
 peptideatlascolors = function(feature) {
   var ngenloc = feature.get('NGenLoc');
   if (parseInt(ngenloc) > 1) {
     return "indigo";
   }
   return "crimson";
 }

 #Links for PeptideAtlas
 peptidelinks = function(pangenome, feature) {
    var name = feature.get('Id').split("-");
    return  "<a href='https://db.systemsbiology.net/sbeams/cgi/PeptideAtlas/GetPeptide?_tab=3&atlas_build_id=564&searchWithinThis=Peptide+Name&searchForThis="+name[0]+"&action=QUERY' target='_blank'>"+feature.get('Id')+"</a>";
 }
 
 #Links for PeptideAtlas
 peptidegenelinks = function(pangenome, feature) {
    var name = feature.get('Alias');
    return  "<a href='https://db.systemsbiology.net/sbeams/cgi/PeptideAtlas/GetProtein?action=QUERY&protein_name="+name+"_P001' target='_blank'>"+name+"_P001</a>";
 }
 
    #Links for TF Grotewold2024 track
 TFNamelinks = function(name, feature) {
  if(name != "N/A") {
    return "<a href='https://grassius.org/proteininfor/Maize/"+name+"' target='_blank'>"+name+"</a>";
  }
  return name;
 }
 
    #Links for TF Grotewold2024 track
 TFClonelinks = function(name, feature) {
  if(name != "N/A") {
    return "<a href='https://grassius.org/tfomeinfor/"+name+"' target='_blank'>"+name+"</a>";
  }
  return name;
 }
 
    #Links for TF Grotewold2024 track
 TFFamilylinks = function(name, feature) {
  if(name != "N/A") {
    return "<a href='https://grassius.org/family/Maize/"+name+"' target='_blank'>"+name+"</a>";
  }
  return name;
 }
 
   #Links for TF Grotewold2024 track
 TFgenelinks = function(name, feature) {
  console.log("TFgenelinks; name = " + name);
  var ret_string = "";
  var gene_arr = new Array();
  if (typeof(name) === 'string') {
    gene_arr[0] = name;  
  }
  else {
    gene_arr = name;
  }
      var genome_id = gene_arr[0].substring(0,9);
      console.log("TFgenelinks; genome_id = " + genome_id);
      console.log("gene_arr length = " + gene_arr.length);
  for (let i=0; i<gene_arr.length; i++) {
      console.log("i = " + i);
      if (i > 0) {
        ret_string += ", ";   
      }
      switch(genome_id) {
        case "Zm00001eb":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=v5&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00018ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=B97&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00019ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=CML52&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00020ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=CML69&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
          case "Zm00021ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=CML103&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00022ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=CML228&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00023ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=CML247&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
          case "Zm00024ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=CML277&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00025ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=CML322&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00026ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=CML333&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00027ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=HP301&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00028ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=Il14H&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00029ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=Ki3&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
          case "Zm00030ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=Ki11&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00031ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=Ky21&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00032ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=M37W&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
          case "Zm00033ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=M162W&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00034ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=Mo18W&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00035ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=Ms71&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
          case "Zm00036ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=NC350&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00037ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=NC358&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00038ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=Oh7B&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00039ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=Oh43&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00040ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=P39&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00041ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=Tx303&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        case "Zm00042ab":
          ret_string += "<a href='https://jbrowse.maizegdb.org?data=Tzi8&loc="+gene_arr[i]+"' target='_blank'>"+gene_arr[i]+"</a>";
          break;
        default:
          ret_string += gene_arr[i];
          break;
      }
  }
  return ret_string;
 }
 
 #Colors for the reelgene tracks
 reelgenecolors = function(feature) {
   var score = parseFloat(feature.get('score')); 
   var type = feature.get('Type');
   console.log("colorcode3 type: " + type + "; score: " + score);
   if (type == "PhyloP") {   
       if (score < -1) {
         return "darkorange";
       }
       if (score < 1) {
         return "gold";
       }
       if (score < 3) {
         return "lightskyblue";
       }
       if (score > 3) {
         return "blue";
       }
   }
   else {
      if (score < 0.2) {
        return "darkorange";
      }
      else if (score < 0.5) {
        return "gold";
      }
      else if (score < 0.8) {
        return "lightskyblue";
      }
      else {
        return "blue";
      }
   }
 }
 
 reelgenedescription = function(feature) {
   var score = parseFloat(feature.get('average')); 
   return "Avg. score: " + score.toFixed(3);
 }
 
 repcolors = function(feature) {
   var name = feature.get('Name');
   if (name.includes("Rep1")) {
     return "royalblue";
   }
   return "crimson";
 }
 
 peakheight = function(feature) {
   var sig_val = feature.get('Signalvalue');
   var min_height = 1;
   var sig_val_rounded = Math.round(sig_val * 10) / 10;
   var sig_val_weight = 10;
   return min_height + (sig_val_rounded * sig_val_weight);
 }
 
 #Marand2025 track colors
 marand2025colors = function (feature) {
     let colors = {
     'L1_leaf_primordia_boundary' : '#000075',
     'abaxial_bundle_sheath' : '#008080',
     'adaxial_lateral_organ_primordia_boundary' : '#3cb44b',
     'adaxial_leaf_primordia' : '#4363d8',
     'axillary_meristem' : '#46f0f0',
     'bundle_sheath' : '#800000',
     'cortex' : '#808000',
     'dividing_leaf_primordia' : '#808080',
     'ground_meristem' : '#911eb4',
     'guard_mother_cell' : '#9a6324',
     'hypodermal_sclerenchyma' : '#8adfa3',
     'mesophyll' : '#ace608',
     'mesophyll_precursors' : '#f71504',
     'phloem_SE_procambial_precursors' : '#e6beff',
     'pith_parenchyma' : '#f032e6',
     'procambial_meristem' : '#f58231',
     'protodermal_cell' : '#fabebe',
     'protophloem_SE' : '#efc8a1',
     'rib_meristem_SAM' : '#ffe119',
     'xylem_parenchyma' : '#dfdaa8'
     };
     var name = feature.get('celltype');
     return colors[name];
 }