function addMiniWrapper(http_request,p_name)
{
	var myClass = "minicart_body";
	if(http_request.readyState == 4 && http_request.status == 200)
	{
			// parse the XML and get the returned values
		var response = http_request.responseXML.documentElement;

		if(response == null)
		{
			alert("IE response null problem");
			alert("textResponse: " + http_request.responseText);
		}

		//var cart =  response.getElementsByTagName("cart");
		var myItem = response.getElementsByTagName("item")[0].firstChild.nodeValue;
		var myQuantity = response.getElementsByTagName("quantity")[0].firstChild.nodeValue;
		var myPrice = response.getElementsByTagName("price")[0].firstChild.nodeValue;

		//alert("item: " + myItem + " qty: " + myQuantity + " price: " + myPrice);

			//add the new data as children of the p_name element
		var myParent = document.getElementById(p_name);
		var newTr = myParent.insertRow(myParent.rows.length);
		var newSpan = document.createElement("span");
		var newTd = newTr.insertCell(0);

		newSpan.setAttribute("class",myClass);
		newSpan.setAttribute("className",myClass);
		newSpan.innerHTML = myItem;
		newTd.appendChild(newSpan);
		newTd.setAttribute("align","center");
		
		newTd = newTr.insertCell(1);
		newSpan = document.createElement("span")
		newSpan.setAttribute("class",myClass);
		newSpan.setAttribute("className",myClass);
		newSpan.innerHTML = myQuantity;
		newTd.appendChild(newSpan);
		newTd.setAttribute("align","center");

		newTd = newTr.insertCell(2);
		newSpan = document.createElement("span")
		newSpan.setAttribute("class",myClass);
		newSpan.setAttribute("className",myClass);
		newSpan.innerHTML = myPrice;
		newTd.appendChild(newSpan);
		newTd.setAttribute("align","center");
	}
	else
	{
		// do something to signify that it didn't work
		// probably need to load the backup here.
	}
}

function findCartColumn(columnName)
{
	var pTable = document.getElementById("cart_main");
	var pTableHeader = pTable.getElementsByTagName("tr")[0];
	var headSpans = pTableHeader.getElementsByTagName("span");

	//alert("columnName: " + columnName);
	var pattern = new RegExp(columnName); 
	var offset = -1;

	for(i=0;i<headSpans.length;i++)
	{
		if(pattern.test(headSpans[i].firstChild.nodeValue))
			
			offset = i;
		//alert("spans: " + headSpans[i].firstChild.nodeValue);
	}
	return offset;
}

function removeWrapper(http_request,rmObject)
{
	if(http_request.readyState == 4 && http_request.status == 200)
	{
		var response = http_request.responseXML.documentElement;

		if(response == null)
		{
			//alert("IE response null problem");
			//alert("textResponse: " + http_request.responseText);
		}
		//alert("debug:\n" + http_request.responseText);

		var myItems = response.getElementsByTagName('error');
		if(myItems.length == 0)
		{
			var myTrNode = rmObject.parentNode.parentNode;
			
			if(myTrNode == null)
			{
				//more error handling here
			}
			else
			{
				location.reload();
				return;
				//var priceOffset = findCartColumn("Price");

							//get the price of this item so we can deduct it from the total cost
				var pTable = myTrNode.parentNode;

				var pTableHeader = pTable.getElementsByTagName("tr")[0];
				var headerSpans = pTableHeader.getElementsByTagName("span");

						//TODO: make this language-independent!
				var pricePattern = /Price/;
				var oldPricePattern = /[0-9]+/;
				var price = 0;
				var oldPrice = 0;

				for(i=0;i< headerSpans.length;i++)
				{
					var check = headerSpans[i];
					if(pricePattern.test(check.firstChild.nodeValue)) {
						price = myTrNode.getElementsByTagName("td")[i].getElementsByTagName("span")[0].firstChild.nodeValue;
						//alert (price);
					}
				}
				var priceRow = pTableHeader.parentNode.getElementsByTagName("tr");
				priceRow = priceRow[priceRow.length - 2];

				oldPrice = priceRow.getElementsByTagName("span")[0].firstChild.nodeValue.match(oldPricePattern);

				oldPrice = oldPrice[0];
				
				//alert("pure old Price: " + oldPrice);

				var inputs = myTrNode.getElementsByTagName("input");
				var qty =0;
				for(i=0;i<inputs.length;i++)
				{
					if(inputs[i].getAttribute("name") == "qty")
						qty = inputs[i].value;
				}
				//alert("quantity: " + qty);
				price = price * qty;
				//alert("price: " + price);
				price = oldPrice - price;
			
				var priceText = priceRow.getElementsByTagName("span")[0].firstChild.nodeValue;
				priceText = priceText.replace(oldPricePattern,price);
			
				priceRow.getElementsByTagName("span")[0].firstChild.nodeValue = priceText;

				myTrNode.parentNode.removeChild(myTrNode);
				//alert('deleted');
				//location.reload();
				return;
			}
		}
		else
		{
			//do something for error handling
		}
	}
	else
	{
		//do somethingt o signify that it didn't work
	}
}

