/*******************************************************************************
** initialisations
*******************************************************************************/
var sAICC_URL = ""; // url du serveur HACP
var sAICC_SID = ""; // id de la session HACP
var sAICC_Interaction = ""; // Chaine à envoyer comme interaction à l'url du serveur HACP


//Liste des header du interaction hacp entière.
var aFinalInteractionHeaders = ["course_id","student_id","lesson_id","date","time","interaction_id","objective_id","type_interaction","correct_response","student_response","result","weighting","latency","correct_response_text","student_response_text","id_theme","title","score","status","time"];


/*******************************************************************************
**
** Function doLMSInitializeHACP()
** Inputs:  none
** Return:  "true" si initialisation OK. Sinon "false"
**
** Description:
** Initialise le tracking HACP
**
*******************************************************************************/
function doLMSInitializeHACP() {
	var buffer = "false";

	_sTrackingMode = "HACP";
	
	var sParameters = unescape(parent.window.location.search.substring(1));
	var aParam = sParameters.split("&");
	var n = aParam.length;
	if (n > 0) {
		for (var i = 0; i < n; i++) {
			var aParam_i = aParam[i].split("=")

			if (aParam_i.length > 1) {
				switch (aParam_i[0].toLowerCase()) {
					case "aicc_url":
						sAICC_URL = aParam_i[1];
						break;

					case "aicc_sid":
						sAICC_SID = aParam_i[1];
						break;
				}
			}
		}
	}

	if (sAICC_URL != "" && sAICC_SID != "") buffer = "true";

	return buffer;
}

/*******************************************************************************
**
** Function doLMSFinishHACP()
** Inputs:  none
** Return:  un boolean indiquant si l'envoi a bien fonctionné
**
** Description:
** Envoi les données de tracking au LMS
**
*******************************************************************************/
function doLMSFinishHACP() {
	var buffer = false;
	
	if (sAICC_URL != "" && sAICC_SID != "") {
		// on construit le formulaire HACP
		HACP_makeForm(sAICC_URL, sAICC_SID);

		// on envoie de toutes les données stockées
		var sAICC_DATA;
		if (tracking["cmi.core.author_data"]) {
			
			sAICC_DATA = tracking["cmi.core.author_data"];
			HACP_setCommand("putauthordata");

		} else {
			
			sAICC_DATA = HACP_getLineSeparator();
			sAICC_DATA += "[CORE]" + HACP_getLineSeparator();

			sAICC_DATA += "score=" + tracking["cmi.core.score.raw"] + HACP_getLineSeparator();
			sAICC_DATA += "time=" + tracking["cmi.core.session_time"] + HACP_getLineSeparator();
			sAICC_DATA += "lesson_status=" + tracking["cmi.core.lesson_status"] + HACP_getLineSeparator();
			sAICC_DATA += "lesson_location=" + tracking["cmi.core.lesson_location"] + HACP_getLineSeparator();
			sAICC_DATA += "[CORE_LESSON]" + HACP_getLineSeparator();
			sAICC_DATA += tracking["cmi.suspend_data"] + HACP_getLineSeparator();
			HACP_setCommand("putparam");

		}

		HACP_setAICC_DATA(sAICC_DATA);
		HACP_PostForm(); // poste le formulaire
		
		if (!tracking["cmi.core.author_data"]) {
			//On récupère les infos CSV de tracking d'interaction HACP.
			sAICC_Interaction = getCSVString();
			
			// on envoie un exitAU en utilisant une popup afin que le post aboutisse
			var sUrl = "PutInteraction.html?";
			sUrl += "AICC_URL=" + sAICC_URL;
			sUrl += "&AICC_SID=" + sAICC_SID;
			sUrl += "&AICC_Interaction=" + escape(sAICC_Interaction);	
			window.open(sUrl, 'popup_edoceo_HACP_PutInteraction', 'scrollbars=no,resizable=yes,width=0,height=0');
		}

		buffer = true;
	}

	return buffer;
}


function getLMSParametersHACP(){
	var buffer = "";

	//Dans le cas du HACP on active les interactions par défaut car on ne peut savoir si le LMS va les gérer. (pas de getValue)
	buffer += "&bTrackInteractions=1";

	return buffer;
}


