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

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

index:
	Intervals()
*/

function Intervals(notBass, notLeftHanded) {

	var guitarNeck;
	var marksGauge;
	var intervalKeyboard;

	addLoadEvent(
		function() {
			guitarNeck = new GuitarNeck(notBass, notLeftHanded, "Quel est cet intervalle ?");
			guitarNeck.addTuners("tuners", intervals.makeQuestion);
			guitarNeck.addFretRange("fretRange", intervals.makeQuestion);
			guitarNeck.addGuitarNeck("instrument");

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

			intervalKeyboard = new Keyboard(checkAnswer, "b2 (b9)", "2 (9)", "3m", "3", "4 (11)", "b5 (#11)", "5", "6m (b13)", "6 (13)", "7", "7M", "8va");
			intervalKeyboard.addKeyboard("intervalKeyboard", 6);
		}
	);

	var questionRootString;
	var questionRootFret;
	var questionOtherString;
	var questionOtherFret;
	var question;

	this.makeQuestion = function() {
		guitarNeck.clearLayers();
		var previous = question;
		for (var i = 1; i < 5; i++) {
			for (var j = 1; j < 5; j++) {
				questionRootString = guitarNeck.randomString();
				questionRootFret = guitarNeck.randomFret();
				questionOtherString = guitarNeck.randomOffsetString(questionRootString);
				questionOtherFret = guitarNeck.randomOffsetFret(questionRootFret);
				if ((questionRootString != questionOtherString) || (questionRootFret != questionOtherFret)) break;
			}
			if (questionRootString > questionOtherString) {
				s = questionRootString;
				questionRootString = questionOtherString
				questionOtherString = s
			}
			else if ((questionRootString == questionOtherString) && (questionRootFret > questionOtherFret)) {
				f = questionRootFret;
				questionRootFret = questionOtherFret
				questionOtherFret = f
			}
			question = guitarNeck.positionToInterval(questionRootString, questionRootFret, questionOtherString, questionOtherFret);
			if (previous != question) break;
		}
		guitarNeck.displayPosition(1, questionRootString, questionRootFret, "question_mark.gif");
		guitarNeck.displayPosition(1, questionOtherString, questionOtherFret, "question_mark.gif");
	}

	function checkAnswer() {
		var answer = (1*this.index + 1) % 12;
		if (answer == question) {
			marksGauge.sum(1, 0);
			guitarNeck.displayPosition(1, questionRootString, questionRootFret, "green.gif");
			guitarNeck.displayPosition(1, questionOtherString, questionOtherFret, "green.gif");
			setTimeout("intervals.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*questionOtherFret + 1*mistake;
		if (mistakeFret < 0) mistakeFret += 12; else if (mistakeFret > 24) mistakeFret -= 12;
		guitarNeck.displayPosition(0, questionOtherString, mistakeFret, "red.gif");
	}

	addLoadEvent(this.makeQuestion);
}