function updateCart()
{
	//move all the current selections into the shopping cart
	//need to send: cart #, option, value

	var rand = Math.random();

	var cartTable = document.getElementById("cart_main");
	var cartTrs = cartTable.getElementsByTagName("tr");
	var http_request = new Array(cartTrs.length);

	for(i=0;i<cartTrs.length;i++)
	{
		var cartid = 0;
		var catid = 0;
		var qty = 0;
		
		var curInput = cartTrs[i].getElementsByTagName("input");
		for(j=0;j<curInput.length;j++)
		{
			if(curInput[j].getAttribute("name") == "id")
				cartid = curInput[j].getAttribute("value");
			else if(curInput[j].getAttribute("name") == "catalog")
				catid = curInput[j].getAttribute("value");
			else if(curInput[j].getAttribute("type") == "text")
				qty = curInput[j].value;
		}
		//alert("debug: cartid: " + cartid + "\ncatid: " + catid + "\nqty: " + qty);
		if(cartid != 0)
		{
			var qtyRequest = createAjaxObject();
			var openStr = "ajaxcart.php?cart_item=" + cartid + "&cart_opt=qty&opt_val=" + qty + "&cart_action=update&randVal=" + rand;
			//qtyRequest.onreadystatechange = function() { errChecker(qtyRequest); };
			//qtyRequest.open('GET',openStr,true);
			qtyRequest.open('GET',openStr,false);
			qtyRequest.setRequestHeader('Content-Type','application/xml');
			qtyRequest.setRequestHeader('Accept','*/*');
			qtyRequest.send(null);
			
			var curSelect = cartTrs[i].getElementsByTagName("select");
			http_request[i] = new Array(curSelect.length);

			for(j=0;j<curSelect.length;j++)
			{
				http_request[i][j] = createAjaxObject();
			
				if(!http_request[i][j])
				{
					return false;
				}
				var selectName = curSelect[j].getAttribute("name");
				var selectVal = curSelect[j].value;
		//		alert("debug: selectName: " + selectName + "\n selectVal: " + selectVal);
				openStr = "ajaxcart.php?cart_item=" + cartid + "&cart_opt=" + selectName + "&opt_val=" + selectVal + "&cart_action=update&randVal=" + rand;
				//alert("openstr:\n" + openStr);
				//alert("i: " + i + " j: " + j);
				//http_request[i][j].onreadystatechange = function() { errChecker(http_request[i][j]); };
				//http_request[i][j].open('GET',openStr,true);
				http_request[i][j].open('GET',openStr,false);
				http_request[i][j].setRequestHeader('Content-Type','application/xml');
				http_request[i][j].setRequestHeader('Accept','*/*');
				http_request[i][j].send(null);
				
				//alert(http_request[i][j].responseText);
			}
		}
	}
}
	
function errChecker(http_request)
{
	if(http_request.readyState == 4 && http_request.status == 200)
	{
		//alert("debug:\n" + http_request.responseText);
		var response = http_request.responseXML.documentElement;
		var err = response.getElementsByTagName("error");
		if(err.length == 0)
			return 0;
		else
			alert("error returned from cart functions:\n" + http_request.responseText);
	}
	else
	{
		if(http_request.status != 200)
			alert("error: status: " + http_request.status);
	}
}

function updatePrice(http_request,item)
{
	//alert("called updatePrice");
	//item is a qty input box
	if(http_request.readyState == 4 && http_request.status == 200)
	{
		//alert("processing update price");
		if(errChecker(http_request) != 0)
			return -1;
		//alert("passed the error checker");
		
		//find the price for this item
		var priceOffset = findCartColumn("Price");
		//alert("price offset: " + priceOffset);
		var price = item.parentNode.parentNode.getElementsByTagName("td")[priceOffset].getElementsByTagName("span")[0].firstChild.nodeValue;
		price = price * item.value;

			//sum up all the other prices
		var totalPrice = 0;
		var cartRows = document.getElementById("cart_main").getElementsByTagName("tr");
		for(i=0;i<cartRows.length;i++)
		{
			if(cartRows[i].getAttribute("name") == "itemrow")
			{
				var tmpPrice = cartRows[i].getElementsByTagName("td")[priceOffset].getElementsByTagName("span")[0].firstChild.nodeValue;
				var tmpQtys = cartRows[i].getElementsByTagName("input");
				var tmpQty = 0;
				for(j=0;j<tmpQtys.length;j++)
				{
					if(tmpQtys[j].getAttribute("name") == "qty")
					tmpQty = tmpQtys[j].value;	
				}
				//alert("tmpPrice: " + tmpPrice + " tmpQty: " + tmpQty);
				totalPrice = totalPrice + (tmpPrice * tmpQty);
			}
		}

		//alert("totalPrice: " + totalPrice);
		//setTotalCost(totalPrice);
	}
}

