var isIE = navigator.appName == "Microsoft Internet Explorer";
var isIE6 = isIE && navigator.userAgent.indexOf("MSIE 6") != -1;
var isIE7 = isIE && navigator.userAgent.indexOf("MSIE 7") != -1;
var helpDir = "../../help/";
var htmlStkTbl = "wrappers/stocktables/stockTable_";
var htmlSecTbl = "wrappers/globaldata/overview";
var htmlSecTbl1 = htmlSecTbl + "1_";
var htmlSecTbl2 = htmlSecTbl + "2_";
var htmlSecTbl3 = htmlSecTbl + "3_";
var htmlDayCht = "wrappers/sectorcharts/sectorChart_";
var htmlSTBrCht = "wrappers/internalsSTcharts/chart_";
var htmlLTBrCht = "wrappers/internalsLTcharts/chart_";
var htmlHeatmap = "wrappers/globaldata/heatmap_";
var oviewUp = new Image();    oviewUp.src = "images/buttons/SO-up.jpg";
var oviewDown = new Image();  oviewDown.src = "images/buttons/SO-down.jpg";
var chartUp = new Image();    chartUp.src = "images/buttons/SC-up.jpg";
var chartDown = new Image();  chartDown.src = "images/buttons/SC-down.jpg";
var stocksUp = new Image();   stocksUp.src = "images/buttons/SS-up.jpg";
var stocksDown = new Image(); stocksDown.src = "images/buttons/SS-down.jpg";
var heatmapUp = new Image();  heatmapUp.src = "images/buttons/heatmap-up.jpg";
var heatmapDown = new Image();heatmapDown.src = "images/buttons/heatmap-down.jpg";
var detachUp = new Image();   detachUp.src = "images/buttons/detach-up.jpg";
var detachDown = new Image(); detachDown.src = "images/buttons/detach-down.jpg";
var closeUp = new Image();    closeUp.src = "images/buttons/close-up.jpg";
var closeDown = new Image();  closeDown.src = "images/buttons/close-down.jpg";
var hmRadio = true; //Always true except during detach
var tblRef, hmRef; //Defined as "document" by active html frame or window
var virginTbl; //Set by sort in active table
var lastSecCode = "3";
var region = "Global";
var sTyp, sOrd;
var url;
var winTopStart = 5, winTop = winTopStart;
var winHgtStart = 700, winHgt = winHgtStart;
var winLeftStart = 410, winLeft = winLeftStart;
var winCnt = 0;
var winTitle = "MarketScalpel";
var wins = [];
var sd = "stockData", sc = "sectorData"
var t_overview = 0, t_secCht = 1, t_stkTbl = 2, t_heatmap = 3,
    superType, viewType, chartType, treeFlag = -1, oviewFlag = -2;
var s_overviewA = new Option("Summary","summary",false,false),
    s_overviewB = new Option("Breadth","breadth",false,false),
    s_overviewC = new Option("Cycles","cycles",false,false),
    s_secChtA = new Option("Signals & Cycles","default",false,false),
    s_secChtB = new Option("Internals, Short Term","stbreadth",false,false),
    s_secChtC = new Option("Internals, Long Term","ltbreadth",false,false),
    s_heatmapA = new Option("Returns, 1-Day","ret1",false,false),
    s_heatmapB = new Option("Returns, 1-Week","ret5",false,false),
    s_heatmapC = new Option("Returns, 1-Month","ret20",false,false),
    s_heatmapD = new Option("Volume Confirm, 1-Day","sig1",false,false),
    s_heatmapE = new Option("Volume Confirm, 2-Day","sig2",false,false),
    s_heatmapF = new Option("Confirmation Rank, 1-Week","sig5",false,false),
    s_heatmapG = new Option("Confirmation Rank, 1-Month","sig25",false,false),
    s_heatmapX = new Option("Relative Volume, 1-Day","vol1",false,false),
    s_heatmapY = new Option("Relative Volume, 1-Week","vol5",false,false),
    s_heatmapZ = new Option("Relative Volume, 1-Month","vol20",false,false),
    s_heatmapH = new Option("Above 10-Day Mov.Avg.","ma10",false,false),
    s_heatmapI = new Option("Above 25-Day Mov.Avg.","ma25",false,false),
    s_heatmapJ = new Option("Above 50-Day Mov.Avg.","ma50",false,false),
    s_heatmapK = new Option("Above 200-Day Mov.Avg.","ma200",false,false),
    s_heatmapL = new Option("52-Week Highs Less Lows","wk52",false,false),
    s_heatmapM = new Option("Short Cycles","shortCyc",false,false),
    s_heatmapN = new Option("Long Cycles","longCyc",false,false),
    s_heatmapO = new Option("Composite Cycles","comCyc",false,false);
