function addItemToTrolley(url, id, form, parentNode, aggregate, callback) {
	var data = "";

	var args = new Array();

	args['form'] = form;
	args['id'] = id;

	if(parentNode == null)
	{
		args['parentNode'] = form;
	}
	else
	{
		args['parentNode'] = parentNode;
	}

	var form = document.getElementById(form);

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

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

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

						if(name == "notes")
						{
							var value = Base64Utils.prototype.encode(element.value);
						}
						else
						{
							var value = element.value;
						}

						args[name] = value;

						data += "&" + name + "=" + value;
					}
					for(k = 0; k < form.childNodes[i].childNodes[j].childNodes.length; k++)
					{
						var element = form.childNodes[i].childNodes[j].childNodes[k];

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

								if(name == "notes")
								{
									var value = Base64Utils.prototype.encode(element.value);
								}
								else
								{
									var value = element.value;
								}
	
								args[name] = value;
		
								data += "&" + name + "=" + value;
							}
						}
					}
				}
			}
		}
	}
	else 
	{
		var quantity = document.getElementById("quantity_" + id);

		if(quantity) 
		{
			args['quantity'] = quantity.value;
		} 
		else
		{
			args['quantity'] = 1;
		}
	}

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

	url += "/?ajax=true" + data;

	if(aggregate)
	{
		url += "&aggregate=" + aggregate;
	}
	if(callback != null)
	{
		retrieveURL(url, false, callback, args);
	}
	else
	{
		retrieveURL(url, false, displayAddItem, args);
	}
}


function displayAddItem(args) {

	var parent = document.getElementById(args['parentNode']);
	
	var response = document.getElementById("trolleyResponse_" + args['id']);
	
	if(!response) {
		response = document.createElement("span");
		response.id = "trolleyResponse_" + args['id'];
	}

	var success = parseResponse(args['response'], "status");
	var message = parseResponse(args['response'], "message");

	response.innerHTML = message;
	
	if(success == "true") {
		response.className="trolleyMessageSuccess";
	} else {
		response.className="trolleyMessageFailure";
	}

	parent.appendChild(response);
}

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

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

	retrieveURL(baseURL + url + "&quantity=" + quantity, false, displayUpdateItem, args);
}

function displayUpdateItem(args) {
	for(i = 0; i < args['response'].childNodes.length; i++) {
		if(args['response'].childNodes[i].nodeName == "itemTotals") {
			for(j = 0; j < args['response'].childNodes[i].childNodes.length; j++) {
				if(args['response'].childNodes[i].childNodes[j].nodeName == "unitPrice") {
					value = args['response'].childNodes[i].childNodes[j].childNodes[0].nodeValue;
					document.getElementById(args['prefix'] + "_" + args['hash'] + "_unitPrice").innerHTML = args['symbol'] + value;
				} else if(args['response'].childNodes[i].childNodes[j].nodeName == "itemPrice") {
					value = args['response'].childNodes[i].childNodes[j].childNodes[0].nodeValue;
					document.getElementById(args['prefix'] + "_" + args['hash'] + "_itemPrice").innerHTML = args['symbol'] + value;
				}
			}
		}
	}

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

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

	var args = new Array();
	args['prefix'] = prefix;
	args['hash'] = hash;

	retrieveURL(url, false, displayUpdateTrolleyTotals, args);
}

function displayUpdateTrolleyTotals(args) {
	for(i = 0; i < args['response'].childNodes.length; i++) {
		if(args['response'].childNodes[i].nodeName == "trolleyTotals") {
			for(j = 0; j < args['response'].childNodes[i].childNodes.length; j++) {
				if(args['response'].childNodes[i].childNodes[j].nodeName == "subTotal") {
					value = args['response'].childNodes[i].childNodes[j].childNodes[0].nodeValue;
					if(document.getElementById(args['prefix'] + "_subTotal"))
					{
						document.getElementById(args['prefix'] + "_subTotal").innerHTML = value;
					}
				} else if(args['response'].childNodes[i].childNodes[j].nodeName == "tax") {
					value = args['response'].childNodes[i].childNodes[j].childNodes[0].nodeValue;
					if(document.getElementById(args['prefix'] + "_tax"))
					{
						document.getElementById(args['prefix'] + "_tax").innerHTML = value;
					}
				} else if(args['response'].childNodes[i].childNodes[j].nodeName == "total") {
					value = args['response'].childNodes[i].childNodes[j].childNodes[0].nodeValue;
					if(document.getElementById(args['prefix'] + "_total"))
					{
						document.getElementById(args['prefix'] + "_total").innerHTML = value;
					}
				}
			}
		}
	}
}

function emptyTrolley(baseURL, url, hash, prefix) {
	
	var confirmDelete = confirm("Are you sure?");

	if(confirmDelete)
	{
		var args = new Array();
		args['baseURL'] = baseURL;
		args['hash'] = hash;
		args['prefix'] = prefix;

		retrieveURL(baseURL + url, false, displayEmptyTrolley, args);
	}
}

function displayEmptyTrolley(args) {
	var element = document.getElementById(args['hash']);

	if(element && element.parentNode)
	{
		parent = element.parentNode;
		while (parent.hasChildNodes())
		{
			parent.removeChild(parent.childNodes[0]);
		}
	}

	updateTrolleyTotals(args['baseURL'], args['prefix']);
}

function deleteItemFromTrolley(baseURL, url, hash, prefix) {
	
	var confirmDelete = confirm("Are you sure?");

	if(confirmDelete)
	{
		var args = new Array();
		args['baseURL'] = baseURL;
		args['hash'] = hash;
		args['prefix'] = prefix;

		retrieveURL(baseURL + url, false, displayDeleteItem, args);
	}
}

