var unitPattern = /units\[(\d+)\]/;

function getNumber(value) {
	if(value.length == 0)
		return 0;
	return new Number(value);
}
function getNumberByClass(elem, clazz) {
	var numberElem = $('.' + clazz, elem);
	numberElem.removeClass('invalid');
	var result = getNumber(numberElem.val());
	if(isNaN(result))
		numberElem.addClass('invalid');
	return result;
}

function calculate() {

	// Add up units section

	var totalSelfAssessment = 0;
	var hasErrors = false;
	$('input.unit').each(function() {
		$(this).removeClass('invalid');
		var id = this.id;
		if((result = unitPattern.exec(id)) != null) {
			var unitNumber = result[1];
			var volume = $(document.getElementById('volume[' + unitNumber + ']')).val();
			var quantity = getNumber($(this).val());
			if(isNaN(quantity)) {
				hasErrors = true;
				$(this).addClass('invalid');
			}
			else if(quantity) {
				totalSelfAssessment += volume * quantity;
			}
		}
	});
	if(hasErrors)
		totalSelfAssessment = 'INVALID';
	$('input#totalSelfAssessment').val(totalSelfAssessment);

	// Add up items for removal section

	var dimUnits = $('#dimensionsUnits').val();
	var totalItemsForRemoval = 0;
	var hasErrors = false;
	$('tr.itemsForRemoval').each(function() {
		var length = getNumberByClass(this, 'length');
		var breadth = getNumberByClass(this, 'breadth');
		var height = getNumberByClass(this, 'height');
		var quantity = getNumberByClass(this, 'quantity');
		if(isNaN(length) || isNaN(breadth) || isNaN(height) || isNaN(quantity)) {
			hasErrors = true;
		}
		else if(length && breadth && height && quantity) {
			var volume
			if(dimUnits == 'centimetres')
				volume = (length * breadth * height * quantity) * .000035315;
			else 
				volume = (length * breadth * height * quantity) / 1728;
			totalItemsForRemoval += volume;
		}
	});
	if(hasErrors) {
		totalItemsForRemoval = 'INVALID';
	}
	else {
		if(totalItemsForRemoval > 0 && totalItemsForRemoval < 1) {
			totalItemsForRemoval = 1;
		}
		else {
			var v1 = totalItemsForRemoval * 10;
			var v2 = Math.round(v1);
			totalItemsForRemoval = v2 / 10;
		}
	}
	$('input#totalItemsForRemoval').val(totalItemsForRemoval);
}

function setUnits() {
	$('#dimUnits').text($('#dimensionsUnits').val());
	calculate();
}

$(function(){
	calculate();
	setUnits();
});

