 //Demo values


var data = new Object ();
data.name = "";
data.userid = "";
data.email = "";
data.completion = "";
data.score = "";
data.suspend = "";
//
data.role = "USER";
data.shared = "{high_score:[{name:'Denzil Partao',score:'98'},{name:'Antonia Rae',score:'91'},{name:'Nick Shackleton-Jones',score:'89'}]}";
data.feedback = new Object ();
data.feedback.asset_0 = "{feedback:{smi_0:{id:'smi_0',x:400,y:200,w:100,h:30,author:'kulinS01',created:'12.04.04',lastEdit:'20.04.04',fixed:'18.04.04',closed:'' status:'OPEN',message:'Should be <b>Smolensk</b> not Smolenks.'},smi_1:{id:'smi_1',x:490,y:290,w:80,h:40,author:'kulinS01',created:'14.04.04',lastEdit:'23.04.04',fixed:'19.04.04',closed:'' status:'OPEN',message:'Change this picture'}}}"
data.feedback.asset_1 = "{feedback:{smi_0:{id:'smi_0',x:100,y:100,w:100,h:30,author:'kulinS01',created:'12.04.04',lastEdit:'20.04.04',fixed:'18.04.04',closed:'' status:'OPEN',message:'Voiceover doesnt work'}}}"

//values for BBC_2008,SCORM2004
var NOTINITIALIZED = "LMS is not Present"
var PRESENT = "CO is connected to LMS"
var TERMINATED = "CO has closed connection to the LMS"
//common values
var FAILED = "CO has failed to send a message to the LMS"
//obsolete bespoke field
var BESPOKE = "bespoke"
//Progress
var SCORE = "score"
var COMPLETION = "completion"
var MAXTIMEALLOWED = "maxtimeallowed"
var TIMESPENT = "timespent"
var STARTED = "started"
var SESSIONS = "sessions"
var MODE = "mode"
var OBJECTIVES = "objectives"
var INTERACTIONS = "interactions"
var LOCATION = "location"
//Course specific data
var LAUNCH = "launch"
var SUSPEND = "suspend"
//User data
var NAME = "name"
var ROLE = "role"
var USERID = "userid"
var TABLETID = "tabletid"
var EMAIL = "email"
var PHONE = "phone"
var DEPARTMENT = "department"
var JOBTITLE = "jobtitle"
var STAFFID = "staffid"
var ROOM = "room"
//course agregated data
var SHARED = "shared"
var FEEDBACK = "feedback"
errors = new Object ();
errors.ERROR_0 = ["0", "No Error"]
demoMode = true;
debug = false;
//cache.user keeps user info for further use
var cache = new Object ();
var userID = getCookie ("userName");
var tabletID = 0//__getTabletID ();
var courseID = 0;
cache.user = __getUserInfo (userID)
var buffer = new Object();
buffer.score = 0;
buffer.suspend = "null";
buffer.completion = "null";
function SetValue (o, p)
{
	// Name: setValue
	// Parameters : o: name of the object in content object,p: value to set
	// Returns : error codes as string
	// Description: sets values in content objects
	var r;
	if(debug)
		alert("SetValue ("+o+","+p+")");
	
	if (demoMode)
	{
		switch (o)
		{
			case SCORE :
			data.score = p;
			
			break;
			case COMPLETION :
			data.completion = p;
			break;
			case SUSPEND :
			data.suspend = p;
			break;
			case TABLETID:
			tabletID = p;
			default :
		}
		r = errors.ERROR_0 [1];
	} else
	{
		switch (o)
		{
			case SCORE :
			if(data.score<=p)
			buffer.score = p
			
			break;
			case COMPLETION  :
			if(p == "NOT_ATTEMPTED")
				buffer.completion = "Not Started";
			if(p == "INCOMPLETE")
				buffer.completion = "In progress";
			if(p == "COMPLETED")
				buffer.completion = "Completed";
			
			break;
			case SUSPEND :
			buffer.suspend = p;
			break;
			default :
			case TABLETID:
			tabletID = p;
			
		}
	}
	r = errors.ERROR_0;
	return r;
}

