function getYeInputs() {
  let drum_input =$("#drum-input-box").attr("value");
  if (!drum_input) drum_input = "";

  let numInputs = getNumTracks();

  let inputObj = { "num-inputs": numInputs,
                   "drum_input": drum_input,
                   "drum_tempo": $("#drum-tempo").attr("value"),
                   "drum_swing": $("#drum-swing").attr("value"),
                   "drum_time_sig": $("#drum-time-sig").attr("value"),
                   "drum_volume": $("#drum-volume").attr("value"),
                   "drum_repeats": $("#drum-repeats").attr("value")
  };
  function getOneVal(name, number) {
      return $("#" + name + "-" + number).attr("value");
  }
  let fieldNames = ["melody-input", "instrument", "keysig", "keytype", "octave", "swing", "timesig", "tempo", "volume"];

  for (let i = 0; i < numInputs; i++) {
      for (let j = 0; j < fieldNames.length; j++) {
	  let fieldName = fieldNames[j] + "-" + i;
          let value = $("#" + fieldName).attr("value");
	  if (!value) value = "";
	  inputObj[ fieldName ] = value; 
      }
  }
  return inputObj;
}

function setTrackNames() {
    $("#instrument-tracks").find("fieldset").each(function() {
	    $(this).find("legend").eq(0).html( $(this).find( "select").eq(0).attr("value") );
    });
}

function getNumTracks() {
    // Number of fieldset children of #instrument-tracks
    return $("#instrument-tracks").children().length;
}

function addNewTrack() {
    let newTrackId = getNumTracks();

    let newTrackSection = $("#wrap-track-0").clone();
    newTrackSection.appendTo("#instrument-tracks");
    newTrackSection.find(".cloneable").each(function() {
	    this.id = this.id.replace(/0/, newTrackId);
	    $("#debug").html(this.id);
	} );
    newTrackSection.append("<a onclick='removeTrack(this);'>Delete Track</a>");
}

function removeTrack(elem) {
    // TODO
}

function addDrum() {
    let newDrumName = $("#drum-name").attr("value");
    let drumText = $("#drum-input-box").attr("value");
    if (!drumText) {
	drumText = "";
    } else if (drumText[-1] != '\n') {
	drumText = drumText + '\n';
    }
    drumText = drumText + newDrumName + ":----";
    $("#drum-input-box").attr("value", drumText);

}

function recompileMidi() {
  //send input text to some XHR url, get back midi filename
  // TODO should catch and display error messages -- this will be easy if I have midi_from_string.py
  // catch errors internally and return xml containing the error text.
  jQuery.post("/music/midimaker/midi_from_string.py",
              getYeInputs(),
              function(xml, textStatus) {
		  $(xml).find('midi').each(function(){
			let filename = $(this).attr("filename");
			if (filename)
                          replaceWithNewMidi(filename);
		});
              }, "xml");
}

function tryThatSucker() {

  jQuery.post("/music/midimaker/midi_from_string.py",
	      getYeInputs(),
              function(text, textStatus) {
                  $("#debug").html(text);
              }, "test");
}

function replaceWithNewMidi( filename ) {
  let midi = document.getElementById("mymidi");
  let link = document.getElementById("mymidi-link");
  midi.Stop();

  let parent = midi.parentNode;
  let newMidi = document.createElement("embed");
  newMidi.setAttribute("src", filename);
  newMidi.setAttribute("loop", "true");
  parent.replaceChild(newMidi, midi);
  newMidi.setAttribute("id", "mymidi");
  link.setAttribute("href", filename);

  newMidi.Play();
}
