/**
 * Fichier permettant de manipuler les infos du cookie du projet FPHI-DeKoninck-origines
 * Les fonctions génériques de manipualation de cookie sont dans cookies.js.
 *
 * Le cookie se présente sous ce format :
 * /1-1-0-0-0|1-2-0-0-0|1-3-0-0-0|1-4-0-0-0|1-5-0-0-0|1-6-0-0-0/2-1-0-0-0|2-2-0-0-0|2-3-0-0-0|2-4-0-0-0|2-5-0-0-0/14-1-0-0-0|14-2-0-0-0|14-3-0-0-0
 */

var g_sDelimitModule="/";
var g_sDelimitEtape="|";
var g_sDelimitInfo="-";
var g_arrNomPropObjEtape=["iModule","iEtape","sEstVisionne","sEnCours","sNbSec"];

/**
* Modifie la partie du cookie correspondant au module et à l'étape reçus, selon le type de modification reçu
*
* @ param integer "iModule" "le numéro du module de l'étape à modifier"
* @ param integer "iEtape" "le numéro de l'étape à modifier"
* @ param string "sTypeModification" "le nom du type de mofication à effectuer dans le cookie"
* @ param string "sInfoSupp" "la chaine de caractères contenant une information supplémentaire telle la seconde d'arrêt du vidéo"
* @ param string "sNomCookie" "le nom du cookie à modifier"
*/
function modifierCookie(iModule,iEtape,sTypeModification,sInfoSupp,sNomCookie)
{
	var oInfosEtape;
	var sAncienneChaineCookie, sNouvelleChaineCookie, sCookie, sNouveauCookie, sInfoEtapeRecue, sEstVisionne, sEnCours, sNbSec;

	sCookie=retournerCookie(sNomCookie);
	oInfosEtape=retournerEtapeCookie(sCookie,iModule,iEtape);
	switch (sTypeModification)
	{
		case "cochageBoiteCocher" :
			oInfosEtape.sEstVisionne=1;
			break;
		case "decochageBoiteCocher" :
			oInfosEtape.sEstVisionne=0;
			break;
		case "terminaisonPresentation" :
			oInfosEtape.sEnCours=0;
			oInfosEtape.sNbSec=0;
			break;
		case "definitionEtapeEnCours" :
			oInfosEtape.sEnCours=1;
			break;
		case "annulationEtapeEnCours" :
			oInfosEtape.sEnCours=0;
			oInfosEtape.sNbSec=0;
			break;
		case "retourPagePrecedente" :
			if(sInfoSupp!=null)
			{
				if(sInfoSupp<0)
					oInfosEtape.sNbSec=0; // Évite d'enregistrer une seconde négative
				else
					oInfosEtape.sNbSec=sInfoSupp; // Enregistre la seconde d'arrêt du vidéo de l'étape
			}
			break;
	}
	if(sTypeModification=="creationModule")
	{
		sNouvelleChaineCookie=retournerConcatenationModuleCookie(iModule,sInfoSupp);// sInfoSupp=nombre d'étapes du module
		sNouveauCookie=sCookie+sNouvelleChaineCookie;
	}
	else
	{
		sNouvelleChaineCookie=retournerConcatenationEtapeCookie(oInfosEtape.iModule, oInfosEtape.iEtape, oInfosEtape.sEstVisionne, oInfosEtape.sEnCours, oInfosEtape.sNbSec);
		sAncienneChaineCookie=oInfosEtape.sEtapeCookie;
		sNouveauCookie = sCookie.replace(sAncienneChaineCookie,sNouvelleChaineCookie);
 	}
	ecrireCookie(sNouveauCookie,sNomCookie); // Modifie la valeur du cookie
}


// ****************************************************************************************************

// ************ FONCTIONS DE RETOUR DE VALEUR POUR LA GESTION DES COOKIES *****************************

