/****
	This is called addDiamondToCart, however it also takes care of
	adding other products to cart and removing products from the cart.
****/


var gbl_addToCartXHR = false;
var gbl_addToCart_linkContainer = false;	// Link that caused addToCart to be triggered. Will be updated with loading image.

var gbl_addToCart = new Object();
gbl_addToCart.loadingDiv = false;

var addToCart = new Object();

function addDiamondToCart(oLink)
{
	var diamondID = unescape(oLink.getAttribute('rel'));
	var oLinkContainer = (arguments.length > 1) ? arguments[1] : false;
	var entityName = (arguments.length > 2) ? arguments[2] : false;
	
	var url = gbl_appConfig["rootURL"] + 'xhr/cart/addItem/?pe='+entityName+'&sid=' + Math.random() + '&rid=' + escape(diamondID);

	addToCart.init();
	
	addToCart.action = 'add';
	addToCart.product.ID = diamondID;
	addToCart.product.entity = entityName;
	
	if (oLinkContainer)
	{
		gbl_addToCart_linkContainer = oLinkContainer;
	};
	
	gbl_addToCartXHR.open("GET", url);
	gbl_addToCartXHR.onreadystatechange = addToCart.XHRStateChange;
	gbl_addToCartXHR.send(null);	
};

function removeDiamondFromCart(oLink)
{
	var diamondID = unescape(oLink.getAttribute('rel'));
	var oLinkContainer = (arguments.length > 1) ? arguments[1] : false;
	var entityName = (arguments.length > 2) ? arguments[2] : false;
	
	var url = gbl_appConfig["rootURL"] + 'xhr/cart/removeItem/?pe='+entityName+'&sid=' + Math.random() + '&rid=' + escape(diamondID);

	addToCart.init();
	
	addToCart.action = 'remove';
	addToCart.product.ID = diamondID;
	addToCart.product.entity = entityName;
	
	if (oLinkContainer)
	{
		gbl_addToCart_linkContainer = oLinkContainer;
	};
	
	gbl_addToCartXHR.open("GET", url);
	gbl_addToCartXHR.onreadystatechange = addToCart.XHRStateChange;
	gbl_addToCartXHR.send(null);	
};

addToCart.init = function()
{
	if (gbl_addToCartXHR)
	{
		// the XHR object is already initialized. Just exit.
		return;
	};
	
	addToCart.XHRLoadingIcon = new Image();
	addToCart.XHRLoadingIcon.src = gbl_appConfig.imageURL + 'xhr_loading.gif';
	
	addToCart.product = new Object();
	addToCart.product.ID = '';
	addToCart.product.entity = '';
	
	/*
		Create new XHR Object
	*/
	if (window.XMLHttpRequest) {
		gbl_addToCartXHR = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) {
		gbl_addToCartXHR = new ActiveXObject("Msxml2.XMLHTTP");
	};
};


addToCart.XHRStateChange = function()
{
	var xhr = gbl_addToCartXHR;
	var container = gbl_addToCart_linkContainer;
	/*
		Show Loading Icon
	*/
	/*
		Replace Loading Icon with 'already added to cart' icon.
	*/
	switch (xhr.readyState)
	{
		case 1:
			clearNode(container);
		break;
		case 2:
			clearNode(container);
			if (container)
			{
				container.appendChild(addToCart.createLoadingDiv());
			};
		break;
		case 4:
			// Request Failed
			if (xhr.status != 200)
			{			
				var doDebug = confirm('Error adding item to cart. Please Refresh Page and / or Try Again Later.');
				if (doDebug)
				{
					var debugWin = window.open('');
					debugWin.document.open();
					debugWin.document.write(xhr.responseText);
					debugWin.document.close();
				};
				return;
			};
			
			if (container)
			{
				clearNode(container);
				
				/*
				if (addToCart.action == 'remove')
				{
					container.appendChild(addToCart.createRemovedFromCartDiv());
				}
				else
				{
					container.appendChild(addToCart.createAddedToCartDiv());
				};
				*/
				
				if (addToCart.action == 'remove')
				{
					numProducts--;
				}
				else
				{
					numProducts++;
				}
				
				//show the shopping cart bar.
				var shoppingCartBar = document.getElementById('shoppingCartToolBar');
				var numProductsSpan = document.getElementById('numProducts');
				
				shoppingCartBar.style.display = "Block";
				
				numProductsSpan.innerHTML = numProducts;
				
			}
			else
			{
				alert('no container');
			};
		break;
	};
	
};


addToCart.createLoadingDiv = function()
{
	var loadingDiv = document.createElement('DIV');
	var img = document.createElement('IMG');
	img.src = addToCart.XHRLoadingIcon.src;

	loadingDiv.className = 'loading';	
	
	loadingDiv.appendChild(img);

	return loadingDiv;
};
addToCart.removeLoadingDiv = function(oParent)
{
	var node;
	for (var i = 0; i < oParent.childNodes.length; i++)
	{
		node = oParent.childNodes[i];
		if (node.className && node.className.indexOf('loading') != -1)
		{
			oParent.removeChild(node);
		};
	};
};

addToCart.createAddedToCartDiv = function()
{
	// Div that is shown once an item has been added to the cart.
	var node = document.createElement('DIV');

	node.className = 'addedToCart';	
	
	var oLink = document.createElement('A');
	oLink.href = '#';
	oLink.onclick = function() { removeDiamondFromCart(this, this.parentNode); return false; };
	oLink.rel = escape(addToCart.product.ID);	
	
	oLink.appendChild(document.createTextNode('Remove From Cart'));
	
	node.appendChild(oLink);

	return node;
};

addToCart.createRemovedFromCartDiv = function()
{
	// Div that is shown once an item has been added to the cart.
	var node = document.createElement('DIV');

	node.className = 'removedFromCart';	
	
	var oLink = document.createElement('A');
	oLink.href = '#';
	oLink.onclick = function() { addDiamondToCart(this, this.parentNode); return false; };
	oLink.rel = escape(addToCart.product.ID);	
	
	oLink.appendChild(document.createTextNode('Add To Cart'));
	
	node.appendChild(oLink);

	return node;
};

function clearNode(oNode)
{
	oNode.innerHTML = '';
	while (oNode.hasChildNodes())
	{
		oNode.removeChild(oNode.firstChild);
	};	
};
