function notebook() {
	
	var cookieName = "notebook";
	var maxMemoLength = 500;
	var objMemos;
	var objMemoKeys;
	var expireDate;
	
	
	this.loadMemos = function() {
		var objCookieValue = document.cookie.split("; ");
		var tmpNotebook = "";
		var oMemos;
		
		for (var i = 0;i<objCookieValue.length;i++) {
			if (objCookieValue[i] != "") {
				if (cookieName == objCookieValue[i].split("=")[0]) {
					tmpNotebook = objCookieValue[i].split("=")[1];
					break;
				}
			}	
		}
		
		objMemos = new Array();
		objMemoKeys = new Array();
		
		if ((String(tmpNotebook) != "") && (String(tmpNotebook) != "undefined")) {
			oMemos = tmpNotebook.split("|");
			for (var i=0;i<oMemos.length;i++) {
				if (String(oMemos[i]) != "") {
					objMemoKeys[objMemoKeys.length] = oMemos[i].split(":")[0];
					objMemos[oMemos[i].split(":")[0]] = oMemos[i].split(":")[1];
				}
			}
		}
		
		expireDate = new Date();
		expireDate.setDate(expireDate.getDate()+1);
	}
	
	this.addMemo = function(memoName) {
		var keyExists = false;
		for (var i=0;i<objMemoKeys.length;i++) {
			if (objMemoKeys[i] == memoName) {
				keyExists = true;
				break;	
			}
		}
		if (keyExists == false) {
			objMemoKeys[objMemoKeys.length] = memoName;
			objMemos[memoName] = '';
		}
	}
	
	this.deleteMemo = function(memoName) {
		for (var i = 0; i<objMemoKeys.length;i++) {
			if (objMemoKeys[i] == memoName) {
				objMemoKeys[i] = null;
				break;	
			}	
		}
		objMemos[memoName] = null;
		this.storeNotebook();
	}
	
	this.addNote = function(memoName, noteValue) {
		var tmpNotes = this.getNotes(memoName);
		if ((String(noteValue) != "") && ((tmpNotes.length + noteValue.length + 1) < maxMemoLength)) {
			if (String(tmpNotes) != "") {
				if (("," + tmpNotes + ",").indexOf("," + noteValue + ",", 0) == -1) {
					if (tmpNotes != "") tmpNotes += ",";
					tmpNotes += noteValue;
				}
			}
			else {
				tmpNotes = noteValue;
			}
			
			this.addMemo(memoName);
			objMemos[memoName] = tmpNotes;
			this.storeNotebook();
		}
	}
	
	this.deleteNote = function(memoName, noteValue) {
		var tmpNotes = this.getNotes(memoName);
		if (String(noteValue) != "") {
			if (String(tmpNotes) != "") {
				if (("," + tmpNotes + ",").indexOf("," + noteValue + ",", 0) != -1) {
					var pos1 = ("," + tmpNotes + ",").indexOf("," + noteValue + ",", 0) - 1;
					var pos2 = pos1 + noteValue.length + 1
					tmpNotes = tmpNotes.substring(0, pos1) + tmpNotes.substring(pos2, tmpNotes.length)
					if (tmpNotes.charAt(0) == ',') tmpNotes = tmpNotes.substring(1, tmpNotes.length);
					if (tmpNotes == "") 
						this.deleteMemo(memoName);
					else {
						objMemos[memoName] = tmpNotes;
						this.storeNotebook();
					}
				}
			}
		}
	}
	
	this.getNotes = function(memoName) {
		var tmpValue;
		if (objMemos != null) { 
			tmpValue = objMemos[memoName];
			if ((String(tmpValue) != "undefined") && (String(tmpValue) != "null"))
				return tmpValue;
			else
				return "";
		}
		else
			return "";
	}
	
	this.storeNotebook = function() {
		var cookieValue = "";
		for (var i=0;i<objMemoKeys.length;i++) {
			if (objMemoKeys[i] != null) {
				if (cookieValue != "") cookieValue += "|";
				cookieValue += objMemoKeys[i] + ":" + objMemos[objMemoKeys[i]];
			}
		}
		document.cookie = cookieName + "=" + cookieValue + "; path=/;";
	}
	
	
	this.displayMemoLink = function(elementId, memoName, text, link) {
	
		var oElement = document.getElementById(elementId);
		var oNode, oBoldNode;
		var nodeText = text.replace(/\[COUNTER\]/, this.getNotes(memoName).split(",").length);
		var blnCounterIsBold = true;
		
		if (link != "") {
			oNode = document.createElement("a");
			oNode.setAttribute("href", link);
		}
		else {
			oNode = document.createElement("span");
		}
		
		if (blnCounterIsBold) {
			oNode.appendChild(document.createTextNode(text.split("[COUNTER]")[0]));
			oBoldNode = document.createElement("b");
			oBoldNode.appendChild(document.createTextNode(this.getNotes(memoName).split(",").length));
			oNode.appendChild(oBoldNode);
			oNode.appendChild(document.createTextNode(text.split("[COUNTER]")[1]));
		}
		else {
			oNode.appendChild(document.createTextNode(nodeText));
		}
		
		
		if (oElement.hasChildNodes())
			oElement.replaceChild(oNode, oElement.firstChild);
		else
			oElement.appendChild(oNode);
		
	}

}


// standard functions and variables for the notebook
var notebook_oNotebook = new notebook();
notebook_oNotebook.loadMemos();
	
function addNote(noteValue) {
	var doReload = false;
	
	if (notebook_oNotebook.getNotes(notebook_memoName) == "") doReload = true;
	notebook_oNotebook.addNote(notebook_memoName, noteValue);
	
	if (doReload) window.location.reload();
	else updateNoteMessage(false);
}

function deleteNote(noteValue, doReload) {
	notebook_oNotebook.deleteNote(notebook_memoName, noteValue);
	if (doReload) window.location.reload();
	else updateNoteMessage(!doReload);
}

function updateNoteMessage(reloadMemos) {
	if (reloadMemos) notebook_oNotebook.loadMemos();
	if (notebook_oNotebook.getNotes(notebook_memoName) == "") window.location.reload();
	else notebook_oNotebook.displayMemoLink(notebook_memoElementId, notebook_memoName, notebook_memoText, notebook_memoLink);
}