function displayDeleteItem(args) {
	var element = document.getElementById(args['hash']);

	if(element && element.parentNode)
	{
		element.parentNode.removeChild(element);
	}

	updateTrolleyTotals(args['baseURL'], args['prefix']);
}

function deleteItemFromDetails(url, hash, form, parentNode) {
	
	url += "/?ajax=true";

	var args = new Array();
	args['url'] = url;
	args['hash'] = hash;
	args['form'] = form;

	if(parentNode == null)
	{
		args['parentNode'] = form;
	}
	else
	{
		args['parentNode'] = parentNode;
	}

	retrieveURL(url, false, displayDeleteItemFromDetails, args);
}

function displayDeleteItemFromDetails(args) {

	var parent = document.getElementById(args['parentNode']);
	
	var response = document.getElementById("trolleyResponse_" + args['hash']);
	
	if(!response) {
		response = document.createElement("span");
		response.id = "trolleyResponse_" + args['hash'];
	}

	quantity = document.getElementById("quantity_" + args['hash']);

	if(quantity)
	{
		quantity.value = 1;
	}
	
	var success = parseResponse(args['response'], "status");
	var message = parseResponse(args['response'], "message");

	response.innerHTML = message;
	
	if(success == "true") {
		response.className="trolleyMessageRemove";
	} else {
		response.className="trolleyMessageFailure";
	}
	parent.appendChild(response);
}

function deleteItemFromList(url, hash, form, parentNode, callback) {
	
	url += "/?ajax=true";

	var args = new Array();
	args['url'] = url;
	args['hash'] = hash;
	args['form'] = form;

	if(parentNode == null)
	{
		args['parentNode'] = form;
	}
	else
	{
		args['parentNode'] = parentNode;
	}

	if(callback != null)
	{
		retrieveURL(url, false, callback, args);
	}
	else
	{
		retrieveURL(url, false, displayDeleteItemFromList, args);
	}
}


function displayDeleteItemFromList(args) {

	var parent = document.getElementById(args['parentNode']);

	var response = document.getElementById("trolleyResponse_" + args['hash']);
	
	if(!response) {
		response = document.createElement("span");
		response.id = "trolleyResponse_" + args['hash'];
	}

	quantity = document.getElementById("quantity_" + args['hash']);

	if(quantity)
	{
		quantity.value = 1;
	}

	var success = parseResponse(args['response'], "status");
	var message = parseResponse(args['response'], "message");

	response.innerHTML = message;
	
	if(success == "true") {
		response.className="trolleyMessageRemove";
	} else {
		response.className="trolleyMessageFailure";
	}

	parent.appendChild(response);
}


function parseResponse(response, element)
{
	response = response.documentElement;

	if((element == "status") || (element == "extraStatus") || (element == "extra2Status"))
	{
		success = "false";

		if(response && (response.nodeName == "trolleyMessage")) {
			for(i = 0; i < response.childNodes.length; i++) {
				if(response.childNodes[i].nodeName == element) {
					success = response.childNodes[i].childNodes[0].nodeValue;
				}
			}
		}

		return success;
	}
	else if((element  == "message") || (element == "extraMessage") || (element == "extra2Message"))
	{
		message = "";

		if(response && (response.nodeName == "trolleyMessage")) {
			for(i = 0; i < response.childNodes.length; i++) {
				if(response.childNodes[i].nodeName == element) {
					message = response.childNodes[i].childNodes[0].nodeValue;
				}
			}
		}

		return message;
	}
	else
	{
		return null;
	}
}

function toggleDelivery() {

	
	var sameAsMemberDetails = document.getElementById("sameAsContactDetails").checked;

	$("#deliverySalutation").attr("disabled", sameAsMemberDetails);
	$("#deliveryFirstName").attr("disabled", sameAsMemberDetails);
	$("#deliverySurname").attr("disabled", sameAsMemberDetails);
	$("#deliveryEmailAddress").attr("disabled", sameAsMemberDetails);
	$("#deliveryAddress1").attr("disabled", sameAsMemberDetails);
	$("#deliveryAddress2").attr("disabled", sameAsMemberDetails);
	$("#deliveryAddress3").attr("disabled", sameAsMemberDetails);
	$("#deliverySuburb").attr("disabled", sameAsMemberDetails);
	$("#deliveryPostCode").attr("disabled", sameAsMemberDetails);
	$("#deliveryState").attr("disabled", sameAsMemberDetails);
	$("#deliveryCountry").attr("disabled", sameAsMemberDetails);
	$("#deliveryHomePhoneNumber").attr("disabled", sameAsMemberDetails);
	$("#deliveryWorkPhoneNumber").attr("disabled", sameAsMemberDetails);
	$("#deliveryMobilePhoneNumber").attr("disabled", sameAsMemberDetails);
	$("#deliveryFaxNumber").attr("disabled", sameAsMemberDetails);

	showDisabled(document.getElementById("deliverySalutation"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryFirstName"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliverySurname"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryEmailAddress"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryAddress1"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryAddress2"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryAddress3"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliverySuburb"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryPostCode"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryState"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryCountry"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryHomePhoneNumber"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryWorkPhoneNumber"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryMobilePhoneNumber"), sameAsMemberDetails);
	showDisabled(document.getElementById("deliveryFaxNumber"), sameAsMemberDetails);
}


function showDisabled(object, disabled) {
	if(!object) return;
	if(disabled) {
		object.className += " disabled";
	} else {
		object.className = object.className.replace(" disabled", "");
	}
}