var hmTitle = new Array();
hmTitle[0] = {t0:"1-Day Returns", t1:"Unadjusted Returns", t2:"Beta Adjusted Returns"};
hmTitle[1] = {t0:"1-Week Returns", t1:"Unadjusted Returns", t2:"Beta Adjusted Returns"};
hmTitle[2] = {t0:"1-Month Returns", t1:"Unadjusted Returns", t2:"Beta Adjusted Returns"};
hmTitle[3] = {t0:"1-Day Volume Confirmation Signals"};
hmTitle[4] = {t0:"2-Day Volume Confirmation Signals"};
hmTitle[5] = {t0:"1-Week Volume Confirmation Ranking", t1:"1-Week Rank", t2:"1-Week Change in 1-Week Rank"};
hmTitle[6] = {t0:"1-Month Volume Confirmation Ranking", t1:"1-Month Rank", t2:"1-Month Change in 1-Month Rank"};
hmTitle[7] = {t0:"1-Day Relative Volume"};
hmTitle[8] = {t0:"1-Week Relative Volume"};
hmTitle[9] = {t0:"1-Month Relative Volume"};
hmTitle[10] = {t0:"Proportion Above 10-Day Moving Average", t1:"% Above Mov.Avg.", t2:"1-Week Change in % Above Mov.Avg."};
hmTitle[11] = {t0:"Proportion Above 25-Day Moving Average", t1:hmTitle[10].t1, t2:hmTitle[10].t2};
hmTitle[12] = {t0:"Proportion Above 50-Day Moving Average", t1:hmTitle[10].t1, t2:hmTitle[10].t2};
hmTitle[13] = {t0:"Proportion Above 200-Day Moving Average", t1:hmTitle[10].t1, t2:hmTitle[10].t2};
hmTitle[14] = {t0:"Proportion of 52-Week Highs Less Lows"};
hmTitle[15] = {t0:"Short Cycles", t1:"Color Code = Fit and Direction", t2:"Color Code = Days Left and Direction"};
hmTitle[16] = {t0:"Long Cycles", t1:"Color Code = Fit and Direction", t2:"Color Code = Days Left and Direction"};
hmTitle[17] = {t0:"Composite Cycles"};
var red = new Array(), green = new Array(), blue = new Array();
red[0] = "#D25314"; red[1] = "#DD7E4F"; red[2] = "#E6A17E"; red[3] = "#F1C8B3"; red[4] = "#FAEDE7";
green[0] = "#0C8D43"; green[1] = "#49AA72"; green[2] = "#7AC098"; green[3] = "#B1DAC3"; green[4] = "#E6F3EC";
blue[0] = "#0000FF"; blue[1] = "#3333FF"; blue[2] = "#6666FF"; blue[3] = "#9999FF"; blue[4] = "#CCCCFF";
var white = "#FFFFFF";
var hmDefaultType;

var oneWeek = 1000*60*60*24*7;
var firefox =
  "Firefox and Internet Explorer 7 are the recommended browsers for use\n" +
  "with the Market Navigator. Internet Explorer 6 is slow when initially\n" +
  "loading up the Market Navigator. We are working to resolve this issue.\n" +
  "To download Firefox, go to www.mozilla.com";
var backButton, setControls;

