﻿/* * Copyright (c) 1995-2005 by 4system Polska Sp. z o.o. * All Rights Reserved. v4 */var PAGETYPE_UNKNOWN = "Unknown";var PAGETYPE_INFORMATION = "Information";var PAGETYPE_EXERCISE = "Exercise";var PAGETYPE_HIDDEN = "Hidden";var PAGETYPE_POLL = "Poll";var PAGESTATUS_NOT_ATTEMPTED = "N";var PAGESTATUS_INCOMPLETE = "I";var PAGESTATUS_COMPLETED = "C";var PAGESTATUS_PASSED = "P";var PAGESTATUS_FAILED = "F";var KEY_SEP = "#|#";var CHAR_A_CODE = 97;var GLOBAL_MAX_POINTS = -1;function getIdentiefier09az(index){	if (index > 9) return String.fromCharCode(87 + index);	else return index;};UELODDCalculator = function(){	var namesList = new Array();};UELODDCalculator.prototype.setNamesList = function(s){	this.namesList = new Array();	if (s.indexOf("||") > -1) var list = s.split("||");	else var list = s.split(":");	for (var i = 0; i < list.length; i++)	{		var items = list[i].split("|");		for (var j = 0; j < items.length; j++) 		{			var ex = false;			for (var k = 0; k < this.namesList.length; k++)			{				if (this.namesList[k] == items[j])				{					ex = true;					break;				}			}			if (!ex) 			{				this.namesList[this.namesList.length] = items[j];			}		}	}};UELODDCalculator.prototype.getNameCode = function(name){	for (var i = 0; i < this.namesList.length; i++)	{		if (this.namesList[i] == name)		{			return String.fromCharCode(CHAR_A_CODE + i);		}	}	return "";};UELODDCalculator.prototype.transform = function(ss, s, all_possible){	if (all_possible && all_possible != "") this.setNamesList(all_possible);	else this.setNamesList(ss);	var r = "{";	s += "";	if (s.length != 0)	{		if (s.indexOf("||") > -1) var sr = s.split("||");		else var sr = s.split(":");		for (var i = 0; i < sr.length; i++)		{			if (r.length > 1) r += ",";			r += String.fromCharCode(CHAR_A_CODE + i) + ".";			r += this.getNameCode(sr[i]);		}	}	r += "}";	return r;};UELODDCalculator.prototype.transformToPermutation = function(ss, s, all_possible){	if (all_possible && all_possible != "") this.setNamesList(all_possible);	else this.setNamesList(ss);	var g = new Array();	if (s.indexOf("||") > -1) var list = s.split("||");	else var list = s.split(":");	for (var i = 0; i < list.length; i++)	{		g[i] = new Array();		var items = list[i].split("|");		if (i == 0) {			for (var k = 0; k < items.length; k++) 			{				g[i][g[i].length] = {"index":items[k],"parent":-1};			}		} else {			for (var j = 0; j < g[i - 1].length; j++)			{				for (var k = 0; k < items.length; k++) 				{					g[i][g[i].length] = {"index":items[k],"parent":j};				}			}		}	}	var res = "";	for (var i = 0; i < g[g.length - 1].length; i++)	{		var p = g.length - 1;		var mod = "";		if (res.length > 0) res += ";"		res += "{";		var item = g[g.length - 1][i];		mod += String.fromCharCode(CHAR_A_CODE + p) + "." + this.getNameCode(item["index"]);		p--;		var parent = item["parent"];		for (var j = g.length - 2; j >= 0; j--)		{			mod = String.fromCharCode(CHAR_A_CODE + p) + "." + this.getNameCode(g[j][parent]["index"]) + "," + mod;			parent = g[j][parent]["parent"]			p--;		}		res += mod + "}";	}	return (res);};/*  *  *  */UELOInteractions = function(){	this.gix = 0;	this.id = "";	this.elementId = "";	this.correctResponses = "";	this.studentResponse = "";	this.all_possible = "";	this.answerValuesString = "";	this.correctResponsesAsText = "";	this.studentResponseAsText = "";	this.time = "";	this.timestamp = null;	this.type = "";	this.weighting = "";	this.status = "N";	this.result = "";	this.maxScore = 0;	this.score = 0;	this.question = "";	this.latency = null;	this.tryNumber = 0;	this.maxTryNumber = 0;};UELOInteractions.prototype.AddCorrectResponses = function(pattern){	var p = this.FindCorrectResponses(pattern);	if (p == null)	{		p = this.correctResponses[this.correctResponses.length] = pattern; 	}	return p;};UELOInteractions.prototype.FindCorrectResponses = function(pattern){	for (var i = 0; i < this.correctResponses.length; i++)	{		if (this.correctResponses[i] == pattern)		{			return this.correctResponses[i];		}	}	return null;};UELOInteractions.prototype.setValue = function(name, value){	// wyjatki do poprawinie i ujednolicenia	if (name == "answers") name = "studentResponse";	if (name == "group") name = "id";		if (typeof(this[name]) == "undefined") return;		if (name == "status"){		if(value=='P'){			this['result']=true;			this['score']=this.maxScore;		}		else this['result']=false;			}		if (typeof(this[name]) == "number" || typeof(this[name]) == "string" || typeof(this[name]) == "boolean"){		this[name] = value;	}};UELOInteractions.prototype.getValue = function(name){	return (typeof(this[name] != "undefined")) ? this[name] : null;}UELOInteractions.prototype.setResult = function(value, userScore){	if(value==true){		this.result=true;		this.status='P';		if (userScore){			this.score=userScore;					}else{			this.score=1;		};			} else {		this.result=false;		this.status='F';		if (userScore){			this.score=userScore;					}else{			this.score=0;		};			};	};UELOYellowCard = function(){	this.id = "";	this.cardType = "";	this.date = "";	this.author = "";	this.left = "";	this.top = "";	this.title = "";	this.note = "";	this.buttonAdd = "";	this.showUserName = false;	this.pageName = '';	this.pageGI = -1;		this.personGraphic = "";	this.clockGraphic = "";	this.isMaximalize = false;};UELOYellowCard.prototype.setValue = function(name, value){	// wyjatki do poprawinie i ujednolicenia	if (name == "cardId") name = "id";	if (typeof(this[name]) == "undefined") return;	if (typeof(this[name]) == "number" || typeof(this[name]) == "string" || typeof(this[name]) == "boolean") {		if (name == "isMaximalize") this[name] = (value == "true");		else this[name] = value;	}};/*  *  *  */UELOPage = function(){	this.pageId = "";	this.scoId = "";	this.type = -1;	this.access = true;	this.pageType = PAGETYPE_UNKNOWN;	this.status = PAGESTATUS_NOT_ATTEMPTED;	this.title = "";	this.globalIndex = -1;	this.pageVisited = 0;	this.chapterName = "";	this.blockRestorePage = false;		this.correctResponses = new Array();	this.interactions = new Array();	this.yellowCards = new Array();		this.visible = 1;		this.marked = false;	this.attempted = false;	this.userAnswer = "";	this.userMarkers = "";	this.sessionTime = 0;};UELOPage.prototype.FillYellowCards = function(params){	if (typeof(params) != "undefined" && params != "") {		var paramsArr = params.split(",");				for (var i=0; i<paramsArr.length; i++) {			if (paramsArr[i] != "") {				var itemAttr = paramsArr[i].split(";");								this.AddYellowCard("systemCard" + i/*unescape(itemAttr[0])*/, unescape(itemAttr[1]),					unescape(itemAttr[2]), unescape(itemAttr[3]),					unescape(itemAttr[4]), unescape(itemAttr[5]),					unescape(itemAttr[6]), unescape(itemAttr[7]),					'' , '', '' , '', '' , '', '' , '', '', 					'___.yellowCard.author.gif', '___.yellowCard.time.gif' , '','', '', '', '', 'false', this.title, this.globalIndex					);			}		}	}};UELOPage.prototype.AddYellowCard = function(id, date, cardType, left, top, author, title, note, src, trashOver, trashOut, miniOver, miniOut, hideOver, hideOut, minimalizedMyCard, myDot, personGraphic, clockGraphic, defaultMinimalize, showMouseOver, isMaximalize, hourLang, buttonAdd, showUserName, pageName, pageGI){	var yellowCard = this.FindYellowCard(id);	if (yellowCard == null && id != "") {		yellowCard = this.yellowCards[this.yellowCards.length] = new UELOYellowCard();		yellowCard.id = id;		yellowCard.date = (date && date != "") ? date : formatTime("datetime");		yellowCard.cardType = cardType;		yellowCard.left = left;		yellowCard.top = top;		yellowCard.author = author;		yellowCard.title = title;		yellowCard.note = escape(note);		yellowCard.hourLang = hourLang;		yellowCard.buttonAdd = buttonAdd;		yellowCard.showUserName = showUserName;		yellowCard.pageName = pageName;		yellowCard.pageGI = pageGI;		if (src) yellowCard.src = src;		if (trashOver) yellowCard.trashOver = trashOver;		if (trashOut) yellowCard.trashOut = trashOut;		if (miniOver) yellowCard.miniOver = miniOver;		if (miniOut) yellowCard.miniOut = miniOut;		if (hideOver) yellowCard.hideOver = hideOver;		if (hideOut) yellowCard.hideOut = hideOut;		if (minimalizedMyCard) yellowCard.minimalizedMyCard = minimalizedMyCard;		if (myDot) yellowCard.authorDot = myDot;		if (personGraphic) yellowCard.personGraphic = personGraphic;		if (clockGraphic) yellowCard.clockGraphic = clockGraphic;		if (defaultMinimalize) yellowCard.defaultMinimalize = defaultMinimalize;		if (showMouseOver) yellowCard.showMouseOver = showMouseOver;		if (isMaximalize) yellowCard.isMaximalize = isMaximalize;		else yellowCard.isMaximalize = false;	};	return yellowCard;};UELOPage.prototype.updateYellowCard = function(id,date,author,left,top,title,note,src,miniBckg,trashOver,trashOut,miniOver,miniOut,hideOver,hideOut,myDot,personGraphic,clockGraphic,defaultMinimalize,showMouseOver,isMaximalize){	var yellowCard = this.FindYellowCard(id);	//if (yellowCard && yellowCard.cardType == "private") {	if (yellowCard) {		yellowCard.date = date;		yellowCard.author = author;		yellowCard.left = left;		yellowCard.top = top;		yellowCard.title = title;		yellowCard.note = escape(note);		yellowCard.src = src;		yellowCard.minimalizedMyCard = miniBckg;		yellowCard.trashOver = trashOver;		yellowCard.trashOut = trashOut		yellowCard.miniOver = miniOver;		yellowCard.miniOut = miniOut;		yellowCard.hideOver = hideOver;		yellowCard.hideOut = hideOut;		yellowCard.authorDot = myDot;		yellowCard.personGraphic = personGraphic;		yellowCard.clockGraphic = clockGraphic;		yellowCard.defaultMinimalize = defaultMinimalize;		yellowCard.showMouseOver = showMouseOver;		yellowCard.isMaximalize = isMaximalize;		return true;	};	return false;};UELOPage.prototype.DeleteYellowCard = function(id){		for (var i = 0; i < this.yellowCards.length; i++) {		var yellowCard = this.yellowCards[i];		if (yellowCard && yellowCard.id == id) {			this.yellowCards[i] = null;			return true;		};	};	return false;};UELOPage.prototype.FindYellowCard = function(id){	for (var i = 0; i < this.yellowCards.length; i++) {		var yellowCard = this.yellowCards[i];		if (yellowCard && yellowCard.id == id) {			return yellowCard;		}	}	return null;};UELOPage.prototype.setValue = function(name, value){	// wyjatki do poprawinie i ujednolicenia	if (typeof(this[name]) == "undefined") return;			if (typeof(this[name]) == "number" || typeof(this[name]) == "string" || typeof(this[name]) == "boolean")	{				this[name] = unquotedString(value);	}};UELOPage.prototype.AddInteraction = function(elementId, question, correctResponses, maxScore, tryNumber, maxTryNumber, type, answerValuesString, all_possible){	/*	if (elementType.indexOf('Light',0) > 0){		elementType=elementType.substring(0,elementType.indexOf('Light',0));	}	*/	var interId = this.FormatInteractionId(elementId, this.globalIndex);	var inter = this.FindInteraction(interId);	if (inter == null)	{		var inter = this.interactions[this.interactions.length] = new UELOInteractions();		inter.gix = this.interactions.length;		inter.id = interId;		inter.elementId = elementId;		inter.question = question || "";		inter.maxScore = maxScore || "";		inter.maxTryNumber = maxTryNumber || "";		inter.correctResponses = correctResponses || "";		inter.type = type || "";		inter.all_possible = all_possible || "";		inter.answerValuesString = answerValuesString || "";		return inter;	} else {		return inter;	}};UELOPage.prototype.FindInteraction = function(interId){	for (var i = 0; i < this.interactions.length; i++)	{		var inter = this.interactions[i];		if (inter.id == interId)		{			return inter;		}	}	return null;}UELOPage.prototype.FormatInteractionId = function(elementId, pageGlobalIndex){	return elementId + "_" + pageGlobalIndex;}UELOPage.prototype.getRawScore = function(){	if(this.pageType==PAGETYPE_HIDDEN) return "";	if(this.pageType!=PAGETYPE_EXERCISE) return "";	var res=0;	for (var j = 0; j < this.interactions.length; j++)	{		var inter = this.interactions[j];		res += parseInt(inter.score);	}	return res;}UELOPage.prototype.getRawScoreMax = function(){	if(this.pageType==PAGETYPE_HIDDEN) return "";	if(this.pageType!=PAGETYPE_EXERCISE) return "";	var res=0;	for (var j = 0; j < this.interactions.length; j++)	{		var inter = this.interactions[j];		res += parseInt(inter.maxScore);	}	return res;}UELOPage.prototype.getRawPageTry = function(){	if (this.pageType == PAGETYPE_EXERCISE) {		for (var j = 0; j < this.interactions.length; j++) {			var inter = this.interactions[j];			if (inter.tryNumber > 0) return inter.tryNumber;		}	}	return 0;};UELOPage.prototype.getCMIScore = function(){		var score = this.getRawScore();	var max = this.getRawScoreMax();	if (score == "" || max == "") return "";	return ((score*100)/max).toFixed(0);}/*  *  *  */UELO = function(){	this.pages = new Array();	this.notepad = new Array();	this.keySep = KEY_SEP;		this.scoId = "";	this.courseName = "";	this.courseDescription = "";		this.username = "";	this.password = "";	this.organisation = "";	this.server = "";	this.percentCompleted = "";	this.pagesCount = 0;	this.exercisePagesCount = 0;	this.pagesVisited = 0;	this.pointsMax = 100;	this.points = 0;	this.passThreshold = 100;	this.beginTime = new Date();	this.endTime = new Date();	this.sessionTime = 0;	this.userVars = "";	this.lastVisitedPage = 0;	this.saveUelo = 0;	this.showUserAnswers = true;	this.initialized = false;	this.sco_gix = -1;	this.sendDataInterval = 0;	this.sendResultsToServerTime = 0;		this.courseOryginalStatus = "";	this.courseOryginalScore = 0;		this.writeValuesList = new Array("organisation", "username", "password", "server", "percentCompleted", "pagesVisited", "pointsMax", "points", "passThreshold",  "beginTime", "endTime", "courseName", "courseDescription", "keySep", "userVars", "lastVisitedPage", "score", "marked", "attempted");};UELO.prototype.AddPage = function(){	var p = new UELOPage();	this.pages[this.pages.length] = p;	this.pagesCount++;	return p;};//parent.UELO.LoadFromForm(string textAreaName) - wczytuje wartosci z TextArea na formularzuUELO.prototype.LoadFromForm = function(textAreaName){};//String parent.UELO.getHeaderString(String Name) - daje text z naglowka UELO.prototype.GetHeaderString = function(name){	for (var k in this)	{		var type = typeof(this[k]);		if (type == "number" || type == "string" || type == "boolean" || type == "object")		{			return this[k];		}	}	return null;};UELO.prototype.setHeaderString = function(name, value){	///!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!	/// wyjatki do poprawinie i ujednolicenia	if (name == "Server_for_check_Answers") name = "server";		var f = new RegExp("^" + name + "$", "gi");	for (var k in this)	{		if (k.match(f))		{			for (var j = 0; j < this.writeValuesList.length; j++)			{				if (this.writeValuesList[j].toLowerCase() == k.toLowerCase())				{					if (typeof(this[k]) == "number" || typeof(this[k]) == "string" || typeof(this[k]) == "boolean")					{						this[k] = value;						return;					}					if (typeof(this[k]) == "object" && (k == "beginTime" || k == "endTime")) 					{						this[k] = this.stringToDate(value);						return;					}				}			}		}	}};//String parent.UELO.getDataStringByID(int PageId;String ColumnName) - daje text z danych linia szukajac po PageIdUELO.prototype.GetDataStringByID = function(pageId, name){};//String parent.UELO.getDataStringByIdx(int RowIdx;String ColumnName) - daje text z danych linia RowIdxUELO.prototype.GetDataStringByIdx = function(rowIdx, columnName){};//String parent.UELO.getDataStringByName(String PageName;String ColumnName) - daje text z danych linia szukajac po PageIdUELO.prototype.GetDataStringByName = function(pageName, columnName){};//int parent.UELO.getDataRowCount() - daje ilosc liniiUELO.prototype.GetDataRowCount = function(){}//String parent.UELO.setDataStringByID(int PageID;String ColumnName,String value)UELO.prototype.SetDataStringByID = function(pageID, columnName, value){};UELO.prototype.GetPageStudentAnswer = function(gix, examMode){	var result = "";	var page = this.FindPage(gix);	if (page) { 		if (page.pageType == PAGETYPE_EXERCISE) {			for (var j = 0; j < page.interactions.length; j++) {				var inter = page.interactions[j];				var studentResponse = inter.studentResponse;				if (examMode && inter.id.indexOf("DDBasket") > -1) {					studentResponse = studentResponse.replace(/,/g, "|");				}				result += ((result != "") ? "#|#" : "") + studentResponse;			}		} else if (page.userAnswer != "") {			result += page.userAnswer;		}	}	return result;};UELO.prototype.getPageTryNumber = function(gix){	var result = -1;	var page = this.FindPage(gix);	if (page) {		if (page.pageType == PAGETYPE_EXERCISE) {			for (var j = 0; j < page.interactions.length; j++) {				var inter = page.interactions[j];				/*				var tryRemain = inter.maxTryNumber - inter.tryNumber;				if (tryRemain>result) result = tryRemain;				*/				return result = inter.tryNumber;			}		}	}	return result; };UELO.prototype.getExerciseTryMaxNumberTitle = function(gix, value){	var result = "";	var sep = '\n';	var page = null;	for (var i = 0; i < this.pages.length; i++) {		page = this.pages[i];		if (page.visible == 1 && page.interactions.length < 1) continue;		result += sep;		result += page.title+" : ";		result += page.interactions[0].tryNumber + "/";		result += page.interactions[0].maxTryNumber + " ";	}		return result;};UELO.prototype.getExerciseTryNumber = function(gix, value){	var result = "";	var page = null;	for (var i = 0; i < this.pages.length; i++) {		page = this.pages[i];		if (page.visible == 0) continue;		if (page.blockRestorePage || page.interactions.length > 0) {			result += intToLetter(page.interactions[0].tryNumber);		}else{			result += "0";		}	}		return result;};UELO.prototype.SetPageStudentAnswer = function(gix, value){	if (typeof(value) == "undefined" || value == null) return;	var page = this.FindPage(gix);	if (page) {		if (page.blockRestorePage) return;			if (page.pageType == PAGETYPE_EXERCISE) {			var valueArr = value.split("#|#");			for (var j = 0; j < page.interactions.length; j++) {				var inter = page.interactions[j];				inter.studentResponse = (typeof(valueArr[j]) != "undefined") ? valueArr[j] : "";			}		} else page.userAnswer = value;	}};UELO.prototype.GetPageMarkers = function(gix){	var result = null;	var page = this.FindPage(gix);	if (page) {		result = page.userMarkers;	}	return result;};UELO.prototype.SetPageMarkers = function(gix, value){	if (typeof(value) == "undefined" || value == null) return;	var page = this.FindPage(gix);	if (page) {		page.userMarkers = value;	}};UELO.prototype.pageAttempted = function(gix){	var result = false;	var page = this.FindPage(gix);	if (page) {		page.attempted = true;		result = true;	}	return result;};UELO.prototype.pageNotAttempted = function(gix){	var result = false;	var page = this.FindPage(gix);	if (page) {		page.attempted = false;		result = true;	}	return result;};UELO.prototype.getPageAttempt = function(gix){	var page = this.FindPage(gix);	if (page) {		return  page.attempted;	}	return false};UELO.prototype.markPage = function(gix){	var result = false;	var page = this.FindPage(gix);	if (page) {		page.marked = true;		result = true;	}	return result;};UELO.prototype.unmarkPage = function(gix){	var result = false;	var page = this.FindPage(gix);	if (page) {		page.marked = false;		result = true;	}	return result;};UELO.prototype.updateUELOFromSDMultiple = function(status, userans){	if (this.sco_gix != -1) {		this.setPageStatus(this.sco_gix, status);		this.SetPageStudentAnswer(this.sco_gix, userans);	}};UELO.prototype.updateUELOFromSD = function(statusString, userAnswers, tryNumberStr){	var sep = "";	if (statusString.indexOf(",") > -1) sep = ",";		var arr = statusString.split(sep);	var tryNumberArr = [];	if (typeof(tryNumberStr) != 'undefined') 	{		tryNumberArr = tryNumberStr.split("");	}	var structPage = null;	for (var i = 0; i < arr.length; i++) {		structPage = struct.findItemGixByArrIndex(i);		if (typeof(tryNumberArr[i]) != 'undefined'){			this.setPageStatusFromSD(structPage, arr[i], letterToInt(tryNumberArr[i]));		}else{			this.setPageStatusFromSD(structPage, arr[i], 0);		}	}		if (typeof(userAnswers) != "undefined") {		var dataArr = userAnswers.split(";");		for (var i = 0; i < dataArr.length; i++) {			var dItem = dataArr[i].split("=");			if (dItem[0].indexOf("_ua") > -1) {				var gix = dItem[0].replace("_ua", "");				this.SetPageStudentAnswer(gix, unescape(dItem[1]));			}		}	}};UELO.prototype.getLastVisitedPage = function(){	if (this.lastVisitedPage != 0) return this.lastVisitedPage	var lastPage = null;	for (var i = 0; i < this.pages.length; i++) {		if(this.pages[i].status == 'I'){			this.pages[i].globalIndex;		}else if(this.pages[i].status == 'N'){			return lastPage;		}		lastPage = this.pages[i].globalIndex;	}	return lastPage;};UELO.prototype.setLastVisitedPage = function(pageNo){	this.lastVisitedPage = pageNo;};UELO.prototype.getPageIndexInStruct = function(pageGlobalIndex){	for (var i = 0; i < this.pages.length; i++) {		if(this.pages[i].globalIndex == pageGlobalIndex) return i;	}}UELO.prototype.getPageAccess = function(gix){	var p = this.FindPage(gix);	return (p) ? p.access : true;}UELO.prototype.setPageAccess = function(gix, b){	var p = this.FindPage(gix);	if (p) {		p.access = b;	}}UELO.prototype.getPageType = function(pageGlobalIndex){	var p = this.FindPage(pageGlobalIndex);	if (p) {		return p.pageType;	}}UELO.prototype.showUELOPageInteractions = function(pageGlobalIndex, displayValues){	var result = "";	var ueloPage = this.FindPage(pageGlobalIndex);	if (ueloPage) {		for (var i = 0; i < ueloPage.interactions.length; i++) 		{			var inter = ueloPage.interactions[i];			result += '\n';			for (var j = 0; j < displayValues.length; j++) 			{				result += '\n';				result += displayValues[j]+" : " + inter[displayValues[j]];			}		}	}	return result;}UELO.prototype.getPagesStatus = function(sep){	var result = "";		for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		result += sep + page.status;	}	return result;}UELO.prototype.getPageStatus = function(pageGlobalIndex){	var p = this.FindPage(pageGlobalIndex);	if (p) {		return p.status;	}}UELO.prototype.setPageStatusFromSD = function(pageGlobalIndex, newPageStatus, tryNumber){	var p = this.FindPage(pageGlobalIndex);	if (p) {		if (p.blockRestorePage) return;			p.status = newPageStatus;		if ((p.status!='N') && (p.status!='I')) p.pageVisited = 1;		for (var i = 0; i < p.interactions.length; i++) {			var inter = p.interactions[i];			inter.tryNumber = tryNumber;			if (inter.status == 'N') inter.status = newPageStatus;			if (newPageStatus == 'P'){				inter.score = inter.maxScore;				inter.result=true;			}			if (newPageStatus == 'F'){				inter.score = 0;				inter.result=false;			}		}	}}UELO.prototype.setPageStatus = function(pageGlobalIndex, newPageStatus){	var p = this.FindPage(pageGlobalIndex);	if (p) {		p.status = newPageStatus;		if ((p.status!='N') && (p.status!='I')) p.pageVisited = 1;		for (var i = 0; i < p.interactions.length; i++) {			var inter = p.interactions[i];			if (inter.status == 'N') inter.status = newPageStatus;		}	}}UELO.prototype.setPageVisited = function(pageGlobalIndex){	var p = this.FindPage(pageGlobalIndex);	if(p){		this.setLastVisitedPage(pageGlobalIndex);		p.pageVisited = 1;	}	this.setPercentCompleted();}UELO.prototype.setPercentCompleted = function(){	var allPages=this.getPagesCount(null);	var visitedPages=this.getPagesVisitedCount('VISITED');	var pagesC=''+((visitedPages*100)/allPages);	if(pagesC.indexOf('.')>0) pagesC=pagesC.substr(0,pagesC.indexOf('.')+3);	this.percentCompleted = pagesC;	}UELO.prototype.getPagesCount = function(pageType){	var exCnt = 0;	var infCnt = 0;	var fullCnt = 0;	var visCnt = 0;		for (var i = 0; i < this.pages.length; i++) {				if(this.pages[i].pageType==PAGETYPE_HIDDEN) continue;		if (this.pages[i].pageType == PAGETYPE_EXERCISE) exCnt++;		else infCnt++;		fullCnt++;	}		if(!pageType) return fullCnt; 	if (pageType=PAGETYPE_EXERCISE) return exCnt;	else return infCnt;}UELO.prototype.getPointsMax = function(){	if(GLOBAL_MAX_POINTS > 0) return GLOBAL_MAX_POINTS;	var retScore=0;	for (var i = 0; i < this.pages.length; i++)	{				var page = this.pages[i];		if(page.pageType==PAGETYPE_HIDDEN) continue;		if(page.pageType==PAGETYPE_EXERCISE){			for (var j = 0; j < page.interactions.length; j++)			{				var inter = page.interactions[j];				retScore += parseInt(inter.maxScore);			}		}	}	return retScore;}UELO.prototype.getPagesCompletedAndPassedCount = function(){	var visPassCnt = 0;	var p = null;		for (var i = 0; i < this.pages.length; i++) {				p = this.pages[i]; 		if (p.pageType == PAGETYPE_HIDDEN) continue;		if ((p.pageType == PAGETYPE_INFORMATION) && (p.status == 'C')){			visPassCnt++;		}else if ((p.pageType == PAGETYPE_EXERCISE) && (p.status == 'P')){			visPassCnt++;		};	}	return visPassCnt;}UELO.prototype.getPagesVisitedCount = function(){	var visCnt = 0;		for (var i = 0; i < this.pages.length; i++) {				if(this.pages[i].pageType==PAGETYPE_HIDDEN) continue;		if (this.pages[i].pageVisited == 1) visCnt++;	}	return visCnt;}UELO.prototype.getCourseScore = function(){	var retScore=0;	for (var i = 0; i < this.pages.length; i++)	{				var page = this.pages[i];		if(page.pageType==PAGETYPE_HIDDEN) continue;		if(page.pageType==PAGETYPE_EXERCISE){			for (var j = 0; j < page.interactions.length; j++)			{				var inter = page.interactions[j];				if(inter.status=="P") retScore += parseInt(inter.score);			}		}	}	return retScore;}UELO.prototype.getPercentCourseScore = function(){		return parseInt((this.getCourseScore()*100) / this.getPointsMax());}UELO.prototype.getCourseStatus = function(){	if(this.getPagesCount()!=this.getPagesVisitedCount()) return 1;	else return 0;}UELO.prototype.FindPage = function(pageGlobalIndex){	for (var i = 0; i < this.pages.length; i++) {				if (this.pages[i].globalIndex == pageGlobalIndex) {			return this.pages[i]		}			}	return null;}UELO.prototype.AddInteractionToPage = function(pageGlobalIndex, elementId){	var iterPage = this.FindPage(pageGlobalIndex);	if(iterPage == null) return null;	return iterPage.AddInteraction(elementId);}UELO.prototype.findInteraction = function(pageGlobalIndex, elementId){	var iterPage = this.FindPage(pageGlobalIndex);	if(iterPage == null) return null;		return iterPage.FindInteraction(elementId);}//String parent.UELO.setDataStringByID(int PageID;String ColumnName,String value)UELO.prototype.GetStudentAnswer = function(pageGlobalIndex, elementId){	var iterPage=this.FindPage(pageGlobalIndex);	if(iterPage==null) return null;	var interId = iterPage.FormatInteractionId(elementId, iterPage.globalIndex);	var iter=iterPage.FindInteraction(interId);	if(iter==null) return null;	return iter.studentResponse;}UELO.prototype.setUELOData = function(){	this.endTime = new Date();	this.sessionTime = this.calculateTimeToString(this.beginTime, new Date());	}UELO.prototype.toPollWBTSString = function(){    var r = "";    r += "[UniversalElearningDataObjectHeader]\n";    r += "Organisation=" + this.organisation + "\n";    r += "Username=" + this.username + "\n";    r += "Password=" + this.password + "\n";    r += "ServerForCheckAnswers=" + this.server + "\n";    r += "PercentCompleted=" + this.percentCompleted + "\n";    r += "PagesCount=" + this.getPagesCount(null) + "\n";    r += "ExercisePagesCount=" + this.getPagesCount(PAGETYPE_EXERCISE) + "\n";    r += "PagesVisited=" + this.getPagesVisitedCount() + "\n";    r += "PointsMax=" + this.getPointsMax() + "\n";    r += "Points=" + this.points + "\n";    r += "PassThreshold=" + this.passThreshold + "\n";    r += "BeginTime=" + this.dateTimeToString(this.beginTime) + "\n";    r += "EndTime=" + this.dateTimeToString(this.endTime) + "\n";    r += "SessionTime=" + this.calculateTimeToString(this.beginTime, this.endTime) + "\n";    r += "KeySep=" + this.keySep + "\n";    r += "userVars=" + this.getUserVars() + "\n";    r += "lastVisitedPage=" + this.getLastVisitedPage() + "\n";    r += "\n";    r += "[UniversalElearningDataObjectDataFormat]" + "\n";    r += "page_identifier" + this.keySep + "globalPageIndex"+ this.keySep + "group"+ this.keySep + "answers"+ this.keySep + "maxScore" + this.keySep + "score" + this.keySep + "tryNumber" + this.keySep + "maxTryNumber" + this.keySep + "status" + this.keySep + "pageType" + this.keySep + "correctResponsesAsText" + this.keySep + "studentResponseAsText" + "\n";    r += "\n";    r += "[UniversalElearningDataObjectData]" + "\n";        for (var i = 0; i < this.pages.length; i++)    {        var page = this.pages[i];        if(page.pageType==PAGETYPE_HIDDEN) continue;        if(page.pageType==PAGETYPE_POLL){            for (var j = 0; j < page.interactions.length; j++)            {                var inter = page.interactions[j];                r += page.pageId + this.keySep + page.globalIndex + this.keySep + inter.id + this.keySep + inter.studentResponse + this.keySep + inter.maxScore + this.keySep + inter.score + this.keySep + inter.tryNumber + this.keySep + inter.maxTryNumber + this.keySep + inter.status + this.keySep + "P" + this.keySep + inter.correctResponsesAsText + this.keySep + inter.studentResponseAsText + "\n";            }        }    }    return r;}UELO.prototype.toWBTSString = function(){	var r = "";	r += "[UniversalElearningDataObjectHeader]\n";	r += "Organisation=" + this.organisation + "\n";	r += "Username=" + this.username + "\n";	r += "Password=" + this.password + "\n";	r += "ServerForCheckAnswers=" + this.server + "\n";	r += "PercentCompleted=" + this.percentCompleted + "\n";	r += "PagesCount=" + this.getPagesCount(null) + "\n";	r += "ExercisePagesCount=" + this.getPagesCount(PAGETYPE_EXERCISE) + "\n";	r += "PagesVisited=" + this.getPagesVisitedCount() + "\n";	r += "PointsMax=" + this.getPointsMax() + "\n";	r += "Points=" + this.points + "\n";	r += "PassThreshold=" + this.passThreshold + "\n";	r += "BeginTime=" + this.dateTimeToString(this.beginTime) + "\n";	r += "EndTime=" + this.dateTimeToString(this.endTime) + "\n";	r += "SessionTime=" + this.calculateTimeToString(this.beginTime, this.endTime) + "\n";	r += "KeySep=" + this.keySep + "\n";	r += "userVars=" + this.getUserVars() + "\n";	r += "lastVisitedPage=" + this.getLastVisitedPage() + "\n";		r += "\n";	r += "[UniversalElearningDataObjectDataFormat]" + "\n";	r += "sco_identifier" + this.keySep + "page_identifier" + this.keySep + "globalPageIndex"+ this.keySep + "chapterName" + this.keySep + "group" + this.keySep + "question" + this.keySep + "answers"+ this.keySep + "maxScore" + this.keySep + "score" + this.keySep + "tryNumber" + this.keySep + "maxTryNumber" + this.keySep + "status" + this.keySep + "pageType" + this.keySep + "correctResponsesAsText" + this.keySep + "studentResponseAsText" + this.keySep + "marked" + this.keySep + "attempted" + "\n";		r += "\n";	r += "[UniversalElearningDataObjectData]" + "\n";		for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		if(page.pageType==PAGETYPE_HIDDEN) continue;		if(page.pageType==PAGETYPE_EXERCISE){			for (var j = 0; j < page.interactions.length; j++)			{				var inter = page.interactions[j];				r += uelo.scoId + this.keySep + page.pageId + this.keySep + page.globalIndex + this.keySep + quotedString(page.chapterName) + this.keySep + inter.id + this.keySep + inter.question + this.keySep + inter.studentResponse + this.keySep + inter.maxScore  + this.keySep + inter.score + this.keySep + inter.tryNumber + this.keySep + inter.maxTryNumber + this.keySep + inter.status + this.keySep + "E" + this.keySep + inter.correctResponsesAsText + this.keySep + inter.studentResponseAsText + this.keySep + page.marked + this.keySep + page.attempted + "\n";			}		}else if(page.pageType==PAGETYPE_POLL){			for (var j = 0; j < page.interactions.length; j++)			{				var inter = page.interactions[j];				r += uelo.scoId + this.keySep + page.pageId + this.keySep + page.globalIndex + this.keySep + quotedString(page.chapterName) + this.keySep + inter.id + this.keySep + inter.question + this.keySep + inter.studentResponse + this.keySep + inter.maxScore  + this.keySep + inter.score + this.keySep + inter.tryNumber + this.keySep + inter.maxTryNumber + this.keySep + inter.status + this.keySep + "P" + this.keySep + inter.correctResponsesAsText + this.keySep + inter.studentResponseAsText + this.keySep + page.marked + this.keySep + page.attempted + "\n";			}		}else{			//var pStatus="N";			r += uelo.scoId + this.keySep + page.pageId + this.keySep + page.globalIndex + this.keySep + quotedString(page.chapterName) + this.keySep + this.keySep + this.keySep + this.keySep+ "1" + this.keySep + "0" + this.keySep + "0" + this.keySep + "0" + this.keySep + page.status + this.keySep + "I" + this.keySep + "" + this.keySep + "" + this.keySep + page.marked + this.keySep + page.attempted + "\n";		}			//page.add	}	r += "\n" + this.getYellowCardsToWBTSString();	r += "\n" + this.getNotepadToWBTSString();	r += "\n" + this.getMarkersToWBTSString();	return r;}UELO.prototype.toFullString = function(){	var r = "";	r += "[UniversalElearningDataObjectHeader]\n";	r += "ScoId=" + this.scoId + "\n";	r += "CourseName=" + this.courseName + "\n";	r += "CourseDescription=" + this.courseDescription + "\n";	r += "Organisation=" + this.organisation + "\n";	r += "Username=" + this.username + "\n";	r += "Password=" + this.password + "\n";	r += "ServerForCheckAnswers=" + this.server + "\n";	r += "PercentCompleted=" + this.percentCompleted + "\n";	r += "PagesCount=" + this.getPagesCount(null) + "\n";	r += "ExercisePagesCount=" + this.getPagesCount(PAGETYPE_EXERCISE) + "\n";	r += "PagesVisited=" + this.getPagesVisitedCount() + "\n";	r += "PointsMax=" + this.getPointsMax() + "\n";	r += "Points=" + this.points + "\n";	r += "PassThreshold=" + this.passThreshold + "\n";	r += "BeginTime=" + this.dateTimeToString(this.beginTime) + "\n";	r += "EndTime=" + this.dateTimeToString(this.endTime) + "\n";	r += "SessionTime=" + this.calculateTimeToString(this.beginTime, this.endTime) + "\n";	r += "KeySep=" + this.keySep + "\n";	r += "userVars=" + this.getUserVars() + "\n";	r += "lastVisitedPage=" + this.getLastVisitedPage() + "\n";		r += "\n";	r += "[UniversalElearningDataObjectDataFormat]" + "\n";	r += "sco_identifier" + this.keySep + "page_identifier" + this.keySep + "globalPageIndex" + this.keySep + "group" + this.keySep + "question" + this.keySep + "answers" + this.keySep + "maxScore" + this.keySep + "score" + this.keySep + "status" + this.keySep + "pageType" + this.keySep + "correctResponsesAsText" + this.keySep + "studentResponseAsText"+ this.keySep + "marked" + this.keySep + "attempted" + "\n";	r += "\n";	r += "[UniversalElearningDataObjectData]" + "\n";		for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		r += "\n";		r += "[UniversalElearningDataObjectDataPage]" + "\n";		r += page.pageId + this.keySep + page.scoId+ this.keySep + page.type+ this.keySep + page.pageType+ this.keySep + page.status+ this.keySep + page.title+ this.keySep + page.globalIndex+ this.keySep + page.marked+ + this.keySep + page.attempted + "\n";		for (var j = 0; j < page.interactions.length; j++)		{			var inter = page.interactions[j];			r += "    [UniversalElearningDataObjectDataPageInteraction]" + "\n";			r += "    "+inter.id + this.keySep + inter.correctResponses + this.keySep + inter.studentResponse + this.keySep + inter.time + this.keySep + inter.type + this.keySep + inter.weighting + this.keySep + inter.status + this.keySep + inter.result + this.keySep + inter.maxScore + this.keySep + inter.score + this.keySep + inter.question + this.keySep + inter.latency + this.keySep + inter.correctResponsesAsText + this.keySep + inter.studentResponseAsText + "\n";		}	}		return r;};// To jest metoda ktora tlumaczy z formatu UELO do normy HACP// generalnie CUDA na KIJU ;) tam sie dziejavar _CORRECT_RESPONSES = 1;var _STUDENT_RESPONSE = 2;var _EXAM_STUDENT_RESPONSE = 3;UELO.prototype.formatResponseToHACPFormat = function(mode, inter){	var s = "";	if (mode == _CORRECT_RESPONSES)	{		s = inter.correctResponses;	}	else if (mode == _STUDENT_RESPONSE)	{		s = inter.studentResponse;	}	else	{		return null;	}		var type = inter.type.toLowerCase();	if (typeof(s) == "string" && type == "choice")	{		var r = s;		if (s.indexOf("||") > -1) var arr = s.split("||");		else var arr = s.split(":");		if (arr.length > 1)		{			var r = "{";			for (var i = 0; i < arr.length; i++)			{				if (arr[i] == "1")				{					if (r.length > 1) r += ",";					r += String.fromCharCode(97 + i);				}			}			r += "}";		}		return r;	} 	else if (type == "numeric")	{		// sa takie przypadki ze komponent przedstawia sie jako "numeric"		// a dane dostaracza takie jak "choice" - aw		if (typeof(s) == "string")		{			var arr = new Array();			if (s.indexOf("||") > -1) var arr = s.split("||");			else if (s.indexOf(":") > -1) var arr = s.split(":");			if (arr.length > 0)			{				var r = "";				for (var i = 0; i < arr.length; i++)				{					if (arr[i] == "1")					{						return "" + i;					}				}			}			return s;		}		return s.toString();	}	else if (type == "fill-in")	{		s = s.replace(/\|\|/gi, "; ");		return s;	}	else if (type == "matching")	{		var calc = new UELODDCalculator();		var res = "";		if (mode == _CORRECT_RESPONSES)		{			res = calc.transformToPermutation(inter.correctResponses, inter.correctResponses, inter.all_possible);		}		else if (mode == _STUDENT_RESPONSE)		{			res = calc.transform(inter.correctResponses, inter.studentResponse, inter.all_possible);		}		return res;	}	return s;};UELO.prototype.toHACPInteractionsString = function(course_id, student_id, lesson_id){	var r = "";	var d = new Date();	r += '"course_id","student_id","lesson_id","date","time","interaction_id","objective_id","type_interaction","correct_response","student_response","result","weighting","latency"\n';	for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		for (var j = 0; j < page.interactions.length; j++)		{			var inter = page.interactions[j];			r += '"' + course_id + '"'; //course_id			r += ',"'+ student_id +'"'; //student_id			r += ',"0"'; //lesson_id			r += ',"'+this.dateToString(d, "/")+'"'; // date			r += ',"'+this.timeToString(d)+'"'; // time			r += ',"p_' + i + '_e_' + j + '"'; // interaction_id  -> r += ',"'+inter.id+'"'; // interaction_id			r += ',""'; // objective_id			r += ',"'+inter.type+'"'; // type_interaction			r += ',"'+this.formatResponseToHACPFormat(_CORRECT_RESPONSES, inter)+'"'; // correct_response			r += ',"'+this.formatResponseToHACPFormat(_STUDENT_RESPONSE, inter)+'"'; // student_response			r += ',"'+((inter.result == true)?"c":"w")+'"'; // result			r += ',"1.0"'; // weighting			r += ',"'+((inter.latency == null)?"00:00:00":inter.latency)+'"'; // latency			r += '\n';		}	}	return r;}UELO.prototype.formatResponseToSCORM12Format = function(mode, inter){	var s = "";	if (mode == _CORRECT_RESPONSES)	{		s = inter.correctResponses;	}	else if (mode == _STUDENT_RESPONSE)	{		s = inter.studentResponse;	}	else	{		return null;	}		var type = inter.type.toLowerCase();		if (typeof(s) == "string" && type == "choice")	{		var isGroup = false;		if (s.indexOf("||") > -1) var arr = s.split("||");		else if (s.indexOf(":") > -1) {			isGroup = true;			var arr = s.split(":");		} else return s;		//zakres do 18, w przeciwnym wypadku uzyc performance		var r = "";		if (arr.length > 18) {			this.changelistner = "type,performance";			for (var i = 0; i < arr.length; i++) {				r += arr[i];			}		} else {			for (var i = 0; i < arr.length; i++) {				if (r != "") r += ",";				//r += i + "_" + arr[i];				if (arr[i] == 0) r += getIdentiefier09az(i);				else r += getIdentiefier09az(i + 18);			}			r = ((isGroup && r.indexOf(",") > -1) ? "{" + r + "}" : r);		}		return r;	}else if (type == "numeric"){		// sa takie przypadki ze komponent przedstawia sie jako "numeric"		// a dane dostaracza takie jak "choice" - aw		if (inter.id.indexOf("DDBasket") > -1) {			if (mode == _CORRECT_RESPONSES) {				return "1";			} else {				return (inter.result) ? "1" : "0";			}		}				var res = s;		if (typeof(s) == "string") {			var arr = new Array();			if (s.indexOf("||") > -1) var arr = s.split("||");			else if (s.indexOf(":") > -1) var arr = s.split(":");			if (arr.length > 0) {				var r = "";				for (var i = 0; i < arr.length; i++) {					if (arr[i] == "1") {						res = "" + i;						break;					}				}			}		}		return res;	}	else if (type == "fill-in")	{		s = s.replace(/\|\|/gi, ",");		return s;	}	else if (type == "matching")	{		if (inter.id.indexOf("DDBasket") > -1) {			var calc = new UELODDCalculator();			var res = "";			var icr = inter.correctResponses.replace(/,/gi, ":");			if (icr.indexOf(":") == -1) icr = icr.replace(/\|/gi, ":");			var isr = inter.studentResponse.replace(/,/gi, ":");			if (mode == _CORRECT_RESPONSES)			{				res = calc.transformToPermutation(icr, icr, inter.all_possible);			}			else if (mode == _STUDENT_RESPONSE)			{				res = calc.transform(icr, isr, inter.all_possible);			}			return res;		} else {			if (typeof(s) == "string") {				var isGroup = false;				if (s.indexOf("||") > -1) var arr = s.split("||");				else {					isGroup = true;					var arr = s.split(":");				}				var r = "";				for (var i = 0; i < arr.length; i++) {					if (r != "") r += ",";					//r += inter.elementId + "." + arr[i];					r += getIdentiefier09az(inter.gix) + "." + getIdentiefier09az(arr[i]);				}				if (r == "") {					//r = inter.elementId + "." + s;					r += getIdentiefier09az(inter.gix) + "." + getIdentiefier09az(s);				}				r = ((isGroup && r.indexOf(",") > -1) ? "{" + r + "}" : r);				return r;			} else if (typeof(s) == "number") {				//return inter.elementId + "." + s;				return getIdentiefier09az(inter.gix) + "." + getIdentiefier09az(s);			}		}	}	return s;};UELO.prototype.getSCORM12Interactions = function(){	var result = {};	var counter = 0;		for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		for (var j = 0; j < page.interactions.length; j++)		{			var inter = page.interactions[j];						if (inter.latency == null || inter.latency == ""				|| inter.timestamp == null || inter.timestamp == "") continue;						var interId = "p_" + page.globalIndex + "_e_" + j;						result[interId] = {};			result[interId]["id"] = interId;			result[interId]["number"] = counter;			result[interId]["time"] = formatTime("time", inter.timestamp);			result[interId]["type"] = inter.type;			result[interId]["question"] = inter.question;			result[interId]["elementId"] = inter.elementId;			result[interId]["pageGlobalIndex"] = page.globalIndex;						var latencyArr = ((inter.latency) ? inter.latency : "00:00:00").split(":");			var date = formatTime("time", new Date(this.beginTime.getFullYear(), this.beginTime.getMonth(),				this.beginTime.getDate(), latencyArr[0], latencyArr[1], latencyArr[2]));						result[interId]["latency"] = date;			result[interId]["result"] = (inter.correctResponses == "") ? "neutral" : ((inter.result == true) ? "correct" : "wrong");			result[interId]["weighting"] = (inter.weighting && inter.weighting != "") ? inter.weighting : "1.0"; //inter.weighting						this.changelistner = "";						result[interId]["student_response"] = this.formatResponseToSCORM12Format(_STUDENT_RESPONSE, inter);			result[interId]["correct_responses"] = new Array();			result[interId]["correct_responses"][0] = this.formatResponseToSCORM12Format(_CORRECT_RESPONSES, inter);						if (this.changelistner != "") {				var arr = this.changelistner.split(",");				if (arr[0] == "type") {					result[interId]["type"] = arr[1];				}			}			counter++;		}	}		return result;};UELO.prototype.getPollInteractions = function(){	var result = {};	var counter = 0;		for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		for (var j = 0; j < page.interactions.length; j++)		{			var inter = page.interactions[j];						if (inter.latency == null || inter.latency == ""				|| inter.timestamp == null || inter.timestamp == "") continue;						var interId = "p_" + page.globalIndex + "_e_" + j;						result[interId] = {};			result[interId]["id"] = interId;			result[interId]["number"] = counter;			result[interId]["time"] = formatTime("time", inter.timestamp);			result[interId]["type"] = inter.type;			result[interId]["question"] = inter.question;			result[interId]["elementId"] = inter.elementId;			result[interId]["pageGlobalIndex"] = page.globalIndex;						var latencyArr = ((inter.latency) ? inter.latency : "00:00:00").split(":");			var date = formatTime("time", new Date(this.beginTime.getFullYear(), this.beginTime.getMonth(),				this.beginTime.getDate(), latencyArr[0], latencyArr[1], latencyArr[2]));						result[interId]["latency"] = date;			result[interId]["result"] = (inter.correctResponses == "") ? "neutral" : ((inter.result == true) ? "correct" : "wrong");			result[interId]["weighting"] = (inter.weighting && inter.weighting != "") ? inter.weighting : "1.0"; //inter.weighting						this.changelistner = "";						result[interId]["student_response"] = inter.studentResponseAsText.toString().replace(/\|\|/g, ",");						if (this.changelistner != "") {				var arr = this.changelistner.split(",");				if (arr[0] == "type") {					result[interId]["type"] = arr[1];				}			}			counter++;		}	}		return result;};UELO.prototype.interactionsCount = function(){	var result = 0;	for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		for (var j = 0; j < page.interactions.length; j++)		{			var inter = page.interactions[j];						if (inter.latency == null || inter.latency == ""				|| inter.timestamp == null || inter.timestamp == "") continue;						result++;		}	}	return result;};UELO.prototype.interactionsExists = function(){	var result = false;	for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		if (page.interactions.length > 0) {			result = true;			break;		}	}	return result;};UELO.prototype.formatResponseToSCORM13Format = function(mode, inter){//jezeli exam to wysylamy core i stud po numeric//zablokowac w exam struct	var s = "";	if (mode == _CORRECT_RESPONSES) {		s = inter.correctResponsesAsText;	} else if (mode == _STUDENT_RESPONSE) {		s = inter.studentResponseAsText;	} else if (mode == _EXAM_STUDENT_RESPONSE) {		return inter.studentResponse;	} else {		return null;	}	s = s.toString().replace(/%20/gi, "_");	s = unescape(s);	var type = inter.type.toLowerCase();	if (type == "choice") {		if (s.indexOf("||") > -1) var arr = s.split("||");		else if (s.indexOf(":") > -1) var arr = s.split(":");		else if (s.indexOf("|") > -1) var arr = s.split("|");		else return s;		var r = "";		for (var i = 0; i < arr.length; i++) {			if (r != "") r += "[,]";			r += arr[i];		}		return r;	} 	else if (type == "fill-in")	{		if (s.indexOf("||") > -1) s = s.replace(/\|\|/gi, "[,]");		else if (s.indexOf(":") > -1) s = s.replace(/:/gi, "[,]");		else if (s.indexOf("|") > -1) s = s.replace(/\|/gi, "[,]");		return s;	}	else if (type == "matching")	{		if (s.indexOf("||") > -1) var arr = s.split("||");		else if (s.indexOf(":") > -1) var arr = s.split(":");		else var arr = new Array(s);		var r = "";		for (var k in arr) {			if (r != "") r += "[,]";			r += inter.elementId + "[.]" + arr[k];		}		return r;	}	return s;};UELO.prototype.getWBTExamInteractions = function(){	var result = {};	var counter = 0;		for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		for (var j = 0; j < page.interactions.length; j++)		{			var inter = page.interactions[j];						if (inter.latency == null || inter.latency == ""				|| inter.timestamp == null || inter.timestamp == "") continue;						var interId = "p_" + page.globalIndex + "_e_" + j;			var learnerResponse = this.formatResponseToSCORM13Format(_EXAM_STUDENT_RESPONSE, inter);						result[interId] = {};			result[interId]["id"] = interId;			result[interId]["number"] = counter;			result[interId]["timestamp"] = formatTime("timestamp", inter.timestamp);			result[interId]["type"] = inter.type;			result[interId]["description"] = inter.question;						var latencyArr = ((inter.latency) ? inter.latency : "00:00:00").split(":");			var date = formatTime("timeinterval", new Date(this.beginTime.getFullYear(), this.beginTime.getMonth(),				this.beginTime.getDate(), latencyArr[0], latencyArr[1], latencyArr[2]));			result[interId]["latency"] = date;			result[interId]["learner_response"] = learnerResponse;						counter++;		}	}		return result;};UELO.prototype.getSCORM13Interactions = function(){	var result = {};	var counter = 0;		for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		for (var j = 0; j < page.interactions.length; j++)		{			var inter = page.interactions[j];						if (inter.latency == null || inter.latency == ""				|| inter.timestamp == null || inter.timestamp == "") continue;						var interId = "p_" + page.globalIndex + "_e_" + j;			var learnerResponse = this.formatResponseToSCORM13Format(_STUDENT_RESPONSE, inter);			var correctResponses = this.formatResponseToSCORM13Format(_CORRECT_RESPONSES, inter);						result[interId] = {};			result[interId]["id"] = interId;			result[interId]["number"] = counter;			result[interId]["timestamp"] = formatTime("timestamp", inter.timestamp);			result[interId]["type"] = inter.type;			result[interId]["description"] = inter.question;						var latencyArr = ((inter.latency) ? inter.latency : "00:00:00").split(":");			var date = formatTime("timeinterval", new Date(this.beginTime.getFullYear(), this.beginTime.getMonth(),				this.beginTime.getDate(), latencyArr[0], latencyArr[1], latencyArr[2]));						result[interId]["latency"] = date;			result[interId]["result"] = (inter.result == true) ? "correct" : "incorrect";;			result[interId]["weighting"] = (inter.weighting && inter.weighting != "") ? inter.weighting : "1.0"; //inter.weighting			result[interId]["learner_response"] = learnerResponse;						result[interId]["correct_responses"] = new Array();			result[interId]["correct_responses"][0] = correctResponses;			counter++;		}	}		return result;};UELO.prototype.getInteractions = function(platform){	switch (platform) {		case "SCORM12": 			return this.getSCORM12Interactions();			break;		case "SCORM13": 			return this.getSCORM13Interactions();			break;		case "WBTEXAM": 			return this.getWBTExamInteractions();			break;		case "POLL": 			return this.getPollInteractions();			break;	}}UELO.prototype.calculateTimeToString = function(dateStart, dateEnd){	//tools.js	return calculateTimeToString(dateStart, dateEnd);};UELO.prototype.timeToString = function(date){	//tools.js	return formatTime("time", date);};UELO.prototype.dateToString = function(date, separator){	//tools.js	return formatTime("date", date, separator);};UELO.prototype.dateTimeToString = function(date){	//tools.js	return formatTime("datetime", date, "-");};UELO.prototype.stringToDate = function(s){	//tools.js	return stringToDate(s);};UELO.prototype.toString = function(){	return this.toFullString();};UELO.prototype.__parseFindGroup = function(a, name){	var key = new RegExp("^\\[" + name + "\\]$", "i");	for (var i = 0; i < a.length; i++)	{		if (a[i].match(key)) 		{			return i;		}	}	return null;};UELO.prototype.loadFromString = function(s){	s = s.replace(new RegExp("\r", "g"), "");	var lines = s.split("\n");	//header	var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectHeader");	if (index == null) 	{		return;	}		var i = index;	while (i++ < lines.length - 1)	{		var p = lines[i].indexOf("=");		if (p > 0)		{			var key = lines[i].slice(0, p);			var value = lines[i].slice(p + 1);			this.setHeaderString(key, value);		} else {			break;		}	}		var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectDataFormat");	if (index == null) 	{		return;	}		var keyMatrix = lines[index + 1].split(this.keySep);	var gpi = -1; // globalPageIndex	var eii = -1;  // elementIdIndex	var dataPageType = -1; // pageType	var dataPageId = -1; // pageId	for (var j = 0; j < keyMatrix.length; j++)	{		if (keyMatrix[j].match(new RegExp("^globalPageIndex$", "gi")))		{			gpi = j;		}		if (keyMatrix[j].match(new RegExp("^group$", "gi")))		{			eii = j;		}		if (keyMatrix[j].match(new RegExp("^pageType$", "gi")))		{			dataPageType = j;		}		if (keyMatrix[j].match(new RegExp("^page_identifier$", "gi")))		{			dataPageId = j;		}	}	if (gpi == -1 || eii == -1)	{		return;	}	var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectData");	if (index == null) 	{		return;	}	var i = index;		while (i++ < lines.length - 1)	{		var data = lines[i].split(this.keySep);		if (data.length == keyMatrix.length)		{			var o = this.findInteraction(data[gpi], data[eii]);			var ueloPage = this.FindPage(data[gpi]);			if(!o){ 				//var ueloPage = this.FindPage(data[gpi]);								if (!ueloPage) { 					ueloPage= this.AddPage();					ueloPage.type = 0;					if(data[dataPageType].indexOf('E')>=0){						ueloPage.pageType = PAGETYPE_EXERCISE;					}else if(data[dataPageType].indexOf('P')>=0){						ueloPage.pageType = PAGETYPE_POLL;					}else{						ueloPage.pageType = PAGETYPE_INFORMATION;					}					ueloPage.pageId = data[dataPageId];					ueloPage.globalIndex = data[gpi];						if((ueloPage.pageType == PAGETYPE_EXERCISE) || (ueloPage.pageType == PAGETYPE_POLL)){						o = ueloPage.interactions[ueloPage.interactions.length] = new UELOInteractions();					} else {						//					}				}				if(ueloPage){					//o = ueloPage.interactions[ueloPage.interactions.length] = new UELOInteractions();				}			} else {				//alert('Wrong data!!!: '+data);			}						if (ueloPage) {				for (var j = 0; j < keyMatrix.length; j++){					if (j != gpi && j != eii && j != dataPageType){						ueloPage.setValue(keyMatrix[j], data[j]);					}				}						}						if (o){				for (var j = 0; j < keyMatrix.length; j++){					if (j != gpi){						o.setValue(keyMatrix[j], data[j]);					}				}			}		}	}	this.loadYellowCardsFromString(s);	this.loadNotepadFromString(s);	this.loadMarkersToWBTSString(s);}UELO.prototype.getChapters = function(){	var chapters = new Array();	var chapterPageName = "";	for (var i = 0; i < this.pages.length; i++) {		var p = this.pages[i];		if (chapterPageName != p.chapterName){			if (this.courseName != p.chapterName){					chapters[chapters.length] = p.chapterName;			}			chapterPageName = p.chapterName;		}	}	return chapters;}UELO.prototype.getPagesInChapter = function(chName){	var chapterPages = new Array();	for (var i = 0; i < this.pages.length; i++) {		var p = this.pages[i];		if (p.chapterName == chName){			if (this.courseName != p.chapterName){					chapterPages[chapterPages.length] = p.globalIndex;			}		}	}	return chapterPages;}UELO.prototype.getUserVars = function(){	return this.userVars;}UELO.prototype.setUserVars = function(uVars){	this.userVars = uVars;}UELO.prototype.clearInteractions = function(){	this.username = "";	this.password = "";	this.organisation = "";	this.server = "";	this.percentCompleted = "";	this.pagesVisited = 0;	this.points = 0;	this.beginTime = new Date();	this.endTime = new Date();	this.sessionTime = 0;	this.userVars = "";	this.lastVisitedPage = 0;		for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		page.status = PAGESTATUS_NOT_ATTEMPTED;		page.pageVisited = 0;		page.userAnswer = "";		for (var j = 0; j < page.interactions.length; j++)		{			var inter = page.interactions[j];			inter.studentResponse = "";			inter.studentResponseAsText = "";			inter.time = "";			inter.timestamp = null;			inter.status = "N";			inter.result = "";			inter.score = 0;			inter.latency = null;			inter.tryNumber=0;		}	}};UELO.prototype.getDate = function(){	return new Date();};UELO.prototype.getYellowCardsToWBTSString = function(){	var r = "";	r += "[UniversalElearningDataObjectYellowCardsHeader]\n";	r += "[UniversalElearningDataObjectYellowCardsDataFormat]\n";	r += "globalPageIndex" + this.keySep + "cardId"+ this.keySep + "date" + this.keySep + "cardType" + this.keySep + "left" + this.keySep + "top" + this.keySep + "author" + this.keySep + "title" + this.keySep + "note" + this.keySep + "isMaximalize" + this.keySep + "personGraphic" + this.keySep + "clockGraphic" + this.keySep + "buttonAdd" + this.keySep + "showUserName" +this.keySep + "pageName" +this.keySep + "pageGI" + 	"\n";	r += "[UniversalElearningDataObjectYellowCardsData]\n";	var yellowCardAppear = false;		for (var i = 0; i < this.pages.length; i++)	{		var page = this.pages[i];		if (page.yellowCards.length>0) {			yellowCardAppear = true;			for (var j = 0; j < page.yellowCards.length; j++) {				var yellowCard = page.yellowCards[j];				if (yellowCard && yellowCard.id.indexOf('__yc__') > -1) {									r += page.globalIndex + this.keySep;					r += yellowCard.id + this.keySep;					r += yellowCard.date + this.keySep;					r += yellowCard.cardType + this.keySep;					r += yellowCard.left + this.keySep;					r += yellowCard.top + this.keySep;									r += yellowCard.author + this.keySep;					r += yellowCard.title + this.keySep;					r += yellowCard.note + this.keySep;										r += yellowCard.isMaximalize + this.keySep;					r += yellowCard.personGraphic + this.keySep;					r += yellowCard.clockGraphic + this.keySep;					r += yellowCard.buttonAdd + this.keySep;					r += yellowCard.showUserName + this.keySep;					r += yellowCard.pageName + this.keySep;					r += yellowCard.pageGI;								r += "\n";				};			};		};	};	if (yellowCardAppear)	{		return r;	}else	{			return "";	}};UELO.prototype.loadYellowCardsFromString = function(s){	//s = s.replace(new RegExp("\r", "g"), "");	var lines = s.split("\n");	//header	var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectYellowCardsHeader");	if (index == null) 	{		return;	}	//add a header functionality here if needed	var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectYellowCardsDataFormat");	if (index == null) 	{		return;	}	//add a data format functionality here if needed		var keyMatrix = lines[index + 1].split(this.keySep);	var gpi = -1; // globalPageIndex	var eii = -1;  // elementIdIndex	for (var j = 0; j < keyMatrix.length; j++)	{		if (keyMatrix[j].match(new RegExp("^globalPageIndex$", "gi")))		{			gpi = j;		}		if (keyMatrix[j].match(new RegExp("^cardId$", "gi")))		{			eii = j;		}			}	var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectYellowCardsData");	if (index == null) 	{		return;	}	var i = index;		while (i++ < lines.length - 1)	{		var data = lines[i].split(this.keySep);		if (data.length == keyMatrix.length)		{			var ueloPage = this.FindPage(data[gpi]);			if (ueloPage){				var yellowCard = ueloPage.yellowCards[ueloPage.yellowCards.length] = new UELOYellowCard();				for (var j = 0; j < keyMatrix.length; j++){					yellowCard.setValue(keyMatrix[j], data[j]);				}			}		}	}};UELO.prototype.getMarkersToWBTSString = function(s){	var r = "";	r += "[UniversalElearningDataObjectMarkersHeader]\n";	r += "[UniversalElearningDataObjectMarkersDataFormat]\n";	r += "globalPageIndex" + this.keySep + "values\n";	r += "[UniversalElearningDataObjectMarkersData]\n";	var markersAppear = false;		for (var i=0; i<this.pages.length; i++)	{		var page = this.pages[i];		if (page.userMarkers != "") {			markersAppear = true;			r += page.globalIndex + this.keySep;			r += page.userMarkers;			r += "\n";		};	};	if (markersAppear)	{		return r;	}else{		return "";	}};UELO.prototype.loadMarkersToWBTSString = function(s){	var lines = s.split("\n");	//header	var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectMarkersHeader");	if (index == null) 	{		return;	}	//add a header functionality here if needed	var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectMarkersDataFormat");	if (index == null) 	{		return;	}	//add a data format functionality here if needed		var keyMatrix = lines[index + 1].split(this.keySep);	var gpi = -1; // globalPageIndex	var eii = -1;  // elementIdIndex	for (var j = 0; j < keyMatrix.length; j++)	{		if (keyMatrix[j].match(new RegExp("^globalPageIndex$", "gi")))		{			gpi = j;		}		if (keyMatrix[j].match(new RegExp("^values$", "gi")))		{			eii = j;		}			}	var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectMarkersData");	if (index == null) 	{		return;	}	var i = index;		while (i++ < lines.length - 1)	{		var data = lines[i].split(this.keySep);		if (data.length == keyMatrix.length)		{			var page = this.FindPage(data[gpi]);			if (page) {				page.userMarkers = data[eii];			}		}	}};UELONotepad = function(){	this.id = "";	this.note = "";};UELO.prototype.fillNotepad = function(params){	if (typeof(params) != "undefined" && params != "") {		var paramsArr = params.split(",");				for (var i=0; i<paramsArr.length; i++) {			if (paramsArr[i] != "") {				var itemAttr = paramsArr[i].split(";");								this.AddNotepad("__np__" + i, unescape(itemAttr[1]));			}		}	}};UELO.prototype.addNotepad = function(id, note){	var npd = this.findNotepad(id);	if (npd == null && id != "") {		npd = this.notepad[this.notepad.length] = new UELONotepad();		npd.id = id;		npd.note = escape(note);	};	return npd;};UELO.prototype.updateNotepad = function(id,note){	var npd = this.findNotepad(id);	if (npd) {		npd.note = escape(note);		return true;	};	return false;};UELO.prototype.deleteNotepad = function(id){		for (var i = 0; i < this.notepad.length; i++) {		var npd = this.notepad[i];		if (npd && npd.id == id) {			this.notepad[i] = null;			return true;		};	};	return false;};UELO.prototype.findNotepad = function(id){		for (var i = 0; i < this.notepad.length; i++) {		var npd = this.notepad[i];		if (npd && npd.id == id) {			return npd;		};	};	return null;};UELO.prototype.getNotepadToWBTSString = function(){	var r = "";	r += "[UniversalElearningDataObjectNotepadHeader]\n";	r += "[UniversalElearningDataObjectNotepadDataFormat]\n";	r += "notepadId"+ this.keySep + "note" + "\n";	r += "[UniversalElearningDataObjectNotepadData]\n";	var noteAppear = false;		if (this.notepad.length>0) {		noteAppear = true;		for (var j = 0; j < this.notepad.length; j++) {			var npd = this.notepad[j];						r += npd.id + this.keySep;			r += npd.note;			r += "\n";		}	}	if (noteAppear)	{		return r;	}else{		return "";	}};UELO.prototype.loadNotepadFromString = function(s){	//s = s.replace(new RegExp("\r", "g"), "");	var lines = s.split("\n");	//header	var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectNotepadHeader");	if (index == null) 	{		return;	}	//add a header functionality here if needed	var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectNotepadDataFormat");	if (index == null) 	{		return;	}	//add a data format functionality here if needed		var keyMatrix = lines[index + 1].split(this.keySep);	var gpi = -1; // globalPageIndex	var eii = -1;  // elementIdIndex	for (var j = 0; j < keyMatrix.length; j++)	{		if (keyMatrix[j].match(new RegExp("^globalPageIndex$", "gi")))		{			gpi = j;		}		if (keyMatrix[j].match(new RegExp("^notepadId$", "gi")))		{			eii = j;		}			}	var index = this.__parseFindGroup(lines, "UniversalElearningDataObjectNotepadData");	if (index == null) 	{		return;	}	var i = index;		while (i++ < lines.length - 1)	{		var data = lines[i].split(this.keySep);		if (data.length == keyMatrix.length)		{			var npd = this.notepad[this.notepad.length] = new UELONotepad();			for (var j = 0; j < keyMatrix.length; j++){				npd.setValue(keyMatrix[j], data[j]);			}		}	}}UELONotepad.prototype.setValue = function(name, value){	// wyjatki do poprawienie i ujednolicenia	if (name == "notepadId") name = "id";	if (typeof(this[name]) == "undefined") return;	if (typeof(this[name]) == "number" || typeof(this[name]) == "string" || typeof(this[name]) == "boolean") {				this[name] = value;	}};UELO.prototype.getSendDataTimeInterval = function(){		if (typeof(top.serverSendDataInterval) != 'undefined'){			this.sendDataInterval = top.serverSendDataInterval;	}		var date = new Date();	var time = date.getTime();	this.sendResultsToServerTime = time + (this.sendDataInterval*60*1000);};UELO.prototype.sendSubDataToServer = function(){			if(this.sendDataInterval < 1) return;	var date = new Date();	var time = date.getTime();		if(time>this.sendResultsToServerTime){		if(config.sendLessonLocationToServer) lms.LMSSetValue("cmi.core.lesson_location", player.gix);		lms.LMSSetValue("cmi.suspend_data", struct.getColToString("status")			+ "|" + suspendData.getToString());		lms.LMSSetValue("cmi.core.lesson_status", player.getLessonStatus());		lms.setTime();		if(config.sendScoreToServer) lms.setScore(player.getTotalScore());		this.sendInteractions();		lms.LMSCommit();		this.sendResultsToServerTime = time + (this.sendDataInterval*60*1000);	};};UELO.prototype.sendInteractions = function(){	var interactions = this.getInteractions("SCORM12");	for (var k in interactions) {		var item = interactions[k];				lms.LMSSetValue("cmi.interactions." + item["number"] + ".id", item["id"]);		lms.LMSSetValue("cmi.interactions." + item["number"] + ".time", item["time"]);		lms.LMSSetValue("cmi.interactions." + item["number"] + ".type", item["type"]);		lms.LMSSetValue("cmi.interactions." + item["number"] + ".latency", item["latency"]);		lms.LMSSetValue("cmi.interactions." + item["number"] + ".result", item["result"]);		lms.LMSSetValue("cmi.interactions." + item["number"] + ".weighting", item["weighting"]);		lms.LMSSetValue("cmi.interactions." + item["number"] + ".student_response", item["student_response"]);		lms.LMSSetValue("wbts.interactions." + item["number"] + ".question", item["question"]);				var correctResponses = item["correct_responses"];		for (var j = 0; j < correctResponses.length; j++) {			lms.LMSSetValue("cmi.interactions." + item["number"] + ".correct_responses."				+ j + ".pattern", correctResponses[j]);		}	}};UELO.prototype.resetInteractionsforPage = function(pageGlobalIndex){	var p = this.FindPage(pageGlobalIndex);	if (p) {		p.status = 'N';		for (var i = 0; i < p.interactions.length; i++) {			var inter = p.interactions[i];						inter.studentResponse = "";			inter.studentResponseAsText = "";			inter.time = "";			inter.timestamp = null;			inter.status = "N";			inter.result = "";			inter.score = 0;			inter.tryNumber = 0;		}	}}var uelo = new UELO();