function Commit (){
	if(debug)
		alert("Commit()");
	
	var r = logScore (buffer.completion, buffer.score, buffer.suspend);
	return r;
}

function GetValue (o)
{
	var r = "";
	if(debug)
		alert("GetValue ("+o+")");
	
	if (demoMode)
	{
		if (o.slice (0, 8) == FEEDBACK)
		{
			r = data.feedback[o.split('[')[1].split(']')[0]]
			
		}else
		{
			switch (o)
			{
				case NAME :
				r = data.name;
				break;
				case ROLE :
				r = data.role;
				break;
				case USERID :
				r = data.userid;
				break;
				case SCORE :
				r = data.score;
				break;
				case EMAIL :
				r = data.email;
				break;
				case COMPLETION :
				r = data.completion;
				break;
				case SUSPEND :
				r = data.suspend;
				
				break;
				case TABLETID:
				r = tabletID;
				default :
			}
		}
	} else
	{
		switch (o){
			case NAME:
			r = __getUserName()
			break;
			case ROLE:
			break;
			case USERID:
			r = getCookie("userName");
			break;
			case SCORE:
			r = getScore();
			break;
			case COMPLETION:
			r = getStatus();
			if(r=="Not Started")
				r = "NOT_ATTEMPTED";
			if(r=="In progress")
				r = "INCOMPLETE";
			if(r=="Complete")
				r = "COMPLETED";
			break;
			case SUSPEND:
			r = getBespoke();
			
			
			
			break;
			case TABLETID:
			r = tabletID;
			break;
		}
	}
	return r;
}
//Private functions
function __getUserName(){

	
	var userID = getCookie("userName");
	var url = "/dataUtils/getUserInfo.asp?userID=" + userID;
	var result = LmsCommunicator( url , '' , false);
	window.status=result;
	return result.toString();
	
 
}
function __getTabletID ()
{
	var currentAddressArray = document.location.href.split ("/");
	var result = currentAddressArray.pop ();
	result = currentAddressArray.pop ();
	var tabletID = new Number (result);
	return tabletID;
}
function __getUserInfo (id)
{
	var userID = getCookie("userName");
	var url = "/dataUtils/getUserInfo.asp?userID=" + userID;
	var result = LmsCommunicator (url , '' , false);
	return result;
}



function exit(){

	var result = "NOERROR";
	window.close();
	return result;
}

//old interface
function getTabletID(){
//override
	return tabletID;
}

function getBespoke(  ){

	// Name: getBespoke
	// Parameters :   	  
	// Description :  returns the bespoke value for this user and module ID.  
	
	
			var url = "/dataUtils/getScore.asp?tabletID=" + tabletID + "&getBespoke=true";
			var result = LmsCommunicator( url , '' , false);
			
			if (result + "" == "" || result == "-1" || result == null ){
				result = ""
			}
			else{	
				if( result.indexOf('|^|') > 0 ){
					result = result.substr(  result.indexOf('|^|')+ 3 );
				}
			}
			
			window.status=result;
			return result;
		 
	 
}
function getScore(  ){

	// Name: getScore
	// Parameters :    		
	// Description :  returns the recorded score value for this user and module ID
	
		
			var url = "/dataUtils/getScore.asp?tabletID=" + tabletID;
			var result = LmsCommunicator( url , '' , false);
			window.status=result;

			return result.toString();
	
	
}
function getStatus(  ){

	// Name: getStatus
	// Parameters :     	 	
	// Description:  returns the status value for this user and module ID. This will normally be either
	// complete, in progres or started
	

		var url = "/dataUtils/getStatus.asp?tabletID=" + tabletID;
		var result = LmsCommunicator( url , '' ,false );
		return result.toString();

	
}

