var _Debug = false;

var _NoError = 0;
var _GeneralException = 101;
var _ServerBusy = 102;
var _InvalidArgumentError = 201;
var _ElementCannotHaveChildren = 202;
var _ElementIsNotAnArray = 203;
var _NotInitialized = 301;
var _NotImplementedError = 401;
var _InvalidSetValue = 402;
var _ElementIsReadOnly = 403;
var _ElementIsWriteOnly = 404;
var _IncorrectDataType = 405;


var apiHandle = null;
var API = null;
var findAPITries = 0;


function doLMSInitialize() {
	var api = getAPIHandle();

	if (api == null) {
		return "false";
	}
	else {
		var result = api.LMSInitialize("");

		if (result.toString() != "true") {
			var err = ErrorHandler();
		}
	}

	return result.toString();
}


function doLMSFinish() {
	var api = getAPIHandle();

	if (api == null) {
		return "false";
	}
	else {
		var result = api.LMSFinish("");
		if (result.toString() != "true") {
			var err = ErrorHandler();
		}
	}

	return result.toString();
}


function doLMSGetValue(name) {
	var api = getAPIHandle();

	if (api == null) {
		return "";
	}
	else {
		var value = api.LMSGetValue(name);
		var errCode = api.LMSGetLastError().toString();

		if (errCode != _NoError) {
			return "";
		}
		else {
			return value.toString();
		}
	}
}


function doLMSSetValue(name, value) {
	var api = getAPIHandle();

	if (api == null) {
		return;
	}
	else {
		var result = api.LMSSetValue(name, value);

		if (result.toString() != "true") {
			var err = ErrorHandler();
		}
	}

	return;
}


function doLMSCommit() {
	var api = getAPIHandle();

	if (api == null) {
		return "false";
	}
	else {
		var result = api.LMSCommit("");

		if (result != "true") {
			var err = ErrorHandler();
		}
	}

	return result.toString();
}


function doLMSGetLastError() {
	var api = getAPIHandle();

	if (api == null) {
		return _GeneralException;
	}

	return api.LMSGetLastError().toString();
}


function doLMSGetErrorString(errorCode) {
	var api = getAPIHandle();

	return api.LMSGetErrorString(errorCode).toString();
}


function doLMSGetDiagnostic(errorCode) {
	var api = getAPIHandle();

	return api.LMSGetDiagnostic(errorCode).toString();
}


function ErrorHandler() {
	var api = getAPIHandle();

	if (api == null) {
		return;
	}

	var errCode = api.LMSGetLastError().toString();

	return errCode;
}


function getAPIHandle()
{
   if (apiHandle == null)
   {
      apiHandle = getAPI();
   }

   return apiHandle;
}


function findAPI(win)
{
   while ((win.API == null) && (win.parent != null) && (win.parent != win))
   {
      findAPITries++;

      if (findAPITries > 500)
      {
         return null;
      }

      win = win.parent;

   }
   return win.API;
}


function getAPI()
{
   var theAPI = findAPI(window);
   if ((theAPI == null) && (window.opener != null) && (typeof(window.opener) != "undefined"))
   {
      theAPI = findAPI(window.opener);
   }
   return theAPI
}