function init() {
  viewType = null; chartType = null; hmDefaultType = 0;
  backButton = true; setControls = false; virginTbl = true;
  controlFrame.document.controls.region.selectedIndex = 0;
  controlFrame.document.controls.ticker.value = "";
  if (isIE6 && navigator.cookieEnabled) {
    var cookies = document.cookie;
    pos1 = cookies.indexOf("lastSet="),
    expDate = new Date(),
    date = expDate.getTime(),
    expDate.setDate(expDate.getDate() + 3650),
    expStr = expDate.toGMTString();
    if (pos1 == -1) {
      document.cookie = "firstSet=" + date + "; expires=" + expStr;
      document.cookie = "lastSet=" + date + "; expires=" + expStr;
      alert(firefox);
    }
    else {
      var posA = cookies.indexOf("firstSet="),
          posB = cookies.indexOf(";", posA+9);
      if (posB == -1)
        posB = cookies.length;
      var firstDate = parseInt(cookies.substring(posA+9,posB));
      if (date-firstDate < oneWeek*12) {
        var pos2 = cookies.indexOf(";", pos1+8);
        if (pos2 == -1)
          pos2 = cookies.length;
        var oldDate = parseInt(cookies.substring(pos1+8,pos2));
        if (date-oldDate > oneWeek) {
          document.cookie = "lastSet=" + date + "; expires=" + expStr;
          alert(firefox);
        }
      }
    }
  }
  run(t_heatmap);
}

function run(runType, vType) {
  var explicit,
      doc = controlFrame.document,
      types = doc.controls.type,
      tmpType = superType;
  superType = runType;
  if (superType == t_heatmap) {
    types.options[0] = s_heatmapA;
    types.options[1] = s_heatmapB;
    types.options[2] = s_heatmapC;
    types.options[3] = s_heatmapD;
    types.options[4] = s_heatmapE;
    types.options[5] = s_heatmapF;
    types.options[6] = s_heatmapG;
    types.options[7] = s_heatmapX;
    types.options[8] = s_heatmapY;
    types.options[9] = s_heatmapZ;
    types.options[10] = s_heatmapH;
    types.options[11] = s_heatmapI;
    types.options[12] = s_heatmapJ;
    types.options[13] = s_heatmapK;
    types.options[14] = s_heatmapL;
    types.options[15] = s_heatmapM;
    types.options[16] = s_heatmapN;
    types.options[17] = s_heatmapO;
    types.options.length = 18;
    types.selectedIndex = hmDefaultType;
    explicit = 2;
  }
  else if (superType == t_overview) {
    types.options[0] = s_overviewA;
    types.options[1] = s_overviewB;
    types.options[2] = s_overviewC;
    types.options.length = 3;
    if (vType == undefined) {
      if (viewType == null)
        types.selectedIndex = 0;
      else {
        if (viewType == types.options[0].value)
          types.selectedIndex = 0;
        else if (viewType == types.options[1].value)
          types.selectedIndex = 1;
        else
          types.selectedIndex = 2;
      }
    }
    else
      types.selectedIndex = vType;
    viewType = types.options[types.selectedIndex].value;
    explicit = 2;
  }
  else if (superType == t_secCht) {
    types.options[0] = s_secChtA;
    types.options[1] = s_secChtB;
    types.options[2] = s_secChtC;
    types.options.length = 3;
    if (vType <= treeFlag || vType == undefined) {
      if (chartType == null)
        types.selectedIndex = 0;
      else {
        if (chartType == types.options[0].value)
          types.selectedIndex = 0;
        else if (chartType == types.options[1].value)
          types.selectedIndex = 1;
        else
          types.selectedIndex = 2;
      }
    }
    else
      types.selectedIndex = vType;
    chartType = types.options[types.selectedIndex].value;
    if (vType == treeFlag)
      explicit = 2;
    else
      explicit = 0;
  }
  else if (superType == t_stkTbl) {
    if (lastSecCode < "3") {
      alert("Stock Tables are not available for index proxies");
      superType = tmpType;
      return;
    }
    types.options.length = 1;
    if (vType == treeFlag)
      explicit = 2;
    else
      explicit = 0;
  }
  display(lastSecCode, explicit);
}