/**
* Retourne un message d'erreur si les cookies sont désactivés sur le navigateur de l'utilisateur
*
* @ param string "sNomCookie" "le nom du cookie de test"
* @ return string "sMessageErreur" "le message d'erreur"
		*** chaine vide si les cookies sont activés
*/
function retournerMessageSiCookiesDesactives()
{
	var blnCookiesDesactives;
	var sMessageErreur="";// ***

	blnCookiesDesactives=retournerSiCookiesDesactives();
	// Si les cookies sont désactivés sur le navigateur de l'utilisateur
	if(blnCookiesDesactives==true){
		sMessageErreur="Les cookies sont actuellement désactivés dans votre navigateur Web. Veuillez les activer pour avoir accès à toutes les fonctionnalités de ce site.";
	}

	return sMessageErreur;
}

/**
* Cherche dans le cookie les infos mémorisées de l'étape reçue et les retourne dans un objet contenant les propriétés correspondantes
*
* @ param string "sCookie" "la chaine de caractères du cookie"
* @ param integer "iModule" "le numéro de module de l'étape à rechercher les infos mémorisées dans le cookie"
* @ param integer "iEtape" "le numéro de l'étape à rechercher les infos mémorisées dans le cookie"
* @ return object "oInfosEtape" "l'objet contenant les infos mémorisées de l'étape reçue"
*/
function retournerEtapeCookie(sCookie,iModule,iEtape)
{
	var sExpReg;
	var arrInfosEtape;
	var oInfosEtape={sEtapeCookie:"",iModule:"",iEtape:"",sEstVisionne:"",sEnCours:"",sNbSec:""};

	sExpReg=iModule +"\-"+ iEtape +"\-[01]\-[01]\-[0-9]+";
	// Délimite la zone du cookie où se trouve l'étape désirée
	matchEtape = sCookie.match(sExpReg);
	if(matchEtape!= null && matchEtape.length > 0)
	{
		oInfosEtape.sEtapeCookie=matchEtape[0];// ex. de chaine trouvée : "/3-1-0-0-0" ou "|4-3-1-1-20"
		arrInfosEtape=oInfosEtape.sEtapeCookie.split(g_sDelimitInfo);
		oInfosEtape.iModule = arrInfosEtape[0];
		oInfosEtape.iEtape = arrInfosEtape[1];
		oInfosEtape.sEstVisionne = arrInfosEtape[2];
		oInfosEtape.sEnCours = arrInfosEtape[3];
		oInfosEtape.sNbSec = arrInfosEtape[4];
	}
	else
	{
		oInfosEtape.iModule = iModule;
		oInfosEtape.iEtape = iEtape;
		oInfosEtape.sEstVisionne = 0;
		oInfosEtape.sEnCours = 0;
		oInfosEtape.sNbSec = 0;
	}
	return oInfosEtape;
}

/**
* Génére l'objet contenant les infos mémorisées dans le cookie de l'étape reçue et retourne le type d'info reçu
*
* @ param string "sCookie" "la chaine de caractères du cookie"
* @ param integer "iModule" "le numéro de module de l'étape à rechercher l'info mémorisée dans le cookie"
* @ param integer "iEtape" "le numéro de l'étape à rechercher l'infos mémorisée dans le cookie"
* @ param integer "iInfo" "l'indice numérique du tableau de propriétés de l'objet d'infos mémorisées de l'étape"
* @ return string "sInfoEtapeModuleCookie" "l'objet contenant les infos mémorisées de l'étape reçue"
*/
function retournerInfoCookie(sNomCookie,iModule,iEtape,iInfo)
{
	var oInfosEtape;
	var sInfoEtapeModuleCookie;
	var sCookie=retournerCookie(sNomCookie);

	oInfosEtape=retournerEtapeCookie(sCookie,iModule,iEtape);
	sInfoEtapeModuleCookie=eval("oInfosEtape."+g_arrNomPropObjEtape[iInfo-1]);

	return sInfoEtapeModuleCookie;
}

