Date.prototype.addHours = function( n )

{

	this.setHours( this.getHours() + n );

}



function Cart(prefix)

{

	var self = this;

	var getCookie = function(name)

	{

		var result = '';

		var cookies = document.cookie;

		if (cookies.length>0)

		{

			var c_start = cookies.indexOf(name + "=");

			if (c_start != -1)

			{

				c_start = c_start + name.length+1;

				var c_end = cookies.indexOf(";",c_start);

				if (c_end==-1) c_end = cookies.length;

				result = unescape(cookies.substring(c_start,c_end));

			}

		}

		return result;

	}

	var getItems = function()

	{

		var result = { length : 0 };

		var c = getCookie(prefix + 'Cart');

		if (c != '')

		{

			var icl = c.split('|');

			for (var i = 0, l = icl.length; i < l; ++i)

			{

				var ic = icl[i].split(':');

				result[parseInt(ic[0])] = { 'count' : parseInt(ic[1]), 'price' : parseInt(ic[2]) };

				++result.length;

			}

		}

		return result; 

	}

	var saveItems = function(items)

	{

		var icl = new Array();

		for (var i in items) if (i == parseInt(i) && items[i].count > 0) icl.push(i + ':' + items[i].count + ':' + items[i].price);

		var date = new Date();

		date.addHours(12);

		document.cookie = prefix + 'Cart=' + icl.join( '|' ) + '; expires=' + date.toUTCString() + '; path=/';

	}	

	

	this.getAll = function() { return getItems(); }


	var zero = { 'count' : 0 }

	var zeroIfNull = function(val) { return val ? val : zero; }

	

	this.add = function(id, count)

	{

		var items = getItems();
		if (items[id]) items[id].count += count;
		else items[id] = { 'count' : count, 'price' : 0 };
		saveItems(items);

	}

	this.addWithPrice = function(id, count, price)
	{
		var items = getItems();
		if (items[id]) { items[id].count += count; items[id].price = price; }
		else items[id] = { 'count' : count, 'price' : price };
		saveItems(items);

	}

	

	this.sub = function(id, count)

	{

		var items = getItems();

		if (0 > (items[id].count = zeroIfNull(items[id]).count - count)) items[id].count = 0;

		saveItems(items);

	}

	this.clear_item = function(id)

	{

		var items = getItems();

		items[id].count = 0;

		saveItems(items);

	}	

	this.clear = function()

	{

		saveItems({});

	}

}