function display(secCode, explicit, sorted) {
  var doc = controlFrame.document;
  if (!setControls) {
    doc.getElementById("progress").innerHTML = "Loading...";
    doc.getElementById("progress").style.visibility = "visible";
  }
  if (doc.controls.type.options.length == 1) {
    doc.controls.type.style.visibility = "hidden";
    doc.getElementById("typeTxt").style.visibility = "hidden";
  }
  else {
    doc.controls.type.style.visibility = "visible";
    doc.getElementById("typeTxt").style.visibility = "visible";
  }
  if (sorted == undefined)
    virginTbl = true;
  var path, suffix;
  if (superType == t_heatmap) {
    doc.oviewButton.src = oviewUp.src;
    doc.chartButton.src = chartUp.src;
    doc.stocksButton.src = stocksUp.src;
    doc.heatmapButton.src = heatmapDown.src;
    path = htmlHeatmap;
    suffix = region;
  }
  else if (superType == t_overview) {
    doc.oviewButton.src = oviewDown.src;
    doc.chartButton.src = chartUp.src;
    doc.stocksButton.src = stocksUp.src;
    doc.heatmapButton.src = heatmapUp.src;
    if (sorted == 2 && sTyp < 2)
      virginTbl = false;
    if (viewType == "summary") {
      path = htmlSecTbl1;
      if (sorted == undefined || (sorted == 2 && sTyp >= 2)) {
        sTyp = 2; sOrd = 1;
      }
    }
    else if (viewType == "breadth") {
      path = htmlSecTbl2;
      if (sorted == undefined || (sorted == 2 && sTyp >= 2)) {
        sTyp = 3; sOrd = 1;
      }
    }
    else {
      path = htmlSecTbl3;
      if (sorted == undefined || (sorted == 2 && sTyp >= 2)) {
        sTyp = 3; sOrd = 1;
      }
    }
    suffix = region;
  }
  else if (superType == t_secCht) {
    doc.oviewButton.src = oviewUp.src;
    doc.chartButton.src = chartDown.src;
    doc.stocksButton.src = stocksUp.src;
    doc.heatmapButton.src = heatmapUp.src;
    if (chartType == "default")
      path = htmlDayCht;
    else if (chartType == "stbreadth")
      path = htmlSTBrCht;
    else
      path = htmlLTBrCht;
  }
  else if (superType == t_stkTbl) {
    doc.oviewButton.src = oviewUp.src;
    doc.chartButton.src = chartUp.src;
    doc.stocksButton.src = stocksDown.src;
    doc.heatmapButton.src = heatmapUp.src;
    path = htmlStkTbl;
    if (sorted == undefined)
      sTyp = 2; sOrd = 1;
  }
  if (superType == t_secCht || superType == t_stkTbl) {
    if (explicit == 0) {
      var glbCode = "3" + secCode.substring(1),
          blk = treeFrame.newState(glbCode),
          lurl = treeFrame.location.href,
          pos = lurl.indexOf("#");
      if (pos != -1)
        lurl = lurl.substring(0,pos);
      treeFrame.location.replace(lurl + "#" + blk + glbCode);
    }
    if (secCode < "3")
      lastSecCode = secCode;
    else if (region == 'Global')
      lastSecCode = "3" + secCode.substring(1);
    else if (region == 'US')
      lastSecCode = "4" + secCode.substring(1);
    else
      lastSecCode = "5" + secCode.substring(1);
    suffix = lastSecCode
  }
  if (!setControls) {
    backButton = false;
    url = path + suffix + ".htm";
    var ctr = controlFrame.document.controls;
    if (explicit == 2 && controlFrame.document.controls != null)
      ctr.ticker.value = "";
    if (ctr.ticker.value != "")
      url += "?" + ctr.ticker.value;
    setTimeout("contentFrame.location.href='" + url + "'", 200);
    setTimeout("controlFrame.document.getElementById('progress').style.visibility='hidden'", 800);
  }
}

