function addItemToTrolley(pageURL, id, parentNodeID, aggregate, callback)
{
	var data = "";
	var args = new Array();
	var url = getBaseURL() + pageURL + "/add-item-to-shopping-trolley/?ajax=true";

	if(aggregate)
	{
		url += "&aggregate=" + aggregate;
	}

	var parentNode = document.getElementById(parentNodeID);

	if(parentNode && (parentNode.nodeName == "FORM")) {

		for(i = 0; i < parentNode.childNodes.length; i++)
		{
			if(parentNode.childNodes[i].nodeName == "FIELDSET")
			{
				for(j = i; j < parentNode.childNodes[i].childNodes.length; j++)
				{
					var element = parentNode.childNodes[i].childNodes[j];

					if((element.nodeName == "SELECT") || ((element.nodeName == "INPUT") && (element.type == "TEXT")))
					{
						var name = element.id.replace(/_(.)*$/g, "");

						args[name] = element.value;
					}
					for(k = 0; k < parentNode.childNodes[i].childNodes[j].childNodes.length; k++)
					{
						var element = parentNode.childNodes[i].childNodes[j].childNodes[k];

						if(element)
						{
							if((element.nodeName == "SELECT") || ((element.nodeName == "INPUT") && (element.type == "TEXT")))
							{
								var name = element.id.replace(/_(.)*$/g, "");
								args[name] = element.value;
							}
						}
					}
				}
			}
		}
	}
	else 
	{
		var quantity = document.getElementById("quantity_" + id);
		if(quantity) 
		{
			args['quantity'] = quantity.value;
		} 
		else
		{
			args['quantity'] = 1;
		}
	}

	if(!args['quantity'])
	{
		args['quantity'] = 1;
	}


	var count = 0;
	for(var key in args)
	{
		if(count++ > 0)
		{
			data += "&";
		}
		data += key + "=" + args[key];
	}

	args = Array();
	args['parentNode'] = parentNodeID;
	args['pageURL'] = pageURL;

	var ajax = new AJAJ(addItemToTrolleyCallback, args);
	ajax.setMethod("POST");
	ajax.setPayload(data);
	ajax.request(url);
}


function addItemToTrolleyCallback(args)
{
	var responseTarget = document.getElementById("trolleyResponse_" + args['id']);
	
	if(!responseTarget) {
		responseTarget = document.createElement("SPAN");
		responseTarget.id = "trolleyResponse_" + args['id'];
		var parent = document.getElementById(args['parentNode']);
		if(parent)
		{
			parent.appendChild(responseTarget);
		}
	}
	var response = JSON.parse(args['response'])
	responseTarget.innerHTML = response['message'];
	if(response['success'] == true) {
		responseTarget.className="trolleyMessageSuccess";
	} else {
		responseTarget.className="trolleyMessageFailure";
	}
}


function removeItemFromTrolley(pageURL, hash, prefix)
{
	var confirmDelete = confirm("Are you sure that you wish to remove this item?");
	if(confirmDelete)
	{
		var args = new Array();
		args['pageURL'] = pageURL;
		args['hash'] = hash;
		args['prefix'] = prefix;
	
		var url = getBaseURL() + pageURL + 
				"remove-item-from-trolley/" + hash + "/?ajax=true";
		var ajax = new AJAJ(removeItemFromTrolleyCallback, args);
		ajax.request(url);
	}
}


function removeItemFromTrolleyCallback(args)
{
	var response = JSON.parse(args['response']);

	if(response)
	{
		if(response['success'])
		{
			var element = document.getElementById("trolley_" + args['hash']);
			if(element && element.parentNode)
			{
				element.parentNode.removeChild(element);
			}
		}
	}
	updateTrolleyTotals(args['pageURL'], args['prefix']);
}


function updateItemInTrolley(pageURL, hash, prefix)
{
	var args = new Array();
	args['pageURL'] = pageURL;
	args['hash'] = hash;
	args['prefix'] = prefix;

	var quantity = document.getElementById(prefix + "_quantity_" + hash).value;

	var url = getBaseURL() + pageURL + 
			"update-item-in-trolley/" + hash + "/?ajax=true";
	var ajax = new AJAJ(updateItemInTrolleyCallback, args);
	ajax.setMethod("POST");
	ajax.setPayload("quantity=" + quantity);
	ajax.request(url);
}


function updateItemInTrolleyCallback(args)
{
	var response = JSON.parse(args['response']);

	var unitPriceHolder = document.getElementById(args['prefix'] + "_" + args['hash'] + "_unitPrice");
	if(unitPriceHolder)
	{
		unitPriceHolder.innerHTML = response['unitPriceFormatted'] + " (" + response['unitTaxFormatted'] + " tax included)";
	}

	var itemPriceHolder = document.getElementById(args['prefix'] + "_" + args['hash'] + "_itemPrice");
	if(itemPriceHolder)
	{
		itemPriceHolder.innerHTML = response['itemPriceFormatted'] + " (" + response['itemTaxFormatted'] + " tax included)";
	}

	updateTrolleyTotals(args['pageURL'], args['prefix'], args['hash']);
}


function updateTrolleyTotals(pageURL, prefix, hash)
{
	var url = getBaseURL() + pageURL + "get-trolley-totals/";

	var args = new Array();
	args['prefix'] = prefix;
	args['hash'] = hash;
	var ajax = new AJAJ(updateTrolleyTotalsCallback, args);
	ajax.request(url);
}


function updateTrolleyTotalsCallback(args)
{
	var response = JSON.parse(args['response']);

	if(document.getElementById(args['prefix'] + "_subTotal"))
	{
		document.getElementById(args['prefix'] + "_subTotal").innerHTML = response['subTotal'];
	}
	if(document.getElementById(args['prefix'] + "_tax"))
	{
		document.getElementById(args['prefix'] + "_tax").innerHTML = response['tax'];
	}
	if(document.getElementById(args['prefix'] + "_total"))
	{
		document.getElementById(args['prefix'] + "_total").innerHTML = response['total'];
	}
}


function updateTrolleySummary(url)
{
	asyncRequest(url, updateTrolleySummaryCallback);
}


function updateTrolleySummaryCallback(callbackArgs)
{
	var trolleySummary = JSON.parse(callbackArgs["response"]);
	for(var key in trolleySummary)
	{
		var element = document.getElementById("trolleySummary_" + key);
		if(element)
		{
			element.innerHTML = trolleySummary[key]; 
		}
	}
}


function validatePromotion(url, codeID, resultID)
{
	var promotionalCode = document.getElementById(codeID);
	if(!promotionalCode)
	{
		return;
	}

	var promotionResult = document.getElementById(resultID);
	if(!promotionResult)
	{
		return;
	}

	var result = syncRequest(url, 'promotionalCode=' + promotionalCode.value);
	if(!result)
	{
		return;
	}

	promotionDetails = JSON.parse(result);
	if(promotionDetails.valid)
	{
		promotionResult.innerHTML = promotionDetails.summary;
		window.location = getBaseURL() + getShopURL();
	}
	else
	{
		promotionResult.innerHTML = promotionDetails.message;
	}
}


function deletePromotion(link, id)
{
	var result = syncRequest(link.href + '&ajax=true');
	if(!result)
	{
		return;
	}

	var result = JSON.parse(result);
	if(result.deleted)
	{
		var li = document.getElementById(id);
		if(li)
		{
			li.parentNode.removeChild(li);
			window.location = getBaseURL() + getShopURL();
		}
	}
}

