// quick function that returns a valid currency, to 2 decimal places.
function curr(str) {
	str = (Math.round(parseFloat(str) * 100) / 100) + "";
	finddot = str.indexOf(".");
	if(finddot < 0) {
		str += ".00";
	}
	else if((str.length - finddot) == 2) {
		str += "0";
	}
	if(finddot == 0) {
		str = "0" + str;
	}
	return str;
}

//Format numbers to currency, rather than fields as below.
function currFormat(num) {
    num = isNaN(num) || num === '' || num === null ? 0.00 : num;
    return parseFloat(num).toFixed(2);
}

// a basic function to open a basic window with user specified url, width and heights.
function openwindow(url, width, height) {
	featurestr = "directories=0,height=" + height + ",location=0,menubar=0,resizable=1,scrollbars=1,status=0,toolbar=0,width=" + width;
	open(url, "_blank", featurestr);
}

/**
 * Functions for use with the Ajax order lookup/add system.
 * 
 * A lot of this is duplicated in the admin order_widget.js
 * 
 */


// Set up our automcompleters and other behaviours.
$(document).ready(function(){
	
	var ajaxDefaults = { url: 'ajax_handler.php', dataType: 'json' };

	$('#part_number').autocomplete({
		source: function(request, response) {
		$.ajax($.extend(ajaxDefaults, {
				data: { action: "parts_by_number", term: request.term },
				success: function(data) { mapPartValues(response, data, 'part_number'); }
			}));
		},
		
		select: function(event, ui) { 
			$('#part_name').val(ui.item.name);
			$('#part_option_id').val(ui.item.option_id);	 
		}
		
	});

	$('#part_name').autocomplete({
		source: function(request, response) {
		$.ajax($.extend(ajaxDefaults, {
				data: 		{ action: 'parts_by_name', term: request.term },
				success: 	function(data) { mapPartValues(response, data, 'name'); }
			}));
		},
		
		select: function(event, ui) { 
			$('#part_number').val(ui.item.part_number);
			$('#part_option_id').val(ui.item.option_id);	
		}
		
	});

	$('#add_order_line').bind('click', function(e) {
		
		$('#orders').show();
		
		var nextOrderLine = parseInt($('#next_order_line').val());
		$.ajax({
			url: 		'ajax_handler.php',
			dataType: 	'html',
			data:		{ 
				action: 'part_order_line', 
				term: $('#part_option_id').val(), 
				ol_no: 	nextOrderLine
			},
			success:	function(data) {
				if (data.indexOf('Error:') != -1) { 	alert(data); }
				else { 
					$('#order_lines').append(data);
					$('#next_order_line').val(nextOrderLine + 1);
					$('#part_number').val(''); 
					$('#part_name').val(''); 
					$('#part_option_id').val(''); 
					updateTotals();
				}
			}
		});
	});

	$('.update_totals').change(function () { updateTotals(); });

	updatePickingLists(); // in case we have a customer Id already given.
	
});

//Calculate order totals when changes are made.
var orderTotal;
function updateTotals() {
	var lineSubTotal = 0;
	var vatTotal = 0;
	var postageTotal = 0;
	orderTotal = 0;
	
	for (var orderNum = 1; orderNum < parseInt($('#next_order_line').val()); orderNum++) {
		if ($('#quantity_'+orderNum).val()) {
			lineSubTotal = parseFloat($('#quantity_'+orderNum).val()) * parseFloat($('#price_'+orderNum).html());
			if ($('#vat_'+orderNum).val() > 0) { vatTotal = vatTotal + (lineSubTotal * vatRate); }
			orderTotal = orderTotal + lineSubTotal;
			$('#subtotal_'+orderNum).html(currFormat(lineSubTotal));
		}
	}

	$('#goods_total').html(currFormat(orderTotal))
	$('#vat_total').html(currFormat(vatTotal));
	
	$('#order_total').html(currFormat(orderTotal + postageTotal + vatTotal));
	
}


// Handle the option pricing
function updatePartPrice(part,option) {
	var newPrice = parseFloat($('#part_'+part+'_option_'+option+'_value').val().replace(/.+ @ /, ''));
	if (! newPrice) { newPrice = parseFloat($('#default_price_'+part).val()); }
	
	$('#price_'+part).html(currFormat(newPrice));
	updateTotals();
}

// Remove an order line, update totals
function deletePart(part) {
	$('.order_line_'+part).fadeOut(500, function(){
		$('.order_line_'+part).empty().remove();
		updateTotals();
	});
}


// If we have a customer then see if they have any open picking lists and allow this order to be added to it.
function updatePickingLists() {
	
	var customerId = parseInt($('#customer_id').val());

	if (isNaN(customerId)) return;

	$('#pickinglist_select').load('ajax_handler.php', 
								  { action: "pickinglists_by_customer", 
		  							term: customerId,
		  							list_id: $('#called_from').val() });

}

// Set values for returned part data
function mapPartValues(response, data, value_key) {
	response($.map(data, function(item) {
		return {
			label: 			item.part_number + ' - ' + item.name + ' - &pound;' + item.price,
			value: 			item[value_key],
			id: 			item.part_id,
			option_id:		item.option_id,
			name: 			item.name,
			part_number: 	item.part_number
		};
	}));
}


