function update_products_price() {
    var to_add = 0;
    var form = document.getElementById('cart_quantity');
    var old_string = document.getElementById('price').innerHTML;
    for (var i = 0; i < form.elements.length; i++) {
        var alt = '';
        el = form.elements[i];
        if (el.type == 'radio' || el.type == 'checkbox') {
            // check radio + checkbox elements
            if (el.checked !== true || el.alt.indexOf('|') === -1) {
                // not a valid element, skip
                continue;
            }
            var alt = el.alt;
        } else if (el.type == 'select-one') {
            // check dropdowns
            for (var j = 0; j < el.options.length; j++) {
                if (el.options[j].selected != true || el.options[j].title.indexOf('|') === -1) {
                    // not a valid element, skip
                    continue;
                }
                var alt = el.options[j].title;
            }
        }
        if (alt == '') {
            // no applicable element found
            continue;
        }
        // split alt element and validate again
        var parts = alt.split('|');
        if (parts.length != 2 || parts[1] == '') {
            continue;
        }
        // get number to add
        var new_add = parseFloat(strip_number(parts[1]));
        // honor prefix
        if (parts[0] == '-') {
            new_add *= -1;
        }
        // add to total add
        to_add += new_add;
    }
    // calculate and update
    var cur_price  = parseFloat(strip_number(old_string));
    var old_price  = to_german_format(cur_price);
    var new_price  = add_to_base_price(to_add);
    var new_string = old_string.replace(old_price, new_price);
    document.getElementById('price').innerHTML = new_string;
}
 
function add_to_base_price(to_add) {
    var base_price = parseFloat(document.getElementById('base_price').value);
    base_price += to_add;
    return to_german_format(base_price);
}
 
function strip_number(our_number) {
    our_number = our_number.replace(".", "");
    our_number = our_number.replace(",", ".");
    return our_number;
}
 
function to_german_format(num) {
    num = num.toFixed(2);
    num = String(num.replace(".", ","));
    return format_number(num, '.', ',');
}
 
function format_number(number_str, tpoint, delimiter) {
	number_str = String(number_str);
	x = number_str.split(delimiter);
	x1 = x[0];
	x2 = x.length > 1 ? delimiter + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + tpoint + '$2');
	}
	return x1 + x2;
}
 