/*******************************************************************************
** primitives d'accès au formulaire HACP
*******************************************************************************/
function HACP_makeForm(sAICC_URL, sAICC_SID) {
		if(sAICC_URL != "" && sAICC_SID != "") { // des paramètres HACP ont été trouvés
			// on construit un formulaire invisible afin de pouvoir poster un exitAU en fermeture de page
			//trace("on construit un formulaire invisible afin de faire du POST HACP");
			
			//alert("construction formHACP");
			
			document.writeln('<form name="formHACP" target="comm" method="post" action="' + sAICC_URL + '">');
			document.writeln('<p>');
			document.writeln('<input name="session_id" type="hidden" id="session_id" value="' + sAICC_SID + '">');
			document.writeln('<input name="command" type="hidden" id="command" value="">');
			document.writeln('<input name="aicc_data" type="hidden" id="aicc_data" value="">');
			document.writeln('</p>');
			document.writeln('</form>');
		}
}
function HACP_PostForm() {
	document.forms["formHACP"].submit(); 
}
function  HACP_setCommand(sValue) {
	document.forms["formHACP"].command.value = sValue;
}
function  HACP_setAICC_DATA(sValue) {
	document.forms["formHACP"].aicc_data.value = sValue;
}
function HACP_getAICC_URL() {
	return document.forms["formHACP"].action; 
}
function HACP_getAICC_SID() {
	return document.forms["formHACP"].session_id.value; 
}
// ---------------------------------
// utils
// ---------------------------------
function HACP_getLineSeparator() {
	return String.fromCharCode(13) + String.fromCharCode(10); 
}


/**
* Affichage de la chaine d'interaction formatage type csv.
*/
function getCSVString(){
	
	//trace("getCSVString");
	
	//La chaine csv que l'on va renvoyer dans l'url.
	var sCSVString = "";

	//Formatage de l'entête.
	
	sCSVString += aFinalInteractionHeaders.join(',');
	sCSVString += HACP_getLineSeparator();
	
	//On va parcourir toutes les interactions remontées pour les placer dans le tableau final.
	var nNum = aInteractionsList.length;	
	
	for (var i = 0; i<nNum; i++) {
		var pTempInteract = aInteractionsList[i];
		//Si l'index du tableau contient bien une interaction.
		if (pTempInteract != undefined) {
			
			//On crée un tableau que l'on initialise à al taille des header du tableau de l'interaction finale.
			var pTempInteractFinal = initArray(aFinalInteractionHeaders.length);
			
			/*
			* (1)
			*/
			
			// L'index du tableau où l'on va inserer l'info dans les infos finales de tracking d'interaction
			//	en recollant, les interactions et les thèmes.
			var pThemeId = pTempInteract[8]; //Id du thème associé à l'interaction.
			
			var nInteract = pTempInteract.length;//Nombre d'interaction.			
			
			for (var u = 0; u<nInteract; u++) {
				//On recherche à quel index on doit placer l'item dans le tableau final par rapport au tableau de header.
				var nIndex = getStringIndex(aFinalInteractionHeaders, aInteractionHeaders[u]);
				pTempInteractFinal[nIndex] = '"'+pTempInteract[u]+'"';
				
				
			}
			
			/*
			* (2)
			*/
			
			//On récupère le thème lié à l'interaction.
			var pTempTheme = aThemesList[pThemeId]
			
			var nTheme = pTempTheme.length;//Nombre d'item dans le  thèmes.			
			
			//On parcourt tout les item des thèmes.
			for (var u = 0; u<nTheme; u++) {
				//On recherche à quel index on doit placer l'item dans le tableau final par rapport au tableau de header.
				var nIndex = getStringIndex(aFinalInteractionHeaders, aThemeHeaders[u]);
				pTempInteractFinal[nIndex] = '"'+pTempTheme[u]+'"';		
				
			}
			
			
			/*
			* (3)
			*/
				
			//On a terminé de remplir les données on va reformater une chaine avec des caractères de protection.
			
			sCSVString += pTempInteractFinal.join(',');
			//Si ce n'est pas le dernier Item on met un saut de ligne.
			if (i != nNum ) sCSVString += HACP_getLineSeparator();
		}
	}
	
	///////////////////////////////////////////////////////////////////////////////
	// Fin géneration du String CS à envoyer.
	//alert(sCSVString);

	//On envoie la chaine CSV.
	return sCSVString;
}