pandp=[];
function pandp_add_top(i,data){
	var name=$('<input id="pandp_name_'+i+'" />')
		.val(data.name || '')
	var constraint=$('<div class="pand-constraint" id="pandp_constraint_wrapper_'+i+'"></div>');
	var row=$('<div class="pandp_row">Postage Name: </div>')
		.append(name)
		.append(constraint);
	$('#postage_wrapper').append(row);
	pandp_show_constraints(i, data.constraints || []);
}
function pandp_rebuild_constraints(prefix){
	var cstrs=[],el;
	for(var i=0;el=document.getElementById('pandp_constraint_'+prefix+i);++i){
		var cstr={};
		cstr.type=el.value;
		switch(cstr.type){
			case 'set_value': case 'total_less_than_or_equal_to': case 'total_more_than_or_equal_to':
			case 'total_weight_less_than_or_equal_to': case 'total_weight_more_than_or_equal_to': // {
				cstr.value=document.getElementById('pandp_constraint_value_'+prefix+i).value;
				break;
			// }
		}
		if(cstr.type!='set_value')cstr.constraints=pandp_rebuild_constraints(prefix+i+'_');
		cstrs.push(cstr);
	}
	return cstrs;
}
function pandp_rebuild_value_from_top(){
	pandp=[];
	for(var i=0;el=document.getElementById('pandp_constraint_wrapper_'+i);++i){
		var cstr={};
		cstr.name=document.getElementById('pandp_name_'+i).value;
		cstr.constraints=pandp_rebuild_constraints(i+'_');
		pandp.push(cstr);
	}
	$('#postage').val(Json.toString(pandp));
	pandp_rebuild_widget();
}
function pandp_rebuild_widget(){
	$('#postage_wrapper').empty();
	var has_blank=0;
	for(var i=0;i<pandp.length;++i){
		pandp_add_top(i,pandp[i]);
		if(pandp[i].name=='')has_blank=1;
	}
	if(!has_blank)pandp_add_top(i,{});
}
function pandp_show_constraints(i, cstrs_old){
	if(cstrs_old.length==0 || cstrs_old[cstrs_old.length-1].type!='set_value')cstrs_old.push({
		type:'set_value',
		value:'0'
	});
	var cstrs=[];
	for(var j=0;j<cstrs_old.length;j++){
		cstrs.push(cstrs_old[j]);
		if(cstrs_old[j].type=='set_value')j=cstrs_old.length;
	}
	var options=[
		['set_value','set postage to'],
		['total_less_than_or_equal_to','if total <='],
		['total_more_than_or_equal_to','if total >='],
		['total_weight_less_than_or_equal_to','if weight <='],
		['total_weight_more_than_or_equal_to','if weight >=']
	];
	var wrapper=$('#pandp_constraint_wrapper_'+i);
	for(var j=0;j<cstrs.length;++j){
		var prefix=j?'else ' : '';
		var cstr=cstrs[j];
		var opts=[],tmp;
		for(k=0;k<options.length;++k){
			tmp='<option value="'+options[k][0]+'"';
			if(options[k][0]==cstr.type)tmp+=' selected="selected"';
			tmp+='>'+prefix+options[k][1]+'</option>';
			opts.push(tmp);
		}
		var selectbox=$('<select id="pandp_constraint_'+i+'_'+j+'">'+opts.join('')+'</select>')
			.change(pandp_rebuild_value_from_top);
		wrapper.append(selectbox);
		switch(cstr.type){
			case 'set_value': // {
				if(!cstr.value)cstr.value=0;
				$('<input id="pandp_constraint_value_'+i+'_'+j+'">')
					.val(cstr.value)
					.appendTo(wrapper);
				break;
			// }
			case 'total_less_than_or_equal_to': case 'total_more_than_or_equal_to':
			case 'total_weight_less_than_or_equal_to': case 'total_weight_more_than_or_equal_to': // {
				if(!cstr.value)cstr.value=0;
				$('<input id="pandp_constraint_value_'+i+'_'+j+'" class="small">')
					.val(cstr.value)
					.appendTo(wrapper);
				break;
			// }
		}
		wrapper.append('<div class="pand-constraint" id="pandp_constraint_wrapper_'+i+'_'+j+'"></div>');
		if(cstr.type!='set_value')pandp_show_constraints(i+'_'+j, cstr.constraints || []);
	}
}
$(document).ready(function(){
	var p=document.getElementById('postage').value;
	if(p)pandp=eval('{'+p+'}');
	else $('#postage').val('[]');
	pandp_rebuild_widget();
	$('#pandp_action').mousedown(pandp_rebuild_value_from_top);
});

