function addToBasket(objForm, strCode, strType)
{
	var objAjax, objItem, objUnitItem, objSupercedeItem, strSupercedeCode, nQuantity, strUnit, objXmlRequestDom, objKmsgNode, objXmlNode, objWidthInput, objKmsgNode;
	
	if (validateForm(objForm))
	{
		objAjax = new CAjax();
		objAjax.create();
		
		objSupercedeItem = document.getElementById("supercededTo_" + strCode);
		
		strSupercedeCode = objSupercedeItem.value;
		
		if (objSupercedeItem.value.length > 0)
		{
			if (!confirm(lang("This product is superceded by") + " " + strSupercedeCode + ".\n" + lang("Are you sure you want to order this product?")))
			{
				return false;
			}
		}
		
		if (strType == "U")
		{
			objItem = document.getElementById("pr_quantity_" + strCode);
			objUnitItem = document.getElementById("pr_unit_" + strCode);
			
			nQuantity = objItem.value;
			strUnit = objUnitItem.value;
			
			startLoading();
			setTimeout("_addToBasket('" + strCode + "', '" + nQuantity + "', '" + strUnit + "')", 1);
		}
		else
		{
			objXmlRequestDom = xml_createXmlDom();
			objXmlRequestDom.loadXML("<kmsg></kmsg>");
			objKmsgNode = objXmlRequestDom.selectSingleNode("/kmsg");
				
			for (var i = 1; i <= MAX_TALLY; i++)
			{
				objQuantityInput = document.getElementById("t_quantity_" + i + "_" + strCode);
				objLengthInput = document.getElementById("t_length_" + i + "_" + strCode);
				objWidthInput = document.getElementById("t_width_" + i + "_" + strCode);
				
				if (objQuantityInput.value == "")
				{
					break;
				}
				
				objXmlNode = xml_createNode(objKmsgNode, "tally");
				objXmlNode.setAttribute("quantity", objQuantityInput.value);
				objXmlNode.setAttribute("length", objLengthInput.value);
				
				if (objWidthInput)
				{
					objXmlNode.setAttribute("width", objWidthInput.value);
				}
			}

			startLoading();
			setTimeout("_addToBasketTally('" + strCode + "', '" + objXmlRequestDom.xml + "')", 1);
			
		}
		
	}
}

function _addToBasketTally(strCode, strXml)
{
	objTab.addTab("tab_basket", lang("Basket"), true);
	objTab.showTab("tab_basket");
			
	if (objAjax.open("ajax/ajax_basket.php?mode=ADDTALLY&productCode=" + strCode, false))
	{
		objAjax.send(strXml);
		
		var objTabDiv = document.getElementById("tab_basket");
		objTabDiv.innerHTML = objAjax.getResponse();
		updateQuickBasket();
	}
	else
	{
		alert(lang("There has been a problem, please contact an administrator"));
	}
	
	endLoading();
}

function _addToBasket(strCode, nQuantity, strUnit)
{
	objTab.addTab("tab_basket", lang("Basket"), true);
	objTab.showTab("tab_basket");
			
	if (objAjax.open("ajax/ajax_basket.php?mode=ADD&productCode=" + strCode + "&quantity=" + nQuantity + "&unit=" + strUnit, true))
	{
		var objTabDiv = document.getElementById("tab_basket");
		objTabDiv.innerHTML = objAjax.getResponse();
		updateQuickBasket();
	}
	else
	{
		alert(lang("There has been a problem, please contact an administrator"));
	}
	
	endLoading();
}

function viewBasket()
{
	startLoading();
	setTimeout("_viewBasket()", 1);
}

function showNotes(strNotesId)
{
	var objItem = document.getElementById(strNotesId);

	if (objItem.getAttribute("notesOn") == "true")
	{
		objItem.style.visibility = "hidden";
		objItem.style.display = "none";
		objItem.setAttribute("notesOn", "false");
	}
	else
	{
		objItem.style.visibility = "visible";
		
		try
		{
			objItem.style.display = "block";
		}
		catch (e)
		{
			objItem.style.display = "table-cell";
		}
		
		objItem.setAttribute("notesOn", "true");
	}
}

function _viewBasket(strMode)
{
	objAjax = new CAjax();
	objAjax.create();

	objTab.addTab("tab_basket", lang("Basket"), true);
	objTab.showTab("tab_basket");
	
	if (!strMode)
	{
		strMode = "";
	}
	
	if (objAjax.open("ajax/ajax_basket.php?mode=" + strMode, true))
	{
		var objTabDiv = document.getElementById("tab_basket");
		objTabDiv.innerHTML = objAjax.getResponse();
		updateQuickBasket();
	}
	else
	{
		alert(lang("There has been a problem, please contact an administrator"));
	}
	
	endLoading();
}

