var statusDiv = '#status';
var errorDiv = '#status';
var cartContentsDiv = '#cartcontents';
var remoteItemDiv = '#remoteitem';
var logLevel = 2;

// Function pointers for handling AJAX errors
var ajaxServerSideErrorFunc = function(xml) {
	var message = "Server side error: "+$(xml).find('message').text();
	var errorDetail = $(xml).find('trace').text();
	log("Failed message: "+message, 1);
	log("Failed error detail: "+errorDetail, 1);
}

var ajaxErrorFunc = function(xml, message, errorDetail) {
	log("Failed message: "+message, 1);
	log("Failed error detail: "+errorDetail, 1);
}

function log(message, level) {
	if (logLevel < level) {
		return;
	}
	
	$('<div></div>').html(message).appendTo(statusDiv);
}

// Grab item from Drugstore.com
function fetchitem(storeurl, upc) {
	$(remoteItemDiv).empty();
	$('<div></div>').html('Getting item from drugstore.com...').appendTo(remoteItemDiv);
	$.ajax({
		type: "POST",
		url: "/ajax/cart/fetchitem",
		dataType: 'xml',
		data: { 
			storeurl: storeurl,
			upc: upc
		},
		success: function(xml, textStatus) {
			if ($(xml).find('status').text() != '0') {
				ajaxServerSideErrorFunc(xml);
			} else {
				$(xml).find('item').each(function() {
					var productID = $(this).find('productID').text();
					var productName = $(this).find('productName').text();
					var upcCode = $(this).find('upcCode').text();
					var inventoryStatus = $(this).find('inventoryStatus').text();
					var price = $(this).find('price').text();
					var retailPrice = $(this).find('retailPrice').text();
					
					var inventoryStatusLabel = "In Stock";
					if (inventoryStatus != 1) {
						inventoryStatusLabel = "NOT IN STOCK";
					}
					
					$(remoteItemDiv).empty();
					$('<div></div>').html('Product Name: '+productName).appendTo(remoteItemDiv);
					$('<div></div>').html('UPC Code: '+upcCode).appendTo(remoteItemDiv);
					$('<div></div>').html('Inventory Status: '+inventoryStatusLabel).appendTo(remoteItemDiv);
					$('<div></div>').html('Price: '+price).appendTo(remoteItemDiv);
					$('<div></div>').html('Retail Price: '+retailPrice).appendTo(remoteItemDiv);
					if (inventoryStatus == 1) {
						$('<div></div>').html('Quantity: <input id="additem_qty_'+productID+'" type="text" value="1"></input>').appendTo(remoteItemDiv);
						$('<div></div>').html("<button onClick='javascript:additem(\""+productID+"\",\""+storeurl+"\",\""+upc+"\")'>Add Item To Cart</button>").appendTo(remoteItemDiv);
					}
				});
			}
		},
		error: ajaxErrorFunc
	});
}

function additem(product, storeurl, upc) {
	var quantity = $('#additem_qty_'+product).val();
	log("Adding product "+product+" (quantity "+quantity+") to cart...", 1);
	$.ajax({
		type: "POST",
		url: "/ajax/cart/add",
		dataType: 'xml',
		data: { 
			product: product,
			storeurl: storeurl,
			upc: upc,
			quantity: quantity
		},
		success: function(xml, textStatus) {
			if ($(xml).find('status').text() != '0') {
				ajaxServerSideErrorFunc(xml);
			} else {
				$(xml).find('item').each(function() {
					// Added to cart, can use these vars to display if you want
					var productID = $(this).find('productID').text();
					var productName = $(this).find('productName').text();
					var upcCode = $(this).find('upcCode').text();
					var quantity = $(this).find('quantity').text();
					var inventoryStatus = $(this).find('inventoryStatus').text();
					var price = $(this).find('price').text();
					var retailPrice = $(this).find('retailPrice').text();
					log('Product '+productName+' added to cart', 1);
				});
				getitems();
			}
		},
		error: ajaxErrorFunc
	});
}

function updateqty(product) {
	var quantity = $('#update_qty_'+product).val();
	log('Updating product '+product+' with quantity '+quantity, 1);
	$.ajax({
		type: "POST",
		url: "/ajax/cart/updateqty",
		dataType: 'xml',
		data: { 
			product: product,
			quantity: quantity
		},
		success: function(xml, textStatus) {
			if ($(xml).find('status').text() != '0') {
				ajaxServerSideErrorFunc(xml);
			} else {
				log('Product '+product+' quantity updated.', 1);
				getitems();
			}
		},
		error: ajaxErrorFunc
	});
}

