﻿/******************************************************************************************
**
** Function: LoadCourse()
** Inputs:	None
** Return:	None
**
** Description:
** 	Initialize communication with LMS
** 	Set Course Exit Status to false
** 	Call InitializeCourseData to handle Course Specific Data
**
******************************************************************************************/
function LoadCourse()
{
     /*
     if(LMSInitialize())
       {
	       bCourseInitialize=true;

	       //API Wrapper Reserved Variable
	       exitCourseStatus = false;

	       //Call Course Function to Handle Data
	       InitializeCourseData();
      	}
      */
}


/******************************************************************************************
**
** Function: CommitData()
** Inputs:	None
** Return:	None
**
** Description:
** 	Set Course Exit Status to true
** 	Commit the Data to the LMS
** 	Close Communication with the LMS
**
******************************************************************************************/
function CommitData()
{
	//LMSSetValue( "cmi.core.exit", "logout" );
	exitCourseStatus = true;
	LMSCommit();
	LMSFinish();
}

/*****************************************************************************************
** Below are functions and variables specific to this course
*****************************************************************************************/

//Course Defined LMS Variables

var LMS_core_support;
var LMS_student_id;
var LMS_student_name;
var LMS_lesson_location;
var LMS_credit;
var LMS_lesson_status;
var LMS_entry;
var LMS_score_support;
var LMS_score_raw;
var LMS_total_time;
var LMS_suspend_data;
var LMS_launch_data;
var exitCourseStatus;
var startTime;
var endTime;
var bCourseInitialize=false;
var bCourseCompleted=false;




function InitializeCourseData()
{

   //----------------------------------------------------
   //Mandatory Elements that can be retreived from LMS
   //Based on SCORM Conformance Requirements version 1.2
   //Uncomment the elements that this course will use
   //----------------------------------------------------

     //LMS_core_support = LMSGetValue("cmi.core._children");
     //LMS_credit = LMSGetValue("cmi.core.credit");
     //LMS_entry = LMSGetValue("cmi.core.entry");
     //LMS_score_support = LMSGetValue("cmi.core.score._children");
     //LMS_suspend_data = LMSGetValue("cmi.suspend_data");
     //LMS_launch_data = LMSGetValue("cmi.launch_data");

     LMS_student_id = LMSGetValue("cmi.core.student_id");
     LMS_student_name = LMSGetValue("cmi.core.student_name");
     LMS_score_raw = LMSGetValue("cmi.core.score.raw");
     LMS_lesson_status = LMSGetValue("cmi.core.lesson_status"); //Completion Status
     LMS_lesson_location = LMSGetValue("cmi.core.lesson_location"); //Bookmarking
//     LMS_total_time = LMSGetValue("cmi.core.total_time"); //Course Session Time

//Debug Code
//LMS_lesson_status = "incomplete";
//LMS_lesson_location="module/lp_0_245.htm|111111111111111111111";

   //Initialize Lesson Status
   if (LMS_lesson_status == "not attempted")
   {
   	LMS_lesson_status="incomplete";
   	LMSSetValue( "cmi.core.lesson_status", "incomplete" );
   }
   else
   {
 	if (LMS_lesson_status == "completed")	bCourseCompleted = true;

	//Check Lesson Location
	if (LMS_lesson_location != null && LMS_lesson_location != "")
	{
		retrieveBookmark(LMS_lesson_location);
	}
    }

    //Get Session Time for the Course
    StartTime();
}



function StartTime()
{
  //Grabs the Current Time of Course Entry
  var curDateTimeStart = new Date();
  startTime = curDateTimeStart.getTime();
}



function CalculateTime()
{
  //Calculate the Time Spent in the Course
  if (startTime === null || startTime == "")
  	return false;

  var curDateTime = new Date();
  endTime = curDateTime.getTime();
  tDiff = endTime - startTime;

  hours = tDiff / 1000 / 60 / 60;
  curHours = Math.floor(hours);
  minutes = tDiff / 1000 /60  - (60 * curHours);
  curMins = Math.floor(minutes);
  seconds = tDiff / 1000 - (60 * 60 * curHours) - (60 * curMins);
  curSecs = Math.round(seconds);
  if(curHours>9999) curHours=9999;

  var curTime =   ((curHours < 10) ? "0" : "") + curHours + ":"   + ((curMins < 10) ? "0" : "") + curMins + ":"  + ((curSecs < 10) ? "0" : "") + curSecs;
  return curTime;
}



