
String.prototype.trim = function () {
	return this.replace(/(^\s*)|(\s*$)/g, "");
};
function cookieBuilder(name, maxItemNum, domain, expires, path, secure) {
	var itemSplit = "\n";
	var str = getCookie(name) || "";
	var list = (str == "") ? (new Array()) : str.split(itemSplit);
	var ex = new Date();
	if (typeof expires == "undefined" || isNaN(expires)) {
		var expires = 60;
	}
	ex.setTime(ex.getTime() + 60 * 60 * 1000 * 24 * expires);
	expires = ex;
	this.add = function (k) {
		var a = new Array();
		a.push(k);
		for (var i = 0; i < list.length && i < maxItemNum - 1; i++) {
			if (k == list[i]) {
				changeOrder(list, i);
				setCookie(list.join(itemSplit));
				return;
			}
			a.push(list[i]);
		}
		list = a;
		setCookie(list.join(itemSplit));
	};
	this.getList = function () {
		return list;
	};
	function setCookie(value) {
		var s = name + "=" + escape(value) + "; expires=" + expires.toUTCString() + ((path) ? "; path=" + path : "; path=/") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
		document.cookie = s;
	}
	function getCookie(name) {
		var dc = document.cookie.split(";");
		for (var i = 0; i < dc.length; i++) {
			var a = dc[i].split("=");
			if (name == a[0].trim()) {
				return unescape(a[1]);
			}
		}
		return "";
	}
	this.deleteCookie = function () {
		if (getCookie(name)) {
			document.cookie = name + "=" + ((path) ? "; path=" + path : "; path=/") + ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT";
		}
		list = new Array();
	};
}
function ViewedBuilder(name, maxShowNum, cacheNum, domain, _url, callback, expires) {
	if (maxShowNum < 0) {
		maxShowNum = 0;
	}
	if (cacheNum < maxShowNum) {
		cacheNum = maxShowNum;
	}
	var cb = new cookieBuilder(name, maxShowNum, domain, expires);
	var list = null;
	if (cb.getList().length > 0) {
		if ("" == _url && typeof callback == "function") {
			callback(cb.getList());
		} else {
			new Ajax.Request(_url, {parameters:"type=" + escape(name) + "&id=" + cb.getList().toString(), method:"get", onSuccess:function (transport) {
				if (transport.responseText.trim() == "") {
					cb.deleteCookie();
					return;
				}
				list = eval(transport.responseText.trim());
				if (typeof callback == "function") {
					callback(list);
				}
			}, onFailure:function (t) {
				/*alert(t.status);*/
			}});
		}
	}
	if (list == null) {
		list = new Array();
	}
	this.addItem = function (item) {
		if (item == null) {
			return;
		}
		cb.add(item);
		for (var i = 0; i < list.length; i++) {
			if (typeof list[i] == "undefined" || list[i] == null) {
				break;
			}
			if (list[i].id == item) {
				if (i > 0) {
					changeOrder(list, i);
					if (typeof callback == "function") {
						callback(list);
					}
				}
				return;
			}
		}
		if ("" == _url && typeof callback == "function") {
			callback(cb.getList());
		} else {
			new Ajax.Request(_url, {parameters:"type=" + escape(name) + "&id=" + item, method:"get", onSuccess:function (transport) {
				if (transport.responseText.trim() == "") {
					return;
				}
				var k = eval(transport.responseText.trim());
				if ("null" == k[0]) {
					return;
				}
				var a = new Array();
				a.push(k[0]);
				for (var i = 0; i < list.length && i < cacheNum - 1; i++) {
					a.push(list[i]);
				}
				list = a;
				if (typeof callback == "function") {
					callback(list);
				}
			}, onFailure:function (t) {
			}});
		}
	};
	this.getList = function () {
		if ("" == _url) {
			return cb.getList();
		}
		return list;
	};
	this.deleteCookie = function () {
		cb.deleteCookie();
		list = new Array();
	};
}
function changeOrder(a, k) {
	if (typeof a == "undefined" || a.constructor != window.Array) {
		return;
	}
	for (var i = 0, b = a[k]; i <= k && i < a.length; i++) {
		var c = a[i];
		a[i] = b;
		b = c;
	}
}

