/*******************************************************************************
** initialisations
*******************************************************************************/
var bHACP = false; // flag : le tracking est-il HACP ?
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"];


/*******************************************************************************
** fonctions HACP
*******************************************************************************/



function HACP_getLMSParameters(){
	//trace("HACP_getLMSParameters");
	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;
}


function HACP_LMSInitialize() {
	//alert("HACP_LMSInitialize");
	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];
						//trace("sAICC_URL = " + sAICC_URL);
					break;
					case "aicc_sid":
						sAICC_SID = aParam_i[1];
						//trace("sAICC_SID = " + sAICC_SID);
					break;
				}
			}
		}
	}

	bHACP = (sAICC_URL != "" && sAICC_SID != "");
	//alert("HACP_LMSInitialize bHACP=" + bHACP);


	return bHACP;
}

function HACP_LMSFinish() {
	var buffer = false;
	
	if(sAICC_URL != "" && sAICC_SID != "") {
		
		//trace("HACP_makeForm");
		
		// on construit le formulaire HACP
		HACP_makeForm(sAICC_URL, sAICC_SID);
		// on envoie de toutes les données stockées
		var sAICC_DATA = HACP_getLineSeparator();
		sAICC_DATA += "[CORE]" + HACP_getLineSeparator();

		sAICC_DATA += "score=" + sTrack_score + HACP_getLineSeparator();
		sAICC_DATA += "time=" + sTrack_session_time + HACP_getLineSeparator();
		sAICC_DATA += "lesson_status=" + sTrack_lesson_status + HACP_getLineSeparator();
		sAICC_DATA += "lesson_location=" + sTrack_lesson_location + HACP_getLineSeparator();
		sAICC_DATA += "[CORE_LESSON]" + HACP_getLineSeparator();;
		sAICC_DATA += sTrack_suspend_data + HACP_getLineSeparator();
		HACP_setAICC_DATA(sAICC_DATA);
		//trace("HACP_LMSFinish sAICC_DATA = " + sAICC_DATA);
		//trace("HACP_setCommand");
		HACP_setCommand("putparam");
		
		//alert("HACP_PostForm");
		HACP_PostForm(); // poste le formulaire
		
		//On récupère les infos CSV de tracking d'interaction HACP.
		sAICC_Interaction = getCSVString();
		
		//alert("sAICC_Interaction : "+sAICC_Interaction);
		
		// 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;
}
/*******************************************************************************
** 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;
}