(function ($) {
    $.fn.selectChain = function (options) {
        var defaults = {
            key: "id",
            value: "label",
            data: "ajax=true"
        };
        
        var settings = $.extend({}, defaults, options);
        
        if (!(settings.target instanceof $)) settings.target = $(settings.target);
        
        return this.each(function () {
            var $$ = $(this);
            
            $$.change(function () {
            	str_id=settings.target.attr('id');
            	str_name=settings.target.attr('name');

            	parent_model=str_name.match('\\[([^\\]]*)')[1];
//            	console.log(parent_model);    
            	model=str_id.replace(parent_model, '').replace('Id', '');
            	
            	
                var data = null;
                
                if (typeof settings.data == 'string') {
                    data = settings.data + '&' + this.name + '=' + $$.val();
                } else if (typeof settings.data == 'object') {
                    data = settings.data;
                    data[this.name] = $$.val();
                }

            	settings.url_invio=settings.url+model;
                settings.target.empty();
//                console.log(data);
				$.ajax({
					url: settings.url_invio,
					data: data,
					type: (settings.type || 'get'),
					dataType: 'json',
					success: function (json) {
						key=0;
						for (i in json){
							// required to get around IE bug (http://support.microsoft.com/?scid=kb%3Ben-us%3B276228)
							o = document.createElement("OPTION");

							o.value =i;
							o.text = json[i];
							settings.target.get(0).options[key] = o;
							
							key++;
						}

						
						// 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.
						alert("an error occurred");
					}
				});
            });
        });
    };
})(jQuery);

