jQuery.fn.updateSelect = function(url, settings) {
  
  settings = jQuery.extend({
     name: 'name',
     rel: 'rel',
     dataparam: 'data',
     blankoption: '(choose)',
     addblankoption: true,
     clearval: '-none-',
     changeOnBlank: true
  }, settings);
  
  return this.each(function(){
  	$(this).change(function(){
	    if ($(this).val()!='' || settings['changeOnBlank']) {
	      var data={};
	      var me=$(this).attr(settings['name']);
	      var otherselect=$(this).attr(settings['rel']);
	      var otherselectval=$('#'+otherselect).val();
	      data[settings['dataparam']]=otherselect;
	      data[me]=$(this).val();
	      $.getJSON(url,data, function(j){
	        var options = '';
	        if (j['selected']) otherselectval=j['selected'];
	        if (j['selected']==settings['clearval']) otherselectval='';
	        if (settings['addblankoption']) {
            var s=(otherselectval!='')?'':' selected="selected"';
            options = '<option value=""'+s+'>'+settings['blankoption']+'</option>';
          }
          $.each(j, function(k,v) {
            if (k!='selected') {
              var s=(otherselectval==k)?' selected="selected"':'';
              options += '<option value="'+k+'"'+s+'>'+v+'</option>';
            }
          });
          $("#"+otherselect).html(options).val(otherselectval);
          if (j['selected'] && (j['selected']!=settings['clearval'])) $("#"+otherselect).change();
	      });
	    }
  	});
  });
}
