jQuery.fn.chainSelect=function(target,url,settings){
  return this.each(function(){
	$(this).change(function(){
		settings = jQuery.extend({
			after : null,
			before : null,
			usePost : false,
			defaultValue : null,
			parameters : {'_id' : $(this).attr('id'), '_name' : $(this).attr('name')}
        },settings);
		settings.parameters._value=$(this).val();
		if (settings.before != null){
			settings.before( target );
		}
		ajaxCallback = function(data, textStatus){
			$(target).html("");
			data = eval(data);
			for (i = 0; i < data.length; i++){
			  for ( key in data[i] ){	
					$(target).get(0).add(new Option(data[i][key],[key]), document.all ? i : null);
              }
			}
			if (settings.defaultValue != null){
				$(target).val(settings.defaultValue);
			}else{
				$("option:first", target).attr( "selected", "selected" );
			}
			if(settings.after != null){
				settings.after(target);
			}
			$(target).change();
		};
		if (settings.usePost == true){
			$.post( url, settings.parameters, ajaxCallback );
		}else{
			$.get( url, settings.parameters, ajaxCallback );
		}
	});
  });
};