function clearcart() {
	log('Clearing cart...', 1);
	$.ajax({
		type: "GET",
		url: "/ajax/cart/clear",
		dataType: 'xml',
		success: function(xml, textStatus) {
			if ($(xml).find('status').text() != '0') {
				ajaxServerSideErrorFunc(xml);
			} else {
				log('Cart cleared.', 1);
				getitems();
			}
		},
		error: ajaxErrorFunc
	});
}

function removeitem(product) {
	log('Removing product = '+product, 1);
	$.ajax({
		type: "POST",
		url: "/ajax/cart/remove",
		dataType: 'xml',
		data: { 
			product: product
		},
		success: function(xml, textStatus) {
			if ($(xml).find('status').text() != '0') {
				ajaxServerSideErrorFunc(xml);
			} else {
				log('Product removed.', 1);
				getitems();
			}
		},
		error: ajaxErrorFunc
	});
}

function getitems() {
	$(cartContentsDiv).empty();
	log('Refreshing cart...', 1);
	$.ajax({
		type: "GET",
		url: "/ajax/cart/allitems",
		dataType: 'xml',
		success: function(xml, textStatus) {
			if ($(xml).find('status').text() != '0') {
				ajaxServerSideErrorFunc(xml);
			} else {
				var itemCount = $(xml).find('item').length;
				$(cartContentsDiv).empty();
				$('<div></div>').html('Cart count: '+itemCount).appendTo(cartContentsDiv);
				$(xml).find('item').each(function() {
					var productID = $(this).find('productID').text();
					var productName = $(this).find('productName').text();
					var quantity = $(this).find('quantity').text();
					
					var productDiv = $('<div></div>');
					$('<div></div>').html('Product: '+productName+', Qty: '+quantity).appendTo(productDiv);
					$('<div></div>').html('<button onClick="javascript:removeitem(\''+productID+'\')">Remove</button>').appendTo(productDiv);
					
					var updateQtyDiv = $('<div></div>');
					$('<div></div>').html("Update Quantity:").append(updateQtyDiv);
					$('<div></div>').html('<input id="update_qty_'+productID+'" type="text" value="1"></input>').appendTo(updateQtyDiv);
					$('<div></div>').html('<button onClick="javascript:updateqty(\''+productID+'\')">Update Quantity').appendTo(updateQtyDiv);
					updateQtyDiv.appendTo(productDiv);
					
					productDiv.appendTo(cartContentsDiv);
				});
				log('Cart refreshed.', 1);
			}
		},
		error: ajaxErrorFunc
	});
}

function transfercart() {
	log("Transfering cart to remote store...", 1);
	$.ajax({
		type: "GET",
		url: "/ajax/cart/transfer",
		dataType: 'xml',
		data: { 
		},
		success: function(xml, textStatus) {
			if ($(xml).find('status').text() != '0') {
				ajaxServerSideErrorFunc(xml);
			} else {
				var fullURL = null;
				var url = $(xml).find('url').text();
				var post = null;
				if ($(xml).find('post').length != 0) {
					post = $(xml).find('post').text();
					fullURL = url+"?"+post;
				} else {
					fullURL = url;
				}
				
				window.location = fullURL;
				//getitems();
				//window.open(fullURL, '_blank');
			}
		},
		error: ajaxErrorFunc
	});
}

function simservererror(message) {
	log("Initiating call that will produce a server runtime error..", 1);
	$.ajax({
		type: "POST",
		url: "/ajax/cart/errortest",
		dataType: 'xml',
		data: { 
			message: message
		},
		success: function(xml, textStatus) {
			if ($(xml).find('status').text() != '0') {
				log("Call failed as expected.");
				ajaxServerSideErrorFunc(xml);
			} else {
				log("Call succeeded, but should have failed.");
			}
		},
		error: ajaxErrorFunc
	});
}

function simajaxerror(message) {
	log("Initiating call that will produce an ajax-level error..", 1);
	$.ajax({
		type: "POST",
		url: "/ajax/foobarbaz/farkel",
		dataType: 'xml',
		data: { 
			message: message
		},
		success: function(xml, textStatus) {
			if ($(xml).find('status').text() != '0') {
				log("Call failed server-side, but expected call to fail at ajax-level.");
				ajaxServerSideErrorFunc(xml);
			} else {
				log("Call succeeded, but should have failed.");
			}
		},
		error: ajaxErrorFunc
	});
}

function foo() {
	alert("Foo!");
}
