
function on_product_option_selected(){
	var form = document.forms[0], opt_selected = false;
	var product_price_default = parseFloat(form["product_price_default"].value);
	var price_total = product_price_default;
	for (var i=1,iE=product_options.length,item; i<iE&&(item=product_options[i][0]); i++){
		var slct = form["product_option" + item.prod_option_id];
		var price = get_price_of_selected_option(slct);
		price_total += price;
		if (!opt_selected && slct.selectedIndex>0) opt_selected = true;
	}
	var n_price = document.getElementById("product_price_total");
	n_price.innerHTML = opt_selected? Num.toMoney(price_total): "<i>starting at <b>"+ Num.toMoney(product_price_default) +"</b></i>";
}

function get_price_of_selected_option(slct){
	var prod_option_id = /(\d+)$/.exec(slct.name)[1];
	var opt_value_id = slct.value;
	var prod_option = get_prod_option_byId(prod_option_id);
	var opt_value = prod_option? get_prod_option_value_byId(prod_option, opt_value_id): null;
	//alert(prod_option[0].label +"\n"+ opt_value.opt_value_name +"\t"+ opt_value.price);
	return opt_value && opt_value.price? parseFloat(opt_value.price): 0;
}

function get_prod_option_byId(prod_option_id){
	for (var i=1,iE=product_options.length,item; i<iE&&(item=product_options[i]); i++)
		if (item[0].prod_option_id == prod_option_id) return item;
	return null;
}

function get_prod_option_value_byId(prod_option, opt_value_id){
	for (var i=1,iE=prod_option[1].length,item; i<iE&&(item=prod_option[1][i]); i++)
		if (item.opt_value_id == opt_value_id) return item;
	return null;
}


/////////////////////////
// Numeric utils
//
var Num = {
	_ksep: function(n, sep) { sep=sep?sep:','; var s=String(n); var re=/(-?[0-9]+)([0-9]{3})/; while(re.test(s)) s = s.replace(re, '$1'+sep+'$2');  return s; },
	toMoney: function(n, fmt) {
		style = {negsign:'-',csym:'$',sym:'',ksep:',',spot:'.',frac:2,compact:false,pennies:false};
		//style = d2.obj.update(style, fmt);
		// convert to pennies, truncate to integer
		var neg = n < 0 ? -1 : 1;
		var N = parseInt( Math.abs( (style.pennies ? n: n*100)+(neg*0.001) ) );
		var man = parseInt(N/100);
		var dec = parseInt(N-(man*100));
		var frac = (style.compact && 0.00 == dec)? '': style.spot + ("00000" + String(dec)).slice(0-style.frac);
		return style.csym + (neg==-1? '-': '') + this._ksep(man,style.ksep) + frac + style.sym;
	},
	toPennies: function(n) {
		var neg = n < 0 ? -1 : 1;
		return neg * parseInt( Math.abs( (n*100)+(neg*0.001) ) );
	}
};