function retrieveBookmark(str)
{
	if ( str.indexOf( '|' ) != -1 )
	{
		strBookmark = str.split('|')[0];
		strCompletionData = str.split('|')[1];
		for( var i = 0; i < aobjCompletionStatus.length; i++ )
		{
			aobjCompletionStatus[i].intStatus = parseInt( strCompletionData.charAt( i ) );
			//alert( 'strCompletionData.charAt('+ i +') = ' + strCompletionData.charAt( i ) + '\n\naobjCompletionStatus['+i+'].intStatus = ' + aobjCompletionStatus[i].intStatus );			
		}
		//alert( 'in retrieveBookmark\n\nstrBookmark = ' + strBookmark + ' \nstrCourseVers  = ' + strCourseVers + '\nbOverrideNavDisabling = ' + bOverrideNavDisabling + '\nintNumTimesTest = ' + intNumTimesTest );
	}
}



function buildBookmark()
{
//	var strBookmarkComplete = strBookmark  + '|strCourseVers=' + strCourseVers + '|bNavOverride=' + bOverrideNavDisabling + '|intNumTimesTest=' + intNumTimesTest ;
	strCompletionInfo = '';
	bCourseCompleted=true;
	for( var i = 0; i < aobjCompletionStatus.length; i++ )
	{
		strCompletionInfo += aobjCompletionStatus[i].intStatus;				
		if(aobjCompletionStatus[i].intStatus!=1) bCourseCompleted=false;
	}	
	
	var strBookmarkComplete = strBookmark + '|' + strCompletionInfo;
	return strBookmarkComplete;
}



function SaveData()
{
   if(bCourseInitialize)
   {
  	     LMS_lesson_location = buildBookmark();

   	     if(bCourseCompleted) LMS_lesson_status = "completed";

	     //Record Score
	     //if(LMS_score_raw!=null)
		   //LMSSetValue( "cmi.core.score.raw", LMS_score_raw);

	     //Record Lesson Status
	     if(LMS_lesson_status!=null)
		   LMSSetValue( "cmi.core.lesson_status", LMS_lesson_status);

	     //Record Lesson Location
	     if(LMS_lesson_location!=null)
		   LMSSetValue( "cmi.core.lesson_location", LMS_lesson_location);

	     //Record Session Time in Course
	     if(tSession_Time=CalculateTime())
		   LMSSetValue( "cmi.core.session_time", tSession_Time);

	     LMSCommit();

		//Reset the Time as LMS accumulates what is passed
	     StartTime();
   }

}



var bExit=false;
function ExitCoursetoLMS()
{
	if(!bExit)
	{
	  	bExit = true;

		if(bCourseInitialize)
		{
		   LMS_lesson_location = buildBookmark();
		   if(bCourseCompleted) LMS_lesson_status = "completed";

		    //Record Score
		   if(LMS_score_raw!=null)
			LMSSetValue( "cmi.core.score.raw", LMS_score_raw);

		    //Record Lesson Status
		    if(LMS_lesson_status!=null)
			LMSSetValue( "cmi.core.lesson_status", LMS_lesson_status);

		    //Record Lesson Location
		    if(LMS_lesson_location!=null)
			LMSSetValue( "cmi.core.lesson_location", LMS_lesson_location);

		    //Record Session Time in Course
		    if(tSession_Time=CalculateTime())
			LMSSetValue( "cmi.core.session_time", tSession_Time);


		    //*********** Must Call *****************
		      CommitData();
		    //***************************************
		}

   		//Exit Course
		if (( window.opener != null ) && ( !window.opener.closed ) && ( typeof window.opener.parent != "undefined" ) && ( !window.opener.parent.closed )  && ( !bExit ) )
		{
			//window.opener.parent.focus();
			//window.opener.bExit=true;
			//window.opener.parent.close();
		}

		parent.window.close();
	}
}