(function ($) {
    $.fn.selectChain = function (options) {
        var defaults = {
            key: "id",
            value: "label",
            data: "ajax=true",
            model: "",
            url: "",
            selected:""
        };
        
        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);    
            	
            	if(settings.model=''){
            		model=str_id.replace(parent_model, '').replace('Id', '');
            	}else{
            		model=settings.model;
            	}
            	
            	
                var data = null;
                
                if (typeof settings.data == 'string') {
//                  data = settings.data + '&' + this.name + '=' + $$.val();
                	data = settings.data;
                } else if (typeof settings.data == 'object') {
                    data = settings.data;
                    data[this.name] = $$.val();
                }

                id_select=this.name.replace(/data\[.*\]\[(.*)\]/,'$1');

            	settings.url_invio=settings.url;
            	settings.url_invio+=model+'/';
            	settings.url_invio+=id_select+':'+$$.val();
            	
//           	console.log(settings.url_invio);
            	settings.target.attr('disabled','disabled');
            	settings.target.empty();
            	settings.target.after(' <img src="'+DIR+'img/ajax-loader-small.gif" alt="Caricamento in corso..." title="Caricamento in corso..." />');
//				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++;
						}


		            	indiceSelezionato=settings.selected;

		            	settings.target.removeAttr('disabled');
		            	settings.target.next('img').remove();
		            	
						// hand control back to browser for a moment
						setTimeout(function () {
							settings.target
							.find('option[value='+indiceSelezionato+']')
							.attr('selected', 'selected')
							.parent('select')
							.trigger('change');
						}, 0);
					},
					error: function (xhr, desc, er) {
						// add whatever debug you want here.
						alert("an error occurred");
					}
				});
            });
        });
    };
})(jQuery);