function checkBackArrow() {
  var ctr = controlFrame.document.controls;
  if (!backButton || ctr == null)
    return;
  var lurl = contentFrame.location.toString();
  var pos = lurl.indexOf("?");
  if (pos != -1)
    ctr.ticker.value = lurl.substring(pos+1);
  else
    ctr.ticker.value = ""
  lurl = lurl.toLowerCase();
  if (lurl.indexOf("_global") != -1 || lurl.indexOf("_3") != -1) {
    region = "Global";
    ctr.region.selectedIndex = 0;
  }
  else if (lurl.indexOf("_us") != -1 || lurl.indexOf("_4") != -1) {
    region = "US";
    ctr.region.selectedIndex = 1;
  }
  else if (lurl.indexOf("_nonus") != -1 || lurl.indexOf("_5") != -1) {
    region = "NonUS";
    ctr.region.selectedIndex = 2;
  }
  setControls = true;
  if (lurl.indexOf(htmlSecTbl.toLowerCase()) != -1) {
    if (lurl.indexOf("1_") != -1)
      run(t_overview, 0);
    else if (lurl.indexOf("2_") != -1)
      run(t_overview, 1);
    else
      run(t_overview, 2);
    setTimeout("resetOrd()", 300);
  }
  else if (lurl.indexOf(htmlHeatmap.toLowerCase()) != -1) {
    run(t_heatmap);
    dispHeatmap(contentFrame.R, hmDefaultType, true)
  }
  else {
    lastSecCode = lurl.substring(lurl.indexOf("_")+1,lurl.lastIndexOf("."));
    if (lurl.indexOf(htmlStkTbl.toLowerCase()) != -1) {
      run(t_stkTbl);
      setTimeout("resetOrd()", 300);
    }
    else if (lurl.indexOf(htmlDayCht.toLowerCase()) != -1)
      run(t_secCht, 0);
    else if (lurl.indexOf(htmlSTBrCht.toLowerCase()) != -1)
      run(t_secCht, 1);
    else if (lurl.indexOf(htmlLTBrCht.toLowerCase()) != -1)
      run(t_secCht, 2);
  }
  setControls = false;
}

function treeDisp(secCode) {
  if (superType == t_overview || superType == t_heatmap)
    superType = t_secCht;
  lastSecCode = secCode;
  run(superType, treeFlag);
}

function oviewDisp(secCode) {
  secCode = String(secCode);
  var ctr = controlFrame.document.controls;
  if (superType == t_overview || superType == t_heatmap)
    superType = t_secCht;
  if (secCode.substring(0,1) == "3") {
    region = "Global";
    ctr.region.selectedIndex = 0;
  }
  else if (secCode.substring(0,1) == "4") {
    region = "US";
    ctr.region.selectedIndex = 1;
  }
  else {
    region = "NonUS";
    ctr.region.selectedIndex = 2;
  }
  lastSecCode = secCode;
  run(superType, oviewFlag);
}

function dispTrail(secCode, type) {
  secCode = String(secCode);
  var ctr = controlFrame.document.controls;
  if (secCode.substring(0,1) == "3") {
    region = "Global";
    ctr.region.selectedIndex = 0;
  }
  else if (secCode.substring(0,1) == "4") {
    region = "US";
    ctr.region.selectedIndex = 1;
  }
  else {
    region = "NonUS";
    ctr.region.selectedIndex = 2;
  }
  if (type) {
    superType = t_secCht;
    display(secCode, 0);
  }
  else {
    superType = t_stkTbl;
    display(secCode, 0, 1);
  }
}

function detach() {
  controlFrame.document.detachButton.src = detachDown.src;
  for (var i=0; i<winCnt; i++)
    if (wins[i] != null && !wins[i].closed)
      wins[i].focus();
  var lurl = contentFrame.location.toString();
  if (lurl.toLowerCase().indexOf(htmlHeatmap.toLowerCase()) != -1)
    hmRadio = contentFrame.document.getElementById("type1").checked;
  wins[winCnt] = window.open(lurl, winTitle + String(winCnt+1),
      "top="+String(winTop)+",left="+String(winLeft)+",location=0,menubar=0," +
      "status=0,titlebar=0,toolbar=0,scrollbars=1,resizable=1,width=850,height="+winHgt);
  setTimeout("wins[winCnt++].focus();controlFrame.document.detachButton.src=detachUp.src;hmRadio=true", 300);
  winLeft -= 20;
  winTop += 20;
  winHgt -= 20;
}

