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

requires:
	dom.js
	unicode.js
	perikura.js
	kanji_base.js
	multiple_answers.js
	external_dictionaries.js

index:
	Fuyutsuki()
*/

function Fuyutsuki() {
/*	prototype of professor Fuyutsuki
	prototype du professeur Fuyutsuki
*/
	var numberOfAnswers = 30;

	var perikura;
	var options;
	var questionNode;
	var marksGauge;
	var mainButton;
	var answersA;
	var answersB;

	addLoadEvent(
		function() {
		/*	creates professor Fuyutsuki's interface
			créé l'interface du professeur Fuyutsuki
		*/
			perikura = new Perikura("fuyutsuki", "onizuka");
			perikura.addTeacherInitialChat("Bonne chance, Onizuka-sensei.", "Je ne les laisserai pas vous virer\u00A0!", "Je vais vous faire étudier, moi.", "Allez, au boulot\u00A0!");
			perikura.addOnizukaInitialChat("Ça va être une Grande Révision, je le sens.", "Vous allez voir ce que vous allez voir.", "Je vais vous montrer mon côté professeur.", "Ça va être facile. On sort ce soir\u00A0?");
			perikura.addGoodComments("Bien. Ne vous relâchez pas.", "J'adore étudier.");
			perikura.addGoodComments("Très bien. Vous progressez.", "Je peux m'en griller une alors\u00A0?");
			perikura.addGoodComments("Excellent ! Vous êtes devenu sérieux.", "Vous pensiez que j'étais stupide\u00A0?");
			perikura.addGoodComments("Formidable, Onizuka-sensei\u00A0!", "Si on allait prendre un bain ensemble\u00A0?");
			perikura.addBadComments("Concentrez-vous un peu\u00A0!", "J'étais pas prêt !");
			perikura.addBadComments("Vous n'avez pas honte\u00A0?", "Mon cerveau n'est pas fait pour étudier.");
			perikura.addBadComments("Comment avez-vous eu votre diplôme ?", "J'ai envoyé quelqu'un qui me ressemblait.");
			perikura.addBadComments("Vous êtes... vous êtes NUL\u00A0!", "Arrêtez de dire du mal des gens\u00A0!");
			perikura.addBadComments("Tout est fichu... Je vous déteste.", "J'ai plus qu'à trouver un autre boulot.");
			perikura.addBadComments("Pas possible, vous le faites exprès.", "Nan ! Je fais ce que je peux.");
			perikura.addBadComments("Vous êtes méprisable.", "Oh-la-la, tout de suite les grands mots...");
			perikura.addPerikura();

			k.addKanjiRange("kanjiRange", newQuestion);

			addTo("options", textNode("questionner par "));
			options = new Options("la graphie", "la prononciation", "le sens")
			options.addOptions("options", newQuestion);

			/*	opera hack : "" does not work, using "?"
				astuce pour opera : "" ne marche pas, utiliser "?"
			*/
			questionNode = textNode("?");
			questionCopyPaste = button("cc", copyPaste);
			questionCopyPaste.forTextNode = questionNode;
			questionCopyPaste.title = "Copier-coller vers le dictionnaire des kanji et JDIC (au bas de la page)";
			questionCopyPaste.className = "optionalButton";
			addTo("question", questionCopyPaste, questionNode);

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

			mainButton = button("Correction");
			mainButton.onclick = pushMainButton;
			addTo("mainButton", mainButton);

			answersA = new MultipleAnswers(numberOfAnswers);
			answersB = new MultipleAnswers(numberOfAnswers);
			answersA.addMultipleAnswers("headerA", new Array("answersACol1", "answersACol2"), "cc", copyPaste, questionCopyPaste.title);
			answersB.addMultipleAnswers("headerB", new Array("answersBCol1", "answersBCol2"), "cc", copyPaste, questionCopyPaste.title);

			/*	used by 'jump-forms' to kanji dictionnary and JDIC
				utilisé par les formulaires vers le dictionnaire des kanji et JDIC
			*/
			pasteTarget = document.getElementById("dsrchkey");
		}
	);

	function makeNewQuestion(randomQuestion, titleA, branchA, randomA, titleB, branchB, randomB) {
	/*	create new question and answers
		créé de nouvelles question et réponses
	*/
		answersA.setTitle(titleA);
		answersB.setTitle(titleB);
		/*	question and right answers
			question et réponses justes
		*/
		var question = k[randomQuestion]();
		var a = question[branchA];
		var b = question[branchB];
		questionNode.data = question.writing;
		for (var i = 0; i < a.length; i++) if (k.inRange(a[i])) answersA.randomAdd(a[i].writing, true);
		for (var i = 0; i < b.length; i++) if (k.inRange(b[i])) answersB.randomAdd(b[i].writing, true);
		/*	other answers
			autres réponses
		*/
		for (var i = 0; i <= numberOfAnswers; i++) if (!answersA.randomAdd(k[randomA]().writing, false)) break;
		for (var i = 0; i <= numberOfAnswers; i++) if (!answersB.randomAdd(k[randomB]().writing, false)) break;
	}

	function newQuestion() {
		answersA.clear();
		answersB.clear();
		switch (options.random()) {
			case 0: makeNewQuestion("randomKanjiWord", "Prononciations ?", "kanaWords", "randomKanaWord", "Sens ?", "translations", "randomTranslation"); break;
			case 1: makeNewQuestion("randomKanaWord", "Graphies ?", "kanjiWords", "randomKanjiWord", "Sens ?", "translations", "randomTranslation"); break;
			case 2: makeNewQuestion("randomTranslation", "Graphies ?", "kanjiWords", "randomKanjiWord", "Prononciations ?", "kanaWords", "randomKanaWord"); break;
		}
		mainButton.value = "Correction";
	}

	function pushMainButton() {
		if (mainButton.value == "Correction") {
			var marks = answersB.mark(answersA.mark());
			marksGauge.sum(marks["right"], marks["missing"], marks["wrong"]);
			perikura.commentMarks(marks);
			mainButton.value = "Question Suivante";
		}
		else newQuestion();
	}

	addLoadEvent(newQuestion);
}

fuyutsuki = Fuyutsuki();

/*	kanji files come after this one and depends on this :
	les fichiers de kanji viennent après celui-ci et dépendent de ceci :
*/
k = new KanjiBase();