/**
* Génère et retourne la partie de chaine cookie du module iModule en concaténant la partie de chaine cookie de chaque étape, celle-ci étant concaténée par chaque information envoyée à la fonction "retournerConcatenationEtapeCookie"
*
* @ param integer "iModule" "le numéro de module à créer"
* @ param integer "iNbEtapes" "le nombre d'étapes à créer dans le module"
* @ return string "sModuleCookie" "la partie de chaine du nouveau module dans le cookie"
*/
function retournerConcatenationModuleCookie(iModule,iNbEtapes)
{
	var sModuleCookie=g_sDelimitModule;

	for(var i=1; i<=iNbEtapes; i++)
		{
			sModuleCookie += retournerConcatenationEtapeCookie(iModule,i,0,0,0);
			if(i<iNbEtapes)
				sModuleCookie += g_sDelimitEtape;
		}

	return sModuleCookie;
}

/**
* Génère et retourne la partie de chaine cookie de l'étape iEtape faisant partie du module iModule, concaténée par chaque information reçue
*
* @ param integer "iModule" "le numéro de module de l'étape dont il faut concaténer les informations"
* @ param integer "iEtape" "le numéro de l'étape dont il faut concaténer les informations"
* @ param bool "blnEstVisionne" "si l'étape est déclarée visionnée dans le cookie"
* @ param bool "blnEnCours" "si le vidéo de l'étape est en cours dans le cookie"
* @ param integer "iNbSec" "le nombre de secondes à laquelle le vidéo de l'étape s'est arrêté (0 par défaut)"
* @ return string "sEtapeCookie" "la partie de chaine de l'étape dans le cookie"
*/
function retournerConcatenationEtapeCookie(iModule,iEtape,blnEstVisionne,blnEnCours,iNbSec)
{
	var sEtapeCookie="";
	var sInfoCouranteEtapeCookie;

	for(var i=1; i<=(arguments.length); i++)
	{
		sInfoCouranteEtapeCookie = eval(arguments[i-1]);
		// Gère la possibilité d'inscription d'une valeur null dans le cookie
		if(sInfoCouranteEtapeCookie==null)
			sInfoCouranteEtapeCookie=0;

		sEtapeCookie += sInfoCouranteEtapeCookie;
		if(i<(arguments.length))
			sEtapeCookie += g_sDelimitInfo;
	}

	return sEtapeCookie;
}

/**
* Recherche le numéro de module ou d'étape en cours dans le cookie et le retourne
*
* @ param string "sTypeInfo" "le numéro de module de l'étape dont il faut concaténer les informations"
* @ param string "sNomCookie" "le nom du cookie"
* @ return integer "iInfoEnCoursCookie" "la partie de chaine de l'étape dans le cookie"
*/
function retournerInfoEnCoursCookie(sTypeInfo,sNomCookie)
{
	var iInfoEnCoursCookie=null;
	var iDebut, iFin;
	var sCookie=retournerCookie(sNomCookie);
	var sExpReg;

	sExpReg="[0-9]+\-[0-9]+\-[01]\-1\-[0-9]+";
	if(sCookie != '')
	{
		iDebut=sCookie.search(sExpReg);
		iFin=sCookie.indexOf(g_sDelimitInfo,iDebut+1);
		// Délimite la zone du cookie où se trouve l'étape désirée
		if(sCookie.search(sExpReg)!=-1) // ex. de chaine trouvée: "12-0-1-30" ou "3-1-1-170"
		{
			sCarac=sCookie.match(sExpReg)[0];
			arrInfoEtapeEnCours=sCarac.split(g_sDelimitInfo);
			switch (sTypeInfo)
			{
				case "module" :
					iInfoEnCoursCookie=arrInfoEtapeEnCours[0];
					break;
				case "etape" :
					iInfoEnCoursCookie=arrInfoEtapeEnCours[1];
					break;
				default :
					break;
			}
		}
	}
	return iInfoEnCoursCookie;
}