function updateQuickBasket()
{
	var objAjax;
	
	objAjax = new CAjax();
	objAjax.create();
	
	if (objAjax.open("ajax/ajax_xsl.php?xsl=ajax/ajax_quickBasket", true))
	{
		var objTabDiv = document.getElementById("quickBasket");
		objTabDiv.innerHTML = objAjax.getResponse();
	}
	else
	{
		alert(lang("There has been a problem, please contact an administrator"));
	}
}

function emptyBasket()
{
	startLoading();
	setTimeout("_viewBasket('EMPTY')", 1);
}


function updateBasket()
{
	startLoading();
	setTimeout("_updateBasket()", 1);
}

function getBasket()
{
	var objXmlRequestDom, objKmsgNode, arrInputs, objProductNode, strInputId, strCode;
	
	objXmlRequestDom = xml_createXmlDom();
	objXmlRequestDom.loadXML("<kmsg></kmsg>");
	objKmsgNode = objXmlRequestDom.selectSingleNode("kmsg");
	
	arrInputs = document.getElementsByTagName("input");
	arrTally = document.getElementsByTagName("tally");
	
	for (var i = 0; i < arrInputs.length; i++)
	{
		strInputId = "" + arrInputs[i].getAttribute("id");

		if (strInputId.substr(0,9) == "quantity_")
		{
			strCode = strInputId.substr(9);
			objProductNode = getProductRow(objXmlRequestDom, strInputId.substr(9));
			objProductNode.setAttribute("quantity", arrInputs[i].value);
		
			for (var iTallyCount = 0; iTallyCount < arrTally.length; iTallyCount++)
			{
				objTally = arrTally[iTallyCount];
				
				if (objTally.getAttribute("name") == "tally_" + strCode)
				{
					objTallyXmlNode = xml_createNode(objProductNode, "tally");
					objTallyXmlNode.setAttribute("quantity", objTally.getAttribute("quantity"));
					objTallyXmlNode.setAttribute("width", objTally.getAttribute("width"));
					objTallyXmlNode.setAttribute("length", objTally.getAttribute("length"));
				}
			}
			
			objTempInput = document.getElementById("balance_" + strCode);
			objProductNode.setAttribute("balance", objTempInput.value);
			
			objTempInput = document.getElementById("remove_" + strCode);
			objProductNode.setAttribute("remove", objTempInput.value);
			
			objTempInput = document.getElementById("description_" + strCode);
			
			if (objTempInput)
			{
				objProductNode.setAttribute("description", objTempInput.value);
			}
			
			objTempInput = document.getElementById("unit_" + strCode);
			objProductNode.setAttribute("unit", objTempInput.value);
			
			objTempInput = document.getElementById("notes_" + strCode);
			objProductNode.setAttribute("notes", objTempInput.value);
		}

	}
	
	return objXmlRequestDom.xml;
}

function _updateBasket()
{
	var objForm, strBasketXml;
	var objAjax;
	
	objForm = document.getElementById("basket");
	
	strBasketXml = getBasket();
	
	objAjax = new CAjax();
	objAjax.create();
	
	if (objAjax.open("ajax/ajax_basket.php?mode=UPDATE", false))
	{
		objAjax.send(strBasketXml);
		
		var objTabDiv = document.getElementById("tab_basket");
		objTabDiv.innerHTML = objAjax.getResponse();
		updateQuickBasket();
	}
	else
	{
		alert(lang("There has been a problem, please contact an administrator"));
	}
	
	endLoading();
}

function getProductRow(objXmlDom, strProductCode)
{
	var objXmlNode = objXmlDom.selectSingleNode("/kmsg/product[@code = '" + strProductCode + "']");

	if (!objXmlNode)
	{
		var objKmsgNode = objXmlDom.selectSingleNode("/kmsg");
		objXmlNode = xml_createNode(objKmsgNode, "product");
		objXmlNode.setAttribute("code", strProductCode);	
	}
		
	return objXmlNode;
}

function deliveryDetails()
{
	startLoading();
	setTimeout("_deliveryDetails()", 1);
}

function _deliveryDetails()
{
	var objAjax, objItem, strBasketXml;
	
	objAjax = new CAjax();
	objAjax.create();
	
	strBasketXml = getBasket();
	
	if (objAjax.open("ajax/ajax_deliveryDetails.php", false))
	{
		objAjax.send(strBasketXml);
		
		var objTabDiv = document.getElementById("tab_basket");
		objTabDiv.innerHTML = objAjax.getResponse();
	
		setFocus("delivery_reference");
	}
	else
	{
		alert(lang("There has been a problem, please contact an administrator"));
	}
	
	endLoading();
}

