// Update the calculated totals
function UpdateTotals() {
	// Let the server do the calculations
	$.post('/pages/includes/cart.ajax.php',
		{ 
			num_voters: $('#num_voters').val(),
			subscription_length: $('#subscription_length').val(),
			subscription_version: $('#subscription_version').val(),
			coupon_code: $('#coupon_code').val()
		}, 
		UpdateTotalsCallback, 'json'
	);
}

// AJAX callback for updating UI with totals
function UpdateTotalsCallback(data) {
	$('#price_per_voter_text').html("@ " + data.price_per_voter_text);
	$('#base_total').html("$" + number_format(data.base_total, 2));
	$('#volume_discount').html("-$" + number_format(data.volume_discount, 2));
	$('#multiyear_discount').html("-$" + number_format(data.multiyear_discount, 2));
	$('#total').html("$" + number_format(data.total, 2));
	$('#due').html("$" + number_format(data.due, 2));
	$('#due_message').html(data.due_message);
	
	if(data.coupon_info) {
		$('#coupon_info td').html(data.coupon_info);
		$('#coupon_info').show();
	} else {
		$('#coupon_info').hide();
	}
	
	if(data.coupon_rebate) {
		var label = "Coupon Discount";
		if(data.coupon_discount)
			label += " (" + data.coupon_discount + "%)";
		$('#coupon_discount').text(label);
		$('#coupon_rebate').text("$" + number_format(data.coupon_rebate, 2));
		$('#coupon_rebate').closest('tr').show();
	} else {
		$('#coupon_rebate').closest('tr').hide();
	}
}

function number_format( number, decimals, dec_point, thousands_sep ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival
    // %        note 1: For 1000.55 result with precision 1 in FF/Opera is 1,000.5, but in IE is 1,000.6
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'
 
    var n = number, prec = decimals;
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep;
    var dec = (typeof dec_point == "undefined") ? '.' : dec_point;
 
    var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
 
    var abs = Math.abs(n).toFixed(prec);
    var _, i;
 
    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;
 
        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
 
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }
 
    return s;
}
