

//Find API

var nFindAPITries = 0;
var API = null;
var maxTries = 500;
var APIVersion = "";

var DEBUG = 1;

function findAPI(win)
{
	while ((win.API_1484_11 == null) && (win.parent != null)
		&& (win.parent != win))
	{
		nFindAPITries++;
		if (nFindAPITries > maxTries)
		{
		return null;
		}
		win = win.parent;
	}
	return win.API_1484_11;
}

function getAPI(win)
{
	if ((win.parent != null) && (win.parent != win))
	{
		API = findAPI(win.parent);
	}
	if ((API == null) && (win.opener != null))
	{
		API = findAPI(win.opener);
	}
	if (API != null)
	{
		APIVersion = API.version;
	}
	if (DEBUG >= 2 && API == null)
	{
		alert("API no encontrado, no se establecerá comunicación con la plataforma");
	}
}
getAPI(window);
var SCORMAPI = API;

function hasAPI()
{
	return SCORMAPI != null;
}

function printError(texto)
{
	if (SCORMAPI != null) {
		var errorID = SCORMAPI.GetLastError();
		if (errorID != "0") {
			var errorString = SCORMAPI.GetErrorString(errorID);
			var errorDiag = SCORMAPI.GetDiagnostic(errorID);
			alert(texto + ": " + errorID + " : " + errorString + " : (" + errorDiag + ")");
		}
	} else {
		return null;
	}
}

function runAPICommand(command, args, args2)
{
	if (SCORMAPI != null) {
		if (args == "null") args = "";
		if (args2 == "null") args2 = "";
		if (DEBUG >= 2) {
			alert(command + "(\"" + args + "\", \"" + args2 + "\")");
		}
		var result;
		switch (command) {
			case "LMSInitialize":
				result = SCORMAPI.Initialize(args);
				if (result == "false" && DEBUG >= 1) {
					alert("Error al inicializar el LMS");
				}
				break;
			case "LMSFinish":
				result = SCORMAPI.Terminate(args);
				if (result == "false" && DEBUG >= 1) {
					printError("Error al cerrar el LMS");
				}
				break;
			case "LMSGetValue":
				result = SCORMAPI.GetValue(args);
				if (result == "false" && DEBUG >= 1) {
					printError("Error al obtener el dato");
				}
				break;
			case "LMSSetValue":
				if (args2 != undefined) {
					//if (DEBUG >= 2) alert(typeof(args2));
					result = SCORMAPI.SetValue(args, args2);
					//scorm_commit("");
					if (result == "false" && DEBUG >= 1) {
						printError("Error al guardar el dato");
					}
				} else {
					if (DEBUG >= 1) alert("Error: LMSSetValue debe recibir 2 argumentos");
				}
				break;
			case "LMSCommit":
				return scorm_commit(args);
				break;
			case "LMSGetLastError":
				result = SCORMAPI.GetLastError(args);
				break;
			case "LMSGetErrorString":
				result = SCORMAPI.GetErrorString(args);
				break;
			case "LMSGetDiagnostic":
				result = SCORMAPI.GetLastError(args);
				break;
			default:
				if (DEBUG >= 2) {
					alert("Comando no soportado: " + command);
				}
		}
		if (DEBUG >= 2) {
			alert("Resultado: " + result);
		}
		return result;
	} else {
		return null;
	}
}

function scorm_commit(args) {
	if (SCORMAPI != null) {
		result = SCORMAPI.Commit(args);
		if (result == "false" && DEBUG >= 1) {
			printError("Error al hacer commit de los datos");
		}
		return result;
	} else {
		return null;
	}
}
