﻿/* * Copyright (c) 1995-2005 by 4system Polska Sp. z o.o. * All Rights Reserved. v4 */function __Frame(){	this.locked = false;	this.content = false;	this.gix = -1;	this.frame = null;};function __Timer(){	this.interval = 250;	this.tryCounter = 0;	this.id = null;};__Timer.prototype.onInterval = function(){	this.stop();	var frm = player.getFrame(player.gix);	if (!frm) {		player.pgPreloaderLoad(player.gix);		frm = player.getFrame(player.gix);	}	if (frm) {		if (frm.frame.PlayerInterface 			&& frm.frame.PlayerInterface.connectedPage 			&& player.gix == frm.frame.PlayerInterface.connectedPage.p_globalIndex) 		{ 				if (!frm.frame.PlayerInterface.connectedPage.allowPreload) {				return;			};					if ((frm.frame.PlayerInterface.connectedPage.waitingForRun) || (this.tryCounter > 20)) {				this.tryCounter = 0;				frm.frame.PlayerInterface.connectedPage.loadContent();			}else if (frm.frame.PlayerInterface.connectedPage.isRuning) {								player.preloadPages(player.gix);				return;			}		} else if (frm.frame.extContent) {			if ((frm.frame.waitingForRun) || (this.tryCounter > 20)) {				this.tryCounter = 0;				frm.frame.loadContent();			} else if (frm.frame.isReady) {				player.preloadPages(player.gix);				return;			}		}	}	this.tryCounter++;	this.run();};__Timer.prototype.run = function(){	this.stop();	this.id = window.setTimeout('__timer.onInterval();', this.interval);};__Timer.prototype.stop = function(){	if (this.id != null) {		window.clearTimeout(this.id);		this.id = null;	}};var __timer = new __Timer();// debuggervar ___cool_timer_enabled = false;var ___cool_timer_turn = false;var ___cool_timer_last_gix = -1;var ___cool_timer = null;var ___cool_timer_interval = 1000;function ___cool_timer_stop() {	if (___cool_timer != null) {		window.clearTimeout(___cool_timer);		___cool_timer = null;	}};function ___cool_timer_start() {	___cool_time = window.setTimeout('___cool_timer_onInterval();', ___cool_timer_interval);};function ___cool_timer_onInterval() {	___cool_timer_stop();	if (!___cool_timer_turn) {		if (player.further()) ___cool_timer_last_gix = -1;	} else {		player.backwards();	}	if (___cool_timer_last_gix == player.gix) {		___cool_timer_turn = !___cool_timer_turn;	}	___cool_timer_last_gix = player.gix;	___cool_timer_start();};// debugger endvar ___wait_timer = null;function ___wait_timer_go(ms, eval_x){	if (___wait_timer != null) {		window.clearTimeout(___wait_timer);		___wait_timer = null;	}	___cool_time = window.setTimeout(eval_x, ms);};function Player(){	// debugger	this.gixF = -1;	this.gixL = -1;	// debugger end		this.STATUS_NOT_ATTEMPTED = "not attempted";	this.STATUS_INCOMPLETE = "incomplete";	this.STATUS_COMPLETED = "completed";	this.STATUS_UNKNOWN = "unknown";	this.STATUS_PASSED = "passed";	this.STATUS_FAILED = "failed";		this.gix = 0;	this.last_gix = 0;	this.framesToLoad = 0;	this.baseurl = location.href.split("?");	this.naviPathToRoot = this.baseurl[0].substring(0, this.baseurl[0].lastIndexOf('/')) + '/';	this.sid = this.createSID();		this.isLightVersion = false;	this.courseVersion = 0;		if (this.naviPathToRoot == "") this.naviPathToRoot = location.href.substring(0, location.href.lastIndexOf('\\')) + '/';		this.setupURIParams();		this.enablePagesPreloader = false;	this.pagesPreloaderFrame = null;	this.pagesPreloaderContentFrame = null;	//this.pgPreloaderSrc = this.naviPathToRoot;	this.wasLoaded = false;	this.passLevel = 100;			this.gix_offset = 0;	this.down_max = 1;	this.up_max = 2;	this.pg_max = 1;		this.__frames = new Object();	this.pageChanged = null;	this.startTime = new Date();};Player.prototype.setupURIParams = function(){	var v = getURIParam("wbteLightVersion");	if (v == "true" || v == "1")	{		this.isLightVersion = true;	}	var v = getURIParam("wbteVersion");	if (v != "")	{		this.courseVersion = v;	}};Player.prototype.setLightVersion = function(b){	this.isLightVersion = (b == true);	this.gotoPage(this.gix);};Player.prototype.getLightVersion = function(){	return this.isLightVersion;};//jk  move to ueloPlayer.prototype.getLessonStatusWithoutSendIdPage = function(thisId){	for (var i = 0; i < struct.length(); i++) {		if ((struct.item(i)["visible"] == "1") && (struct.item(i)["index"] != thisId)) 			if (struct.item(i)["status"] == "I" || struct.item(i)["status"] == "N") return this.STATUS_INCOMPLETE;	}	return this.STATUS_COMPLETED;};Player.prototype.getStatusPassedFailed = function(){	if(this.getTotalScore()>=uelo.passThreshold){		return this.STATUS_PASSED;	}else{		return this.STATUS_FAILED;	}}Player.prototype.getStatusCompletedIncompleted = function(){	if (top && typeof(top.passLevel) != 'undefined'){			this.passLevel = top.passLevel;	};	if (this.passLevel == 100){		for (var i = 0; i < struct.length(); i++) {			var item = struct.item(i);			if (item["iss"] == "0") continue;					if (item["visible"] == "1") {				if (item["status"] == "I" || item["status"] == "N") {					return this.STATUS_INCOMPLETE;				};				//if (struct.item(i)["status"] == "I" || struct.item(i)["status"] == "N") return this.STATUS_INCOMPLETE + ",suspend";			};		};		return this.STATUS_COMPLETED;	}else{		return this.checkCourseCompleted();	};}Player.prototype.checkCourseCompleted = function(){	var pagesCount = 0;	var pagesCompleted = 0;		for (var i = 0; i < struct.length(); i++) {		var item = struct.item(i);		if (item["iss"] == "0") continue;				if (item["visible"] == "1") {			if (item["status"] == "I" || item["status"] == "N" || item["status"] == "C") {				pagesCount++;				if (item["status"] == "C") {					pagesCompleted++;				};			};		};	};	var prec = parseInt((pagesCompleted/pagesCount*100).toFixed(0));		return (prec > this.passLevel)?this.STATUS_COMPLETED:this.STATUS_INCOMPLETE;};//jk  move to ueloPlayer.prototype.getLessonStatus = function(){    if((config.sendPassedFailedToServer) && (this.getTotalScore()>0)){		return this.getStatusPassedFailed();    }else{		return this.getStatusCompletedIncompleted();    };};Player.prototype.getLessonCIPF = function(pf){	if (pf) {		var result = this.STATUS_UNKNOWN;	} else {		var result = this.STATUS_NOT_ATTEMPTED;	}		for (var i = 0; i < struct.length(); i++) {		var item = struct.item(i);		if (item["visible"] == "1") {			var as = item["status"];			if (pf) {				if (as == "F") {					return this.STATUS_FAILED;				} else if (as == "P") {					result = this.STATUS_PASSED;				}			} else {				if (as == "I" || as == "N") {					return this.STATUS_INCOMPLETE;				} else if (as == "C") {					result = this.STATUS_COMPLETED;				}			}		}	}		return result;};//jk  move to ueloPlayer.prototype.getItemStatus = function(index){	if (index == null || index == "undefined") index = this.gix;	var itemStatus = struct.findItem(index)["status"];	switch (itemStatus) {		case "N": return this.STATUS_NOT_ATTEMPTED; break;		case "I": return this.STATUS_INCOMPLETE; break;		case "C": return this.STATUS_COMPLETED; break;		case "P": return this.STATUS_PASSED; break;		case "F": return this.STATUS_FAILED; break;	}};Player.prototype.checkPageStatus = function(index, status, checkChildren){	if (index == null || index == "undefined") index = this.gix;	var item = struct.findItem(index);	var result = this.inArray(this.getItemStatus(item["gix"]), status.split(","));	if (checkChildren) {		for (var i=0; i < struct.length(); i++) {			var childItem = struct.item(i);			if (childItem["parent"] == item["index"]) {				if (this.hasChildren(childItem["gix"])) {					result = result + this.checkPageStatus(childItem["gix"], status, checkChildren);				} else {					result = result + this.inArray(this.getItemStatus(childItem["gix"]), status.split(","));				}			}		}	}	return result;};Player.prototype.hasChildren = function(index){	if (index == null || index == "undefined") index = this.gix;	var item = struct.findItem(index);	for (var i = 0; i < struct.length(); i++) {		var childItem = struct.item(i);		if (childItem["parent"] == item["index"]) return true;	}	return false;};Player.prototype.loadContent = function(gix){	if (this.enablePagesPreloader) return;	this.setSessionTime();	this.gix = gix;		var tree_frame = this.findFrame("tree");	if (tree_frame) tree_frame.expandMyParents(this.gix);	var item = struct.findItem(gix);			this.updateTemplateProgress(item);			if (item) {		var link = this.naviPathToRoot + item["href"];		if (item["type"] == "0") {			link += '_page.' + this.courseVersion;			if (this.isLightVersion)			{				link += '.light';			}			link += '.html';		}		this.loadContentFrameset(link);		this.setNaviHtml("_page_no_navi", struct.getVisibleItemsIndex(this.gix) 			+ " / " + struct.getVisibleItemsCount());					this.updateTemplateTitle(item);	}};Player.prototype.resetCourseFrames = function(){	var course_frame = this.findFrame("course_frame");	if (course_frame && course_frame.setFrames) {		return course_frame.setFrames();	}	return false;}Player.prototype.getVisibleItemsIndex = function(){	return struct.getVisibleItemsIndex(this.gix);};Player.prototype.getVisibleItemsCount = function(){	return struct.getVisibleItemsCount();};Player.prototype.findFirstPage = function(status){	if (status != null && status != "undefined") {		for (var i=0; i < struct.length(); i++) {			var item = struct.item(i);			var res = this.inArray(this.getItemStatus(item["gix"]), status.split(","));			if (item["visible"] != "1") continue;			if (item["href"] != "" && res) return item["gix"];		}	}	for (var i = 0; i < struct.length(); i++) {		var item = struct.item(i);		if (item["visible"] != "1") continue;		if (item["href"] != "") return item["gix"];	}	return null;};Player.prototype.findParent = function(index){	if (index == null || index == "undefined") index = this.gix;	var currentItem = struct.findItem(index);		for (var i=0; i < struct.length(); i++) {		var item = struct.item(i);		if (item["href"] != "" && item["index"] == currentItem["parent"]) return item["gix"];	}	return null;};Player.prototype.restoreExitPage = function(gix){	var isMixed = (struct.firstOffsetPages != 0 || struct.lastOffsetPages != 0 || struct.countShowPages != 0);			var item = null;	if (isMixed){		item = struct.findItem(gix);		if (item){			if (item.isExamPage == 1){				this.gotoPage(struct.examParentGix);			}else{				this.gotoPage(gix);			};		}else{			this.gotoPage(struct.examParentGix);		};	}else{		this.gotoPage(gix);	};}Player.prototype.gotoPage = function(g){	/// ograniczenie czasowe	/// trzeba gdzies wpisac w kodzie	/// np : player.expire = new Date(2005, 7, 18);	if (typeof(this.expire) != "undefined" && typeof(this.expire.getTime) == "function") {		var now = new Date();		if (now.getTime() > this.expire.getTime())		{			this.loadContentFrameset(this.naviPathToRoot + "pages/html/expire.html");			return;		}	}	var item = struct.findItem(g);	if (item == null) {		item = struct.findItem(player.findFirstPage());	}		if (item) {		if (item["href"] != "") {			if (this.enablePagesPreloader) {				this.pgPreloaderLoad(item["gix"]);			} else {				this.loadContentFramesetByGix(item["gix"]);			}			return;		}	}};Player.prototype.gotoEncyclopedia = function(wordToSearch){	if (lms.gotoEncyclopedia) {		lms.gotoEncyclopedia(wordToSearch);	}	return;};Player.prototype.nextPage = function(passInvisible, status) {	if (passInvisible == null || passInvisible == "undefined") passInvisible = false;		var i = this.gix;	var item = null;		if (status != null && status != "undefined") {		while (item = struct.getNextItem(i)) {			var res = this.inArray(this.getItemStatus(item["gix"]), status.split(","));			if (item["href"] != "" && (!passInvisible && item["visible"] == "1") && res) {				if (this.enablePagesPreloader) {					this.pgPreloaderLoad(item["gix"]);				} else {					this.loadContentFramesetByGix(item["gix"]);				}				return;			}						i = item["gix"];		}	} else {		while (item = struct.getNextItem(i)) {			if (item["href"] != "" && (!passInvisible && item["visible"] == "1")) {				if (this.enablePagesPreloader) {					this.pgPreloaderLoad(item["gix"]);				} else {					this.loadContentFramesetByGix(item["gix"]);				}				return;			}			i = item["gix"];		}	}		if (this.enablePagesPreloader) {		this.pgPreloaderLoad(this.gix);	} else {		this.loadContentFramesetByGix(this.gix);	}};Player.prototype.previousPage = function(passInvisible, status){	if (passInvisible == null || passInvisible == "undefined") passInvisible = false;		var i = this.gix;	var item = null;		if (status != null && status != "undefined") {		while (item = struct.getPreviousItem(i)) {			var res = this.inArray(this.getItemStatus(item["gix"]), status.split(","));			if (item["href"] != "" && (!passInvisible && item["visible"] == "1") && res) {				if (this.enablePagesPreloader) {					this.pgPreloaderLoad(item["gix"]);				} else {					this.loadContentFramesetByGix(item["gix"]);				}				return;			}			i = item["gix"];		}	} else {		while (item = struct.getPreviousItem(i)) {			if (item["href"] != "" && (!passInvisible && item["visible"] == "1")) {				if (this.enablePagesPreloader) {					this.pgPreloaderLoad(item["gix"]);				} else {					this.loadContentFramesetByGix(item["gix"]);				}				return;			}			i = item["gix"];		}	}		if (this.enablePagesPreloader) {		this.pgPreloaderLoad(this.gix);	} else {		this.loadContentFramesetByGix(this.gix);	}};Player.prototype.nextSCO = function(){	if (typeof(lms) != "undefined" && typeof(lms.nextSCO) != "undefined") lms.nextSCO();};Player.prototype.prevSCO = function(){	if (typeof(lms) != "undefined" && typeof(lms.prevSCO) != "undefined") lms.prevSCO();};Player.prototype.reload = function(){	var item = struct.findItem(this.gix);	if (item["href"] != "") {		if (this.enablePagesPreloader) {			this.pgPreloaderLoad(item["gix"]);		} else {			this.loadContentFramesetByGix(item["gix"]);		}		return;	}};Player.prototype.further = function(passInvisible) {	var result = false;	if (this.enablePagesPreloader) {		var frm = player.getFrame(player.gix);		if (frm) {			if (frm.frame.PlayerInterface && frm.frame.PlayerInterface.connectedPage) {				result = frm.frame.PlayerInterface.connectedPage.further();			} else this.nextPage();		} else this.nextPage();	} else {		var content_frame = this.findFrame("content");		if (content_frame && content_frame.PlayerInterface				&& content_frame.PlayerInterface.connectedPage) {			result = content_frame.PlayerInterface.connectedPage.further();		} else this.nextPage();	}	return result;};Player.prototype.backwards = function(passInvisible){	this.previousPage(passInvisible);};Player.prototype.findFrame = function(name, frame){	if (name == "content") {		if (frames.course_frame && frames.course_frame.content) return frames.course_frame.content;	}	if (name == "tree") {		if (frames.course_frame && frames.course_frame.tree) return frames.course_frame.tree;	}	if (name == "navigation") {		if (frames.course_frame && frames.course_frame.navigation) return frames.course_frame.navigation;	}		if (typeof(frame) == "undefined") {		frame = frames;	}	for (var i = 0; i < frame.length; i++) {		if (frame[i].name == name) {			return frame[i];		} else {			var result = this.findFrame(name, frame[i]);			if (result) return(result);		}	}		return(null);};Player.prototype.loadContentFrameset = function(href) {	if (this.enablePagesPreloader) return;		var content_frame = this.findFrame("content");	content_frame.location.href = href;			this.updateTemplateTree();};Player.prototype.loadContentFramesetByGix = function(gix) {	if (this.enablePagesPreloader) return;	if (uelo.getPageAccess(gix) == false) {		alert(MESSAGE_NOT_HAVE_PERMISSION_TO_ACCESS_THIS_PAGE);		return;	}	this.loadContentFrameset(this.naviPathToRoot + "navi/html/loadcontent.html?gix=" + gix);};Player.prototype.checkWerePagesSolved = function(rangeBegin, rangeEnd){	var complete = false;		for (var i = 0; i < struct.length(); i++) {		var item = struct.item(i);		if (parseInt(item['index']) < rangeBegin || parseInt(item['index']) > rangeEnd)		{			continue;		}		if (item["visible"] == "1"){			if (item["status"] == "P" || item["status"] == "F") {				complete = true;				break;			}		}	}	return complete;}//jk  move to ueloPlayer.prototype.getScoreMaxScore = function(){	var maxScore = 0;	var score = 0;	for (var i = 0; i < struct.length(); i++) {		var item = struct.item(i);		if (item["iss"] == "0") continue;				var pageMS = parseInt(item["ms"]);		if (!isNaN(pageMS)) {			if (item["visible"] == "1"){				maxScore += 100;				if (item["status"] == "P") {					score += 100;				}			}		}	}	return [score, maxScore];}Player.prototype.getTotalScore = function(){	var scoreMScore = this.getScoreMaxScore();		if (scoreMScore[0] == 0 && struct.isCourseMixed){		var wasSolved = this.checkExamWasSolved();		if (wasSolved){			return 0;		}else{			return uelo.courseOryginalScore;		}	}else{		score = scoreMScore[0];		maxScore = scoreMScore[1];		var res = Math.ceil(((100 / maxScore) * score));		return isNaN(res) ? "":res;	}	};Player.prototype.checkExamWasSolved = function(){	for (var i = 0; i < struct.length(); i++) {		var item = struct.item(i);		if (item["iss"] == "0") continue;				var pageMS = parseInt(item["ms"]);		if (!isNaN(pageMS)) {			if (item["visible"] == "1"){				if (item["isExamPage"] == "1" && item["status"] != "N") {					return true;				}			}		}	}	return false;}Player.prototype.setNaviHtml = function(obj_name, value){	var navigation = this.findFrame("navigation");	if (navigation != undefined) {		var obj = navigation.document.getElementById(obj_name);		if (obj != undefined) obj.innerText = value;	}};Player.prototype.contentDestroy = function(){	if (this.enablePagesPreloader) {		this.pgPreloaderUnloadContent();	} else {		var f = findFrame("content");		if (f) {			if (f.PlayerInterface) f.PlayerInterface.connectedPage.unloadContent();			else if (f.extContent) f.unloadContent();		}	}};Player.prototype.createSID = function (){	var d = new Date();	return d.getTime();};//jk  move to ueloPlayer.prototype.resetPagesStatus = function (){	for (var i = 0; i < struct.length(); i++) {		struct.item(i)["status"] = "N";	}};Player.prototype.getPagesCountInChapter = function(root) {	var result = 0;	for (var i = 0; i < struct.length(); i++) {		var item = struct.item(i);		if (parseInt(item["parent"]) == parseInt(root["index"])) result++;	}	return result;};Player.prototype.getPageNoInChapter = function(root, item) {	var result = 0;	for (var i = 0; i < struct.length(); i++) {		var item_s = struct.item(i);		if (parseInt(item_s["parent"]) == parseInt(root["index"])) {			result++;			if (item_s["gix"] == item["gix"]) return result;		}	}	return result;};Player.prototype.nextPageInChapter = function(passInvisible, status){	if (passInvisible == null || passInvisible == "undefined") passInvisible = false;	var i = this.gix;	var root = struct.findItem(this.gix);	var item = null;		if (status != null && status != "undefined") {		if (this.hasChildren()) {			while (item = struct.getNextItem(i)) {				var res = this.inArray(this.getItemStatus(item["gix"]), status.split(","));				if (item["href"] != "" 						&& (!passInvisible && item["visible"] == "1")						&& item["parent"] == root["index"]						&& res) {					if (this.enablePagesPreloader) {						this.pgPreloaderLoad(item["gix"]);					} else {						this.loadContentFramesetByGix(item["gix"]);					}					return;				}				i = item["gix"];			}		}	} else {		if (this.hasChildren()) {			while (item = struct.getNextItem(i)) {				if (item["href"] != "" && (!passInvisible && item["visible"] == "1")						&& item["parent"] == root["index"]) {					if (this.enablePagesPreloader) {						this.pgPreloaderLoad(item["gix"]);					} else {						this.loadContentFramesetByGix(item["gix"]);					}					return;				}				i = item["gix"];			}		}	}		var idx = this.findParent(this.gix);	if (idx != null) {		if (this.enablePagesPreloader) {			this.pgPreloaderLoad(idx);		} else {			this.loadContentFramesetByGix(idx);		}	} else {		idx = this.findFirstPage();		if (idx != null) {			if (this.enablePagesPreloader) {				this.pgPreloaderLoad(idx);			} else {				this.loadContentFramesetByGix(idx);			}		}	}};Player.prototype.previousPageInChapter = function(passInvisible, statuses){	if (passInvisible == null || passInvisible == "undefined") passInvisible = false;	var i = this.gix;	var root = struct.findItem(this.gix);	var item = null;		if (status != null && status != "undefined") {		if (this.hasChildren()) {			while (item = struct.getPreviousItem(i)) {				var res = this.inArray(this.getItemStatus(item["gix"]), status.split(","));				if (item["href"] != "" 						&& (!passInvisible && item["visible"] == "1")						&& item["parent"] == root["index"]						&& res) {					if (this.enablePagesPreloader) {						this.pgPreloaderLoad(item["gix"]);					} else {						this.loadContentFramesetByGix(item["gix"]);					}					return;				}				i = item["gix"];			}		}	} else {		if (this.hasChildren()) {			while (item = struct.getPreviousItem(i)) {				if (item["href"] != "" && (!passInvisible && item["visible"] == "1")						&& item["parent"] == root["index"]) {					if (this.enablePagesPreloader) {						this.pgPreloaderLoad(item["gix"]);					} else {						this.loadContentFramesetByGix(item["gix"]);					}					return;				}				i = item["gix"];			}		}	}		var idx = this.findParent(this.gix);	if (idx != null) {		if (this.enablePagesPreloader) {			this.pgPreloaderLoad(idx);		} else {			this.loadContentFramesetByGix(idx);		}	} else {		idx = this.findFirstPage();		if (idx != null) {			if (this.enablePagesPreloader) {				this.pgPreloaderLoad(idx);			} else {				this.loadContentFramesetByGix(idx);			}		}	}};Player.prototype.setTitle = function(item, frameName, objName){	if (!item) item = struct.findItem(this.gix);	var header = this.findFrame(frameName);		if (header && item) {		var obj = header.document.getElementById(objName);		if (obj != undefined) obj.innerText = item["title"];	}};Player.prototype.setNumber = function(item, format, frameName, objName){	var clear = false;	var header = this.findFrame(frameName);	if (!item) {		item = struct.findItem(this.gix);	}	var item_parent = struct.findItemByParent(parseInt(item["parent"]));	if (!item_parent || parseInt(item["parent"]) == 1) {		clear = true;		format = "";	} else {		var count = this.getPagesCountInChapter(item_parent);		var page_no = this.getPageNoInChapter(item_parent, item);		format = format.replace("%1", page_no);		format = format.replace("%2", count - 1);	}		if (header && item) {		var obj = header.document.getElementById(objName);		if (obj != undefined) obj.innerText = format;	}};Player.prototype.setPageHidden = function(index){	if (index == null || index == "undefined") return false;	var item = struct.findItem(index);	if(item) item["visible"]="0";	if(uelo){		uPage=uelo.FindPage(index);		if(uPage) uPage.pageType='Hidden';	}};Player.prototype.setPageVisible = function(index,type){	if (index == null || index == "undefined") return false;	var item = struct.findItem(index);	if(item) item["visible"]="1";	if(uelo){		uPage=uelo.FindPage(index);		if(uPage) uPage.pageType=type;	}};Player.prototype.setPagesInStruct = function(type){	for (var i = 1; i < struct.length(); i++) {				if (type == 'hidden') this.setPageHidden(i);		else this.setPageVisible(i,type);	}};Player.prototype.getLMS = function(){	return lms;};Player.prototype.setCourseVersion = function(vindex){	if (!struct.existsVersionItem(vindex)) return;		this.courseVersion = vindex;	var treeFrame = this.findFrame("tree");	if (treeFrame) {		treeFrame.setCourseVersion(this.courseVersion);	}		if (this.enablePagesPreloader) this.resetFrames();	this.gotoPage(this.gix);}Player.prototype.getFrame = function(id, base){	if (typeof(base) != "undefined") {		for (var k in this.__frames) {			if (this.__frames[k] && k == id) {				return this.__frames[k];			}		}	} else {		for (var k in this.__frames) {			if (this.__frames[k] && this.__frames[k].gix == id) {				return this.__frames[k];			}		}	}	return null;};Player.prototype.getFreeFrame = function(){	for (var k in this.__frames) {		if (this.__frames[k].locked == false && this.__frames[k].content == false) {			return this.__frames[k];		}	}	return null;};Player.prototype.getIndex = function(gix){	var item = struct.findItem(gix);	if (item) {		return parseInt(item["index"]);	}	return -1;};Player.prototype.getGIX = function(idx){	var item = struct.findItemBy(idx, "index");	if (item) {		return parseInt(item["gix"]);	}	return -1;};Player.prototype.getFirstVisible = function(gix, prev){	if (prev) {		var item = struct.findPrevVisibleItem(gix);		if (item) {			return parseInt(item["gix"]);		}	} else {		var item = struct.findNextVisibleItem(gix);		if (item) {			return parseInt(item["gix"]);		}	}	return -1;};Player.prototype.preloadPages = function(gix){	if(config.useMicroPreloader){		this.preloadPagesMicro(gix);	}else{		this.preloadPagesFull(gix);	}}Player.prototype.preloadPagesFull = function(gix){	this.updateTemplateTree();		var prev = false;	var next1 = false;	var next2 = false;		var idx = this.getIndex(gix);		var gix_prev = this.getFirstVisible(gix, true);	var gix_next1 = this.getFirstVisible(gix);		var gix_next2 = -1;	if (gix_next1 != -1) {		var gix_next2 = this.getFirstVisible(gix_next1);	}			var idx_prev = this.getIndex(gix_prev);	var idx_next1 = this.getIndex(gix_next1);	var idx_next2 = this.getIndex(gix_next2);		for (var k in this.__frames) {		if (this.__frames[k].gix == gix) {			this.__frames[k].locked = true;		}else if (gix_prev != -1 && this.__frames[k].gix == gix_prev) {			this.__frames[k].locked = true;			prev = true;		}else if (gix_next1 != -1 && this.__frames[k].gix == gix_next1) {			this.__frames[k].locked = true;			next1 = true;		}else if (gix_next2 != -1 && this.__frames[k].gix == gix_next2) {			this.__frames[k].locked = true;			next2 = true;		}	}		//z ofsetem		if (!prev && gix_prev != -1) {		var frm = this.getFreeFrame();		if (frm) {			frm.locked = true;			frm.gix = gix_prev;			frm.frame.location = this.prepareFrameSrc(gix_prev);		}	}		if (!next1 && gix_next1 != -1) {		var frm = this.getFreeFrame();		if (frm) {			frm.locked = true;			frm.gix = gix_next1;			frm.frame.location = this.prepareFrameSrc(gix_next1);		}	}		if (!next2 && gix_next2 != -1) {		var frm = this.getFreeFrame();		if (frm) {			frm.locked = true;			frm.gix = gix_next2;			frm.frame.location = this.prepareFrameSrc(gix_next2);		}	}	};Player.prototype.preloadPagesMicro = function(gix){	this.updateTemplateTree();		//var prev = false;	var next1 = false;	//var next2 = false;		var idx = this.getIndex(gix);		//var gix_prev = this.getFirstVisible(gix, true);	var gix_next1 = this.getFirstVisible(gix);	/*	var gix_next2 = -1;	if (gix_next1 != -1) {		var gix_next2 = this.getFirstVisible(gix_next1);	}	*/	/*var gix_prev = this.getGIX(idx - 1);	var gix_next1 = this.getGIX(idx + 1);	var gix_next2 = this.getGIX(idx + 2, new Array(gix_next1));*/		//var idx_prev = this.getIndex(gix_prev);	var idx_next1 = this.getIndex(gix_next1);	//var idx_next2 = this.getIndex(gix_next2);		for (var k in this.__frames) {		if (this.__frames[k].gix == gix) {			this.__frames[k].locked = true;		}/* else if (gix_prev != -1 && this.__frames[k].gix == gix_prev) {			this.__frames[k].locked = true;			prev = true;		} */else if (gix_next1 != -1 && this.__frames[k].gix == gix_next1) {			this.__frames[k].locked = true;			next1 = true;		} /*else if (gix_next2 != -1 && this.__frames[k].gix == gix_next2) {			this.__frames[k].locked = true;			next2 = true;		}*/	}		//z ofsetem	/*	if (!prev && gix_prev != -1) {		var frm = this.getFreeFrame();		if (frm) {			frm.locked = true;			frm.gix = gix_prev;			frm.frame.location = this.prepareFrameSrc(gix_prev);		}	}	*/	if (!next1 && gix_next1 != -1) {		var frm = this.getFreeFrame();		if (frm) {			frm.locked = true;			frm.gix = gix_next1;			frm.frame.location = this.prepareFrameSrc(gix_next1);		}	}	/*	if (!next2 && gix_next2 != -1) {		var frm = this.getFreeFrame();		if (frm) {			frm.locked = true;			frm.gix = gix_next2;			frm.frame.location = this.prepareFrameSrc(gix_next2);		}	}	*/};Player.prototype.prepareFrameSrc = function(gix){	var result = "";	var item = struct.findItem(gix);	if (item) {		if (item["href"] != "") {			if (item["type"] == "0") {				result = this.naviPathToRoot + item["href"] + "_page." + this.courseVersion + ".html";			} else {				result = this.naviPathToRoot + item["href"];			}		}	}	if (result == "") {		result = this.naviPathToRoot + "pages/html/blank.html";	}	return result;};Player.prototype.prepareFrame = function(gix, name){	var frm = null;	if (typeof(name) != "undefined") {		frm = this.getFrame(name, true);		if (frm) {			frm.gix = gix;			frm.frame.location = this.prepareFrameSrc(gix);		}	} else {		frm = this.getFrame(gix);		if (!frm) {			frm = this.getFreeFrame(gix);			if (frm) {				frm.gix = gix;				frm.frame.location = this.prepareFrameSrc(gix);			}		}	}	return frm;};Player.prototype.pgPreloaderUnloadContent = function(){	var frm = this.getFrame(this.gix);	if (frm) {		if (frm.frame.PlayerInterface && frm.frame.PlayerInterface.connectedPage) {			frm.frame.PlayerInterface.connectedPage.unloadContent();		} else if (frm.frame.extContent) {			frm.frame.unloadContent();		}	}};Player.prototype.pgPreloaderLoad = function(gix){	if (uelo.getPageAccess(gix) == false) {		alert(MESSAGE_NOT_HAVE_PERMISSION_TO_ACCESS_THIS_PAGE);		return	}		__timer.stop();		var item = struct.findItem(gix);	if (item) {		var frm = this.getFrame(this.gix);		if (frm) {			if (frm.frame.PlayerInterface && frm.frame.PlayerInterface.connectedPage) {				frm.frame.PlayerInterface.connectedPage.unloadContent();			} else if (frm.frame.extContent) {				frm.frame.unloadContent();			}		}				this.setSessionTime();		this.gix = gix;				for (var k in this.__frames) {			this.__frames[k].locked = false;			this.__frames[k].content = false;		}				var frm = this.getFrame(this.gix);		if (!frm) {			frm = this.prepareFrame(this.gix, "p1000");		}				frm.content = true;		var cols = "";				for (var k in this.__frames) {			if (this.__frames[k].content) {				cols += "*%,"			} else {				cols += "0%,"			}		}				cols = cols.substr(0, cols.length - 1);		this.pagesPreloaderFrame.cols = cols;				this.updateTemplateTree();		this.updateTemplateExpand(item);		this.updateTemplateProgress(item);		this.updateTemplateTitle(item);				__timer.run();	}};Player.prototype.resetFrames = function(){	for (var k in this.__frames) {		this.__frames[k].locked = false;		this.__frames[k].content = false;		this.__frames[k].gix = -1;	}};Player.prototype.initFrames = function(){	if (!this.pagesPreloaderFrame) {		alert("Pages preloader error.\nPlease contact your course developer.");		return;	}		this.pagesPreloaderFrame.cols = "0%,*%,0%,0%";		var content_frame = this.findFrame("content");		for (var i=0; i<content_frame.frames.length; i++) {		var frm = content_frame.frames[i];		this.__frames[frm.name] = new __Frame();		this.__frames[frm.name].frame = frm;	}		this.pgPreloaderLoad(this.getGIX(2));};Player.prototype._doLoad = function(){	this.doLoad(this.pagesPreloaderFrame);	// debugger	if (is.moz) {		___cool_timer_stop();		if (___cool_timer_enabled) {			___cool_timer_start();		}	}	// debugger end};var o_wait_indicator = false;Player.prototype.wait = function(ms){	o_wait_indicator = false;	___wait_timer_go(ms, "o_wait_indicator=true;");	while (!o_wait_indicator) {		if (log) log.info("Player::wait(" + ms + ")");	}};Player.prototype.doLoad = function(obj){	this.enablePagesPreloader = config.usePlayerPreloader;	this.pg_max = struct.length();	this.pagesPreloaderFrame = obj;	if (!this.pagesPreloaderFrame) this.enablePagesPreloader = false;	if (this.enablePagesPreloader) {		if (is.opera) {			this.wait(1000);			this.initFrames();		} else if ((is.moz) && !this.wasLoaded) {					} else {			this.initFrames();		}	}	this.resetCourseFrames();			// debugger	if (is.ie) {		___cool_timer_stop();		if (___cool_timer_enabled) {			___cool_timer_start();		}	}	// debugger end	return false;};Player.prototype.updateTemplateExpand = function(item){	var tree_frame = this.findFrame("tree");	if (item && item["visible"] == "1" && tree_frame && tree_frame.expandMyParents) {		tree_frame.expandMyParents(this.gix);	};}Player.prototype.updateTemplateTree = function(){	var tree_frame = this.findFrame("tree");	var item = struct.findItem(this.gix);		if (item && item["visible"] == "1" && tree_frame && tree_frame.selectedNode) {		tree_frame.selectedNode(this.gix);	}}Player.prototype.updateTemplateTitle = function(item){	var tF = this.findFrame("title");	if (tF && tF.update) {		tF.update(item);	}}Player.prototype.updateTemplateProgress = function(item){	var navigation_frame = this.findFrame("navigation");	if (navigation_frame){		if (navigation_frame.templateProgress){			var content_frame = this.findFrame("content");			navigation_frame.updateProgress(content_frame, item['index']);		}		if (navigation_frame.hideShowPrevNextButton){			var content_frame = this.findFrame("content");			navigation_frame.showHideButtons(content_frame, this.gix);		}	}}Player.prototype.pageLoaded = function(gix){};Player.prototype.contentLoaded = function(){};Player.prototype.isActiveContent = function(srch){	var result = false;	var item = struct.findItem(this.gix);	if (item) {		var i_srch = item["href"];		if (i_srch != "") {			i_srch = i_srch.split("?")[1];			i_srch = "?" + i_srch.replace(new RegExp('&amp;', "g"), '&');			srch = srch.replace(new RegExp('&amp;', "g"), '&');			if (i_srch == srch) {				result = true;			}		}	}	return result;};Player.prototype.clearAllData = function(){	uelo.clearInteractions();	struct.setNewStatus("N");};Player.prototype.setSessionTime = function(){	var item = struct.findItem(this.gix);	if (item) {		var t = stampInSec(this.startTime, new Date());		item["sessionTime"] += t;	}	this.startTime = new Date();}Player.prototype.debugCourse = function(){	var debugF = this.findFrame("debug");	if (debugF && debugF.updateDebugInformations) {		debugF.updateDebugInformations();	}}function stampInSec(dateStart, dateEnd){	if (typeof(dateEnd) == "undefined") dateEnd = new Date();	var d = Math.abs(dateEnd.getTime() - dateStart.getTime());	return d;};player = new Player();