function dispHelp(name) {
  var lurl = helpDir + name + "Help.htm";
  wins[winCnt++] = window.open(lurl, winTitle + String(winCnt+1),
      "top="+String(winTop)+",left="+String(winLeft)+",location=0,menubar=0," +
      "status=0,titlebar=0,toolbar=0,scrollbars=1,resizable=1,width=1016,height="+winHgt);
  winLeft -= 20;
  winTop += 20;
  winHgt -= 20;
}

function closeAll() {
  controlFrame.document.closeButton.src=closeDown.src;
  for (var i=0; i<winCnt; i++)
    if (wins[i] != null && !wins[i].closed)
      wins[i].close();
  winCnt = 0;
  winLeft = winLeftStart;
  winTop = winTopStart;
  winHgt = winHgtStart;
  setTimeout("controlFrame.document.closeButton.src=closeUp.src", 200);
}

function addCommas(nStr)
{
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  for (i = 3; i < x1.length; i+=3)
    x1 = x1.substring(0,x1.length-i-i/3+1) + ',' + x1.substring(x1.length-i-i/3+1,x1.length);
  return (x1.substring(0,1) == ',' ? x1.substring(1) : x1) + x2;
}

function delOrd()
{
  var td = tblRef.getElementById("cx" + String(sTyp));
  if (td != null)
    td.innerHTML = "";
}

function showOrd()
{
  var td = tblRef.getElementById("cx" + String(sTyp));
  if (td != null) {
    td.innerHTML = sOrd > 0 ? "\u25BC" : "\u25B2";
    td.style.color = sOrd > 0 ? "#FF0000" : "#83F52C";
  }
}

function resetOrd()
{
  for (var i = 0; i<20; i++) {
    var td = tblRef.getElementById("cx" + String(i));
    if (td != null)
      td.innerHTML = "";
    else
      break;
  }
  showOrd();
  contentFrame.sTyp = sTyp;
  contentFrame.sOrd = sOrd;
}
function printBody(win) {
    win.focus();
    win.print();
}

function copyToClip(win)
{
  var thead = win.document.getElementById("tableHead");
  var tbody = win.document.getElementById(sd);
  if (tbody == null)
    tbody = win.document.getElementById(sc);
  var text = getTable(thead) + "\n";
  text += getTable(tbody);
  if (isIE)
    win.clipboardData.setData("Text", text);
  else {
    win.alert("Currently \"Copy to Clipboard\" is only supported in Internet Explorer.\n"+
      "We are working to resolve this issue"); return;
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    var clip = Components.classes['@mozilla.org/widget/clipboard;1']
                 .createInstance(Components.interfaces.nsIClipboard);
    if (!clip) return false;
    var trans = Components.classes['@mozilla.org/widget/transferable;1']
                  .createInstance(Components.interfaces.nsITransferable);
    if (!trans) return false;
    trans.addDataFlavor('text/unicode');
    var str = new Object();
    var len = new Object();
    var str = Components.classes["@mozilla.org/supports-string;1"]
                .createInstance(Components.interfaces.nsISupportsString);
    var copytext=text;
    str.data=copytext;
    trans.setTransferData("text/unicode",str,copytext.length*2);
    var clipid=Components.interfaces.nsIClipboard;
    if (!clip) return false;
    clip.setData(trans,null,clipid.kGlobalClipboard);
  }
  win.alert("Table Copied to Clipboard");
}

function getTable(part) {
  var text = "";
  var i = 0;
  while (true) {
    if (i == part.rows.length)
      break;
    var tr = part.rows[i++];
    var j = 0;
    while (true) {
      if (j == tr.cells.length)
        break;
      var html = tr.cells[j].childNodes[0] == null ?
        tr.cells[j].innerHTML : no_amp(no_nbsp(tr.cells[j].childNodes[0].innerHTML));
      if (html == null)
        html = tr.cells[j].innerHTML;
      text += html + "\t";
      j++;
    }
    text += "\n";
  }
  return text;
}

function no_nbsp(text) {
  if (text == null)
    return null;
  while (true) {
    var pos = text.indexOf("&nbsp;");
    if (pos == -1)
      return text;
    text = text.substring(0,pos) + text.substring(pos+6);
  }
  return text;
}

