﻿var Bookmarks = function()
{
	var obj_list = null;
	var obj_btn = null;

	var heading = "<h3>Bokmärken</h3>";
	var lnk_add_text = "Lägg till sida som bokmärke";
	var lnk_remove_text = "Ta bort";
	var strip_title = "";
	var max_bookmarks = 0;
	var on_add_text = "";
	var on_remove_text = "";
	var on_full_text = "";
	var on_exists_text = "";
	var show_only_last_part = false;
	var lnk_divider = "/";
	var cookie_path = "/";

	return {
		add: function(url, title)
		{
			var u = url || location.href;
			var t = title || document.title.replace(strip_title, "");
			var bkmrks = this.get();
			if (max_bookmarks > 0 && bkmrks.length >= max_bookmarks)
			{
				if (on_full_text.length > 0)
					alert(on_full_text);

				return false;
			}
			for (var i = 0; i < bkmrks.length; i++)
			{
				if (bkmrks[i][0] == u)
				{
					if (on_exists_text.length > 0)
						alert(on_exists_text);

					return false;
				}
			}
			bkmrks[bkmrks.length] = [u, t];
			if (on_add_text.length > 0)
				alert(on_add_text);
			return this.save(bkmrks);
		},

		remove: function(url)
		{
			var bkmrks = this.get();
			for (var i = 0; i < bkmrks.length; i++)
			{
				if (bkmrks[i][0] == url)
				{
					bkmrks.splice(i, 1);
					break;
				}
			}
			if (on_remove_text.length > 0)
				alert(on_remove_text);
			return this.save(bkmrks);
		},

		get: function()
		{
			var res = [];
			if (document.cookie.length > 0)
			{
				var begin = document.cookie.indexOf("art_bookmarks=");
				if (begin != -1)
				{
					begin += "art_bookmarks=".length;
					end = document.cookie.indexOf(";", begin);
					if (end == -1)
						end = document.cookie.length;
					var cs = String(unescape(document.cookie.substring(begin, end)));
					var csArr = cs.split("¤ARTBKMRPGS¤");
					for (var i = 0; i < csArr.length; i++)
					{
						var vp = csArr[i].split("¤ARTBKMR¤");
						if (vp.length == 2)
							res[res.length] = [vp[0], vp[1]];
					}
				}
			}
			return res;
		},

		init: function(objBookmarks, objBtnBookmarks)
		{
			obj_list = document.getElementById(objBookmarks);
			obj_btn = document.getElementById(objBtnBookmarks);
			if (obj_btn)
				obj_btn.innerHTML = "<a href=\"#\" onclick=\"Bookmarks.add(); return false;\">" + lnk_add_text + "</a>";

			this.load();
		},

		load: function(bookmarkList)
		{
			if (!obj_list)
				return false;

			var c = heading;

			var bkmrks = bookmarkList || this.get();
			if (bkmrks.length > 0)
			{
				c += "<ul>\n";

				for (var i = 0; i < bkmrks.length; i++)
				{
					c += "<li><a href=\"" + bkmrks[i][0] + "\" title=\"" + bkmrks[i][1] + "\">" + this.getDisplayText(bkmrks[i][1]) + "</a> <span><a href=\"#\" onclick=\"Bookmarks.remove('" + bkmrks[i][0] + "'); return false;\">" + lnk_remove_text + "</a></span></li>\n";
				}

				c += "</ul>\n";
			}

			obj_list.innerHTML = c;

			return true;
		},

		save: function(bookmarkList)
		{
			document.cookie = "art_bookmarks=; expires=Fri, 27 Jul 2001 02:47:11 UTC; path=" + cookie_path + ";";
			var bookmarkArr = [];
			for (var i = 0; i < bookmarkList.length && (i < max_bookmarks || max_bookmarks == 0); i++)
			{
				bookmarkArr[bookmarkArr.length] = bookmarkList[i].join("¤ARTBKMR¤");
			}
			var expireDate = new Date();
			expireDate.setFullYear(expireDate.getFullYear() + 5);
			document.cookie = "art_bookmarks=" + escape(bookmarkArr.join("¤ARTBKMRPGS¤")) + "; expires=" + expireDate.toGMTString() + "; path=" + cookie_path + ";";
			return this.load(bookmarkList);
		},

		getDisplayText: function(str)
		{
			if (!show_only_last_part)
				return str;

			var a = str.split(lnk_divider);
			if (a.length > 0)
				return a[a.length - 1];

			return "-";
		},

		setHeading: function(h) { heading = h; },
		setAddText: function(text) { lnk_add_text = text; },
		setRemoveText: function(text) { lnk_remove_text = text; },
		setStripFromTitle: function(text) { strip_title = text; },
		setMaxBookmarks: function(nItems) { max_bookmarks = nItems; },
		setOnAddText: function(text) { on_add_text = text; },
		setOnRemoveText: function(text) { on_remove_text = text; },
		setOnFullText: function(text) { on_full_text = text; },
		setOnExistsText: function(text) { on_exists_text = text; },
		showOnlyLastPart: function(p, divider) { show_only_last_part = p; if (divider) lnk_divider = divider; },
		setCookiePath: function(path) { cookie_path = path; }
	};
}();