(function($) {
    $.fn.selectChain = function(options) {
        var defaults = {
            key: "id",
            value: "value",
            dataType: 'json'
        };

        var settings = $.extend({}, defaults, options);

        if (!(settings.target instanceof $))
         settings.target = $(settings.target);

        return this.each(function() {
            var $this = $(this);
            $this.change(function() {
                var data = null;
                if (typeof settings.data == 'string') {
                    data = settings.data + '&' + this.name + '=' + $this.val();
                } else if (typeof settings.data == 'object') {
                    data = settings.data;
                    data[this.name] = $this.val();
                }
                if ($this.val() == "" || $this.val() == "0") {
                    settings.target.parent().slideUp('fast'); 
                } else {
                    settings.target.empty();
                    $.ajax({
                        url: settings.url,
                        data: data,
                        type: (settings.type || 'get'),
                        dataType: (settings.dataType || 'json'),
                        beforeSend: function() {
                            settings.target.parent().slideDown('medium', function() {
                          //      settings.target.after("<img class='spinner' src='images/spinner.gif'/>");
                            });
                        },
                        success: function(j) {
                            var options = [], i = 0, o = null;
                            var opt = '';
                            for (i = 0; i < j.length; i++) {
                                opt += "<option value='" + j[i][settings.key] + "'>" + j[i][settings.value] + "</option>";
                            }
                            settings.target.append(opt);
                        //    $('img.spinner').remove();
                            // hand control back to browser for a moment
                            setTimeout(function() {
                                settings.target
                                .find('option:first')
                                .attr('selected', 'selected')
                                .parent('select')
                                .trigger('change');
                            }, 0);
                        },
                        error: function(xhr, desc, er) {
                            // add whatever debug you want here.
                        }
                    });
                }
            });
        });
    };
})(jQuery);