function completeOrder(strOrderType)
{
	var objForm = document.getElementById("orderForm");

	if (!validateForm(objForm))
	{
		return false;
	}
	
	startLoading();
	setTimeout("_completeOrder('" + strOrderType + "')", 1);
}

function _completeOrder(strOrderType)
{
	var objXmlRequestDom, objKmsgNode, objAjax;
	var strReference, strName, strLine1, strLine2, strLine3, strLine4, strPostCode, strInstructions;
	
	strReference = document.getElementById("delivery_reference").value;
	strName = document.getElementById("delivery_name").value;
	strLine1 = document.getElementById("delivery_address1").value;
	strLine2 = document.getElementById("delivery_address2").value;
	strLine3 = document.getElementById("delivery_address3").value;
	strLine4 = document.getElementById("delivery_address4").value;
	strPostCode = document.getElementById("delivery_postcode").value;
	strInstructions = document.getElementById("delivery_instructions").value;
	
	objXmlRequestDom = xml_createXmlDom();
	objXmlRequestDom.loadXML("<kmsg></kmsg>");
	objKmsgNode = objXmlRequestDom.selectSingleNode("kmsg");
	
	xml_createNode(objKmsgNode, "reference", strReference);
	xml_createNode(objKmsgNode, "name", strName);
	xml_createNode(objKmsgNode, "line", strLine1);
	xml_createNode(objKmsgNode, "line", strLine2);
	xml_createNode(objKmsgNode, "line", strLine3);
	xml_createNode(objKmsgNode, "line", strLine4);
	xml_createNode(objKmsgNode, "postcode", strPostCode);
	xml_createNode(objKmsgNode, "instructions", strInstructions);
	xml_createNode(objKmsgNode, "orderType", strOrderType);
	
	objAjax = new CAjax();
	objAjax.create();
	
	if (objAjax.open("ajax/ajax_completeOrder.php", false))
	{
		objAjax.send(objXmlRequestDom.xml);
		
		var objTabDiv = document.getElementById("tab_basket");
		objTabDiv.innerHTML = objAjax.getResponse();
		updateQuickBasket();
	}
	else
	{
		alert(lang("There has been a problem, please contact an administrator"));
	}
	
	endLoading();
}

function createTemplate(strName)
{
	startLoading();
	
	setTimeout("_createTemplate('" + strName + "')", 10);
}

function _createTemplate(strName)
{
	var objButton, objAjax, objItem, objDiv;
	
	objAjax = new CAjax();
	objAjax.create();
	
	if (objAjax.open("ajax/ajax_basket.php?mode=SAVETEMPLATE&name=" + strName, true))
	{	
		objDiv = document.getElementById("createTemplateResponse");
		objDiv.innerHTML = objAjax.getResponse();
		
		objItem = document.getElementsByTagName("templateCreated");
		
		if (objItem.length > 0)
		{
			objButton = document.getElementById("templateSaveButton");
			objButton.disabled = "true";
		}
	}
	else
	{
		alert(lang("There has been a problem, please contact an administrator"));
	}
	
	endLoading();
}

function createTemplateTab()
{
	startLoading();
	setTimeout("_createTemplateTab()", 1);
}

function _createTemplateTab()
{
	var objAjax;
	
	objAjax = new CAjax();
	objAjax.create();
	
	if (objAjax.open("ajax/ajax_xsl.php?xsl=ajax/ajax_createTemplate", true))
	{	
		objTab.addTab("tab_createTemplate", lang("Create Template"), true);
		objTab.showTab("tab_createTemplate");
	
		var objTabDiv = document.getElementById("tab_createTemplate");
		objTabDiv.innerHTML = objAjax.getResponse();
	}
	else
	{
		alert(lang("There has been a problem, please contact an administrator"));
	}
	
	endLoading();
}

function templatePrompt()
{
	var i, bOkName, strTemplateName;
	
	strTemplateName = document.getElementById("templateName").value;
	
	// If the template name is null, then the user must have pressed cancel on the prompt.
	if (strTemplateName != null)
	{
		if (strTemplateName.length > 0 && strTemplateName.length <= 64)
		{
			bOkName = true;
			
			// As the template name is used for a filename, make sure no invalid characters
			// have been used.
			for (i = 0; i < strTemplateName.length; i++)
			{
				if ("0123456789-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(strTemplateName.charAt(i)) == -1)
				{
					bOkName = false;
					break;
				}
			}
			
			// If the template name is valid, submit the form.
			if (bOkName)
			{
				createTemplate(strTemplateName);
			}
			else
			{
				alert(lang("Template names can only include characters A-Z, a-z, 0-9 and -"));
			}
		}
		else if (strTemplateName.length > 64)
		{
			alert(lang("The template name cannot be larger than 64 characters"));
		}
		else
		{
			alert(lang("A template name is needed in order to save"));
		}
	}
}