var findAPITries=0;
var is2004=true;
var apiVal=".API_1484_11";
var da=new Array();
var API=null;
var LMSInitialize;
var LMSFinish;
var LMSCommit;
var LMSSetValue;
var LMSGetValue;
var LMSGetLastError;
var LMSGetErrorString;
var LMSGetDiagnostic;
var isReady=false;
var isActive=false;
da.push(["cmi.core.student_id","cmi.learner_id"]);
da.push(["cmi.core.student_id","cmi.learner_id"]);
da.push(["cmi.core.student_name","cmi.learner_name"]);
da.push(["cmi.student_data.max_time_allowed","cmi.max_time_allowed"]);
da.push(["cmi.student_data.mastery_score","cmi.scaled_passing_score"]);
da.push(["cmi.student_data.time_limit_action","cmi.time_limit_action"]);
da.push(["cmi.student_preference","cmi.learner_preference"]);
da.push(["cmi.core.lesson_location","cmi.location"]);
da.push(["cmi.core.lesson_mode","cmi.mode"]);
da.push(["cmi.core.score","cmi.score"]);
da.push(["cmi.core.lesson_status","cmi.completion_status"]);
da.push(["cmi.core.lesson_status","cmi.success_status"]);
da.push(["cmi.core.session_time","cmi.session_time"]);
da.push(["cmi.core.total_time","cmi.total_time"]);
da.push(["cmi.core.completion_threshold","cmi.completion_threshold"]);
da.push(["cmi.core.credit","cmi.credit"]);
da.push(["cmi.core.entry","cmi.entry"]);
da.push(["cmi.core.exit","cmi.exit"]);
da.push(["cmi.comments_from_lms","cmi.comments_from_lms"]);
da.push(["cmi.comments_from_learner","cmi.comments"]);
LMSInitialize=Initialize;
LMSFinish=Terminate;
LMSCommit=Commit;
LMSSetValue=SetValue;
LMSGetValue=GetValue;
LMSGetLastError=GetLastError;
LMSGetErrorString=GetErrorString;
LMSGetDiagnostic=GetDiagnostic;
function APIis2004()
{
	return is2004;
}
function InitializeAPI()
{
	if (isActive) return true;
	if (!isReady) API=getAPI();
	if (API==null)
	{
		isReady=false;
		return false;
	}
	else
	{
		isReady=true;
	}
	var r=Initialize();
	if (r)
	{
		isActive=true;
		if (navigator.appName.indexOf("Microsoft") != -1) 
		{
			window.onbeforeunload=doExit;
		}
		else
		{
			window.onclose=doExit;
		}
	}
	return r;
}
function CloseCourse()
{
	if (window.opener!=null || (parent==this)) 
	{
		window.close();
	}
	else
	{
		doExit();
		alert("The course is inside a frame, please use the LMS to close this course");
	}
}
function doExit()
{
	if (isActive) thisMovie("COURSE").doTerminate();
}
function findAPI(win)
{
	var cwin=win;
	apiVal=is2004?".API_1484_11":".API";
	while (eval(win+apiVal)==undefined && eval(win).parent!=eval(win))
	{
		
		findAPITries++;
		if (findAPITries > 10)
		{
			return null;
		}
		win = win+".parent";
	}
	if (eval(win+apiVal)==undefined) 
	{
		if (eval(cwin).opener!=null &&  eval(cwin).opener!=undefined)
		{
			return findAPI(cwin+".opener");
		}
		else
		{
			return null;
		}
	}
	else
	{
		return win;
	}
}

function getAPI()
{
   // start by looking for the API in the current window
   is2004=true;
   var theAPI = findAPI("window");
   if (theAPI == null) 
   {
   		findAPITries=0;
	   is2004=false;
	   theAPI = findAPI("window");
   }
   if (theAPI != null) theAPI=eval(theAPI+apiVal);
   return theAPI;
}
function Initialize()
{
	if (!isReady || isActive) return false;
	if (is2004) return API.Initialize(''); else return API.LMSInitialize('');
}
function Terminate()
{
	try
	{
		if (!isReady || !isActive) return false;
		isActive=false;
		if (is2004) return API.Terminate(''); else return API.LMSFinish('');
	}
	catch(e)
	{
	}
}
function Commit()
{
	if (!isReady || !isActive) return false;
	if (is2004) return API.Commit(''); else return API.LMSCommit('');
}
function SetValue(item,val)
{
	if (!isReady || !isActive) return false;
	item=dataobj(item);
	if (is2004) return API.SetValue(item,val); else return API.LMSSetValue(item,val);
}
function GetValue(item)
{
	if (!isReady || !isActive) return false;
	item=dataobj(item);
	if (is2004) return API.GetValue(item); else return API.LMSGetValue(item);
}
function GetLastError()
{
	if (!isReady || !isActive) return false;
	if (is2004) return API.GetLastError(''); else return API.LMSGetLastError();
}
function GetErrorString(eCode)
{
	if (!isReady || !isActive) return false;
	if (is2004) return API.GetErrorString(eCode); else return API.LMSGetErrorString(eCode);
}
function GetDiagnostic(eCode)
{
	if (!isReady || !isActive) return false;
	if (is2004) return API.GetDiagnostic(eCode); else return API.LMSGetDiagnostic(eCode);
}
function dataobj(i)
{
	if (is2004) return i;

	for (var c=0;c<da.length;c++)
	{
		if (da[c][1]==i.substr(0,da[c][1].length))
		{
			
			return da[c][0]+i.substring(da[c][1].length);
		}
	}
	return i;
}
function thisMovie(movieName) 
{
    if (navigator.appName.indexOf("Microsoft") != -1) 
    {
        return window[movieName]
    }
    else 
    {
        return document[movieName]
    }
}
