/*
CLASSE CL_couleur

Cette classe comporte deux propriétés:
- texte:
Indique la couleur du texte.
- fond:
Indique la couleur du fond d'écran.
*/
function CL_couleur() {
  this.texte="#008000";
  this.fond="#DDDDDD";
}

/*
CLASSE CL_activite

Cette classe comporte trois propriétés:
- num_theme:
Indique le numéro du thème en cours.
- num_question:
Indique le numéro de la question et des réponses en cours.
- nb_faites:
Indique le nombre de questions qui ont déjà été posées.

Elle comporte une méthode:
- commentaire():
Retourne une appréciation selon la réponse proposée par l'utilisateur.
*/
function CL_activite() {
  this.num_theme=0;
  this.num_question=0;
  this.nb_faites=0;
  this.commentaire=commentaire;
}
function commentaire(cas) {
  if (cas=="vrai") {
    var nb=Math.floor(8*Math.random());
    if (nb==0) return "Oui, c'est pas trop tôt!";
    if (nb==1) return "Exact!";
    if (nb==2) return "Juste, pour une fois!";
    if (nb==3) return "Vrai!";
    if (nb==4) return "Bien mais peut mieux faire!";
    if (nb==5) return "Excellent, faut pas rêver!";
    if (nb==6) return "Parfait!";
    if (nb==7) return "Correct, vous êtes le maillon fort!";
  }
  else if (cas=="faux") {
    var nb=Math.floor(8*Math.random());
    if (nb==0) return "Manqué...";
    if (nb==1) return "Same player shoot again !";
    if (nb==2) return "Bien tenté ... mais raté !";
    if (nb==3) return "Incorrect ... ça t'étonne !?!";
    if (nb==4) return "Et t'as réfléchi pour répondre ça ?!?";
    if (nb==5) return "Larousse, tu connais ?";
    if (nb==6) return "Encore perdu !";
    if (nb==7) return "Tu ferais mieux de t'arrêter là ...";
  }
}

/*
CLASSE CL_evaluation

Cette classe comporte trois propriétés:
- debut:
Indique le moment où l'utilisateur commence à répondre aux questions.
- fin:
Indique le moment où l'utilisateur cesse de répondre aux questions.
- note:
Indique la note sur 20.

Elle comporte une méthode:
- appreciation():
Retourne une appréciation selon le travail effectué par l'utilisateur.
*/
function CL_evaluation() {
  this.debut=null;
  this.fin=null;
  this.note=0;
  this.appreciation=appreciation;
}
function appreciation(notesur20,exercice) {
  if (exercice=="termine") {
    if (notesur20>=16) return "Passable ...";
    if (notesur20<16 && notesur20>=13) return "Peut mieux faire";
    if (notesur20<13 && notesur20>=10) return "Y a pas, la chance est un facteur de réussite !";
    if (notesur20<10 && notesur20>=6) return "Lamentable. Il faut enlever la buée du masque avant de plonger !!!";
    if (notesur20<6) return "Ne vous découragez pas! Vous êtes certainement tombé là par hasard";
  }
  else return "Vous avez quitté le QCM avant d'avoir répondu à toutes les questions!";
}

/*
CLASSE CL_reponse

Cette classe comporte deux propriétés:
- enonce:
Indique l'énoncé de la réponse.
- resultat:
Indique si l'énoncé est correct ou non, prend les valeurs "vrai" ou "faux".
*/
function CL_reponse(txt) {
  var pos=txt.indexOf("//");
  this.enonce=txt.substring(0,pos);
  this.resultat=txt.substring(pos+2,txt.length);
}

/*
CLASSE CL_question

Cette classe comporte trois propriétés:
- etat:
Indique l'etat de la question, prend les valeurs "libre", "affichee" ou "corrigee".
- enonce:
Indique l'énoncé de la question.
- schema:
Indique le nom du schema associé à la question.

Elle comporte un tableau:
- reponse[]:
Contient les réponses possibles associées à la question.

Elle comporte deux méthodes:
- ajouter_reponse(txt):
Ajoute au tableau reponse[] un nouvel objet instance de la classe CL_reponse.
- ajouter_schema(txt):
Affecte à la propriété schema le nom du schema associé à la question.
*/
function CL_question(txt) {
  this.etat="libre";
  this.enonce=txt;
  this.schema="schemas/vide.gif";
  this.reponse=new Array();
  this.ajouter_reponse=ajouter_reponse;
  this.ajouter_schema=ajouter_schema;
}
function ajouter_reponse(txt) {
  this.reponse[this.reponse.length]=new CL_reponse(txt);
}
function ajouter_schema(txt) {
  this.schema="schemas/"+txt;
}

/*
CLASSE CL_theme

Cette classe comporte trois propriétés:
- etat:
Indique l'etat du thème, prend les valeurs "libre" ou "fini".
- titre:
Indique le titre du theme.
- choisi:
Indique si le thème est sélectionné, prend les valeurs "oui" ou "non".

Elle comporte un tableau:
- question[]:
Contient les questions disponibles associées au thème.

Elle comporte une méthode:
- ajouter_question(txt):
Ajoute au tableau question[] un nouvel objet instance de la classe CL_question.
*/
function CL_theme(txt) {
  this.etat="libre";
  this.titre=txt;
  this.choisi="non";
  this.question=new Array();
  this.ajouter_question=ajouter_question;
}
function ajouter_question(txt) {
  this.question[this.question.length]=new CL_question(txt);
}

/*
CLASSE CL_qcm

Cette classe comporte six propriétés:
- titre:
Indique le titre du QCM.
- commentaire:
Indique un commentaire sur le QCM.
- avertissement:
Sert à afficher un messsage après le choix des options et juste avant que ne commence le qcm.
- num_page:
Indique le numéro de la page qui doit être affichée, prend les valeurs 1, 2 ou 3.
- nb_questions_choisi:
Indique le nombre choisi de questions à poser.
- timer:
Sert au clignotement des réponses justes lorsque l'utilisateur s'est trompé.

Elle comporte deux tableaux:
- theme[]:
Contient les thèmes disponibles pour ce qcm.
- nb_questions[]:
Contient les nombres de questions qu'il est possible de choisir pour ce qcm.

Elle comporte une méthode:
- ajouter_theme(txt):
Ajoute au tableau theme[] un nouvel objet instance de la classe CL_theme.

Elle comporte trois objets:
- L'objet couleur instance de la classe CL_couleur.
- L'objet activite instance de la classe CL_activite.
- L'objet evaluation instance de la classe CL_evaluation.
*/
function CL_qcm() {
  this.titre="";
  this.commentaire="";
  this.avertissement="";
  this.num_page=1;
  this.nb_questions_choisi=0;
  this.timer=null;
  this.theme=new Array();
  this.nb_questions=new Array();
  this.ajouter_theme=ajouter_theme;
  this.couleur=new CL_couleur;
  this.activite=new CL_activite;
  this.evaluation=new CL_evaluation;
}
function ajouter_theme(txt) {
  this.theme[this.theme.length]=new CL_theme(txt);
}


// CREATION DE L'OBJET qcm

var qcm=new CL_qcm();

