﻿/**
 * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
 *
 * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */
function _DoFSCommand(command,args) {	
	var F_intData = args;
	if (typeof(args) == "string") F_intData = args.split(";");

	switch (command){
		case "adl.nav.request":
			if ((APIOK()) && (g_bFinishDone == false)) {
			 	var returnValue = SCOGetValue("adl.nav.request_valid.continue");
			 	// we request the next SCO from the LMS
		 		if (returnValue != "false")
					SCOSetValue("adl.nav.request", "continue");
				SCOFinish();
			}
			else{
				var redirect = args;
				if (typeof(args) == "object") redirect = args[1];
				if(redirect.indexOf(".swf") != -1)
					redirect = redirect.substr(0, redirect.lastIndexOf(".swf"));
				if(redirect.indexOf(".htm") != -1)
					redirect = redirect.substr(0, redirect.lastIndexOf(".htm"));
				// embed the flash movie
				AC_FL_RunContent(
						'src', redirect,
						'movie', redirect,
						'width', '100%',
						'height', '100%',
						'quality', 'high',
						'id', 'mm_Content',
						'name', 'mm_Content',
						'bgcolor', '#E9D7C8',
						'menu', 'false',
						'allowScriptAccess','always',
						'allowFullScreen','true',
						'salign', '',
						'align', 'middle',
						'wmode', 'window',
						'devicefont', 'false',
						'flashvars', 'cmd_controlSD=si&',
						'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,24,0',
						'pluginspage', 'http://www.macromedia.com/go/getflashplayer'
					); //end AC code	
			}
			break;
		case "MM_cmiSendInteractionInfo" :
			if ((APIOK()) && (g_bFinishDone == false)) {
				var completion_status = SCOGetValue("cmi.completion_status");
				//if (completion_status == API_STATUS_COMPLETED) return;
	
				/* 
					Comprobamos en qué intento esta:
					Dicho valor estará almacenado en la descripción
					del objetivo (EVALFINAL)
				*/
				var stDescription = "";
				var nIntento = 1;
				var nPuntuacion = 0;
				var objetivo = 0;
				if (SCOGetErrorValue("cmi.objectives._count") == 0){
					var	objetives	= SCOGetValue("cmi.objectives._count");
					// Recuperamos el primariObj
					for ( var i = 0; i < objetives; i++)
						if (SCOGetValue("cmi.objectives." + i + ".id").toLowerCase().indexOf("evalfinal") != -1){
							objetivo = i;
							if (SCOGetErrorValue("cmi.objectives." + objetivo + ".description") == 0){
								stDescription = SCOGetValue("cmi.objectives." + objetivo + ".description");
								if (stDescription.indexOf("|") != -1){
									//alert("cmi.objectives." + objetivo + ".description: " + stDescription);
									var aDescription = stDescription.split("|");
									nIntento = Number(aDescription[0]);
									nPuntuacion = Number(aDescription[1]);
								}
							}
							break;
						}
				}				
	
				//MM_cmiSendInteractionInfo(date, time, intid, objid, intrtype, correct, student, result, weight, latency)
				var	n	= SCOGetValue("cmi.interactions._count");
				SCOSetValue("cmi.interactions." + n + ".id", F_intData[2] + "_try_" + nIntento);
				SCOSetValue("cmi.interactions." + n + ".objectives.0.id", getObjetiveId() + "_try_" + nIntento);
				SCOSetValue("cmi.interactions." + n + ".timestamp", formatTimestamp(F_intData[1]));
				SCOSetValue("cmi.interactions." + n + ".type", normalizeInteractionType(F_intData[4]));
				SCOSetValue("cmi.interactions." + n + ".correct_responses.0.pattern", F_intData[5]);
				SCOSetValue("cmi.interactions." + n + ".weighting", F_intData[8]);
				SCOSetValue("cmi.interactions." + n + ".learner_response", F_intData[6]);
				SCOSetValue("cmi.interactions." + n + ".result", normalizeInteractionResult(F_intData[7]));
				SCOSetValue("cmi.interactions." + n + ".latency", formatTime(F_intData[9]));
				if (F_intData[10] != null)
					SCOSetValue("cmi.interactions." + n + ".description", F_intData[10]);
					
				// Actualizamos el valor de la descripcion.
				nPuntuacion = nPuntuacion + (F_intData[7].toLowerCase().indexOf("c") != -1 ? Number(F_intData[8]) : 0);
				//alert("valor: ("+(F_intData[7]) + ") " + (F_intData[7].toLowerCase().indexOf("c") ))
				//alert(F_intData[8] + " - " + F_intData[7] + " -- " + nPuntuacion );
				stDescription = nIntento + "|" + nPuntuacion ;
				SCOSetValue("cmi.objectives." + objetivo + ".description", stDescription);
				
				break;
			}	
		case "MM_cmiSendObjectiveInfo" :
			if ((APIOK()) && (g_bFinishDone == false)) {
				//MM_cmiSendObjectiveInfo(index, objid, score, status)
				var	n	= SCOGetValue("cmi.objectives._count");
				var err = mm_API.GetLastError().toString();
				var existeId = false;
				var progress = (parseInt(F_intData[2]) / 100)
				if (err == 0) { 
					if (F_intData[1] != "" && F_intData[1] != null){
						for ( var i = 0; i < n; i++)
							if (SCOGetValue("cmi.objectives." + i + ".id") == F_intData[1]){
								SCOSetValue("cmi.objectives." + i + ".id", F_intData[1]);
								SCOSetValue("cmi.objectives." + i + ".score.min", 0);
								SCOSetValue("cmi.objectives." + i + ".score.raw", F_intData[2]);
								SCOSetValue("cmi.objectives." + i + ".score.max", 100);
								SCOSetValue("cmi.objectives." + i + ".score.scaled", progress.toString());
								SCOSetValue("cmi.objectives." + i + ".success_status", normalizeStatus(F_intData[3]));						
								SCOSetValue("cmi.objectives." + i + ".completion_status", API_STATUS_COMPLETED);						
								SCOSetValue("cmi.objectives." + i + ".progress_measure", "1.0000");
								existeId = true;
								break;					
							}
					}
					else{
						for ( var i = 0; i < n; i++)
							if (SCOGetValue("cmi.objectives." + i + ".id").toLowerCase().indexOf("evalfinal") != -1){
								//SCOSetValue("cmi.objectives." + n + ".id", F_intData[1]);
								SCOSetValue("cmi.objectives." + i + ".score.min", 0);
								SCOSetValue("cmi.objectives." + i + ".score.raw", F_intData[2]);
								SCOSetValue("cmi.objectives." + i + ".score.max", 100);
								SCOSetValue("cmi.objectives." + i + ".score.scaled", progress.toString());
								SCOSetValue("cmi.objectives." + i + ".success_status", normalizeStatus(F_intData[3]));
								SCOSetValue("cmi.objectives." + i + ".completion_status", API_STATUS_COMPLETED);						
								SCOSetValue("cmi.objectives." + i + ".progress_measure", "1.0000");						
								existeId = true;
								break;					
							}
					}
				}	
				if (!existeId){
					SCOSetValue("cmi.objectives." + n + ".id", F_intData[1]);
					SCOSetValue("cmi.objectives." + n + ".score.min", 0);
					SCOSetValue("cmi.objectives." + n + ".score.raw", F_intData[2]);
					SCOSetValue("cmi.objectives." + n + ".score.max", 100);
					SCOSetValue("cmi.objectives." + n + ".score.scaled", progress.toString());
					SCOSetValue("cmi.objectives." + n + ".success_status", normalizeStatus(F_intData[3]));
					SCOSetValue("cmi.objectives." + n + ".completion_status", API_STATUS_COMPLETED);						
					SCOSetValue("cmi.objectives." + n + ".progress_measure", "1.0000");						
				}
				break;
			}	
		case "CMISetScore":
		case "MM_cmiSendScore" :
		{
			//if (_debug){
				//alert("envio de puntuación: " + F_intData[0]);
				//alert("envio de maxScore: " + maxScore);
			//}
				SCOSetValue("cmi.score.min",  0);
				SCOSetValue("cmi.score.raw", F_intData.length > 1 ? F_intData[1] : F_intData[0]);
				SCOSetValue("cmi.score.max", F_intData.length > 1 ? F_intData[0] : maxScore);
				if (SCOGetErrorValue("cmi.objectives._count") == 0){
					var	objetives	= SCOGetValue("cmi.objectives._count");
					// Recuperamos el primariObj
					for ( var i = 0; i < objetives; i++)
						if (SCOGetValue("cmi.objectives." + i + ".id").toLowerCase().indexOf("evalfinal") != -1){
							var objetivo = i;
							SCOSetValue("cmi.objectives." + objetivo + ".score.min", 0);
							SCOSetValue("cmi.objectives." + objetivo + ".score.raw", SCOGetValue("cmi.score.raw"));
							SCOSetValue("cmi.objectives." + objetivo + ".score.max", maxScore);
							break;					
						}
				}
			break;
		}	
		case "CMISetMeasure":
		{
			var measure = SCOGetValue('cmi.progress_measure');
			if ( parseFloat(args) > measure )
				measure = SCOSetValue("cmi.progress_measure", parseFloat(args));
			break;
		}	
		case "CMISetStatus":
		case "MM_cmiSetLessonStatus" :
		{
			//MM_cmiSetLessonStatus(theStatus)
			SCOSetValue("cmi.completion_status"/*cmi.core.lesson_status*/, normalizeStatus(F_intData[0]));
			if (SCOGetErrorValue("cmi.objectives._count") == 0){
				var	objetives	= SCOGetValue("cmi.objectives._count");
				// Recuperamos el primariObj
				for ( var i = 0; i < objetives; i++)
					if (SCOGetValue("cmi.objectives." + i + ".id").toLowerCase().indexOf("evalfinal") != -1){
						var objetivo = i;
						SCOSetValue("cmi.objectives." + objetivo + ".completion_status", SCOGetValue("cmi.completion_status"));
						break;					
					}
			}
			break;
		}
		case "CMISetTime" :
			SCOReportSessionTime();
			break;
		
		case "CMISetCompleted" :
		{
			//CMISetCompleted()
			var hasCompletion_threshold = (SCOGetErrorValue("cmi.completion_threshold") == 0);
			var measure = SCOGetValue('cmi.progress_measure');
			
			if (!hasCompletion_threshold){
				if (_debug) 
					alert("Estado ultimo de la leccion : " + status );
	      SCOSetValue( "cmi.completion_status", API_STATUS_COMPLETED);
  			measure = 1;

				if (SCOGetErrorValue("cmi.objectives._count") == 0){
					var	objetives	= SCOGetValue("cmi.objectives._count");
					// Recuperamos el primariObj
					for ( var i = 0; i < objetives; i++)
						if (SCOGetValue("cmi.objectives." + i + ".id").toLowerCase().indexOf("evalfinal") != -1){
							var objetivo = i;
							SCOSetValue("cmi.objectives." + objetivo + ".completion_status", SCOGetValue("cmi.completion_status"));
							break;					
						}
				}
		  }
			else{
				var completion_threshold = SCOGetValue("cmi.completion_threshold");
				if ( completion_threshold > measure )
					measure = completion_threshold;
			}
			
			if (_debug)
				alert("CMISetCompl: " + measure);
		  
		  SCOSetValue("cmi.progress_measure", measure.toString());
		  
			break;
		}
		case "CMISetPassed":
		{
			SCOSetValue("cmi.completion_status"/*cmi.core.lesson_status*/, API_STATUS_PASSED);
			break;
		}
		case "CMISetFailed":
		{
			SCOSetValue("cmi.completion_status"/*cmi.core.lesson_status*/, "failed");
			break;
		}
		case "CMISetData":
		{
			SCOSetValue("cmi.suspend_data", (typeof(args) == "string" ? F_intData[0] : args));
			break;
		}
		case "CMISetLocation":
		{
			SCOSetValue("cmi.location", (typeof(args) == "string" ? F_intData[0] : args));
			break;
		}
		case "CMIexit":
		{
			SCOFinish(true);
			break;
		}
		default:
			if(_debug)
				alert("Command:[" + command + "] :\nArgs[ " +  args + "]");
	}
	return true;
}