function LmsCommunicator( strURL, postData , async ) {

	// Name: LmsCommunicator
	// Parameters : strURL	- (string) url	
	//			  : postData - (string) post values 		
	//			  : async - (boolean) indicating asynchronous request required	
	// Description:  makes http request to the specified url and returns the http content when async is set to false

	var xmlHttpReq = false;
	var self = this;
	self.xmlHttpReq = this.GetXMLHTTPObject();

	if (  self.xmlHttpReq ) {
		if ( typeof(postData)=='undefined'){ postData=''; }
		self.xmlHttpReq.open('POST', strURL, async );
		self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		self.xmlHttpReq.setRequestHeader("Content-Length", postData.length.toString() );
		self.xmlHttpReq.send(postData);	
		if ( async == false ){ // async off; so wait for value to return
			if ( self.xmlHttpReq.status == 200 ){ 
				return new String(self.xmlHttpReq.responseText);	
			}
		}
	}  
	
}
function LmsCommunicatorCheck(){

	// Name: LmsCommunicatorCheck
	// Parameters : None	
	// Description: returns true on platforms and browsers where xmlhttp is supported. 
	
	var result = GetXMLHTTPObject();
	if ( result ) {
		result = null;
		return true;
	} else {
		return false;
	}
}
function GetXMLHTTPObject(){

	// Name: GetXMLHTTPObject
	// Parameters : None
	// Description: returns the correct xmlhttp object for the browser type
	
	var obj = null;
	
	try	{
		obj = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e){
	
		try {
			obj = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(ex){
			obj = null;
		}
	}
	

	if( !obj && window.XMLHttpRequest ) {
		obj = new XMLHttpRequest();
		if ( obj ) {
			if ( obj.overrideMimeType ) { obj.overrideMimeType('text/xml'); }		
		} 
	}
	
	return obj;
}
function checkCourseCompletion(cID){
var result= true;
	if(debug){
		alert (cID.toString()+" type is "+typeof(cID.toString()));
		alert("courseMatrix["+cID+"]="+courseMatrix[cID.toString()].toString());
	}
 for (var i = 0 ; i<courseMatrix[cID].length;i++){
 	
 	if(debug)
 		alert(i);
 	if(getCompletion(courseMatrix[cID][i])==false)
 		result = false;
 }
return result;
}

function getCompletion(tID){
	//Same as getStatus but can specify tabletID as parameter
	var result = true;
		if (demoMode)
		{
			var returnValue = "Completed";
		}else{	
		var url = "/dataUtils/getStatus.asp?tabletID=" +tID;
		var returnValue = LmsCommunicator( url , '' ,false );
		
		}
		
		switch(returnValue){
			case "Completed":
				result = true;
				break;
			default:
				result = false;
		
		}
	
	return result;
}




function runFeedback(){
	if(debug)
		alert("checkCourseCompletion("+courseID+")");
	if(checkCourseCompletion(courseID)){
		var openString = "http://learn.gateway.bbc.co.uk/feedback/feedback.aspx?tabletid="+tabletID+"&theme=&destUri=http://learn.gateway.bbc.co.uk/Courses/CourseDetails.aspx?CourseID="+courseID;
		if(debug)
			alert(openString);
		window.open(openString);
	}
}
function logScore( status, score, bespoke ){

	// Name: logScore 
	// Parameters :    		
	// Status – (string) – course progress.  
	// Score – (string) –  The score attained
	// Bespoke – (string) –  The place to store other information relevant to the course
	
	// Description: Logs user progress to the LMS. Bespoke is optional: 
	// If not used, blank or NULL, the stored procedure will not change the Bespoke db field
	// Score and Status can be set to 'skip' in which case the procedure will not change the current value
	// in the database. You cannot skip both values.

		var tabletID = getTabletID();
		
			score=score.replace("%","%25");
			var url = "/dataUtils/logScore.asp?tabletID=" + tabletID + "&status=" + escape(status) + "&score=" + score + "&bespoke=" + escape( bespoke );
			var r = LmsCommunicator( url , '', true );
	return r;
}