function no_amp(text) {
  if (text == null)
    return null;
  while (true) {
    var pos = text.indexOf("&amp;");
    if (pos == -1)
      return text;
    text = text.substring(0,pos+1) + text.substring(pos+5);
  }
  return text;
}

function dispHeatmap(R, typ, hmDisp) {
  if (hmTitle[typ] == null)
    return;
  hmRef.getElementById("hmMethod").innerHTML = hmTitle[typ].t0;
  if (hmTitle[typ].t1 == undefined)
    hmRef.getElementById("typeVisi").style.visibility = "hidden";
  else {
    hmRef.getElementById("type1Title").innerHTML = hmTitle[typ].t1;
    hmRef.getElementById("type2Title").innerHTML = hmTitle[typ].t2;
    hmRef.getElementById("typeVisi").style.visibility = "visible";
  }
  for (var i = 0; i < R.length; i++) {
    var td = hmRef.getElementById("id" + R[i].c);
    if (td != null)
      setTD(td, R[i], typ, hmDisp);
  }
}

function setTD(td, e, typ, hm) {
  var r,n,m,s,i,abs,k,sS,sL,tmp;
  if (typ == 0) {r = hm ? e.r1 : e.r1/e.beta*100; n = r/e.vols*100;}
  else if (typ == 1) {r = hm ? e.r5 : e.r5/e.beta*100; n = (r/5)/(e.vols/Math.sqrt(5))*100;}
  else if (typ == 2) {r = hm ? e.r20 : e.r20/e.beta*100; n = (r/20)/(e.vols/Math.sqrt(20))*100;}
  else if (typ == 3) {s = e.s1; n = s/1.355;}
  else if (typ == 4) {s = e.s2; n = s;}
  else if (typ == 5) {s = hm ? e.k7 : e.ck7; n = hm ? e.m7/1.82 : e.cm7/2.15;}
  else if (typ == 6) {s = hm ? e.k28 : e.ck28; n = hm ? e.m28 : e.cm28/1.2;}
  else if (typ == 7) {s = e.v1; n = e.v1-100;}
  else if (typ == 8) {s = e.v5; n = (e.v5-100)*1.32;}
  else if (typ == 9) {s = e.v20; n = (e.v20-100)*1.84;}
  else if (typ == 10) {s = hm ? e.g10 : e.c10; n = hm ? e.g10-50 : e.c10/1.5;}
  else if (typ == 11) {s = hm ? e.g25 : e.c25; n = hm ? e.g25-50 : e.c25/1.5;}
  else if (typ == 12) {s = hm ? e.g50 : e.c50; n = hm ? e.g50-50 : e.c50/1.5;}
  else if (typ == 13) {s = hm ? e.g200 : e.c200; n = hm ? e.g200-50 : e.c200/1.5;}
  else if (typ == 14) {s = e.w52; n = s;}
  else if (typ == 15) {s = e.sTT>=0 ? e.sTT : -e.sTB; n = e.sF*(s>=0 ? 1 : -1); k = e.sL;
                       if (!hm) {tmp = s; s = Math.abs(n); n = tmp;}}
  else if (typ == 16) {s = e.lTT>=0 ? e.lTT : -e.lTB; n = e.lF*(s>=0 ? 1 : -1); k = e.lL;
                       if (!hm) {tmp = s; s = Math.abs(n); n = tmp;}}
  else if (typ == 17) {sS = e.sTT>=0 ? e.sTT : -e.sTB; sL = e.lTT>=0 ? e.lTT : -e.lTB;
                       n = (e.sF+e.lF)/2*(sS>=0 && sL>=0 ? 1 : sS<0 && sL<0 ? -1 : 0)}
  abs = Math.abs(n);
  if (typ <= 2) {
    if (abs < 0.6) i = 5;
    else if (abs < 1.9) i = 4;
    else if (abs < 3.3) i = 3;
    else if (abs < 5.1) i = 2;
    else if (abs < 7.8) i = 1;
    else i = 0;
  }
  else if (typ <= 4) {
    if (abs == 0) i = 5;
    else if (abs < .1) i = 4;
    else if (abs < .275) i = 3;
    else if (abs < .44) i = 2;
    else if (abs < .72) i = 1;
    else i = 0;
  }
  else if (typ <= 6) {
    if (abs < 0.28) i = 5;
    else if (abs < 1.55) i = 4;
    else if (abs < 3.3) i = 3;
    else if (abs < 5.85) i = 2;
    else if (abs < 10.3) i = 1;
    else i = 0;
  }
  else if (typ <= 9) {
    if (abs < 4) i = 5;
    else if (abs < 11) i = 4;
    else if (abs < 19) i = 3;
    else if (abs < 29) i = 2;
    else if (abs < 42) i = 1;
    else i = 0;
  }
  else if (typ <= 14) {
    if (abs < 0.5) i = 5;
    else if (abs < 7.5) i = 4;
    else if (abs < 15) i = 3;
    else if (abs < 22.5) i = 2;
    else if (abs < 30) i = 1;
    else i = 0;
  }
  else if (typ <= 17) {
    if (typ == 17 || hm) {
      if (abs < 50) i = 5;
      else if (abs < 60) i = 4;
      else if (abs < 70) i = 3;
      else if (abs < 80) i = 2;
      else if (abs < 90) i = 1;
      else i = 0;
    }
    else if (typ == 15) {
      if (s < 50 || abs < 5) i = 5;
      else if (abs < 10) i = 4;
      else if (abs < 20) i = 3;
      else if (abs < 30) i = 2;
      else if (abs < 40) i = 1;
      else i = 0;
    }
    else if (typ == 16) {
      if (s < 50 || abs < 15) i = 5;
      else if (abs < 30) i = 4;
      else if (abs < 60) i = 3;
      else if (abs < 90) i = 2;
      else if (abs < 120) i = 1;
      else i = 0;
    }
  }
  var color;
  if (i == 5)
    color = white;
  else
    if (n < 0)
      color = red[i];
    else
      color = green[i];
  td.style.backgroundColor = color;
  var chg = td.innerHTML.indexOf("(") > 0 || td.innerHTML.indexOf("#") > 0 || td.innerHTML.indexOf("%") > 0;
  var pos = Math.max(td.innerHTML.lastIndexOf("\n"), td.innerHTML.indexOf("<"));
  td.innerHTML = (chg ? td.innerHTML.substring(0,pos) : td.innerHTML) +
    (typ <= 2 ? "\n" + noWrap("(" + (r>0?"+":"") + r.toFixed(1) + "%)") :
    typ <= 4 ? "\n" + noWrap("(" + (s>0?"+":"") + s.toFixed(2) + ")") :
    typ <= 6 ? (hm ? "\n" + noWrap(pad("#" + s)) : "\n" + noWrap(pad("(" + (s>0?"+":"") + s + ")"))) :
    typ <= 9 ? "\n" + noWrap("[" + s + "%]") :
    typ <= 13 ? (hm ? "\n" + noWrap(pad(s + "%")) : "\n" + noWrap(pad("(" + (s>0?"+":"") + s + "%)"))) :
    typ <= 14 ? ("\n" + noWrap("[" + s + "%]")) :
    typ <= 16 ? "\n" + noWrap("(" + (hm ? (Math.abs(s) + (s < 0 ? "D" : "U") + "/" + k) :
                                          (Math.abs(n) + (n < 0 ? "D" : "U") + "/" + s + "%")) + ")") :
                "\n" + noWrap("(" + Math.abs(sS) + (sS < 0 ? "D" : "U") + "/" + Math.abs(sL) + (sL < 0 ? "D" : "U") + ")"));
}

function hmType1(R, typ) {
  hmRef.getElementById("type2").checked = false;
  dispHeatmap(R, typ, true);
}

function hmType2(R, typ) {
  hmRef.getElementById("type1").checked = false;
  dispHeatmap(R, typ, false);
}

function noWrap(s) {
  if (isIE)
    return "<span style='white-space: nowrap;'>" + s + "</span>";
  return s;
}

function pad(s) {
  var x = 0; len = s.length;
  if (len < 7 && len % 2 == 0) {
    s += "&nbsp;";
    x = 1;
  }
  for (var i = len+x; i < 7; i+=2)
    s = "&nbsp;" + s + "&nbsp;";
  return s;
}
