function $(element) {
	return document.getElementById(element);
}

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 null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

String.prototype.trim = function() {
a = this.replace(/^\s+/, '');
return a.replace(/\s+$/, '');
};

function Item()
{
	this.sku;
	this.qty;
	this.uom;
	this.price;
	this.prodname;
	
	this.setSku = function(sku)
	{
		this.sku = sku;	
	}
	
	this.setQty = function(qty)
	{
		this.qty = qty;	
	}
	
	this.setUom = function(uom)
	{
		this.uom = uom;	
	}
	
	this.setPrice = function(price)
	{
		this.price = price;	
	}

	this.setProdname = function(prodname)
	{
		this.prodname = prodname;	
	}
	
}	

function ShoppingCart(options)
{	
	this.items = new Array();
	this.options = options;
	
	this.addItem = function(sku, qty, uom, price, prodname, loading)
	{
		if (isNaN(qty) || qty.toString().trim()=="") { return; }
		if (loading!="load") { this.items = new Array(); this.loadItems(); } //if invoked by clicking the "add item" button		
		var newItem = new Item();
		newItem.setSku(sku);
		newItem.setQty(qty);
		newItem.setUom(uom);
		newItem.setPrice(price);
		newItem.setProdname("");
		var foundItem = this.findItem(newItem)
		
		if (!foundItem) {
			this.items.push(newItem);
		} else {
			this.updateItem(foundItem, qty);
		}
		
		this.save();
	}
	
	this.save = function()
	{
		var cookieString = '';
		
		for (var i=0; i < this.items.length; i++) {
			cookieString += this.items[i].sku + this.options.delimiters[0];
			cookieString += this.items[i].qty + this.options.delimiters[0];
			cookieString += this.items[i].uom + this.options.delimiters[0];
			cookieString += this.items[i].price + this.options.delimiters[0];
			cookieString += this.items[i].prodname;
			if(i != this.items.length - 1) 
				cookieString += this.options.delimiters[1];
		}
		
		createCookie(this.options.cookie, cookieString, this.options.days);
		
	}
	
	this.loadItems = function()
	{
		var cookie = readCookie(this.options.cookie);
		
		if (cookie) {
			var items = cookie.split(this.options.delimiters[1]);
		
			for (var i=0; i < items.length; i++) {
				var splitItem = items[i].split(this.options.delimiters[0]);
				this.addItem(splitItem[0], splitItem[1], splitItem[2], splitItem[3], splitItem[4], "load");
			}	
		}
	}
	
	this.findItem = function(item)
	{
		for (var i=0; i < this.items.length; i++) {
			if (this.items[i].sku == item.sku && this.items[i].uom == item.uom) {
				return this.items[i];
			}
		}
		
		return false;
	}
	
	this.updateItem = function(item, qty)
	{

		item.qty = parseInt(qty) + parseInt(item.qty);
		
    }
	
	this.destroy = function()
	{
		eraseCookie(this.options.cookie);	
	}
}


var options = {
	cookie : 'shoppingCartCookie',
	days : 30,
	delimiters : ['^', '**']
};
var cart = new ShoppingCart(options);
cart.loadItems(); 