var blnFoundAPI = false;
var blnCalledFinish = false;
var blnStandAlone = false;

var findAPITries = 0;
var objAPI;

var SCORM_FALSE = "false";
	
function SCORM_Start(){


	var strStandAlone;
	var strResult;
	
	strStandAlone = GetQueryStringValue("StandAlone", window.location.search);
	
	if (ConvertStringToBoolean(strStandAlone)){
		blnStandAlone = true;
	}	
	
	if (! blnStandAlone){
	
		objAPI = getAPI();
	
		if ((objAPI == null) || (typeof(objAPI) == "undefined")){
			alert("SCORM API could not be found. Results may not record properly.");
			return false;
		}
		else{
			blnFoundAPI = true;
		}
	
		strResult = objAPI.LMSInitialize("");
		
		if (strResult == SCORM_FALSE){
			alert("Content failed to establish communication with the LMS. Results may not record properly.");
			return false;
		}
	}
	
	return true;
}
	
	
function SCORM_Finish(){

	if ((! blnStandAlone) && (blnFoundAPI) && (!blnCalledFinish)){
		
		blnCalledFinish = true;
			
		strResult = objAPI.LMSFinish("");

		if (strResult == SCORM_FALSE){
			alert("Content failed to communicate your results to the LMS.");
			return false;
		}
		
	}
	
	return true;
}



function GetQueryStringValue(strElement, strQueryString){
		
	var aryPairs;
	var i;
	var intEqualPos;
	var strArg = "";
	var strValue = "";
	
	//get rid of the leading "?"
	strQueryString = strQueryString.substring(1);
		
	//split into name/value pairs
	aryPairs = strQueryString.split("&");
	
	strElement = strElement.toLowerCase();
	
	//search each querystring value and return the first match
	for (i=0; i < aryPairs.length; i++){
	
		intEqualPos = aryPairs[i].indexOf('=');
		
		if (intEqualPos != -1){
			strArg = aryPairs[i].substring(0,intEqualPos);
			
			if (EqualsIgnoreCase(strArg, strElement)){
				strValue = aryPairs[i].substring(intEqualPos+1);
				return new String(strValue);
			}
		}
	} 
	
	//if we didn't find a match, return an empty string
	return "";
}


function ConvertStringToBoolean(str){
	        
	var intTemp;
	        
	if (EqualsIgnoreCase(str, "true") || EqualsIgnoreCase(str, "t")){
		return true;   
	}
	else{
		intTemp = parseInt(str);
		if (intTemp == 1){
		     return true;
		}
		else{
		     return false;
		}
	}
}



function EqualsIgnoreCase(str1, str2){
	str1 = new String(str1);
	str2 = new String(str2);
	
	return (str1.toLowerCase() == str2.toLowerCase());
}


//code from the SCORM specification - www.adlnet.org
function findAPI(win)
{
   while ((win.API == null) && (win.parent != null))
   {

      findAPITries++;
      // Note: 7 is an arbitrary number, but should be more than sufficient
      if (findAPITries > 7) 
      {
         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
}