/*	single_notes.js
	copyleft Tancrède Bastié 2004-2008

requires:
	dom.js
	gauge.js
	guitar_neck.js
	keyboard.js

index:
	SingleNotes(notBass, notLeftHanded)
*/

function SingleNotes(notBass, notLeftHanded) {

	var guitarNeck;
	var marksGauge;
	var noteKeyboard;

	addLoadEvent(
		function() {
			guitarNeck = new GuitarNeck(notBass, notLeftHanded, "Quelle est cette note ?");
			guitarNeck.addTuners("tuners", singleNotes.makeQuestion);
			guitarNeck.addFretRange("fretRange", singleNotes.makeQuestion);
			guitarNeck.addGuitarNeck("instrument");

			marksGauge = new Gauge("jauge_", ".gif");
			marksGauge.addGauge("marksGauge");

			noteKeyboard = new Keyboard(checkAnswer, "C (do)", "C# Db", "D (ré)", "D# Eb", "E (mi)", "F (fa)", "F# Gb", "G (sol)", "G# Ab", "A (la)", "A# Bb", "B (si)");
			noteKeyboard.addKeyboard("noteKeyboard", 5);
		}
	);

	var questionFret;
	var questionString;

	this.makeQuestion = function() {
		guitarNeck.clearLayers();
		var previousString = questionString;
		var previousFret = questionFret;
		for (var i = 1; i < 5; i++) {
			questionString = guitarNeck.randomString();
			questionFret = guitarNeck.randomFret();
			if ((previousString != questionString) || (previousFret != questionFret)) break;
		}
		question = guitarNeck.positionToNote(questionString, questionFret);
		guitarNeck.displayPosition(1, questionString, questionFret, "question_mark.gif");
	}

	function checkAnswer() {
		var answer = this.index;
		if (answer == question) {
			marksGauge.sum(1, 0);
			guitarNeck.displayPosition(1, questionString, questionFret, "green.gif");
			guitarNeck.displayCTone(questionString);
			setTimeout("singleNotes.makeQuestion()", 800);
			return;
		}
		marksGauge.sum(0, 1);
		var mistake = answer - question;
		if (mistake < -6) mistake += 12; else if (mistake >= 6) mistake -= 12;
		var mistakeFret = 1*questionFret + 1*mistake;
		if (mistakeFret < 0) mistakeFret += 12; else if (mistakeFret > 24) mistakeFret -= 12;
		guitarNeck.displayPosition(0, questionString, mistakeFret, "red.gif");
	}

	addLoadEvent(this.makeQuestion);
}
