var Macro = {

  enabled: false,

  macros: [],

  add: function(rootNote, codeName) {
    if (this.macros.length == 8) return;
    this.macros[this.macros.length] = {
      "rootNote": rootNote,
      "codeName": codeName
    }
    $("macro_area_display").innerHTML += this.createLine(this.macros.length - 1, rootNote, codeName);
  },

  createLine: function(index, rootNote, codeName) {
    return '<div class="macro_area_line">' + (parseInt(index) + 1) + ": " + rootNote + codeName + "</div>"
      + '<div class="off" onmouseover="this.className=\'on\'" onmouseout="this.className=\'off\'" onclick="Macro.deleteLine('+ index + ');">X</div>'
      + '<div style="clear:both"></div>';
  },

  deleteLine: function(index) {
    var macros = this.macros;
    var tmp = [];
    for (var i = 0, n = macros.length; i < n; i++) {
      if (i != index) {
        tmp[tmp.length] = macros[i];
      }
    }
    this.macros = tmp;
    macros = tmp;
    var src = "";
    for (var i = 0, n = macros.length; i < n; i++) {
      var macro = macros[i];
      src += this.createLine(i, macro["rootNote"], macro["codeName"]);
    }
    $("macro_area_display").innerHTML = src;
  },

  start: function() {
    $("scale_combo").disabled = true;
    $("code_combo").disabled = false;
    $("code_radio").checked = true;
    $("scale_radio").disabled = true;
    $("code_radio").disabled = true;
    $("macro_area").style.display = "block";
    $("start_macro").className = "start_macro_off";
    this.enabled = true;
  },

  play: function() {
    if (this.macros.length == 0) return;
    MMLMaker.macroInfo["tone"] = MMLMaker.tones[Screen.getComboValue("controller_form", "macro_tone")];
    MMLMaker.macroInfo["tempo"] = MMLMaker.tempos[Screen.getComboValue("controller_form", "macro_tempo")];
    MMLMaker.macroInfo["repeat"] = MMLMaker.repeats[Screen.getComboValue("controller_form", "macro_repeat")];
    var mml = MMLMaker.makeMacro(this.macros);
    Api.access("MIDI", {"mml":mml}, Screen.playMIDI);
  },

  clear: function() {
    this.macros = [];
    $("macro_area_display").innerHTML = "";
  },

  close: function() {
    this.enabled = false;
    $("scale_radio").disabled = false;
    $("code_radio").disabled = false;
    $("macro_area").style.display = "";
    $("start_macro").className = "start_macro_on";
    Screen.onChangeMode();
  }

}