function Player()
{

	this.STATUS_NOT_ATTEMPTED = "not attempted";
	this.STATUS_INCOMPLETE = "incomplete";
	this.STATUS_COMPLETED = "completed";
	this.STATUS_PASSED = "passed";
	this.STATUS_FAILED = "failed";

	this.gix = 0;
	this.framesToLoad = 0;
	this.baseurl = location.href.split("?");
	this.naviPathToRoot = this.baseurl[0].substring(0, this.baseurl[0].lastIndexOf('/')) + '/';

	if (this.naviPathToRoot == "") this.naviPathToRoot = location.href.substring(0, location.href.lastIndexOf('\\')) + '/';
}

Player.prototype.loadContent = function(gix)
{
	this.gix = gix;
	var item = struct.findItem(gix);
	if (item) {
		this.loadContentFrameset(this.naviPathToRoot + item["href"]);
		this.setNaviHtml("_page_no_navi", struct.getVisibleItemsIndex(this.gix) 
			+ " / " + struct.getVisibleItemsCount());
	}
}

Player.prototype.nextPage = function(passInvisible) 
{

	if(passInvisible == null || passInvisible == "undefined") {
		passInvisible = false;
	}
	
	var i = this.gix;
	var item = null;
	while (item = struct.getNextItem(i)) {
		if (item["href"] != "" && (!passInvisible && item["visible"] == "1")) {
			this.loadContentFrameset(this.naviPathToRoot + "navi/html/loadcontent.html?gix=" + item["gix"]);
			return;
		}
		i = item["gix"];
	}
}

Player.prototype.previousPage = function(passInvisible)
{
	if(passInvisible == null || passInvisible == "undefined") {
		passInvisible = false;
	}
	
	var i = this.gix;
	var item = null;
	while (item = struct.getPreviousItem(i)) {
		if (item["href"] != "" && (!passInvisible && item["visible"] == "1")) {
			this.loadContentFrameset(this.naviPathToRoot + "navi/html/loadcontent.html?gix=" + item["gix"]);
			return;
		}
		i = item["gix"];
	}
}

Player.prototype.gotoPage = function(g)
{
	var i = g;
	var item = struct.findItem(i);
	if (item) {
		if (item["href"] != "") {
			this.loadContentFrameset(this.naviPathToRoot + "navi/html/loadcontent.html?gix=" + item["gix"]);
			return;
		}
	}
}

Player.prototype.findFrame = function(name, frame)
{
	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) 
{
	var content_frame = this.findFrame("content");
	var tree_frame = this.findFrame("tree");

	if (content_frame && content_frame.location.href != href) {
		content_frame.location.href = href;
		if(tree_frame) {
			tree_frame.selectedNode(this.gix);
		}
	}
}

Player.prototype.findFirstPage = function()
{
	for (var i = 0; i < struct.length(); i++) {
		var item = struct.item(i);
		if (item["href"] != "") return item["gix"];
	}
	return null;
}

Player.prototype.getTotalScore = function()
{
	var maxScore = 0;
	var totalScore = 0;
	for (var i = 0; i < struct.length(); i++) {
		var item = struct.item(i);
		var pageMS = parseInt(item["ms"]);
		if (!isNaN(pageMS)) {
			maxScore += 100;
			var pageScore = parseInt(item["score"]);
			if (!isNaN(pageScore)) {
				totalScore += pageScore;
			}
		}
	}
	var res = Math.ceil(((100 / maxScore) * totalScore));
	return res;
}

Player.prototype.getLessonStatus = function()
{
	for (var i = 0; i < struct.length(); i++) {
		if (struct.item(i)["visible"] == "1") 
			if (struct.item(i)["status"] == "I" || struct.item(i)["status"] == "N") return this.STATUS_INCOMPLETE;
	}
	return this.STATUS_COMPLETED;
}

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()
{
	var f = findFrame("content");
	if (f && f.pageDestroy) {
		f.pageDestroy();
	}
}

player = new Player();
