// Fonction Javascript de création d'un objet Ajax avec vérification de la prise en charge par le navigateur

function nomfichiercourant(){
		//retourne le nom du fichier courant
		var nom = window.location.pathname;
		nom = nom.split("/");
		nom = nom[nom.length - 1];
		return(nom);	
}

function getXhr()
{
	var xhr = null; 
	if(window.XMLHttpRequest) // Firefox et autres
		xhr = new XMLHttpRequest(); 
	else 
		if(window.ActiveXObject)
		{ // Internet Explorer 
			try
			{
					xhr = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e)
			{
							xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		else
		{ // XMLHttpRequest non supporté par le navigateur 
			alert("Votre navigateur n'est pas adapté pour ce site (voir objets Ajax XMLHTTPRequest)"); 
			xhr = false; 
        } 
		return xhr;
}


function getrefpage(page){
	//retourne une chaine sous la forme rubno.serno à partir d'un nom de page suivi de ses paramètes
	var tab1 = new Array();
	var tab2 = new Array();
	tab1=page.split("?");
	rubno=0;
	serno=0;
	if(tab1.length>1) // il y a des paramètres
	{
		tab2=tab1[1].split("&"); // tab2 contient la liste des paramètres
		long=tab2.length; //nombre de paramètres
		
		if (long==1) // gros problème ici. Gross bidouille à cause d'une plante des navigateurs : ne veut pas du tab2.length dans la boucle for
		{
			str=tab2[0].substring(0,6);
			if(str=="rubno=")
				{
					rubno=tab2[0].substring(6,tab2[0].length);
				}
		}
		else
		{
			for(i=0;i<long;i++)
			{ 	//parcours des paramètres
				str=tab2[i].substring(0,6);
				if(str=="rubno=")
				{
					rubno=tab2[i].substring(6,tab2[i].length)
				}
				else
				{
					if(str=="serno=")
					{
						serno=tab2[i].substring(6,tab2[i].length)
					}
				}
			}
		}
	}
	strres="";
	if(rubno!=0)
	{
		strres=rubno;
		if(serno!=0)
		{
			strres=strres +"." + serno; //on concatène le numéro de série au numéro de rubrique
		}
	}
	return(strres);
}
var cumulpts=0;
var resizeok=true; // booléen permettant de bloquer l'évènement resize du body car problème de synchronisation

var tblintrjs=new Array(); //copie des insttr js pour l'appel d'une page passée en param
	tblintrjs[0]="";
	//Ajax1 pour Modele01 pour affichage page avec traitement Javascript spécifique
	tblintrjs[1]="placerobjets();resizeok=true;initsons();";
	//Ajax2 pour Modele02 03 04 05 Tables Conjuguer pour affichage page avec traitement Javascript spécifique
	tblintrjs[2]="passerfocus('','frmope');initsons();";
	tblintrjs[3]="document.getElementById('rdocoul1').click();initsons();";
	//Ajax4 pour Modele07 Glisser Déposer initglisserdeplacer();alert('B');
	tblintrjs[4]="initdragdrop();resizeok=true;initsons();";



// Fonction Javascript activant Ajax pour rechercher toute page sur le serveur
function executerajax(page,numtypajax,cadredest)
{	// Instanciation objet Ajax
	//alert(page + " no typ " + numtypajax);
	var xhr = getXhr();
	var tbltypajax=new Array();
	//Ajax0 pour affichage page sans traitement Javascript
	tbltypajax[0]="document.getElementById('" + cadredest + "').innerHTML=xhr.responseText;";
	//Ajax1 pour Modele01 pour affichage page avec traitement Javascript spécifique
	tbltypajax[1]="resizeok=false;document.getElementById('" + cadredest + "').innerHTML=xhr.responseText;placerobjets();resizeok=true;initsons();";
	tbltypajax[101]="resizeok=false;corriger01(xhr.responseText);placerobjets();resizeok=true;";
	//correction 1 pour le modèle des dictées 1 et 2
	tbltypajax[1010]="resizeok=false;document.getElementById('" + cadredest + "').innerHTML=xhr.responseText;placerobjets();resizeok=true;cumulpts=parseFloat(document.getElementById('zonspancagnotte').innerHTML);initsons();";
	//correction 2 pour le modèle des dictées 1 
	tbltypajax[1011]="resizeok=false;corrigerdictee(xhr.responseText,1);placerobjets();resizeok=true;initsons();";
	//correction 2 pour le modèle des dictées 2
	tbltypajax[1012]="resizeok=false;corrigerdictee(xhr.responseText,2);placerobjets();resizeok=true;initsons();";	
		
	//Ajax2 pour Modele02 03 04 05 Tables Conjuguer pour affichage page avec traitement Javascript spécifique
	tbltypajax[2]="document.getElementById('" + cadredest + "').innerHTML=xhr.responseText;passerfocus('','frmope');initsons();";
	tbltypajax[102]="corriger02(xhr.responseText);";
	//Ajax3 pour Modele06 Souligner en couleur
	tbltypajax[3]="document.getElementById('" + cadredest + "').innerHTML=xhr.responseText;document.getElementById('rdocoul1').click();initsons();";
	tbltypajax[103]="corriger03(xhr.responseText);"; 
	//Ajax4 pour Modele07 Glisser Déposer initglisserdeplacer();alert('B');
	tbltypajax[4]="resizeok=false;document.getElementById('" + cadredest + "').innerHTML=xhr.responseText;initdragdrop();resizeok=true;initsons();";
	tbltypajax[104]="corriger04(xhr.responseText);";
	//ajax5 pour les appels qui ne nécessitent pas de retour de l'appel ajax
	tbltypajax[5]="";
	//tbltypajax[5]="alert(xhr.responseText);";
	//ajax6 cas de l'appel pour l'identification
	tbltypajax[6]="traiterreponseidf(xhr.responseText,'" + cadredest +"');";
	//ajax7 cas de l'appel pour tester si une autre pers est connectée
	tbltypajax[7]="traiterreponseconnect(xhr.responseText);";
	//ajax8 cas de l'appel pour la déconnexion
	tbltypajax[8]="traiterreponsedeconnexion(xhr.responseText);";	
	//ajax9 cas de l'appel pour la création d'un compte
	tbltypajax[9]="traiterreponsecreation(xhr.responseText);";		
	// Définition du comportement à tenir lorsque la solution asynchrone du serveur sera réceptionnée
	xhr.onreadystatechange = function()
	{	
		if(xhr.readyState == 4 && xhr.status == 200)
		{  // Récupération de la solution serveur et passage de cette solution en paramètre à la correction Javascript
			//alert(tbltypajax[numtypajax]);
			eval(tbltypajax[numtypajax]);
		}
	}
	// Appel effectif Ajax au serveur pour chercher la page demandée
	xhr.open("GET",page,true);
	xhr.send(null);
	

	//mises à jour de la zone de texte contenant le numéro de rubrique en dessus menu
	//getrefpage plus haut.
	if((numtypajax=="0")||(numtypajax=="1")||(numtypajax=="2")||(numtypajax=="3")||(numtypajax=="4"))//pour chaque appel correcpondant à l'affichage d'une page
		document.getElementById("txtref").value=getrefpage(page); // on renseigne le champ txtref du menu avec la référence de la page: rubno.serno
	//alert(getrefpage(page));
}

// Fonction Javascript qui enlève les espaces inutiles d'une chaine str
function removeExtraSpace(str)
{	
   str = str.replace(/[\s]{2,}/g," "); // Enlève les espaces doubles, triples, etc.
   str = str.replace(/^[\s]/, ""); // Enlève les espaces au début
   str = str.replace(/[\s]$/,""); // Enlève les espaces à la fin
   return str;    
}


// Fonction Javascript qui calcule la coordonnée Left d'un objet element
function posleft(element)
{
	var offset=0;
	while(element)
	{
		offset+=element["offsetLeft"];
		element=element.offsetParent;
	}
	return offset;
}
// Fonction Javascript qui calcule la coordonnée Top d'un objet element
function postop(element)
{
	var offset=0;
	while(element)
	{
		offset+=element["offsetTop"];
		element=element.offsetParent;
	}
	return offset;
}

// Fonction qui sert sur clic de Option ou Fermer option pour actualiser la position des objets absolute position
function actualiserobjets()
{ 
		var i;
		var existe = document.forms['frmexo'] || 0; 
		if (existe!=0) // Modèle01
			placerobjets();
		else
		{	existe = document.forms['frmordonner'] || 0;
			if (existe!=0) // Modèle07
			{
				deplacersources();
			}
		}
}
// Fonction Javascript qui place les zones d'indication/corrigé sous les champs de saisie
function placerobjets()
{ var i;
	var existe = document.forms['frmexo'] || 0;
	if (existe!=0)
	{
		for (i=0; i<document.forms['frmexo'].elements.length; i++)
		{ 	if  (document.forms['frmexo'].elements[i].name=="txtele[]")
			{	 placerobjet(document.forms['frmexo'].elements[i].id);
			}
		}
	}
}
// Fonction Javascript qui place une zone d'indication/corrigé sous son champ de saisie
// Attention quelques lignes un peu approximatives *******
function placerobjet(idele)
{ 	//idele : identifiant d'un champ de saisie sous la forme ele.noquest.noordre
	var i=0;
	var posg;
	var idsol = "sol" + idele.substr(3,idele.length); // Identifiant zone de solution
	// Coordonnées Top et Left de la zone de solution
	document.getElementById(idsol).style.position="absolute" ;
	document.getElementById(idsol).style.top=(postop(document.getElementById(idele)) + document.getElementById(idele).offsetHeight) + "px" ;
	var size=document.getElementById(idele).offsetWidth; 
	document.getElementById(idsol).style.width= size + "px";
	while (document.getElementById(idsol).offsetHeight>20 && i<100)
	{ i=i+1; 
		size=size+20;
		document.getElementById(idsol).style.width = size + "px" ;
	}
	document.getElementById(idsol).style.textAlign = document.getElementById(idele).style.textAlign;
	if (document.getElementById(idsol).style.textAlign.toLowerCase()=="center")
	{
		// il faut décaler la position gauche de la zone : posgauche-(surplusdesize/2)
		posg = posleft(document.getElementById(idele))-((size-document.getElementById(idele).offsetWidth)/2)
		if (posg<posleft(document.getElementById('centre'))) // Pour éviter débordement à gauche
			posg=posleft(document.getElementById('centre'));
	}
	else // left : calé à gauche
		posg = posleft(document.getElementById(idele));
	// Pour éviter débordement à droite
	var posd = posg +size;
	var poslimd = posleft(document.getElementById('centre')) + document.getElementById('centre').offsetWidth;
	if (posd>poslimd)
		posg=posg - (posd - poslimd);
	document.getElementById(idsol).style.left= posg + "px" ;
	//document.getElementById(idsol).style.border= "solid 1px black" ;
}

// Fonction Javascript permettant de remplir un champ de saisi par clic d'une indication
function saisierapide(idele,texte)
{ //idele : identifiant d'un champ de saisie sous la forme noquest.noordre
  //texte : valeur à inscrire dans le champ de saisie	
  document.getElementById(idele).value =texte;
	document.getElementById(idele).style.color= colorNormal;
	document.getElementById(idele).style.backgroundColor= backgroundColorNormal;
}


//************************* Affichage des résultats
//Fonctions appelées dans les corrections

function getmessage(note,modele,chance){
//retourne un message et une image en fonction de la note
//retourne un tableau contenant en case 0 une image et en case 1, une phrase commentaire en fonction de la note	
//modele correspond au modele d'exercice. On peut avoir des messages différents en fonction du modele. "dictee" ou ""
//chance vaut 1, si une deuxième chance est possible
//alert(note);
if(note==10){
	niv="1";
}
else if(note>=7){
	niv="2";
}
else if(note>=5){
	niv="3";
}
else if(note>=2){
	niv="4";
}
else {
	niv="5";
}
numimg=1+Math.floor(Math.random()*4)
tabretour=new Array(); 
tabretour[0]="images/resultat" + niv + numimg + ".gif";
tabretour[1]="";
return(tabretour);
}


//Fonction permettant d'afficher les résultats dans les zones prévues à cet effet.
function traiterresultats(correction,note,nbjustes,nbelem,points,nbftes,message,image){
	
//affichage de l'image
	document.getElementById('imgresultat').src=image; //cf fonction plus haut pour récupérer image

	//affichage de la réussite, de la note et du nombre de points
	if(correction==1)
		document.getElementById('zonspancorrection').innerHTML =  "";
	else
		document.getElementById('zonspancorrection').innerHTML =  ", à la 2<sup>ème</sup> correction";
	
	document.getElementById('zonspannote').innerHTML =  note;
	document.getElementById('zonspanjustes').innerHTML =  nbjustes ;	
	document.getElementById('zonspannbptstot').innerHTML =  nbelem ;	
	document.getElementById('zonspanpoints').innerHTML =  points ;
	cumulpts += points;

	document.getElementById('zonspancagnotte').innerHTML = cumulpts ;	
	// affichage du commentaire
	document.getElementById('zonspanmessage').innerHTML =  message;
	if (nbftes>1)
	{ plurielftes ="s.";
		messageftes=" les " + nbftes  + " erreurs.";
	}
	else
	{ plurielftes =".";
		if (nbftes==1)
			messageftes=" l'erreur.";
	}
	if (document.getElementById('btncorriger').value=="Corriger 2ème chance" && document.getElementById('btncorriger').disabled!=true)
		document.getElementById('zonspanmessagecor2').innerHTML="Tu as une <b>deuxième chance</b> pour corriger " + messageftes;
	else
		if (nbftes>=1)
			document.getElementById('zonspanmessagecor2').innerHTML="Il reste " + nbftes + " erreur" + plurielftes ;
		else
			document.getElementById('zonspanmessagecor2').innerHTML="Aucune erreur.";
		//Si on veut mettre le nombre de fautes
	//if(nbftes!=="") // On ne l'affiche pas toujours
	//	document.getElementById('zonspannbftes').innerHTML = ", soit " + nbftes + " erreur(s)";	
	//On rend la zone d'affichage des résultats visible
	document.getElementById('zonresultats').style.visibility = "visible" ;	
 
	//enregistrement des informations dans la base
	if (!(document.getElementById('txtidf') && document.getElementById('txtidf')))
	{	
		str="gestionnotes.php?rubno=" + document.forms['frmresultats'].txtrubno.value + " &note=" + note + " &points=" + points + " &difficulte=" + document.forms['frmresultats'].txtdifficulte.value + " &correction=" + correction+ "  &info=" + document.forms['frmresultats'].txtinfo.value +" &parametres=" + document.forms['frmresultats'].txtparametres.value;
		executerajax(str,5,''); 
	}
}

//*********************** Fonctions de correction par modèle
// Définiton couleurs de correction, éventuellement paramétrables
var colorNormal='black';
var colorTrue='black'; // #390'; //Vert 
var colorFalse='black'; //'red';
var backgroundColorNormal='white';
var backgroundColorTrue='#CF9'; // Vert
var backgroundColorFalse='#FC0'; //Jaune
// Fonction Javascript permettant de réinitialiser un champ de saisi à vide par clic
function saisieinit(idele)
{ //idele : identifiant d'un champ de saisie sous la forme noquest.noordre
//	alert(document.getElementById(idele).tabIndex);
	var existe = document.getElementById(idele) || 0;
	if (existe!=0)
	{ 
		if (document.getElementById(idele).readOnly==false)
		{
			document.getElementById(idele).style.color = colorNormal;
			document.getElementById(idele).style.backgroundColor = backgroundColorNormal;
			if  (document.getElementById(idele).value == "?")
				document.getElementById(idele).value = "";
		}
	}
}

// Fonction Javascript permettant de passer le focus au champ suivant selon tabIndex
// !!!! Traitement pas fameux : à revoir si meilleure solution
function passerfocus(idcurrent,idform)
// idcurrent : identifiant de l'objet en courant (peut être à vide)
// idform : identifiant du formulaire sur lequel placer le focus (peut être à vide)
{	if (idcurrent=="")
 	{	
		indexcible=1;
		existe = document.getElementById(idform) || 0;
	}
	else
	{	existe = 1;
		indexcible=document.getElementById(idcurrent).tabIndex+1;
		idform=document.getElementById(idcurrent).form.id;
	}
	if (existe!=0)
	{
		meilleurindex=1000;
		i=0; trouve=false; idcour="";
		while (i<document.forms[idform].elements.length && trouve==false)
		{ 
			id=document.forms[idform].elements[i].id;
			if (id!="")
			{
				if (document.getElementById(id).id.substr(0,3)!="sol") // Eviter les objets cachés solution
				{
					if (document.getElementById(id).tabIndex==indexcible)
					{ 
						trouve=true;
						idcour=id;
					}
					else
					{
						if (document.getElementById(id).tabIndex>indexcible && document.getElementById(id).tabIndex<meilleurindex)
						{
							meilleurindex=document.getElementById(id).tabIndex;
							idcour=id;
						}
					}
				}
			}
			i++;
		}
		if (idcour!="")
		{
				document.getElementById(idcour).focus();
				document.getElementById(idcour).focus(); // Attention ce n'est pas une erreur : problème avec IE
		}
	}
}
// Fonctions ergonomiques pour modèles 
function testeffacer(codetouche,objet) // Modèle opérations
{	// Effacer contenu lorsque c'est un chiffre
	if (objet.readOnly==false && ((codetouche>=48 && codetouche<=57) || (codetouche>=96 && codetouche<=105)))
		objet.value="";
}
function testtouchepasserfocus(codetouche,idcurrent,idform)  // Modèle opérations
{	// Transférer focus lorsque chiffre Entrée ou Tabulation
	if ((codetouche>=48 && codetouche<=57) || (codetouche>=96 && codetouche<=105) || codetouche==13 || codetouche==9)
		passerfocus(idcurrent,idform);
}
function testtoucheentrer(codetouche,idsuivant,idvalider)  // page Index RefExercice et Abonné
{	// Valider ou PasserFocus avec Entrée 
	if (codetouche==13)
		if (idvalider!='')
			document.getElementById(idvalider).click();
		else
			document.getElementById(idsuivant).focus();

}
function testmaxlengthpasserfocus(codetouche,idcurrent,idform) // Modèle tables
{	// passer le focus sur touche enter ou quand nbcar saisis = maximum prévu
// touches qui ne transfèrent pas le focus : backspace, suppr, flecheg, fleched,flechedeb, flechefin
	if (codetouche!=8 && codetouche!=46 && codetouche!=35 && codetouche!=36 && codetouche!=37 && codetouche!=39)
		if (codetouche==13 || document.getElementById(idcurrent).value.length==document.getElementById(idcurrent).maxLength) 
			passerfocus(idcurrent,idform);
}
// Fonction spécifique Opération multiplication pour gérer le tabindex des retenues multiplications à usage multiple
function majtabindex(objet)	
{	var existe=document.getElementById("retA.1") || 0;
	if (existe!=0)
	{ 
		var coefinit=Math.floor((existe.tabIndex-2)/50);
		var coefdest=Math.floor((objet.tabIndex-6)/50);
		var diff = (coefdest-coefinit) * 50;
		if (diff!=0)
		{	var i=1;
			existe = document.getElementById("retA." + i) || 0;
			while (existe!=0)
			{
				existe.tabIndex=existe.tabIndex+diff;
				i++;
				existe = document.getElementById("retA." + i) || 0;
			}
		}
	}
}	
//----------------!!!!!  Fonction de debuggage : à virer
function affichertabindex()
{	
		i=0; idform="frmope";
		while (i<document.forms[idform].elements.length)
		{ 
			id=document.forms[idform].elements[i].id;
			if (id!="")
			{
				if (document.getElementById(id).id.substr(0,3)!="sol") // Eviter les objets cachés solution
				{
					document.getElementById(id).value = document.getElementById(id).tabIndex
				}
			}
			i++;
		}
}
//----------------!!!!!
// Fonctions Javascript qui effectue la correction de l'exercice modele01 - dictee1 et 2(Grammaire et dictée)
//appelée par corriger01 et corrigerdictee
function corriger(strsolution)
{
  var i=0;
  var nbjustes=0;
  var idele="";
  var idsol="";
  var strunesolution="";
  var strsuitesolution = "";
  var juste=0;

  eval(strsolution); // extraction des lignes du corrigé javascript
  
  for (i=0; i<document.forms['frmexo'].elements.length; i++)
  { if  (document.forms['frmexo'].elements[i].name=="txtele[]")
	{	// Parcours des champs de saisie, récupération de l'identifiant question
		idele = document.forms['frmexo'].elements[i].id;
		// Comparaison de la saisie utilisateur (sans espace inutile et majuscule) avec le corrigé
		// Le corrigé peut avoir prévu plusieurs solutions possibles, dans ce cas chaque solution est séparé par / : solution1/solution2/solution3
		// On recherche la solution de l'utilisateur est égal à une des solutions
		// En enlevant les espaces (saisies) inutiles et comparaison en majuscule
		strsuitesolution = tblsolution[idele];
		if (removeExtraSpace(document.forms['frmexo'].elements[i].value.toUpperCase())==strsuitesolution.toUpperCase())
		{
			juste = 1;
		}
		else
		{
			juste=0;
			while (strsuitesolution!="" && juste==0)
			{ 	
				if (strsuitesolution.indexOf("/")>-1)
				{	strunesolution = strsuitesolution.substr(0,strsuitesolution.indexOf("/"));
					strsuitesolution = strsuitesolution.substr(strsuitesolution.indexOf("/")+1,strsuitesolution.length);
				}
				else
				{
					strunesolution = strsuitesolution;
					strsuitesolution ="";
				}
				if (removeExtraSpace(document.forms['frmexo'].elements[i].value.toUpperCase())==strunesolution.toUpperCase())
					juste = 1;
			}
		}
		if (juste==1)
		{	// solution juste : affichage positif
			document.forms['frmexo'].elements[i].readOnly=true; // empèche toute saisie ultérieure
			document.forms['frmexo'].elements[i].style.color= colorTrue;
			document.forms['frmexo'].elements[i].style.backgroundColor= backgroundColorTrue;
			nbjustes++;
			// Affichage de la correction dans la zone prévue
			idsol = "sol" + idele.substr(3,idele.length);
			// !!!!!!!!!!! A retirer pour afficher tout le temps la solution
			document.getElementById(idsol).innerHTML="";
			// !!!!!!!!!!! A ajouter pour afficher tout le temps la solution
			//document.getElementById(idsol).innerHTML=tblsolution[idele];
			//document.getElementById(idsol).style.color= colorTrue; 
		}
		else
		{	// solution fausse : affichage négatif
			document.forms['frmexo'].elements[i].style.color= colorFalse;
			document.forms['frmexo'].elements[i].style.backgroundColor= backgroundColorFalse;
			if (document.forms['frmexo'].elements[i].value=="")
				document.forms['frmexo'].elements[i].value ="?";
			if (document.getElementById('btncorriger').value=="Corriger 2ème chance" || document.getElementById('txtnbcor').value==1)
			{
				document.forms['frmexo'].elements[i].readOnly=true; // empèche toute saisie ultérieure
				// Affichage de la correction dans la zone prévue
				idsol = "sol" + idele.substr(3,idele.length);
				//Texte et style de la solution 
				document.getElementById(idsol).innerHTML=tblsolution[idele];
				document.getElementById(idsol).style.color= colorTrue;
			}
		}
	}
  }
  return(nbjustes);
}


// Fonction Javascript qui effectue la correction de l'exercice modele01 (Grammaire)
function corriger01(strsolution)
{ 	// strsolution contient le texte du corrigé définissant un tableau en javascript nommé corrige[] 
	//appel de la fonction qui effectue le corrigé des modèles 01
	nbjustes=corriger(strsolution);
  
  // Désactivation bouton Corriger et affichage score
   var nbelem = document.forms['frmexo'].elements['txtele[]'].length;// ne fonctionne pas s'il n'y a qu'un seul élément
	 if (!nbelem) nbelem =1;
   	//alert(nbelem);
	note = Math.round(nbjustes*10/nbelem);
	if(note<0) note =0;
	points=nbjustes;
	nberreurs=nbelem-nbjustes;

  if (document.getElementById('txtnbcor').value=="1") // 1 seule correction possible
  { correction=1;
		//désactivation bouton correction
		document.getElementById('btncorriger').disabled = true;
		document.getElementById('btncorriger').className="commanddisabled";
		tabresultat=getmessage(note,"",0); //récupération de l'image et du commentaire
		image = tabresultat[0];//cf fonction plus haut pour récupérer message
		message=tabresultat[1];//cf fonction plus haut pour récupérer message
  	traiterresultats(correction,note,nbjustes,nbelem,points,nberreurs,message,image);
	}
	else
	{
  	afficherresultatsdoublecorrection(nbelem,nberreurs);  
	}
}

// Fonction Javascript qui effectue la correction deuxième chance des dictéesO1 et 02
//typemodele est le modele de dictee 1 ou 2
function corrigerdictee(strsolution,typemodele)
{ 	// strsolution contient le texte du corrigé définissant un tableau en javascript nommé corrige[] 

	//appel de la fonction qui effectue le corrigé des modèles 01
	nbjustes=corriger(strsolution); //Nombre d'erreurs corrigées
  // Désactivation bouton Corriger et affichage score

	var nbptstot =parseFloat(document.getElementById('zonspannbptstot').innerHTML) ; //Nombre de mots total ou de difficultés
	var points1 = parseFloat(document.getElementById('zonspanpoints').innerHTML) ; // Nb points première correction
	var note1=parseFloat(document.getElementById('zonspannote').innerHTML) ; //Note première correction
	var nbjustes1=parseFloat(document.getElementById('zonspanjustes').innerHTML) ; //Note première correction
  	//var nbelem2 = document.forms['frmexo'].elements['txtele[]'].length;//ne fonctionne pas si un seul element
	//if (!nbelem2) nbelem2 =1;
   	//alert(nbelem2);
	points2=Math.round(nbjustes/2);  
	nbjustes2=nbjustes1+nbjustes; 
	//alert("nbptstot " +nbptstot+" Points1 "+points1+ " points2 " +points2 );
	//if((points2 + points1) > nbptstot) points2=nbptstot-points1;	
	nbftes=	nbptstot-nbjustes2;	
	if(typemodele==1){ //Cas de la dictee classique
		note2 = 10-nbftes; // cas de la dictée
		if(note2<0) note2=0;
	}else{ //cas d'un exercice avec un nombre de difficultés
		note2=(Math.round((parseFloat(nbjustes2)*10/parseFloat(nbptstot))));
	}
	document.getElementById('btncorriger').disabled = true;
	document.getElementById('btncorriger').className="commanddisabled";

	tabresultat=getmessage(note2,"dictee",0); //récupération de l'image et du commentaire
 	image = tabresultat[0];//cf fonction plus haut pour récupérer message
 	message=tabresultat[1];//cf fonction plus haut pour récupérer message
	
	//affiche le résultats + enregistrement base
	traiterresultats(2,note2,nbjustes2,nbptstot,points2,nbftes,message,image);
}	

//fonction gérant les résultats pour modeles 2,3,4,5,6,7 avec double correction
// Les zones sont définies dans modelesfonctions/afficherresultats
function afficherresultatsdoublecorrection(nbelem,nbftes){
 //calcul de la note
	note=0;
	if((nbelem - nbftes)>0) note=(Math.round((nbelem - nbftes)*10/nbelem)); 
	//calcul du nombre de justes
	nbjustes=0;
	if((nbelem - nbftes)>0) nbjustes=(nbelem - nbftes);
 	//Cas correction 2ème chance
  if (document.getElementById('btncorriger').value=="Corriger 2ème chance"){
		correction=2; //deuxième chance
		document.getElementById('btncorriger').disabled = true; //on désactive le bouton de correction
		document.getElementById('btncorriger').className="commanddisabled";
		tabresultat=getmessage(note,"classique",0);
		image = tabresultat[0];//cf fonction plus haut pour récupérer message
		message=tabresultat[1];//cf fonction plus haut pour récupérer message		
		//calcul bonus : nb ftes chance1 - nbfteschance2 /2
		nbftesprec=parseFloat(document.forms['frmresultats'].txtnbftes.value); //Nb ftes dans corr1
		points=Math.round((nbftesprec-nbftes)/2);
		if(points<0) points=0;
	}
  else //cas correction première fois
  { 
  	correction=1; //première chance
		tabresultat=getmessage(note,"classique",1);
		image = tabresultat[0];//cf fonction plus haut pour récupérer message
		message=tabresultat[1];//cf fonction plus haut pour récupérer message
		points=0
		if((nbelem - nbftes)>0 ) points=(nbelem - nbftes);//le nombre de points est le nb de juste. 
		//on stock le nombre de fautes pour le connaitre à la deuxième correction
		document.forms['frmresultats'].txtnbftes.value=nbftes; //nombre d'erreurs stocké dans zone cachée;
		
		//gestion du message à afficher + désactivation du bouton corriger si tout juste
			if (nbftes==0 ){ // tout est juste du premier coup
				document.getElementById('btncorriger').disabled = true;
				document.getElementById('btncorriger').className="commanddisabled";
				message =  "Excellent ! Félicitations" ;	// on modifie le message
			}else{
				document.getElementById('btncorriger').value="Corriger 2ème chance";
			}
  }
  traiterresultats(correction,note,nbjustes,nbelem,points,nbftes,message,image);

};

// Fonction Javascript qui effectue la correction des exercices 
// modele02,03,04,05 (Addition,Soustraction, Multiplication, Division) 
// modele table et conjuguer (attention plusieurs solutions possibles donc traitement plus lourd que pour les opérations)
function corriger02(strsolution)
{ 	// strsolution contient le texte du corrigé définissant un tableau en javascript nommé solution[] 
  var i=0;
  var nbjustes=0;
  var idele="";
  var idsol="";
  var strunesolution="";
  var strsuitesolution = "";
  var juste=0;
  eval(strsolution); // extraction des lignes de la solution 
  for (i=0; i<document.forms['frmope'].elements.length; i++)
  { if  (document.forms['frmope'].elements[i].name=="txtele[]")
	{	// Parcours des champs de saisie, récupération de l'identifiant question
		idele = document.forms['frmope'].elements[i].id;
		// Comparaison de la saisie utilisateur (sans espace inutile) avec la solution
		// Comparaison de la saisie utilisateur (sans espace inutile et majuscule) avec le corrigé
		// Le corrigé peut avoir prévu plusieurs solutions possibles, dans ce cas chaque solution est séparé par / : solution1/solution2/solution3
		// On recherche la solution de l'utilisateur est égal à une des solutions
		// En enlevant les espaces (saisies) inutiles et comparaison en majuscule
		strsuitesolution = tblsolution[idele];
		if (removeExtraSpace(document.forms['frmope'].elements[i].value.toUpperCase())==strsuitesolution.toUpperCase()) // ||(removeExtraSpace(document.forms['frmope'].elements[i].value)=="" && idele.substr(0,4)=="eleb" && tblsolution[idele]==0)
		{
			juste = 1;
		}
		else
		{
			juste=0;
			while (strsuitesolution!="" && juste==0)
			{ 	
				if (strsuitesolution.indexOf("/")>-1)
				{	strunesolution = strsuitesolution.substr(0,strsuitesolution.indexOf("/"));
					strsuitesolution = strsuitesolution.substr(strsuitesolution.indexOf("/")+1,strsuitesolution.length);
				}
				else
				{
					strunesolution = strsuitesolution;
					strsuitesolution ="";
				}
				if (removeExtraSpace(document.forms['frmope'].elements[i].value.toUpperCase())==strunesolution.toUpperCase())
					juste = 1;
			}
		}
		if (juste==1)
		{	// solution juste : affichage positif
			document.forms['frmope'].elements[i].readOnly=true; // empèche toute saisie ultérieure
			document.forms['frmope'].elements[i].style.color= colorTrue;
			document.forms['frmope'].elements[i].style.backgroundColor= backgroundColorTrue;
			nbjustes++;
		}
		else
		{	
			// solution fausse : affichage négatif
			document.forms['frmope'].elements[i].style.color= colorFalse;
			document.forms['frmope'].elements[i].style.backgroundColor= backgroundColorFalse;
			if (document.forms['frmope'].elements[i].value=="")
				document.forms['frmope'].elements[i].value ="?";
			if (document.getElementById('btncorriger').value=="Corriger 2ème chance")
				document.forms['frmope'].elements[i].readOnly=true; // empèche toute saisie ultérieure
		}
		// Affichage de la solution dans la zone prévue
		idsol = "sol" + idele.substr(3,idele.length);
		// Texte de la réponse corrigée
		document.getElementById(idsol).value=tblsolution[idele];
		// Formatage de la zone corrigée
		document.getElementById(idsol).style.color= colorTrue; 
		document.getElementById(idsol).readOnly = true;
	}
  }
  //affichage de la solution dans la zone prévue
  if (document.getElementById('btncorriger').value=="Corriger 2ème chance")
  { // Affichage de la solution 
		i=0;
		var existe = document.getElementById('zonsolution[' + i + ']') || 0;
		while (existe!=0)
		{
			existe.style.visibility="visible";
			existe.style.display = "block" ;	
			i++;
			var existe = document.getElementById('zonsolution[' + i + ']') || 0;
		}
  }
  // Désactivation bouton Corriger et affichage score
  var nbelem = document.forms['frmope'].elements['txtele[]'].length; //ne fonctionne pas s'il n'y a qu'un seul élément ...
	if (!nbelem) nbelem =1;
  var nbftes = nbelem-nbjustes;
  //appel fonction plus haut pour afficher les résultas
  afficherresultatsdoublecorrection(nbelem,nbftes);
}

// Javascript pour modele06 : Exercices avec soulignés
var coul="";
function couleur(obj)
{ 
if (obj.style.borderBottomColor=="" && coul!="")
{
	obj.style.borderBottomColor = coul ; // Attention si code hexa dans coul conversion implicite de nombreux navigateurs en RGB(..., ..., ...)
	obj.style.borderBottomStyle = "solid";
}
else
{
	obj.style.borderBottomColor = "";
	obj.style.borderBottomStyle = "";
}	
}


// Javascript pour modèle 6 
function corriger03(strsolution)
{ 	// strsolution contient le texte du corrigé définissant un tableau en javascript nommé solution[] 
  var i=0;
  var nbelem =0; // Nombre d'éléments à souligner
  var nberreurs=0; // Nombre d'éléments erronés
  var idele="";
  var idsol="";
  eval(strsolution); // extraction des lignes de la solution 
  var messpan=new Array();
  messpan=document.getElementsByTagName("span");
  for (i=0; i<messpan.length; i++)
  { 
		if  (messpan[i].id.substr(0,3)=="ele")
		{	
			
			// Parcours des champs de saisie, récupération de l'identifiant question
			idele = messpan[i].id;
			// Comparaison de la couleur utilisateur avec la couleur solution (au format RGB pour être compatible tout navigateur. Pour IE il faut enlever les espaces
			//alert(messpan[i].style.borderBottomColor.toUpperCase().replace(/[\s]{1,}/g, "") + "::" + tblsolution[idele].toUpperCase().replace(/[\s]{1,}/g,""));
			var coulrgb1=messpan[i].style.borderBottomColor.toUpperCase().replace(/[\s]{1,}/g,"");
			var coulrgb2=tblsolution[idele].toUpperCase().replace(/[\s]{1,}/g,"");
			if (coulrgb1!=coulrgb2)
			{
				nberreurs++;
			}
			if (tblsolution[idele]!=""){
				//alert(tblsolution[idele]);
				nbelem++;
			}
			// Affichage de la solution dans la zone prévue
			idsol = "sol" + idele.substr(3,idele.length);
			// Texte de la réponse corrigée
			if (tblsolution[idele]!="")
			{
				document.getElementById(idsol).style.borderBottomColor=tblsolution[idele];
				document.getElementById(idsol).style.borderBottomStyle = "solid";
			}
			document.getElementById(idsol).onclick=function onclick(event) {} // empèche le click sur les éléments de la correction
			if (document.getElementById('btncorriger').value=="Corriger 2ème chance"){
				messpan[i].onclick=function onclick(event) {} ;// empèche le click sur les éléments
				if (coulrgb1!=coulrgb2) // indication dans le texte des erreurs, après 2ème chance
				{
					messpan[i].className="textefaux";
				}
			}
		}
  }
  if(nberreurs==0){ // aucune erreur, on désactive tous les champs
   for (i=0; i<messpan.length; i++)
  	{
		 messpan[i].onclick=function onclick(event) {};
	}
  }
  
  // Affichage de la solution dans la zone prévue
  if (document.getElementById('btncorriger').value=="Corriger 2ème chance")
  { 
	var existe = document.getElementById('zonsolution') || 0; 
	if(existe!=0){
		document.getElementById('zonsolution').style.visibility="visible";		
	}
  }
  //affichage des résultats
  afficherresultatsdoublecorrection(nbelem,nberreurs);  
}




// pour modele7 -- placer dans l'ordre
function corriger04(strsolution)
{ 	// strsolution contient le texte du corrigé définissant un tableau en javascript nommé solution[] 
  var i;
  var nbjustes=0;
  eval(strsolution); // extraction des lignes de la solution 
  var nbelem=tblsolution.length-1 // length compte la case 0 inutilisée

  for (i=1;i<=nbelem;i++) 
  { txtele = document.getElementById("dest" + i);
		// Comparaison de la saisie utilisateur avec la solution
		if (txtele.value==tblsolution[i])
		{
			
			txtele.readOnly=true; // empèche toute saisie ultérieure
			txtele.style.color= colorTrue;
			txtele.style.backgroundColor= backgroundColorTrue;
			nbjustes++;
		}
		else
		{
			txtele.style.backgroundColor= backgroundColorFalse;
			txtele.style.color= colorFalse;
			if (document.getElementById('btncorriger').value=="Corriger 2ème chance")
				txtele.readOnly=true; // empèche toute saisie ultérieure
		}

	}
  
  // Affichage de la solution dans les zones prévues
  	if (nbjustes==nbelem || document.getElementById('btncorriger').value=="Corriger 2ème chance")
	{	
	  for (i=1;i<=nbelem;i++) 
  		{ txtsol= document.getElementById('zonsolution[' + i + ']');
			txtele = document.getElementById(("dest" + i));
			if (txtele.value!=tblsolution[i]){ // Affichage du corrigé que si c'est faux
				txtsol.innerHTML=tblsolution[i] ;
				txtsol.style.visibility="visible";
			}
				
		}
	}
    nbftes=nbelem-nbjustes;
  //affichage des résultats
	afficherresultatsdoublecorrection(nbelem,nbftes);  
}

//*********************************fonctions pour les paramètres de modele 1, 6 ,dictee2 - boutons valider et autre

//fonction qui retourne la valeur du bouton radio qui a été sélectionné.
function getSelectedRadioValue (radiobutton){
 var returnValue = "";
 if (radiobutton.length == 1){
  returnValue = radiobutton.value;
 } else {
  for (i=0;i<radiobutton.length;i++){
   if (radiobutton[i].checked==true) {
    returnValue=radiobutton[i].value;
   }
  }
}
 return returnValue;
}

function validerparamquestions(nompage, rubno, rubajaxpage,serno,quenos,quenosprec){
	//Ouverture de la page avec le série serno si elle existe, ou avec quenos
		
		str=nompage + "?rubno=" + rubno ;
		if(serno !="")
			str=str + "&serno=" + serno;
		else{
			str=str + "&serno=0";
			if(quenos!="")
				str=str + "&quenos=" + quenos;
		}
		str=str + "&quenosprec=" + quenosprec;	
		if(document.getElementById("zonparam").style.display=="block")
			str=str+"&zonparam=2"; // permet de réafficher les paramètres à l'ouverture
		else
			str=str+"&zonparam=1";
		//alert(str);
		initsons(); //Réinitialisation des sons dans soundmanager - fonction de son.js
		executerajax(str ,rubajaxpage,'centre');
}



// ********************************* fonctions pour les paramètres des opérations *********************************

function verifestchiffre(nb){
	erreur=1;
	nb=parseInt(nb);
	if(isNaN(nb))
		return(-1);
	else
		return(nb);
}

function validerparametresope(nompage, rubno, rubajaxpage,ope){

//Appelé à la validation des prametres
//ope 1:addition  2:soustraction  3:multiplication  4:division
var existe = document.getElementById('zonparam') || 0;
if (existe!=0)
{
	//alert("Validation");
	ok=1;
	strerreur="";
	str=nompage + "?rubno=" + rubno;
	nb1=document.getElementById('txtnb1').value;
	nb2=document.getElementById('txtnb2').value;
	if(!(nb1=="" && nb2==""))
	{
		if(nb2 =="")
		{
			strerreur = strerreur + "Il faut saisir le deuxième nombre.";
			ok=0;
		}
		if(nb1 =="")
		{
			strerreur = strerreur + "Il faut saisir le premier nombre.";
			ok=0;
		}	
		if(ok==1)
		{
			nb1=verifestchiffre(nb1);
			if(nb1==-1){
				strerreur = strerreur + "Le premier nombre contient des caractères incorrects.";
				ok=0;	
			}
			nb2=verifestchiffre(nb2);
			if(nb2==-1){
				strerreur = strerreur + "Le deuxième nombre contient des caractères incorrects.";
				ok=0;	
			}
		}
		if(ok==1){
			strnb1=nb1.toString(); // on les repasse en chaine
			strnb2=nb2.toString();	
			if(strnb1.length>9){
				strerreur = strerreur + "Le premier nombre est trop grand.";
				ok=0;
			}
			if(nb1==0 || nb2==0){
				strerreur = strerreur + "Les nombres ne peuvent valoir 0.";
				ok=0;
			}				
			if((ope==2 ||ope==4) && strnb2.length>strnb1.length){
				strerreur = strerreur + "Le deuxième nombre ne peut être supérieur au premier.";
				ok=0;
			}	
			else if((ope==2 ||ope==4) && nb2>nb1){ //Cas de la soustraction : cas particulier où ne nombre 2 ne peut être supérieur au nb1
				strerreur = strerreur + "Le deuxième nombre ne peut être supérieur au premier.";
				ok=0;			
			}
			if(ope==3){ //cas de la multiplication ou de la division- on n'autorise pas plus de 9 chiffres au total
				if(strnb1.length+strnb2.length >14){
					strerreur = strerreur + "Les nombres sont trop grands.";
					ok=0;					
				}
			}
		}
		if(ok==1){
			str = str + "&nb1=" + strnb1;
			str = str + "&nb2=" + strnb2;
		}
	}

	nbchiffres=verifestchiffre(document.getElementById('txtnbchiffres').value);
	if(nbchiffres ==-1){
		strerreur = strerreur + "Le nombre de chiffres contient des caractères incorrects.";
		ok=0;
	}else{
		if(nbchiffres>9||nbchiffres<1){
			strerreur = strerreur + "Le nombre de chiffres doit être compris entre 1 et 9.";
			ok=0;			
		}else{
			str = str + "&nbchiffres=" + nbchiffres;
		}
	}
	if(ope==3||ope==4){ //cas de la multiplication
		nbchiffres2=verifestchiffre(document.getElementById('txtnbchiffres2').value);
		if(nbchiffres2 ==-1){
			strerreur = strerreur + "Le nombre de chiffres du deuxième nombre contient des caractères incorrects.";
			ok=0;
		}else{
			
			if(nbchiffres2<=0){
				strerreur = strerreur + "Le nombre de chiffres du deuxième nombre ne peut être égal à 0.";
				ok=0;	
			}else{
				if(ope==3 && (nbchiffres2 + nbchiffres > 14)){
					strerreur = strerreur + "Le nombre de chiffres total est trop grand.";
					ok=0;			
				}else{
					str = str + "&nbchiffres2=" + nbchiffres2;	
				}
			}
		}
	}
	if(ope==3){	
		if(document.getElementById('txttables').value!=""){
			tables=verifestchiffre(document.getElementById('txttables').value);
			if(tables ==-1){
				strerreur = strerreur + "Le nombre des tables contient des caractères incorrects.";
				ok=0;
			}else{
				if(tables<2){// si on saisit 0 ou 1 en tables, on le met par défaut à 2 ...
					tables=2;
				}
				str = str + "&tables=" + tables;
			}
		}
	}

	if(ok==1){
		if(ope!=4){ // on teste si la case retenue est cochée
			if(document.getElementById('chkretenue').checked)
					str = str +  "&retenue=0" ;
		}
		if(document.getElementById("zonparam").style.display=="block")
			str=str+"&zonparam=2"; // parmet de réafficher les paramètres à l'ouverture
		else
			str=str+"&zonparam=1";
		//alert(str);
		executerajax(str ,rubajaxpage,'centre');
	}
	else
		document.getElementById("zoninfosaisie").innerHTML = strerreur ; // '<img src="images/attention.png" width="20">&nbsp;&nbsp;' +
}
}



// ************************ Fonctions de pour la gestion des classes *****************************************
function modifierclasses()
//fonction appelée sur click du bouton ok en dessus du menu. Permet de modifier les classes souhaitées
{
	str=nomfichiercourant() + "?p=1"; 
	//Parcours de tous les checkbox du frm frmcla pour voir s'ils sont cochés
	var leschkcla = document.getElementById("frmcla").getElementsByTagName("input");
	for(i=0;i<leschkcla.length;i++){
		if(	leschkcla[i].checked){
			str = str + " &tc[]=" + leschkcla[i].value;

		}
	}	
	//alert(str);
	location.href=str; 
	//!!!!!!!!!!!!! a faire plutôt appel en ajax

	
}
// ************************ Fonctions pour l'dentification*****************************************
function identifierfermer(){
	//Appelé sur click du bouton d'identification pour fermeture
	//ferme la connexion en cours et recharge la page
	//alert("Identification fermer");
	
	//if(window.confirm("Vouhaitez-vous vraiment vous déconnecter ?")){
		str="gestionidentifierfermer.php";
		//mise à jour des variables cessions
		executerajax(str,8,'');

	//}
}


function traiterreponsedeconnexion(reponseajax){
	//Appelé par l'appel ajax : traite la réponse de l'appel ajax.
	//alert("ceci est le rep ajax : " + reponseajax);
	eval(reponseajax); //remplit la variable ok
	if(ok==1){
		//on rappelle la page en mode non déconnecté
		var nom = window.location.pathname;
		nom = nom.split("/");
		nom = nom[nom.length - 1];
		document.getElementById('zontitre1').innerHTML='&nbsp;<img src="images/sablier.ico" width="20" /> Déconnexion en cours...'  ;
		location.href=nom;
	}	
}


function identifierouvrir(idf, mdp, zonerr){
	//Appelé sur click du bouton d'identification pour connexion
	//Ouvre la connexion et recharge la page
	//alert("Identification");
	//var idf = document.getElementById("txtidf").value;
	//var mdp = document.getElementById("txtmdp").value;
	
	//récuparation de l'adresse IP du poste
	//<div id="ip" style="display: none"><!--#echo var="REMOTE_ADDR"--></div>
	//var Ip = document.getElementById('ip').innerText;
	// le mieux, c'est peut-être en php ...
	idf = removeExtraSpace(idf);
	mdp = removeExtraSpace(mdp);
	if (idf!="" && mdp!="")
	{
		//document.getElementById('centre').innerHTML='<span class=\"titre1inversechargement\">&nbsp;<img src=\"images/sablier.ico\" width=\"18\"/> Chargement de la page... </span>'  ;
		str="gestionidentifierouvrir.php?idf=" + idf + " &mdp=" + mdp ;
		//alert(str);
		executerajax(str,6,zonerr);
	}
	else
	{ message="Veuillez saisir pseudo abonné et mot de passe";
		if (zonerr!="")
		  document.getElementById(zonerr).innerHTML=message;
		else
			alert(message);
	}
}

function traiterreponseidf(reponseajax, zonerr){
	//Appelé par l'appel ajax : traite la réponse de l'appel ajax.
	eval(reponseajax); //remplit la variable identification
	//alert(cumulpts);
	//alert(idf + " idf "+ idf + " mdp "+ mdp);
	if(identification==1){
		document.getElementById('zontitre1').innerHTML='&nbsp;<img src="images/sablier.ico" width="20" /> Connexion en cours...'  ;
		//nom du fichier de l'appli
		var nom = nomfichiercourant();
		location.href=nom;
	}else{
		//Problème d'identification
		//document.getElementById('centre').innerHTML='<span class=\"titre1inversechargement\">&nbsp;<img src=\"images/sablier.ico\" width=\"18\"/> Chargement de la page... </span>'  ;
		executerajax("txtidentification.php?probleme=1",0,"centre");
	 /* message="Abonné non reconnu";
		if (zonerr!="")
		  document.getElementById(zonerr).innerHTML=message;
		else
			alert(message);
	*/
	}
}


// ************************ Getion de l'acces direct à une page par sa référence *****************************************
function ouvrirpageref(ref,param){
//ouvre la page de réference ref avec les paramètres param
// ref peut être sous la forme norubrique.noserie
	//alert(ref+' '+param);
	tab=ref.split('.');
	reference=tab[0];
	parametres="";
	if(tab.length>1){ //il y a une série à afficher
		parametres="&serno=" + tab[1];
	}
	if(param!=""){
			parametres=parametres + param;
	}
	//fonction dans menu.js
	//alert(reference+" "+parametres);
	afficherref(reference,parametres);
}

// ************************ Fonction appeléé par le timer sur l'index *****************************************
// Permet à periode définie de tester si une autre personne s'est connecté avec le même code. Auquel cas, on coupe la connexion
function timer(){
	//appel de la page de teste d'une autre connexion. vérifie aussi si l'utilisateur est connecté
	executerajax('gestionautrecon.php',7,'');
}


function traiterreponseconnect(reponseajax){
	//alert(reponseajax);
	//Appelé par l'appel ajax : traite la réponse de l'appel ajax.
	eval(reponseajax); //remplit la variable  rep
	switch (rep) {
	 case 0:  //La personne n'est pas connectée
	 	 // Vérifier la zone de connexion : si elle est en mode connecte : temps dépassé des var cession : déconnecter
		 // alert("Attention, vous n'êtes pas identifié. Afin de bénéficier de tous les exercices, du suivi des notes, des récompenses, nous vous conseillons de vous identifier. Si vous n'êtes pas encore abonné, vous pouvez voir les conditions en clickant sur le bouton abonnement." );
		 break;
	 case 1: // La personne est connectée - on vérifie à nouveau dans un certain délai
	 	 setTimeout("timer()",600000);
		 //setTimeout("timer()",600000);
		 //alert("1 - Bonne personne connectée");
		 //on vérifie à nouveau dans 15 minutes 
		 break;
	case 2: // La personne est connectée, mais une autre personne aussi
		 alert("2 - Attention ! Il est impossible de se connecter deux fois simultanément avec le même compte abonné. Or votre compte est actuellement utilisé sur un autre ordinateur. Vous allez donc être déconnecté dans 2 minutes.");
		 //déconnexion au bout de 2 minutes
		 //setTimeout("identifierfermer()",120000);
		 setTimeout("identifierfermer()",100000);
		 break;
	 default: // cas entre autre de la variable session supprimée
		 alert("3 - Problème technique ou bien le poste est resté inutilisé trop longtemps. Veuillez vous reconnecter.");
		 identifierfermer();
		 break;
	}
}

// ************************ Bouton imprimer *****************************************
function imprimer(){
// fonction qui ouvre un fichier pour l'impression
	//Récupération des données à imprimer
	var titre1="";
	var titre2="";
	var consigne="";
	var principal="";
	var resultats= "";

	var zontitre1=  document.getElementById("zontitre1") || 0;	
	if(zontitre1 !=0){
		titre1=zontitre1.innerHTML;
		titre1 = "<span class=\"sttitre1\"> "+ titre1 + " </span><br /><br /><br /><br />";
	}
		
	var zontitre2=  document.getElementById("zontitre2") || 0;	
	if(zontitre2 !=0){
		titre2=zontitre2.innerHTML;
		titre2="<br /><span class=\"sttitre2\">" + titre2 + "</span><br /><br /><br />";
	}
	var zonconsigne=  document.getElementById("zonconsigne") || 0;	
	if(zonconsigne !=0){
		consigne=zonconsigne.innerHTML;	
		if(consigne!=""){
			consigne="<b>Consigne : </b>"+consigne;
			consigne="<span class=\"stconsigne\">"+consigne+"</span><br /><br />";
		}
	}
	
	var zonprincipal=  document.getElementById("zonprincipal") || 0;	
	if(zonprincipal !=0){
		principal=zonprincipal.innerHTML;
		principal="<span class=\"stprincipal\">"+principal+"</span><br /><br />";
	}
	/* si on veut imprimer les résultats
	zonresultats=  document.getElementById("zonresultats") || 0;	
	if(zonresultats !=0){
		resultats=zonresultats.innerHTML; 
		resultats="<span class=\"stresultats\">"+resultats+"</span>";
	}*/
		
	strtexte=titre1 +titre2 +consigne+principal+resultats;
	

  var nPosX = 0;
  var nPosY = 0 ;
  var nLargeur=screen.width;
  var nHauteur=screen.height;
  var sOptions = 'width='+nLargeur+',height='+nHauteur+',top='+nPosX+',left='+nPosY+',scrollbars=yes,resizable=yes,menubar=yes,status=no'; //options de la fenêtre
 
	if(window.fenetre) //on teste si la fenêtre est déjà ouverte. Si oui, on la ferme
		window.fenetre.close(); 
	fenetre = window.open('txtimprimer.html','Impression',sOptions); 
	window.focus(); //ne pas retirer, car plante sous IE sinon	
	//si on supprime le alert, la page n'a pas le temps de se charger,et ça plante
	alert("Pour lancer l'impression, clicker sur le bouton Imprimer ou aller dans Fichier/Imprimer du navigateur. "); //permet 

	//construction de la page */
	var sHTML = '<html><head><title>Impression</title>';
    sHTML = '<body>';
	sHTML +=  'http://linstit.com - Tous droits réservés - Copies autorisées dans le cadre de l\'enseignement<br />';	
	sHTML += '<div id="noimprime">'; //zone qui ne sera pas imprimée
	str= 'Pour modifier les options d\'impression (entêtes, pied de page, marges,...), aller dans Fichier/Mise en page de votre navigateur.';
	sHTML += '<br /><input type="button" title="' + str + '" value = "Imprimer" onClick="javascript:window.print();window.close()" />';
	sHTML += '<input type="button" value = "Fermer la fenêtre" onClick="javascript:window.close()" />';
	sHTML += '<br />Remarque: Avant d\'imprimer, faire un apperçu avant impression.';	
	sHTML += '<br />Si certaines informations sont décalées, agrandir ou réduire légèrement cette fenêtre.';	

	sHTML += '</div><br />';
	sHTML += '<div>'; 
    sHTML +=  strtexte ;
	sHTML += '</div>';
    sHTML += '</body>';
	fenetre.document.body.innerHTML=sHTML;
	//fenetre.window.resizeTo(nLargeur+1,nHauteur+1); //on lance un resize pour générer l'événement et relancer une fct javascript
	fenetre.window.resizeTo(684,nHauteur);//647 correspond à la largeur d'une page - ne pas changer, sinon problème avec placer objets.
	if(fenetre.window.focus){fenetre.window.focus();}
	
}

//------------------------ Pour mon espace abonné
function modifierabonne(){
	//var nom = removeExtraSpace(document.getElementById('txtnom').value);
	var prenom = removeExtraSpace(document.getElementById('txtprenom').value);
	//var adresse = removeExtraSpace(document.getElementById('txtadresse').value);
	var cp = removeExtraSpace(document.getElementById('txtcp').value);
	var ville = removeExtraSpace(document.getElementById('txtville').value);
	var ecole = removeExtraSpace(document.getElementById('txtecole').value);
	//var adrmail = removeExtraSpace(document.getElementById('txtadrmail').value);
	var datenais = document.getElementById('txtdatenais').value;
	var gf;
	if (document.getElementById('rdof').checked)
		gf="e";
	else
		gf="a";
	var classe;
	//var maileleve = removeExtraSpace(document.getElementById('txtmaileleve').value);
	
	// mal écrit...
	if (document.getElementById('rdocla5').checked)
		classe=document.getElementById('rdocla5').value;
	else
		if (document.getElementById('rdocla6').checked)
			classe=document.getElementById('rdocla6').value;
		else
			if (document.getElementById('rdocla7').checked)
				classe=document.getElementById('rdocla7').value;
			else
				if (document.getElementById('rdocla8').checked)
					classe=document.getElementById('rdocla8').value;
				else
					if (document.getElementById('rdocla100').checked)
						classe=document.getElementById('rdocla100').value;
					else
						classe="";
	if (datenais=="" || validerdate(datenais))
	{
		str="gestionmodifierabonne.php?nom= &prenom=" + prenom + "&adresse= &cp=" + cp + "&ville=" + ville + "&ecole=" + ecole + "&datenais=" + datenais + "&gf=" + gf  + "&classe=" + classe  ; //+ "&maileleve=" + maileleve
		executerajax(str,0,'zonrep');
	}
	else
  	document.getElementById('zonrep').innerHTML="Date de naissance non valide.<br/>Modifications non enregistrées.";
}

function validerdate(unedate)
{		var valide=false;
    var format = /^(\d{1,2}\/){2}\d{4}$/;
    if(!format.test(unedate)){valide=false}
    else{
        var date_temp = unedate.split('/');
        date_temp[1] -=1;        // On rectifie le mois !!!
        var ma_date = new Date();
        ma_date.setFullYear(date_temp[2]);
        ma_date.setMonth(date_temp[1]);
        ma_date.setDate(date_temp[0]);
        if(ma_date.getFullYear()==date_temp[2] && ma_date.getMonth()==date_temp[1] && ma_date.getDate()==date_temp[0]){
            valide=true;
        }
        else{
            valide=false;
        }
    }
		return(valide);
}

function testeCaractSpe(str)//test s'il y a des espaces ou des caract. spé
{	
   if(str.indexOf(" ")>=0 || str.indexOf("&")>=0 || str.indexOf("?")>=0|| str.indexOf("[")>=0  || str.indexOf("]")>=0 || str.indexOf("}")>=0 || str.indexOf("{")>=0 || str.indexOf("!")>=0 || str.indexOf("/")>=0 || str.indexOf("#")>=0 || str.indexOf("=")>=0)
	 		return (-1);
	else
			return(0);   
}

function modifiermotdepasse()
{ 
	var mdpold = document.getElementById('txtmdpold').value;
	var mdpnew1 = document.getElementById('txtmdpnew1').value;
	var mdpnew2 = document.getElementById('txtmdpnew2').value;
	var txteleidf = document.getElementById('txteleidf').innerHTML;

	var message="";
	if (mdpold!="" && mdpnew1!="" && mdpnew2!="")
	{
		if (mdpnew1!=mdpnew2)
			message="Confirmation du nouveau mot de passe incorrecte.";
		
		if(mdpnew1==txteleidf)
			message="Le mot de passe ne peut être identique au pseudo.";
		if(testeCaractSpe(mdpnew1)==-1){
			message = message +  "Le mot de passe ne peut pas contenir d'espaces, ni de caractères spéciaux.<br />";
		}
	}
	else
		message="Saisie des mots de passe incorrecte.";
		
		
	if (message!="")
	 	document.getElementById('zonrepmdp').innerHTML=message + " Le nouveau mot de passe n'a pas été enregistré.";
	else
	{
		document.getElementById('zonrepmdp').innerHTML="";
		document.getElementById('txtmdpold').value="";
		document.getElementById('txtmdpnew1').value="";
		document.getElementById('txtmdpnew2').value="";		
		str="gestionmodifiermdp.php?mdpold=" + mdpold + "&mdpnew1=" + mdpnew1 + "&mdpnew2=" + mdpnew2  ;
		executerajax(str,0,'zonrepmdp');
	}
}


function modifiermail()
{ 
	var nocpte = document.getElementById('txtnocpte').value;
	var mailnew = document.getElementById('txtmailnew').value;

	var message="";
	if (nocpte=="" || mailnew=="")
	{
			message="Il faut renseigner le numéro du compte et la nouvelle adresse de messagerie.";
	}

	if (message!="")
	 	document.getElementById('zonrepmail').innerHTML=message + "  La nouvelle adresse de messagerie n'a pas été enregistrée.";
	else
	{
		document.getElementById('zonrepmail').innerHTML="";
		document.getElementById('txtnocpte').value="";
		document.getElementById('txtmailnew').value="";	
		str="gestionmodifiermail.php?nocpte=" + nocpte + "&mailnew=" + mailnew ;
		executerajax(str,0,'zonrepmail');
	}
		
}

function testeridentifiant()
{
		message="";
		var idf = document.getElementById('txtidfcpte').value;
		if(testeCaractSpe(idf)==-1){
			message =message +  "Le pseudo abonné ne peut pas contenir d'espaces, ni de caractères spéciaux.<br />";
		}
		if (idf ==""){
			message = "Le pseudo abonné ne peut être vide.";
		}
	if (message!="")
	 	document.getElementById('zoninfoidf').innerHTML=message ;
	else
	{
		str="gestiontesteridf.php?idf=" + idf  ;
		executerajax(str,0,'zoninfoidf');
	}
}

function identifiantsoublies()
{
	message="";
	idf=removeExtraSpace(document.getElementById("txtidfoubli").value);
	mail=removeExtraSpace(document.getElementById("txtadroubli").value);
	if(idf=="")
	{	
		if(mail=="")
			message="Il faut saisir le pseudo ou l'adresse de messagerie.";
		else
			str="gestionidfoublie.php?mail=" + mail; 
	}
	else
		str="gestionidfoublie.php?idf=" + idf; 
	
	if(message=="")
	{
		executerajax(str,0,"zonrepoubliidf");
	}
	else
		document.getElementById('zonrepoubliidf').innerHTML=message ;
}

function validercreerabonne()
{
	message="";
	var idf = document.getElementById('txtidfcpte').value;
	var adrmail = removeExtraSpace(document.getElementById('txtadrmail').value);
	var mdp1 = document.getElementById('txtmdp1').value;
	var mdp2 = document.getElementById('txtmdp2').value;

	var typeabo; //type de l'abonnement
	typeabo=1;
			
		if (document.getElementById('rdotypeabo1').checked) //durée de l'abonnement en fonction du type
			typeabo=document.getElementById('rdotypeabo1').value;
						
		if(testeCaractSpe(idf)==-1){
			message =message +  "Le pseudo abonné ne peut pas contenir d'espaces, ni de caractères spéciaux.<br />";
		}
							
		if (idf ==""){
			message =message +  "Le pseudo abonné ne peut être vide.<br />";
		}
		if(testeCaractSpe(mdp1)==-1){
			message =message +  "Le mot de passe ne peut pas contenir d'espaces, ni de caractères spéciaux.<br />";
		}
		if (mdp1 ==""){
			message =message +  "Le mot de passe ne peut être vide.<br />";
		}
		if (mdp1 !=mdp2){
			message =message +  "Le mot de passe doit être saisi deux fois de manière identique.<br />";
		}		
		if (mdp1 ==idf){
			message =message +  "Le mot de passe ne doit pas être identique au pseudo.<br />";
		}	
					
	if (message!="")
	{
          
					mess="Le compte abonné n'a pas été créé.<br />" + message ;
		
	 	document.getElementById('zonrepenreg').innerHTML=mess ;
	}
	else
	{
	
		str="gestioncreerabonne.php?idf=" + idf + "& adrmail=" + adrmail + "& mdp1=" + mdp1  + "& typeabo=" + typeabo  ;
		// la réponse de l'appel ajax est faite dans traiterreponsecreation
		executerajax(str,9,'');
	}
}	

function traiterreponsecreation(reponseajax)
{
	//document.getElementById('zonrepenreg').innerHTML=reponseajax;
	eval(reponseajax);// la réponse donne codeerreur = 0 -> pas d'erreur. Donc donne le numéro d'élève créé dans eleno
										// la réponse donne codeerreur = 1 -> erreur. donc donne la chaine de l'erreur dans strerreur
	if(codeerreur==0)
	{	
		//alert(codeerreur,eleno);
		str="txtreponsesabonner.php?eleno=" + eleno;
		//alert(str);
		executerajax(str,0,'centre'); // affichage de la page d'affichage des infos et du paiement.
	}
	else
	{
		//alert(codeerreur + strerreur);
		document.getElementById('zonrepenreg').innerHTML=strerreur;
	}
}



