function getUserList() {
	//alert("getUserList");
	var allUsers = getCookie("allUsers");

	if (allUsers != null) {
		return allUsers.split(",");
	}

	return [];
}

// Object for storing user data
function UserData() {
	this.scores = [-1, -1, -1];

	this.toString = function() {
		var str = "";
		for (i = 0; i < this.scores.length; i++) {
			str += "_" + this.scores[i];
		}

		return str;
	}

	this.fromString = function(str) {
		var offset = str.indexOf("_");
		this.scores = [];
		do {
			offset++;
			var end = str.indexOf("_", offset);
			if (end == -1)
				end = str.length;

			this.scores.push(str.substring(offset, end));
			offset = end;
		} while (end < str.length);
	}
}

function getUserDataString(name) {
    var allData = getCookie("allUserData");
    if (allData == null)
    	return null;

	var offset = allData.indexOf(name + ";");
	if (offset == -1) {
		return null;
	}

	offset += name.length + 1;

	var end = allData.indexOf(";", offset);

	if (end == -1) {
		end = allData.length;
	}

	return allData.substring(offset, end);
}

function loadUserDataObject(name) {
	var dataStr = getUserDataString(name);
	if (dataStr == null) {
		return null;
	}

	var obj = new UserData();
	obj.fromString(dataStr);

	if (obj.toString() != dataStr) {
//		alert("Internal error! Should be: '" + dataStr + "', found: '" + obj.toString() + "'");
	}

    return obj;
}

function setUserDataString(name, data) {
	var allData = getCookie("allUserData");
	var userData = getUserDataString(name);

	if (userData != null) {
		userData = name + ";" + userData;
		var offset = allData.indexOf(userData);
		allData = allData.substring(0, offset) + name + ";" + data + allData.substr(offset + userData.length);
	} else {
		if (allData == null) {
			allData = "";
		} else {
			allData += ";";
		}

        allData += name + ";" + data;
	}

	setCookie("allUserData", allData);

	if (getUserDataString(name) != data) {
//		alert("Internal error! Should be: '" + data + "', found: '" + getUserDataString(name) + "'");
	}
}

function saveUserDataObject(name, obj) {
	var str = obj.toString();
	setUserDataString(name, str);
}

function registerNewUser(name) {

	var allUsers = getCookie("allUsers");
	var newAllUsers;

	if (allUsers == null || allUsers == "") {
		newAllUsers = name;
	} else {
		newAllUsers = allUsers + "," + name;
	}

	setCookie("allUsers", newAllUsers);

	var obj = new UserData();
	saveUserDataObject(name, obj);
}

// Generates something that gets outdated
function generateCheckString(name) {  
/*
	setCookie("test_disabled", "test_disabled");
	if (getCookie("test_disabled") != "test_disabled")
		return 0;
*/

	//alert("generateCheckString");
	var check = Math.ceil(Math.random() * 100);
	var cookieName = check;//hex_md5(name + check);
	var cookieValue = check;//hex_md5("" + check + name);
	var opened = getCookie("opened_sessions");
	if (opened == null)
		setCookie("opened_sessions", cookieName+","+cookieValue+",0");	   
	else
		setCookie("opened_sessions", opened+";"+cookieName+","+cookieValue+",0");	   
	return check;
}

// Checks for correctness
function testCheckString(name, check) {
/*
	setCookie("test_disabled", "test_disabled");
	if (getCookie("test_disabled") != "test_disabled")
		return true;
*/


	//alert(document.location);
	//alert("testCheckString");
	if (name == null || check == null)
		return false;
	var opened = getCookie("opened_sessions");
	if (opened == null)
		return false;
	var res = false;
	var cookieName = check;//hex_md5(name + check);
	var correctCookieValue = check;//hex_md5("" + check + name);
	//alert("searching for:"+cookieName);
	var openedArr = opened.split(";");
	var filtered = "";
	for (i=0;i<openedArr.length;i++) {
		var curArr = openedArr[i].split(",");
		if ((curArr.length ==3 )&&(curArr[2] <=20)) {
			var stamp = parseInt(curArr[2]);
			stamp++;
			if (curArr[0] == cookieName) {
				if (curArr[1] == correctCookieValue) {
					//alert("found");
					res = true;
				}
			}
			else {
				if (filtered.length != 0)
					filtered += ";";
				filtered += curArr[0]+","+curArr[1]+","+stamp;
			}
		}
	
	}
	setCookie("opened_sessions", filtered);
	//alert(opened+"\r\n"+filtered);
	return res;

}
