$(function() {
	$("div#menumain ul.item").each(function() {
		$me = $(this);
		// code
		$me.data('code', $me.attr('id').replace('item-', ''));
		
		// item name
		$me.data('name', $('li.item', $me).text());
		
		// quantity
		$me.data('quantity', 0);
		
		// price
		$price = parseFloat($("li.price span", $me).text());
		$me.data('price', $price);
		
		// input
		$("input", $me).data('item', $me);
	});
	$("div#menumain input.add").click(function() {
		$me = $(this);
		$item = $($me.data('item'));
		// quantity increase
		$quan = $item.data('quantity') + 1;
		$item.data('quantity', $quan);
		$("label.qty", $item).text($quan);
		if ($quan > 0) $item.addClass('added');
		orderChanged(true);
	});
	$("div#menumain input.remove").click(function() {
		$me = $(this);
		$item = $($me.data('item'));
		// quantity increase
		$quan = $item.data('quantity') - 1;
		if ($quan < 0) $quan = 0;
		$item.data('quantity', $quan);
		$("label.qty", $item).text($quan);
		if ($quan == 0) $item.removeClass('added');
		orderChanged(true);
	});
	$("div#menuorder").each(function() {
		$me = $(this);
		// for the menu order list
		$('ul', $me).each(function() {
			$ul = $(this);
			// store the empty state in data('None')
			$ul.data('None', $ul.html());
			$ul.data('numItems', 0);
		});
		
		// when clicking the cancel order button
		$("input#cancelbtn", $me).click(function() {
			// for every added item
			$("div#menumain ul.added").each(function() {
				$ul = $(this);
				// remove from added
				$ul.removeClass("added");
				
				// reset quantity
				$ul.data('quantity', 0);
				$("label.qty", $ul).text("0");
			});
			
			$("div#menuorder ul").data('numItems', 0);
			// update the order and server
			orderChanged(true);
		});
		
		// when clicking the place order button
		$("input#orderbtn", $me).click(function() {
			if ($('div#menuorder ul').data('numItems') > 0) {
				document.location.href = "http://www.eatingineatingout.co.uk/placeorder.php?id=" + $restaurantId;
			} else {
				alert("You haven't selected any items!");
			}
		});
	});
	function orderChanged(serverUpdate) {
		// item data for ajax server update
		var $data = [];
		
		// for the menu order box
		$("div#menuorder").each(function() {
			var $html = "";
			var $totalHtml = "";
			var $count = 0;
			var $listcount = 0;
			var $total = 0;
			
			// for each added item
			$("div#menumain ul.added").each(function() {
				var $item = $(this);
				var $code = $item.data('code');
				var $name = $item.data('name');
				var $quan = $item.data('quantity');
				var $price = $item.data('price');
				var $mulprice = $price * $quan;
				
				// increase number of items by quantity
				$count += $quan;
				// increase total by calculated price (price of 1 times quantity)
				$total += $mulprice;
				// increase list items count
				$listcount++;
				
				// build list item
				$html += '<li>';
				// code and name
				$html += '<p>' + $code + ': <a href="#item-'+$code+'"><strong>' + $name + '</strong></a></p>';
				// quantity x price of 1 = price of all
				$html += '<p class="pri">' + $quan + ' &times; ' + toPound($price) + ' = ' + toPound($mulprice) + '</p>';
				// close list item
				$html += '</li>';
				
				// add item to data for ajax server update
				$data.push({
					'code': $code,
					'quantity': $quan
				});
			});
			
			// over 7 list items, then make box scroll
			if ($listcount > 7) {
				$('ul', this).addClass('scroll');
			} else {
				$('ul', this).removeClass('scroll');
			}
			
			// no items?
			if ($count == 0) {
				$html = $('ul', this).data('None');
			}
			
			// add items to list
			$('ul', this).html($html);
			$('ul', this).data('numItems', $count);
			
			// total items and total cost
			$('div.total label.totalitems', this).html($count);
			$('div.total label.totalprice', this).html(toPound($total));
		});
		
		if (serverUpdate != false)
			ajaxOrder($data);
	}
	function ajaxOrderCallback($data, $func) {
		if ($data.length == 0) $data = "Empty";
		$data = {
			'data': $data,
			'restaurantId': $restaurantId
		};
		$.post('orderUpdate.php', $data, $func);
	}
	function ajaxOrder($data) {
		ajaxOrderCallback($data, function(result) { })
	}
	
	/**
	 * loads up the customer's current order on page load
	 */
	function loadPreviousOrder() {
		// make a request
		$.getJSON('orderUpdate.php', { 'restaurantId': $restaurantId }, function(result){
			// if the result is valid
			if (result != false) {
				// loop through each item returned
				for (var i = 0, j = result.length; i < j; ++i) {
					// get the code
					$code = result[i]['code'];
					// and the quantity
					$quan = parseInt(result[i]['quantity']);
					
					// find the menu list item
					$item = $("div#menumain ul#item-" + $code);
					
					// increase quantity
					$item.data('quantity', $quan);
					$("label.qty", $item).text($quan);
					if ($quan > 0) $item.addClass('added');
				}
				
				// update the order
				orderChanged(false);
			}
		});
	} loadPreviousOrder();
	
	$(window).scroll(function() {
		$top = $(window).scrollTop() - 370;
		$top = $top > 0 ? $top : 0;
		$("div#menunav, div#menuorder").css({"top": $top+"px"});
	});
	function CurrencyFormatted(amount)
	{
		var i = parseFloat(amount);
		if(isNaN(i)) { i = 0.00; }
		var minus = '';
		if(i < 0) { minus = '-'; }
		i = Math.abs(i);
		i = parseInt((i + .005) * 100);
		i = i / 100;
		s = new String(i);
		if(s.indexOf('.') < 0) { s += '.00'; }
		if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
		s = minus + s;
		return s;
	}
	// end of function CurrencyFormatted()
	function toPound($value) {
		return '&#163;' + CurrencyFormatted($value);
	}
});
