function toPrice(srcPrice) {
	/* This function returns srcPrice with two forced decimal places. */
	srcPrice = srcPrice + "";
	if (srcPrice.indexOf(".") < 0) {
		srcPrice += ".00";
	} else if ((srcPrice.length - 2) == srcPrice.substr(srcPrice.indexOf(".")).length) {
		srcPrice += "0";
	}
	return(srcPrice);
}

function roundReal(srcReal, decPlaces) {
	/* This function returns srcReal rounded to decPlaces decimal places. */
	decPlaces = (!decPlaces ? 2 : decPlaces);
	return(Math.round(srcReal * Math.pow(10, decPlaces)) / Math.pow(10, decPlaces));
}

function updateTotal(formName, numInputs) {
	/* This function gets new quantities from the Buy page and updates the Total and calls writeCookie as a result. */
	var items = readCookie();
	var f = eval("document.forms['" + formName + "']");
	var total = 0;
	for (i = 0; i < numInputs; i++) {
		itemId = eval("f.elements['itemId" + i + "']").value;
		itemQuantity = parseInt(eval("f.elements['quantity" + i + "']").value);
		if (!(itemQuantity >= 0)) {
			itemQuantity = 0;
			eval("f.elements['quantity" + i + "']").value = 0;
		}
		items['itemQuantity'][getItemIndex(itemId, items)] = itemQuantity;
		eval("f.elements['price" + i + "']").value = toPrice(items['itemQuantity'][i] * items['itemPrice'][i]);
		total += (items['itemPrice'][i] * itemQuantity);
	}
	f.elements['total'].value = toPrice(roundReal(total, 2));
	writeCookie(items);
}

function chgSpaces(srcString) {
	/* This function converts spaces to %20 and returns converted string. */
	var newString = "";
	for (i = 0; i <= srcString.length; i++) {
		if (srcString.charAt(i) == " ") {
			newString += "%20";
		} else {
			newString += srcString.charAt(i);
		}
	}
	return(newString);
}

function goBuy() {
	/* This function sends the items array as a string to buy.html. */
	items = readCookie();
	itemString = chgSpaces(arrayToString(items));
	document.location = "buy.html?items=" + itemString;
}

function readCookie() {
	/* This function reads the cookie and returns an items array. */
	cString = document.cookie;
	return(stringToArray(cString));
}

function writeCookie(items) {
	/* This function writes the cookie from the items array. */
	var expiryDate = new Date();
	expiryDate.setTime(expiryDate.getTime()+(2*365*24*60*60*1000)); //Expire cookie in 2 years
	cString = "CrocodileCountry=" + arrayToString(items) + "; expires="+expiryDate.toGMTString()+"; path=/";
	document.cookie = cString;
}

function stringToArray(cString) {
	/* This function converts the cookie string to the items array. */
	var items = new Array();
	items['itemId'] = new Array();
	items['itemName'] = new Array();
	items['itemPrice'] = new Array();
	items['itemOptions'] = new Array();
	items['itemQuantity'] = new Array();

	cookieIndex = cString.indexOf("CrocodileCountry");
	cookieBegin = cString.indexOf("=",cookieIndex) + 1;
	cookieEnd = cString.indexOf(";",cookieIndex);
	if (cookieEnd == -1) {
		cookieEnd = cString.length;
	}
	entireString = cString.substring(cookieBegin, cookieEnd);
	var j = 0;
	var allItems = new Array();
	var tempItems = new Array();
	for (i = 0; i <= entireString.length; i++) {
		if (entireString.substring(i,i+1) == "[") {
			itemStart = i + 1;
		} else if (entireString.substring(i,i+1) == "]") {
			itemEnd = i;
			allItems[j] = entireString.substring(itemStart, itemEnd);
			allItems[j] = "|" + allItems[j] + "|";
			j++;
		}
	}
	var i = 0;
	var k = 0;
	for (i = 0; i < allItems.length; i++) {
		lastItem = 0;
		for (j = 1; j < allItems[i].length; j++) {
			if (allItems[i].substring(j,j+1) == "|") {
				itemStart = j;
				tempItems[k] = allItems[i].substring(lastItem + 1, j);
				lastItem = j;
				k++;
			}
		}
		items['itemId'][i] = tempItems[0];
		items['itemName'][i] = tempItems[1];
		items['itemPrice'][i] = tempItems[2];
		items['itemOptions'][i] = tempItems[3];
		items['itemQuantity'][i] = tempItems[4];
		k = 0;
	}
	return(items);
}

function arrayToString(items) {
	/* This function converts the items array to a string. */
	var outString = "";
	for (i = 0; i < items['itemId'].length; i++) {
		outString += "[";
		outString += items['itemId'][i] + "|";
		outString += items['itemName'][i] + "|";
		outString += items['itemPrice'][i] + "|";
		outString += items['itemOptions'][i] + "|";
		outString += items['itemQuantity'][i];
		outString += "]";
	}
	return(outString);
}

