function validate_quantities (alert_element_id)
{
	var validated = true;
	var error_message = 'The quantity you entered is not valid!';

	/* check we have at least one positive numeric quantity on fields classed with "quantity" */
	var check = $("input.quantity").get();

	if (check.length) { 
		var one_valid = false;
		
		for (i = 0; i < check.length; i++) {
			var quantity = Number($(check[i]).val());
			var result = false;

			if (isNaN(quantity)) validated = false;
			else if (quantity > 0) {
				one_valid = true;
				result = true;
			}

			bg = result ? '#fff' : '#ff9';
			$(check[i]).css('background', bg);
		}

		// we need at least one valid quantity
		if (validated && !one_valid) validated = false;
	}

	if (validated) { 

		/* now validate those with a minimum and step quantity */
		var check = $("input[class^=validate]").get();

		for (i = 0; i < check.length; i++) {
			var classes = $(check[i]).attr('class').split(' ');
			var parameters = classes[0].split('-');

			var minimum_qty = Number(parameters[1]);
			var jump_qty    = Number(parameters[2]);
			var quantity    = Number($(check[i]).val());

			// only validate if quantity is specified - allow 0 here for blank quantity on unwanted variations, i.e. 
			//var result = (quantity == 0 || (quantity >= minimum_qty && (quantity % jump_qty) == 0));
			
			var result = true;
			
			if(quantity != 0)
			{
				if(quantity < minimum_qty)
				{
					error_message = "Quantity must be greater than "+minimum_qty;
					result = false;
				
				}else if((quantity % jump_qty) != 0)
				{
					error_message = "This product must be purchased in increments of "+jump_qty;
					result = false;
				}
			}

			bg = result ? '#fff' : '#ff9';
			$(check[i]).css('background', bg);

			validated = (validated && result);
		}
	}

	if (!validated){
	 	if(alert_element_id){
	 		$(alert_element_id).html(error_message);
	 	}else{
	 		alert (error_message);
		}
	 }

	return validated;
}

