// Map Drawing Routines
// (c)2007 Steve Wanamaker, All rights reserved.


// && *********************************************************************************************
// && *  DRAW_MAP()   Sets up vars, calls draw_chr_lines(), then get_map(), that calls draw_markers() 
// && *********************************************************************************************
function draw_map() {        // && the starting option number for the first map
mctype = map_lets.charAt(viewnum - map_startopt);  //  A = ATH, R = Rice, C = citrus, B = barley 

mtopPixel   = 65;  // thisform.grid2.top  + 15
mleftPixel  = 5;   // thisform.grid2.left + 40  && +20 to allow for position legend
mpixelwidth =  formwidth - mleftPixel - 5
mMapHeight  = 600; // thisform.cmd_entrez3.Top - mtopPixel - 2

// alert('draw map 1');
document.getElementById("a_1").style.display="block";

if (parseInt(zoomlevel,10) <= 4) {
  mapcanvas.setFont("arial","9px");
  charwidth=7;
} else if (parseInt(zoomlevel,10) <= 6) {
  mapcanvas.setFont("arial","10px");
  charwidth=8;
} else {
 mapcanvas.setFont("arial","10px");
 charwidth=8;
}
mapcanvas.setColor("#000000"); // black

// mapcanvas.drawString('mctype:' + mctype, 1, 1)
// mapcanvas.paint()
// alert('mctype'+mctype) 

if (mctype=='A') {      
  // * -- ARABIDOPSIS -- *
  have_pos     = 0;
  g_numCHR     = 5;
  numRows      = 1;
  numperRow    = 5;
  mbetweenRows = 0;
  chrMaxPixels = mMapHeight - 40;
  organism     = 'Arabidopsis'

} else if (mctype=='R') {
   //   * -- RICE -- *
  have_pos     = 0;
  g_numCHR     = 12;
  numperRow    =  6;
  numRows      = (cur_chrom_index===0)? 2: 1;
  mbetweenRows = (cur_chrom_index===0)? 50: 1;
  chrMaxPixels = (mMapHeight - mbetweenRows) / numRows + 30;  // && make taller because only #1 is long
  organism     = 'Rice'

} else if (mctype=='B') {
  // * -- BARLEY -- *
  organism     = 'Barley'
  have_pos    = 1;
  g_numCHR    = 7;
  mleftPixel  = mleftPixel - 15;
  mpixelwidth = mpixelwidth + 50;
  if (formwidth > 1007) {
    numRows      = 1;
    numperRow    = 7;
    mbetweenRows = 0;
    chrMaxPixels = mMapHeight - 40;
  } else {
    numRows      = 2;
    numperRow    = 4;
    mbetweenRows = 50;
    chrMaxPixels = (mMapHeight - mbetweenRows) / numRows - 20;  // && make shorter
  }
} else if (mctype=='C') {
  // * -- CITRUS -- *
  organism     = 'Citrus'
  have_pos = 1;
  chrMaxLen = 999;  // not defined
  g_numCHR  = 9;
  numRows   = 2;
  numperRow = 4;
} else if (mctype=='L') {
  // * -- LINEAR -- *
  organism     = 'Barley'
  have_pos = 1;
  chrMaxLen = 999;  // not defined
  g_numCHR  = 1;
  numRows   = 1;
  numperRow = 1;
}

// alert('draw map 2');

var levels=new Array(0.5, 0.7, 0.8, 1, 2, 3.5, 6, 10, 16, 26);
chrMaxPixels = parseInt(chrMaxPixels * levels[parseInt(zoomlevel,10)-1],10);
mhorizSpacing = parseInt(mpixelwidth / numperRow,10);

// && -- DRAW CONTROLS --
var mstr=''
if (! mctype == 'L') {
var mstr='Chromosome&nbsp;<select name="opt_chrom" id="opt_chrom" size=1 onChange="new_chrom();" style="background-color:white;">\n';
for (a=0;a<=g_numCHR;a++) {
  mchrom=eval('chrom_names_' + mctype + '[' + a + ']');
  mstr+= '<option value='+a+' ';
  mstr+= (a==cur_chrom_index)?'SELECTED':'';
  if (a>0) {
    mchrom=mchrom.substr(1);
  }
  mstr+='>'+mchrom+'</option>\n';
}
mstr = mstr + '</select>\n'
}
mstr = mstr + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Zoom [-';
//alert('ZOOM LEVEL: ' + zoomlevel);
for (a=1;a<=10;a++) {
  var c="'" + a + "'";
  mstr+='<input type=RADIO id="z' + a + '" name="zoom" value="' + a + '" onclick="new_zoom('+c+');"';
  mstr+= (a==zoomlevel)? "CHECKED": "";
  mstr+= '>';
}
var ch1='';
var ch2='';
if (show_locus=='U') {
  ch1='CHECKED';
} else {
  ch2='CHECKED';
}
mstr+= '+]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=RADIO id="uni_marker1" name="uni_marker" '+ch1+' onclick="new_uni_marker('
mstr+= "'U'"
mstr+= ');">Unigene&nbsp;&nbsp;&nbsp;<input type=RADIO id="uni_marker2" name="uni_marker" '+ch2+' onclick="new_uni_marker('
mstr+= "'M'"
mstr+= ');>Marker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map View Under Construction';
document.getElementById('mapdiv').innerHTML = mstr;

g_syntenyWith=''
if (mctype=='B' && cur_chrom_index!=0) {
  g_syntenyWith='R';
}
if (mctype=='C' && cur_chrom_index!=0) {
  g_syntenyWith='A';
}

// && -- DRAW THE CHROMOSOME LINES -- 
chrNum=0;
g_selectedCHRname=cur_chrom;
g_selectedArm='';
draw_chr_lines(mctype, mleftPixel, g_selectedCHRname, g_selectedArm, true, false);
mapcanvas.paint();
if (! isempty(g_syntenyWith) && g_syntenyWith.length>0 && cur_chrom_index!=0) {
  // * -- DRAW CHROMOSOME LINES FOR OTHER ORGANISM -- *
  draw_chr_lines(g_syntenyWith, mleftPixel + mhorizSpacing, '', '', false, true);
}

// && ---- DRAW GET MAP DATA, THEN CALLS DRAW_ ---- 

get_map('S', g_syntenyWith);  // && standard
//if (! isempty(g_syntenyWith)) {
//  get_map('O');  // && other     <<<< DRAW SYNTENY MAP
//}

mapcanvas.paint();

}  // && ------ end of draw_map() -------


// *********************************************
// *  draw_one_legend()    DRAW ONE LEGEND      
// *********************************************
function draw_one_legend(mvert, chrMaxLen, chrMaxPixels) {
// alert('draw_one_legend ' + mvert + '  ' + chrMaxLen + '  ' + chrMaxPixels);
  captionwidth=2;
  divisor=1;
  divided_num=chrMaxLen*1;

  if (chrMaxLen < 60) {
    minc = (chrMaxPixels<300)?4:2;
  } else if (chrMaxLen < 500) {
    minc      = 10;
  } else {
    minc       = (chrMaxPixels<420)?2:1;
    divisor    = 1000000;
    divided_num=chrMaxLen/divisor;
  }
  numlabels = divided_num / minc;

 // && -- DRAW LEGEND LINES -- *
  mthisPixelHeight = chrMaxPixels;
  mvert         = parseInt(mvert,10);
  mbot          = mvert + mthisPixelHeight - 1;
  mfarleftpixel = 5;
  mlineleft     = parseInt(mfarleftpixel + 9 + (captionwidth * g_map_charpixelwidth),10);
  // alert('left ' + mlineleft + '  mvert ' + (mvert-10) + ' mbot ' + mbot + '  mfarleftpixel ' + mfarleftpixel);

  mapcanvas.drawLine(mlineleft, mvert-10, mlineleft, mbot);           // && vertical line
  mapcanvas.drawLine(mfarleftpixel+2, mvert-10, mlineleft, mvert-10); // && line across the top
  if (zoomlevel>4) {
    mfarleftpixel=1;  // bigger font
  }
//alert(divided_num.toFixed(1));
  mheader = (chrMaxLen < 500)?'cM':'Mb';
  mapcanvas.drawString(mheader, mfarleftpixel+5 + ((captionwidth - 2) * g_map_charpixelwidth), mvert-25);  // title at top
  mapcanvas.drawString(divided_num.toFixed(1)+' '+mheader, mfarleftpixel+5, mbot+3);
//  mapcanvas.drawString('ChrMaxLen '+chrMaxLen + '   chrMaxPixels ' + chrMaxPixels + '  minc ' + minc, mfarleftpixel+5, mbot+13);
  
 // && -- DRAW NUMBERS GOING DOWN -- *
  texthalf       = g_map_charpixelheight / 2;
  pixelincrement = mthisPixelHeight / numlabels;
  labelvalue     = 0;  // mstartShowPos
  pixelvert      = mvert;
  numtodo = parseInt(numlabels,10)+1;
 // mapcanvas.drawString('chrMaxLen ' + chrMaxLen + '  numlabels ' + numlabels+' numtodo ' + numtodo + '  chrMaxPixels ' + chrMaxPixels , 300,300) 
  
  for (a=1; a<=numtodo; a++) {
    mapcanvas.drawLine(mlineleft-4, pixelvert, mlineleft+4, pixelvert);  // && main pip
    if (pixelvert + (pixelincrement / 2) < mbot) {  // && still room draw a half-pip
      mapcanvas.drawLine(mlineleft-2, pixelvert + (pixelincrement / 2), mlineleft+2, pixelvert + (pixelincrement / 2));  // && mid pip
    }
    
    mlabel = ''+parseInt(labelvalue,10);
    mapcanvas.drawString(mlabel, mfarleftpixel+5, pixelvert-texthalf-1);

    pixelvert  = mvert + (pixelincrement * a);
    labelvalue = labelvalue + minc;
  }

  mapcanvas.paint();
}  //   && ------------- END OF DRAW LEGEND ------------- *


// && ********************************************
// && *  draw_chr_lines()   Draw chromosome lines 
// && ********************************************
function draw_chr_lines(l_mctype, mleftPixel, mselectedCHRname, mselectedArm, draw_legend, drawing_synteny) {

// alert('IN   numchr ' + g_numCHR + '  chrMaxLen' + chrMaxLen) ;   
//mleft = document.getElementById('gridbox_left');

var l_cur_chrom_index = drawing_synteny?0:cur_chrom_index;

if (l_mctype=='A') {      
  // * -- ARABIDOPSIS -- *
  have_pos     = 0;
  var l_numCHR     = 5;
  numRows      = 1;
  numperRow    = 5;
  mbetweenRows = 0;
  var l_chrMaxPixels = mMapHeight - 40;
  l_organism     = 'Arabidopsis'
  chrMaxLen = 30430084

} else if (l_mctype=='R') {
   //   * -- RICE -- *
  have_pos     = 0;
  var l_numCHR = 12;
  numperRow    =  6;
  numRows      = (l_cur_chrom_index===0)? 2: 1;
  mbetweenRows = (l_cur_chrom_index===0)? 50: 1;
  var l_chrMaxPixels = (mMapHeight - mbetweenRows) / numRows + 30;  // && make taller because only #1 is long
  l_organism     = 'Rice'

} else if (l_mctype=='B') {
  // * -- BARLEY -- *
  l_organism     = 'Barley'
  have_pos    = 1;
  var l_numCHR    = 7;
  mleftPixel  = mleftPixel - 15;
  mpixelwidth = mpixelwidth + 50;
  if (formwidth > 1007) {
    numRows      = 1;
    numperRow    = 7;
    mbetweenRows = 0;
    var l_chrMaxPixels = mMapHeight - 40;
  } else {
    numRows      = 2;
    numperRow    = 4;
    mbetweenRows = 50;
    var l_chrMaxPixels = (mMapHeight - mbetweenRows) / numRows - 20;  // && make shorter
  }
} else if (l_mctype=='C') {
  // * -- CITRUS -- *
  l_organism     = 'Citrus'
  have_pos = 1;
  chrMaxLen = 999;  // not defined
  var l_numCHR  = 9;
  numRows   = 2;
  numperRow = 4;
} else if (l_mctype=='L') {
  // * -- LINEAR MAP -- *
  l_organism  = 'Barley'
  have_pos    = 1;
  chrMaxLen   = 999;  // not defined
  var l_numCHR  = 1;
  numRows   = 1;
  numperRow = 1;
  mbetweenRows = 0;
  var l_chrMaxPixels = (mMapHeight - mbetweenRows) / numRows - 20;
}

mpixelwidth = formwidth - 400
if (drawing_synteny) {
  mpixelwidth-=150;
}
var levels=new Array(0.5, 0.7, 0.8, 1, 2, 3.5, 6, 10, 16, 26);
var l_chrMaxPixels = parseInt(l_chrMaxPixels * levels[parseInt(zoomlevel,10)-1],10);
mhorizSpacing = parseInt(mpixelwidth / numperRow,10);

chrMaxLen=eval('chromlen_arr_'+l_mctype+'[' + l_cur_chrom_index + ']');
// alert('chrMaxLen: ' + chrMaxLen);
chrMaxLen2=0;
chrMaxPixels2=0;
pixelSubtract=0;
if (numRows > 1  && (l_cur_chrom_index===0 || drawing_synteny)) {
  for (a=numperRow+1;a<=l_numCHR;a++) {
    chrMaxLen2=Math.max(chrMaxLen2,eval('chromlen_arr_'+l_mctype+'[' + a + ']') );
  }
  chrMaxPixels2= l_chrMaxPixels * (chrMaxLen2 / chrMaxLen);
  if (chrMaxPixels2!==0) {
    pixelSubtract=l_chrMaxPixels-chrMaxPixels2;  // the 2nd row is shorter, shorten the canvas
  }
}

// alert(l_mctype + ' mMapHeight:' + mMapHeight + ' l_chrMaxPixels: ' + l_chrMaxPixels);

var mhorizSpacing = parseInt(mpixelwidth / numperRow,10);

mleftPixel+= parseInt(mhorizSpacing / 2,10) + 90;      // && left offset for map
if (l_cur_chrom_index>0 && ! drawing_synteny) {
  // -- DRAWING A SINGLE CHROMOSOME 
  mleftPixel+=50;
}

var numStripes=2;
var stepsize=1.5;
var mvert  = mtopPixel;
var mhoriz = mleftPixel;
// var mstartShowPos = 0;

//if (l_cur_chrom_index!==0) {
  // * -- HIGHLIGHT THE SELECTED CHROMOSOME -- *
  //thisform.ForeColor = RGB(21,21,255)
//}

if (draw_legend) {  //  && ---- ON FIRST CHROMOSOME, DRAW LEGEND ---- *
  e=document.getElementById("mapdiv");
  e.style.height = parseInt(l_chrMaxPixels * numRows + mbetweenRows + 70 - pixelSubtract,10) + 'px';
  draw_one_legend(mvert, chrMaxLen, l_chrMaxPixels);
// alert('l_chrMaxPixels: ' + l_chrMaxPixels);
  if (numRows > 1  && l_cur_chrom_index===0) {
    draw_one_legend(mvert+ l_chrMaxPixels + mbetweenRows, chrMaxLen2, chrMaxPixels2);  // && draw legend for the 2nd row
  }
}

// alert('index:'+l_cur_chrom_index);

var firstchr = chrNum;

thisCnum=0;
for (jj=1;jj<=l_numCHR;jj++) {
 // mapcanvas.drawString(chrNum + ' of '+l_numCHR , 450,(10*chrNum));
  if (l_cur_chrom_index!=0 && jj!=l_cur_chrom_index) {
    continue;
  }

  chrNum++
  chrom = eval('chrom_names_' +l_mctype+'[' + jj + ']');
  chroms[chrNum-1]=chrom;

  chrpixelpos[chrNum-1] = new Array(9);
  mcentro  = eval('centro_arr_'+l_mctype+'[' + jj + ']');
  chromlen = eval('chromlen_arr_'+l_mctype+'[' + jj + ']');

  chrpixelpos[chrNum-1][0] = mhoriz;
  chrpixelpos[chrNum-1][1] = mvert;
  chrpixelpos[chrNum-1][2] = chromlen;

 // mapcanvas.drawString(chrNum + '  ['+chrom+']', 500,(10*chrNum));

  thisArmHeader = '';
  thisSHowArms  = 'SL';
  chrpixelpos[chrNum-1][8] = 0;  // starting display offset in pixels
  mMaxlen = chrMaxLen;
//  IF chrNum = 1 AND ! EMPTY(mselectedArm)
//    * -- SHOW ONLY ONE ARM -- *
//    chrpixelpos[chrNum-1][2] = IIF(mselectedArm = 'S', mcentro, chromlen - mcentro)  // Chrom length
//    thisArmHeader = mselectedArm
//    mcentro       = IIF(mselectedArm = 'S', 0.1, chrpixelpos[chrNum-1][2])  // position centromere at top or bottom 
//    mMaxlen       = chrpixelpos[chrNum-1][2]
//    thisShowArms  = mselectedArm
//  endif
//  chroms[chrNum-1]         = chrom
//* WAIT WINDOW 'set chroms['+TRANSFORM(chrNum)+'] = ' + chrom + '  l_mctype = ' + l_mctype
  // * -- CALC THIS CHR HEIGHT -- *
  mthisPixelHeight       = parseInt(l_chrMaxPixels * (chrpixelpos[chrNum-1][2] / mMaxlen),10);
  chrpixelpos[chrNum-1][3] = mthisPixelHeight;

  //* -- CALC CENTREMERE PIXEL POS -- *
  if (mcentro===0) {
    mcent = 0;
  } else if (mselectedArm=='S') {
    mcent = mvert + mthisPixelHeight;
  } else if (mselectedArm=='L') {
    chrpixelpos[chrNum-1][7] = l_chrMaxPixels * (mcentro / mMaxlen);
    mcent = mvert;
  } else {
    mcent = mvert + (mthisPixelHeight * (mcentro / chromlen));
  }
  
  // && -- SHOW ORGANISM ABOVE CHROMOSOME NUMBER -- *
  //msayvert = mvert / charpixelheight - 2;
  //msayleft = mhoriz / charpixelwidth - IIF(LEN(ALLTRIM(SUBSTR(chrom,2))) > 1, 1, .4);
  msayvert = mvert - 30;
  msayleft = mhoriz - (l_organism.length*4) + 10;

  // @ msayvert-1,msayleft+1-(LEN(TRIM(l_organism))/2) say TRIM(l_organism)    && "Barley"
  mapcanvas.drawString(l_organism, msayleft, msayvert)

  msayleft = mhoriz - 8 + ((parseInt(chrom.substr(1),10)<10 && l_mctype!='B')?4:0);
  msayvert = mvert - 16;

  // && -- SAY CHROMOSOME NUMBER -- *
  cansynt1 = (chrNum==1);    // ! isempty(g_syntenyWith))
  
  if (g_cansynteny && mvert==mtopPixel && ( cansynt1 || (l_mctype=='C' || l_mctype=='B')) ) {
    mapcanvas.setColor("#0000FE");                   // blue
    mapcanvas.drawString(chrom.substr(1), msayleft, msayvert);
    if (thisCnum==1 && l_cur_chrom_index==chrom) {     // probmlem here.  could be the wrong organism
     // thisform.ForeColor = RGB(21,21,255)
      mapcanvas.setColor("#1E1EFE");
    } else {
      mapcanvas.setColor("#000000");                   // black
    }
  } else {
    mapcanvas.drawString(chrom.substr(1), msayleft, msayvert);
  }
  chrpixelpos[chrNum-1][4] = msayvert;
  chrpixelpos[chrNum-1][5] = msayleft;
  chrpixelpos[chrNum-1][6] = l_mctype;
  chrpixelpos[chrNum-1][7] = mcent;  // && centremere pixel pos

//* WAIT WINDOW 'thisshowarms: ' + thisShowArms + '  '

  if (mcentro===0) {  //   && don't have centromere
    mbot = mvert + mthisPixelHeight - 1;
    for (b = mhoriz-numStripes; b<=mhoriz; b++) {
      mapcanvas.drawLine(b, mvert-1, b, mbot);
    }
  } else if (thisSHowArms.match('S')=='S') {
    // -- DRAW SHORT (TOP) ARM -- *
    mbot = mcent - (numStripes * stepsize);
    for (b = mhoriz-numStripes; b<=mhoriz; b++) {
      mapcanvas.drawLine(b, mvert-1, b, mbot);
      mbot = mbot + stepsize;
    }
    mbot-=stepsize;
    for (b = mhoriz+1; b<=mhoriz+1+numStripes; b++) {
      mapcanvas.drawLine(b, mvert-1, b, mbot);
      mbot-=stepsize;
    }
  
    if (thisSHowArms.match('L')=='L') {
      // -- DRAW LONG (BOTTOM) ARM -- * 
      mbot = mvert + mthisPixelHeight - 1;
      mtop = mcent + (numStripes * stepsize);
      for (b = mhoriz-numStripes; b<=mhoriz; b++) {
        mapcanvas.drawLine(b, mtop, b, mbot);
        mtop-=stepsize;
      }
      mtop+=stepsize;
      for (b = mhoriz+1; b<=mhoriz+1+numStripes; b++) {
        mapcanvas.drawLine(b, mtop, b, mbot);
        mtop+=stepsize;
      }
    }
  }
  
  // NEXT CHROMOSOME
  thisCnum++;
  mhoriz+=mhorizSpacing;

  if (thisCnum==numperRow) {
    mhoriz = mleftPixel;
    mvert  = mvert + l_chrMaxPixels + mbetweenRows;
  }

}  // endfor

}  // && END OF draw_chr_lines()  (chromosomes)


// *****************************************************
// *  get_map   Get Map Data (ajax) and Call draw_markers  
// *****************************************************
function get_map(std_other, g_syntenyWith) {
// get map data (ajax)
try {
  maprequest = new XMLHttpRequest();
} catch (trymicrosoft) {
  try {
    maprequest = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (othermicrosoft) {
    try {
      maprequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (failed) {
      maprequest = false;
    }  
  }
}

if (!maprequest) {
  alert("Error initializing XMLHttpRequest!");
  return;
}
if (mctype=="L") {
  mrecno = -1
} else {
  var mrecno = mygrid_left.getSelectedId();
}
url = './mapdata.wc?mapid=' + mapid + '&ctype=' + mctype + '&std_other=' + std_other+'&show_locus='+show_locus+'&synteny='+g_syntenyWith+'&recno='+mrecno+'&chr='+g_selectedCHRname;
maprequest.open("GET", url, true);
maprequest.onreadystatechange = draw_markers;
maprequest.send(null);
// && end of get_map
}
// && ***************************************



// && *************************************************************
// && *  draw_markers   RECEIVE AJAX MAP DATA, CALL DRAW_MARKERS2  
// && *************************************************************
function draw_markers() {    //  && S or O
 // mapdata=new Array();
 // mapdata[0]="ERROR: No response";
  
 // alert('draw_markers  readystate = ' + maprequest.readyState);
  if (maprequest.readyState == 4) {
    if (maprequest.status == 200) {
     // alert('draw_markers');
    // alert('maprequest.responseText:' + maprequest.responseText);
      mapdata = maprequest.responseText.split("\n");
      mctype    = mapdata[0].charAt(0);
      std_other = mapdata[0].charAt(1);
      g_syntenyWith=mapdata[0].charAt(2);
      if (mapdata[0].charAt(2)=='|') {
        jj=mapdata[0].substr(3);
      } else {
        jj=mapdata[0].substr(4);
      }
      chroms1=jj.split(',')
   //  alert('draw_markers section 1 got: ' + mapdata);
   //   alert(jj+'\nchroms1[0]'+chroms1[0]+'\nchroms1[1]'+chroms1[1])
     draw_markers2(mctype, std_other);
    } else {
     alert("draw_markers  Error: status is " + maprequest.status);
    }
  }
}
 // end of draw_markers

// **********************************************************
// *  DRAW_MARKERS2    HAVE THE AJAX DATA, DRAW THE MARKERS
// **********************************************************
function draw_markers2(mctype, std_other) {
// * -- DRAW EACH MARKER -- *

//mstr = '';
//for (z=0;z<chroms.length;z++) {
//  mstr+=z+' ' + chroms[z] + '\n';
//}
//alert(mstr);

//alert('draw_markers2 ' + mapdata);

//var levels=new Array(0.5, 0.7, 0.8, 1, 2, 3.5, 6, 10, 16, 26);
//vert_multiplier = levels[parseInt(zoomlevel,10)-1]
//alert('vert_multiplier: ' + vert_multiplier);
var sel_sayvert       = 0;
var sel_sayleft       = 0;
var last_sayvert_left = -1123;
var last_sayvert_rt   = -1123;
var selected_hoffset  = -10;
var mhoffset          = -10;
var lchrom            = "jj";
var charpixelheight   = 10;
var charpixelwidth    = 10;
numLoci=mapdata.length;
if (mapdata[0]=='ERROR') {
  numLoci=0;
}
g_selectedCHR=''
if (cur_chrom_index!=0) {
  g_selectedCHR=eval('chrom_names_' +mctype+'[' + cur_chrom_index + ']');
//  alert('g_selectedCHR:'+g_selectedCHR);
}

//alert('numLoci:'+numLoci);
for (a=0;a<numLoci;a++) {
  var aline   =mapdata[a].split('\t');
  var setno   =parseInt(aline[0],10);
  var identifier=aline[1];
  var chrom   = aline[2]+'         ';
  chrom = chrom.substring(0,9);
  var pos     =parseInt(aline[3],10);
  var otherCHR=aline[4];
 //  var otherArm=aline[5];
  var otherPos =parseInt(aline[6],10);
  var linecolor=aline[7];
  var textcolor=aline[8];


 //  mchrom = (std_other=='S')?chrom:otherCHR;
  mchrom = chrom;
 //alert(mapdata[a]+'\nSetno:' + setno + ' identifier:'+identifier+'chrom:'+chrom+'pos:'+pos+'mchrom:'+mchrom)
  if (isempty(mchrom)) {
    continue;
  }

 //alert('step 2')
  if (mchrom!=lchrom) {
    mhoffset          = -10;    //  start on the left for each new chrom
    last_sayvert_left = -1123;
    last_sayvert_rt   = -1123;
    lchrom            = mchrom;
    mchromnum=-1;
    for (z=0;z<chroms1.length;z++) {
      if (chroms[z]==mchrom) {
        mchromnum=z;
        break;
      }
    }
    if (mchromnum==-1) { lchrom = 'jj'; }
  }

  if (cur_chrom_index!=0 && mchrom!=g_selectedCHR) {
    continue;
  }


  //&& -------- DRAW TICK MARK -------- *
 //  mpos       = (std_other=='S')?pos:otherpos;
  mpos = pos;
// if (a==1) alert('chrMaxPixels: ' + chrMaxPixels + '  zoomlevel: ' + zoomlevel);
 //if (a<10) {
 //  mapcanvas.paint(); 
 //  alert('a = ' + a  + '  chrom: ' + chrom + '  lchrom: ' + lchrom + '  setno ' + setno + '  identifier: ' + identifier + '  mchromnum: ' + mchromnum + '   chroms1.length: ' + chroms1.length ); 
 //}


 //  mchromnum  = chroms.indexOf(mchrom);
  if (mchromnum==-1) {
    continue;
 // *    WAIT WINDOW 'Show_map did not find "' + mchrom + '"'
 // *    return
  }
  // [1] = mvert, [2] = chromlen, [3] = chromosome pixel height
  
  horiz    = chrpixelpos[mchromnum][0];
 // var l_chrMaxPixels = parseInt(chrMaxPixels * levels[parseInt(zoomlevel,10)-1],10);

//  mvert    = chrpixelpos[mchromnum][1] + ((mpos / chrpixelpos[mchromnum][2]) * chrpixelpos[mchromnum][3]) - 1 - chrpixelpos[mchromnum][8];
  mvert    = chrpixelpos[mchromnum][1] + ((mpos / chrpixelpos[mchromnum][2]) * chrpixelpos[mchromnum][3]) - 1 - chrpixelpos[mchromnum][8];
  msayvert = mvert / charpixelheight - 0.5;

  // *************** DRAW THE "OTHER" TICK MARK ************************
  if (std_other=='O'  && otherCHR!='   ') {
    //&& DRAW SYNTENY LINE
    mchromnum1=-1;
    for (z=0;z<chroms.length;z++) {
      if (chroms[z]==otherCHR) {
        mchromnum1=z;
        break;
      }
    }
 //alert(mstr + '\n' + mchromnum1);
    if (mchromnum1!=-1) {
      horiz1    = chrpixelpos[mchromnum1][0];
      mvert1    = chrpixelpos[mchromnum1][1] + ((otherPos / chrpixelpos[mchromnum1][2]) * chrpixelpos[mchromnum1][3]) - 1 - chrpixelpos[mchromnum1][8];
      mapcanvas.setColor(linecolor);
      mapcanvas.drawLine(horiz, mvert, horiz1, mvert1);
      mapcanvas.setColor('#000000');
    }
  }
  
  // -- DON'T OVERLAP TEXT -- *
  if ((last_sayvert_left >= parseInt(msayvert,10) && mhoffset < 1) || (last_sayvert_rt >= parseInt(msayvert,10) && mhoffset > 1)) {
    showIdent = false;
  } else {
    showIdent = true;
    if (mhoffset < 1) {
      last_sayvert_left = parseInt(msayvert+0.5,10) + 0.1;
    } else {
      last_sayvert_rt   = parseInt(msayvert+0.5,10) + 0.1;
    }
  }
  
  msayleft = (horiz / charpixelwidth) + (mhoffset < 0)?-2:2;

  mident   = identifier;
  msayleft = msayleft - (mhoffset < 1)?mident.length:0;
  if (showIdent) {
   // thisform.ForeColor = (anchoronly || setno===0)?color_anchor:color_std;
   // @ msayvert, msayleft say mident
   // here steve       mapcanvas.setColor("#1E1EFE");
  }
  msayendcol = msayleft + mident.length;

  if (mhoffset < 1) {
    // -- ON LEFT SIDE -- *
    if (showIdent) {
      mapcanvas.setColor(textcolor);
      mapcanvas.drawString(mident, horiz+mhoffset-(mident.length*charwidth)+5, mvert-8);
      mapcanvas.setColor("#000000");
      mapcanvas.drawLine(horiz+mhoffset, mvert, horiz, mvert);
    } else {
      // -- NO ROOM TO SHOW IDENTIFIER
       mapcanvas.drawLine(horiz+mhoffset+4, mvert, horiz, mvert);
    }
  } else {
    // -- ON RIGHT SIDE -- *
    if (showIdent) {
      mapcanvas.drawLine(horiz, mvert, horiz + mhoffset, mvert);
      mapcanvas.setColor(textcolor);
      mapcanvas.drawString(mident, horiz+mhoffset + 4, mvert-8)
      mapcanvas.setColor("#000000");
    } else {
      mapcanvas.drawLine(horiz, mvert, horiz + mhoffset-4, mvert);
    }
  }

  //if (std_other=='S') {
  //  SELECT c_map
  //  REPLACE sayrow WITH msayvert, saycol WITH msayleft, sayendcol WITH msayendcol, ;
  //   didsay WITH showIdent, hoffset WITH mhoffset
  //}

  mhoffset = 0-mhoffset;  //  switch left/right
}
mapcanvas.paint(); 
document.getElementById("a_1").style.display="none";

} // end of draw_markers2()


function new_chrom() {
  cur_chrom_index=document.getElementById("opt_chrom").value;
  cur_chrom = eval('chrom_names_' + mctype + '[' + cur_chrom_index + ']');
//  alert('new chrom index' + cur_chrom_index + '  cur_chrom ' + cur_chrom)
  updateblasts();
}

function new_zoom(mzoom) {
  zoomlevel=mzoom;
 // alert('set zoomlevel ' + zoomlevel)
  draw_map();
}

function new_uni_marker(u_m) {
  show_locus=u_m;
  updateblasts();
}

function testDrawmap() {
  alert('OK');
}

function isempty(aTextField) {
if (! aTextField) {
  return true;
}
if (aTextField.length==0 || aTextField==null || aTextField==0) {
return true;
}
else { return false; }
}