function newItem(itemId, itemName, itemPrice, itemOptions, itemQuantity) {
	/* This function creates a new item and calls writeCookie. */
	// Check if item exists:
	var items = readCookie();
	if (items['itemId'].length < 1) {
		items = new Array();
		items['itemId'] = new Array();
		items['itemName'] = new Array();
		items['itemPrice'] = new Array();
		items['itemOptions'] = new Array();
		items['itemQuantity'] = new Array();
		itemsLen = 0;
	} else {
		itemsLen = items['itemId'].length;
	}
	itemIndex = getItemIndex(itemId, items);
	if (itemIndex != -1) {	// Item exists: Update quantity only
		items['itemQuantity'][itemIndex] = parseInt(items['itemQuantity'][itemIndex]) + itemQuantity;
	} else {	// Item doesn't exist: Create new item
		items['itemId'][itemsLen] = itemId;
		items['itemName'][itemsLen] = itemName;
		items['itemPrice'][itemsLen] = itemPrice;
		items['itemOptions'][itemsLen] = itemOptions;
		items['itemQuantity'][itemsLen] = itemQuantity;
	}
	// Write items to cookie:
	writeCookie(items);
}

function addItem(itemId, itemName, itemPrice, itemOptions, itemQuantity) {
	/* This function checks if users wants to add item, then calls newItem. */
	if (itemQuantity <= 0) {
		alert("Please enter a quantity.");
	} else {
		if (confirm("Would you like to add " + itemQuantity + " " + itemOptions + " \"" + itemName + "\" to your shopping cart?")) {
		newItem(itemId, itemName, itemPrice, itemOptions, itemQuantity);
		}
	}
}

function deleteItem(itemId) {
	/* This function deletes an item and calls writeCookie. */
	var items = readCookie();
	itemIndex = getItemIndex(itemId, items);
	if (itemIndex != -1) {
		items = deleteArrayElement(items, itemId);
	}
	writeCookie(items);
	document.location = "buy.html";
}

function deleteAll() {
	/* This function resets the cookie. */
	if (confirm("This will delete ALL your items. Are you sure?")) {
		document.cookie = "CrocodileCountry=";
		document.location = "buy.html";
	}
}

function deleteArrayElement(items, itemId) {
	/* This function deletes an element from the items array given an itemId. Returns -1 if not found; items array if found. */
	// Get index:
	itemIndex = getItemIndex(itemId, items);
	var aLen = items['itemId'].length;
	if ((itemIndex >= aLen) || (itemIndex < 0)) {
		return(-1);
	}
	for (i = itemIndex; i < aLen; i++) {
		items['itemId'][i] = items['itemId'][i + 1];
		items['itemName'][i] = items['itemName'][i + 1];
		items['itemPrice'][i] = items['itemPrice'][i + 1];
		items['itemOptions'][i] = items['itemOptions'][i + 1];
		items['itemQuantity'][i] = items['itemQuantity'][i + 1];
	}
	items['itemId'].length--;
	items['itemName'].length--;
	items['itemPrice'].length--;
	items['itemOptions'].length--;
	items['itemQuantity'].length--;
	return(items);
}

function getItemIndex(itemId, items) {
	/* This function returns the index of an item given the itemId, or -1 if not found. */
	var itemIndex = -1;
	for (j = 0; j < items['itemId'].length; j++) {
		if (items['itemId'][j] == itemId) {
			itemIndex = j;
		}
	}
	return(itemIndex);
}

function addOrder() {
	var formBuy = eval("document.forms['buy']");
	var htmlString = "";
	if (formBuy.numItems) {
	    	for (i = 0; i < formBuy.numItems.value; i++) {
    			inputRef = eval("formBuy.elements['itemName" + i + "']");
    			htmlString += "<input type=\"hidden\" name=\"Order_ItemName_" + i + "\" value=\"" + inputRef.value + "\">\n";
	    		inputRef = eval("formBuy.elements['quantity" + i + "']");
    			htmlString += "<input type=\"hidden\" name=\"Order_Quantity_" + i + "\" value=\"" + inputRef.value + "\">\n";
	    		inputRef = eval("formBuy.elements['options" + i + "']");
    			htmlString += "<input type=\"hidden\" name=\"Order_Options_" +  i + "\" value=\"" + inputRef.value + "\">\n"; 
	    		inputRef = eval("formBuy.elements['price" + i + "']");
    			htmlString += "<input type=\"hidden\" name=\"Order_Price_" + i + "\" value=\"" + toPrice(inputRef.value) + "\">\n";
	    	}
    		inputRef = eval("formBuy.elements['total']");
		htmlString += "<input type=\"hidden\" name=\"Order_Total\" value=\"" + toPrice(inputRef.value) + "\">\n";
	}
    htmlString += "<input type=\"hidden\" name=\"cookie_backup\" value=\""+document.cookie+"\" >\n";
	document.write(htmlString);
}