//******************************************************************************/
//WWHWWWH
//minor
//major
//diminished
//augmented
//******************************************************************************/

var intMIDINoteLowest = 60;
var intMIDINoteHighest = 72;
var intMIDINoteRange = intMIDINoteHighest - intMIDINoteLowest;
var intNumChordTypes = 4;
var aryChordTypes = new Array('major','minor','diminished','augmented');
var aryIntervals = new Array('Unison','minor 2nd','Major 2nd','minor 3rd','Major 3rd','Perfect 4th','Tritone','Perfect 5th','minor 6th','Major 6th','minor 7th','Major 7th','Octave');
var aryMsgCorrect =
  new Array("Yes, you are correct.",
            "oh yeah ...",
            "You must have just guessed that one correctly.");
var aryMsgIncorrect =
  new Array("Sorry, that's not the correct answer.",
            "wrongo bongo ...",
            "Perhaps you should just stick to playing the ukelele.");
var intCorrectAnswer = 0;
var strCorrectAnswer = '';
var blnStarted = false;

function handleBodyOnload() {
  RegisterListeners();
  initVars();
}

function initVars() {
  blnStarted = false;
  with (document.forms[0]) {
    selectAnswer.disabled = true;
    buttonStart.disabled = false;
  }
  with (document.getElementById("loadStatus")) {
    innerHTML = 'press start to begin';
    style.color = 'green';
  }
  document.getElementById("answerFeedback").innerHTML = "none yet";
}

function RegisterListeners() {
  //RegisterListener('qt_progress', 'midisong', 'qtmovie_embed', showProgress);
  RegisterListener('qt_load', 'midisong', 'qtmovie_embed', movieLoaded);
  RegisterListener('qt_ended', 'midisong', 'qtmovie_embed', movieEnded);
  RegisterListener('qt_play', 'midisong', 'qtmovie_embed', movieStarted);
}

function handleResetClick() {
  document.forms[0].reset();
  initVars();
}

function handleStartClick() {
  document.forms[0].buttonStart.disabled = true;
  with (document.getElementById("loadStatus")) {
    innerHTML = 'started';
    style.color = 'black';
  }
  blnStarted = true;
  PlayQuestion();
}

function handleAnswerChange() {
  var intAnswer;
  var strAnswer;
  var messageText;
  with (document.getElementById("loadStatus")) {
    innerHTML = 'checking answer';
    style.color = 'black';
  }
  with (document.forms[0]) {
    selectAnswer.disabled = true;
    intAnswer = parseInt(document.forms[0].selectAnswer.value);
    if (document.forms[0].id == "formTriads")
      strAnswer = aryChordTypes[intAnswer];
    else
      strAnswer = aryIntervals[intAnswer];
    //var strFeedbackAttitude = document.forms[0].selectFeedbackAttitude.value;
    if (intAnswer == intCorrectAnswer) {
      messageText = "Correct, that was a "+strAnswer;
      textCorrect.value = parseInt(textCorrect.value) + 1;
    } else {
      messageText = "Sorry, you answered " + strAnswer + " but the correct answer is " + strCorrectAnswer;
      textIncorrect.value = parseInt(textIncorrect.value) + 1;
    }
  }
  with (document.getElementById("loadStatus")) {
    innerHTML = 'showing results';
  }
  with (document.getElementById("answerFeedback")) {
    style.color = 'black';
    innerHTML = messageText;
  }
  PlayQuestion();
}

function PlayQuestion() {
  document.getElementById("loadStatus").innerHTML = 'loading notes';
  if (document.forms[0].id == "formTriads") 
    setTimeout("NextQuestionTriads()",100);
  else
    setTimeout("NextQuestionIntervals()",100);
}

function NextQuestionTriads() {
  var intRandom = Math.floor(intMIDINoteRange * Math.random());
  var intMIDINoteRoot = intMIDINoteLowest+intRandom;
  var intChordType = Math.floor(intNumChordTypes * Math.random());
  var strChordType = aryChordTypes[intChordType];
  var intMIDINote1 = intMIDINoteRoot;
  var intMIDINote2;
  var intMIDINote3;
  switch(strChordType) {
    case 'major':
      intMIDINote2 = intMIDINoteRoot+4;
      intMIDINote3 = intMIDINoteRoot+7;
      break;
    case 'minor':
      intMIDINote2 = intMIDINoteRoot+3;
      intMIDINote3 = intMIDINoteRoot+7;
      break;
    case 'diminished':
      intMIDINote2 = intMIDINoteRoot+3;
      intMIDINote3 = intMIDINoteRoot+6;
      break;
    case 'augmented':
      intMIDINote2 = intMIDINoteRoot+4;
      intMIDINote3 = intMIDINoteRoot+8;
      break;
    default:
      alert('invalid chord type');
      break;
  }
  var strIntervalType = document.forms[0].selectIntervalType.value;
  var strInstrument = document.forms[0].selectInstrument.value;
  var strMIDIhref = '/cgi-bin/imusik_midi2.pl?note1='+intMIDINote1+'&note2='+intMIDINote2+'&note3='+intMIDINote3+'&intervaltype='+strIntervalType+'&instrument='+strInstrument;
  intCorrectAnswer = intChordType;
  strCorrectAnswer = strChordType;
  document.midisong.SetURL(strMIDIhref);
  document.midisong.SetControllerVisible(false);
}

function NextQuestionIntervals() {
  var intRandom = Math.floor(intMIDINoteRange * Math.random());
  var intMIDINote1 = intMIDINoteLowest;
  var intMIDINote2 = intMIDINoteLowest+intRandom;
  var strIntervalType = document.getElementById("selectIntervalType").value;
  var strInstrument = document.getElementById("selectInstrument").value;
  var strMIDIhref = '/cgi-bin/imusik_midi2.pl?note1='+intMIDINote1+'&note2='+intMIDINote2+'&intervaltype='+strIntervalType+'&instrument='+strInstrument;
  intCorrectAnswer = intMIDINote2 - intMIDINote1;
  strCorrectAnswer = aryIntervals[intCorrectAnswer];
  document.midisong.SetURL(strMIDIhref);
  document.midisong.SetControllerVisible(false);
}

function fadeOutText(elementId,currentColorVal) {
  if(currentColorVal<255) {
    currentColorVal+=13;
    if(currentColorVal>255) currentColorVal = 255;
    document.getElementById(elementId).style.color="rgb("+currentColorVal+","+currentColorVal+","+currentColorVal+")";
    setTimeout("fadeOutText('"+elementId+"',"+currentColorVal+")",80); 
  }
}
