function Cookie(document, name, hours, path, domain, secure) {
	this.$document=document;
	this.$name=name;
	if (hours) {
		this.$expiration=new Date((new Date()).getTime()+hours*3600000);
	} else {
		this.$expiration=null;
	}
	if (path) {
		this.$path=path;
	} else {
		this.$path=null;
	}
	if (domain) {
		this.$domain=domain;
	} else {
		this.$domain=null;
	}
	if (secure) {
		this.$secure=secure;
	} else {
		this.$secure=false;
	}
}

Cookie.prototype.load = function() {
	var allcookies = this.$document.cookie;
	if ( allcookies == "") {
		return false;
	}

	var start = allcookies.indexOf(this.$name +'=');
	if ( start == -1 ) {
		return false;
	}

	start += this.$name.length+1;
	var end = allcookies.indexOf(';',start);
	if ( end == -1 ) {
		end = allcookies.length;
	}

	var cookieval = allcookies.substring(start,end);
	//alert( " cookie being retrieved = " + cookieval );

	var a = cookieval.split('&');
	for ( var i = 0; i<a.length; i++ ) {
		a[i] = a[i].split(':');
	}

	adList= "";

	for ( var j=0; j<a.length; j++ ) {
		this[a[j][0]] = unescape(a[j][1]);
		adList +=unescape(a[j][1])+"|";
	}

	//alert ( " ad list 1 = " + adList );
	return true;
}


Cookie.prototype.store = function() {
	var cookieval = "";
	for (var prop in this) {
		if ((prop.charAt(0)=='$') || ((typeof this[prop]) == 'function')) {
			continue;
		}
		if (cookieval != "") {
			cookieval += '&';
		}
		cookieval += prop + ":" + escape(this[prop]);
	}

	var cookie = this.$name + '=' + cookieval;
	if (this.$expiration) {
		cookie += '; expires=' + this.$expiration.toGMTString();
	}
	if (this.$path) {
		cookie += '; path=' + this.$path;
	}
	if (this.$domain) {
		cookie += '; domain=' + this.$domain;
	}
	if (this.$secure) {
		cookie += '; secure';
	}

	//alert( " cookie being stored = " + cookie );
	this.$document.cookie = cookie;
}


Cookie.prototype.remove = function() {
    var cookie;
    cookie = this.$name + '=';
    if (this.$path)
		cookie += '; path=' + this.$path;
    if (this.$domain)
		cookie += '; domain=' + this.$domain;
    cookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT';

    this.$document.cookie = cookie;
}


/* aux functions */
		function createCookie(name,value,days) {
			if (days) {
				var date = new Date();
				date.setTime(date.getTime()+(days*24*60*60*1000));
				var expires = "; expires="+date.toGMTString();
			}
			else var expires = "";
			document.cookie = name+"="+value+expires+"; path=/";
		}

		function readCookie(name) {
			var nameEQ = name + "=";
			var ca = document.cookie.split(';');
			for(var i=0;i < ca.length;i++) {
				var c = ca[i];
				while (c.charAt(0)==' ') c = c.substring(1,c.length);
				if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
			}
			return '';
		}

		function eraseCookie(name) {
			createCookie(name,"",-1);
		}



/*

above are cookie implementation framework described in oreilly 
beyond this point, the function defined are written by samson

*/



//This function remove elements
function remove_from_list(cookie_name, element){
	var loadedElements = new Cookie(document, cookie_name, 8640, '/');
	if (loadedElements.load() ){
		loaded_list = loadedElements.pid.split(',');

		for ( i=0; i<loaded_list.length; i++){
			if (loaded_list[i] == element){
				loaded_list.splice(i, 1);
			}
		}

		loadedElements.pid=loaded_list.join(",");
		loadedElements.store();
	}

}

//This function always adds to the front
function add_to_list(cookie_name, element, list_length_limit){
	if (list_length_limit == 0)
	{
		list_length_limit = 10;
	}
	var loadedElements = new Cookie(document, cookie_name, 8640, '/');

	if (!loadedElements.load() ){
		// Cannot load, so we initialize it
		var loaded_list = new Array (element);
		loadedElements.pid=loaded_list.join(",");
		loadedElements.store();
	}else{
		// Cookie present, we load and add into cookie

		var loaded_list = loadedElements.pid.split(',');

		for ( i=0; i<loaded_list.length; i++){
			if (loaded_list[i] == element ){
				loaded_list.splice(i, 1);
			}
		}

		//Put in the front of the list
		loaded_list.unshift(element);

		loaded_list.splice(list_length_limit, 99);

		loadedElements.pid=loaded_list.join(",");

		loadedElements.store();
	}

}

function clear_list(cookie_name){
	var loadedElements = new Cookie(document, cookie_name, 8640, '/');
	loadedElements.remove();
}



//Below are auxiluxy functions


function show(cookie_name){
	var loadedElements = new Cookie(document, cookie_name, 8640, '/');
	if (loadedElements.load() ){
		document.getElementById("test_target").innerHTML = loadedElements.pid;
	}else{
		document.getElementById("test_target").innerHTML = 'cannot load';
	}
}

function testclick(cookie_name){
	var loadedElements = new Cookie(document, cookie_name, 8640, '/');

	if (product.load() ){

		document.getElementById("test_target").innerHTML = '';

		var a = product.pid.split(',');

		for ( var i=0; i<a.length; i++){
			document.getElementById("test_target").innerHTML += a[i] + "<br>";
		}

	}

}