function setTotalCost(cost)
{
	var oldPricePattern = /[0-9]+/;
	var oldPrice = 0;

	var priceRow = document.getElementById("cart_main").getElementsByTagName("tr");
	priceRow = priceRow[priceRow.length - 2];

				//alert("pure old Price: " + oldPrice);

	var priceText = priceRow.getElementsByTagName("span")[0].firstChild.nodeValue;
	priceText = priceText.replace(oldPricePattern,cost);
			
	priceRow.getElementsByTagName("span")[0].firstChild.nodeValue = priceText;
}

function updateItem(item)
{
	var http_request = false;
	var rand = Math.random();

	http_request = createAjaxObject();
	if(!http_request)
	{
		return false;
	}
	var inputs = item.parentNode.parentNode.getElementsByTagName("input");
	var cartid; 
	
	for(i=0;i<inputs.length;i++)
	{
		if(inputs[i].getAttribute("name") == "id")
		{
			cartid = inputs[i].value;
		}
	}
	
	var itemType = item.getAttribute("name");
	var itemValue = item.value;

	var openStr = "ajaxcart.php?cart_item=" + cartid + "&cart_opt=" + itemType + "&opt_val=" + itemValue + "&randVal=" + rand + "&cart_action=update";
	//alert("test: " + openStr);
	if(itemType == "qty")
		http_request.onreadystatechange = function() { updatePrice(http_request,item);};
	else
		http_request.onreadystatechange = function() { errChecker(http_request);};
	http_request.open('GET',openStr,true);
	http_request.setRequestHeader('Content-Type','application/xml');
	http_request.setRequestHeader('Accept','*/*');
	http_request.send(null);
	//location.reload();
}

function ajaxCart(item,action,name,context)
{
	var http_request = false;
	var rand = Math.random();
	
	http_request = createAjaxObject();
	
	if(!http_request)
	{
		// some code here to handle case where we can't create an instance
		//DEBUG ONLY: alert("didn't create an object");
		return false;
	}

	var openStr = 'ajaxcart.php?cart_item=' + item + '&cart_action=' + action + '&randval=' + rand;
	switch(context)
	{
		case 'miniAdd':
				http_request.onreadystatechange = function() { addMiniWrapper(http_request,name); };
			break;
		case 'remove':
				http_request.onreadystatechange = function() { removeWrapper(http_request,name); };
	}
	http_request.open('GET',openStr,true);
	http_request.setRequestHeader('Content-Type','application/xml');
	http_request.setRequestHeader('Accept','*/*');
	http_request.send(null);
}

function createAjaxObject()
{
	var http_request = false;
	
	if(window.XMLHttpRequest)
	{
		http_request = new XMLHttpRequest();
		if(http_request.overrideMimeType)
		{
			http_request.overrideMimeType('application/xml');
		}
	}	
	else if(window.ActiveXObject)
	{
		try
		{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e){}
		}
	}

	return http_request;
}

function ajaxGetWrap(http_request,url,async)
{
	var rand = Math.random();
	url = url + "&randVal=" + rand;
	alert("opening url: " + url);
	http_request.open('GET',url,async);
	http_request.setRequestHeader('Content-Type','application/xml');
	http_request.setRequestHeader('Accept','*/*');
	http_request.send(null);
}

	/*
	-------- Begin user preferences functions
	*/
/*
function updatePref(item)
{
	var http_request = false;
	var rand = Math.random();
	
	http_request = createAjaxObject();
	if(!http_request)
	{
		return false;
	}
	var myID = item.getAttribute("id");
	alert("debug: " + myID);

	var myVal = item.value;
	alert("debug: " + myVal);

	http_request.onreadystatechange = function() { refreshPage(http_request); };
	var url = "ajaxprefs.php?action=" + myID + "&value=" + myVal;
	ajaxGetWrap(http_request,url,true);
}

function refreshPage(http_request)
{
	alert("calling refresh page");
	if(http_request.readyState == 4 && http_request.status == 200)
	{
		//alert("debug:\n" + http_request.responseText);
		var response = http_request.responseXML.documentElement;
		alert("response: " + http_request.responseText);
		var err = response.getElementsByTagName("error");
		if(err.length == 0)
		{
			var query = response.getElementsByTagName("query");
			alert("query length: " + query.length);
			var url = document.location + "&" + query.value;
			alert("url set to: " + url);
			document.location = url;
		}
		else
			alert("error returned from user preference functions:\n" + http_request.responseText);
	}
	else
	{
		if(http_request.readyState == 4 && http_request.status != 200)
			alert("error: status: " + http_request.status);
	}
}
*/
