docs: function run_search(query) {
        	 var cache_key = query + computeURL();
            //var cached_results = cache.get(cache_key);
            /*if (cached_results) {
                if ($.isFunction($(input).data("settings").onCachedResult)) {
                  cached_results = $(input).data("settings").onCachedResult.call(hidden_input, cached_results);
                }
                populate_dropdown(query, cached_results);
            } else {*/
                // Are we doing an ajax search or local data search?
                if($(input).data("settings").url) {
                    var url = computeURL();
                    // Extract existing get params
                    var ajax_params = {};
                    ajax_params.data = {};
                    if(url.indexOf("?") > -1) {
                        var parts = url.split("?");
                        ajax_params.url = parts[0];
  
                        var param_array = parts[1].split("&");
                        $.each(param_array, function (index, value) {
                            var kv = value.split("=");
                            ajax_params.data[kv[0]] = kv[1];
                        });
                    } else {
                        ajax_params.url = url;
                    }
  
                    // Prepare the request
                    ajax_params.data[$(input).data("settings").queryParam] = query;
                    ajax_params.type = $(input).data("settings").method;
                    ajax_params.dataType = $(input).data("settings").contentType;
                    if ($(input).data("settings").crossDomain) {
                        ajax_params.dataType = "jsonp";
                    }
  
                    // exclude current tokens?
                    // send exclude list to the server, so it can also exclude existing tokens
                    if ($(input).data("settings").excludeCurrent) {
                        var currentTokens = $(input).data("tokenInputObject").getTokens();
                        var tokenList = $.map(currentTokens, function (el) {
                            if(typeof $(input).data("settings").tokenValue == 'function')
                                return $(input).data("settings").tokenValue.call(this, el);
  
                            return el[$(input).data("settings").tokenValue];
                        });
  
                        ajax_params.data[$(input).data("settings").excludeCurrentParameter] = tokenList.join($(input).data("settings").tokenDelimiter);
                    }
  
                    // Attach the success callback
                    ajax_params.success = function(results) {
                      cache.add(cache_key, $(input).data("settings").jsonContainer ? results[$(input).data("settings").jsonContainer] : results);
                      if($.isFunction($(input).data("settings").onResult)) {
                          results = $(input).data("settings").onResult.call(hidden_input, results);
                      }
  
                      // only populate the dropdown if the results are associated with the active search query
                      if(input_box.val() === query) {
                          populate_dropdown(query, $(input).data("settings").jsonContainer ? results[$(input).data("settings").jsonContainer] : results);
                      }
                    };
  
                    // Provide a beforeSend callback
                    if (settings.onSend) {
                      settings.onSend(ajax_params);
                    }
  
                    // Make the request
                    $.ajax(ajax_params);
                } else if($(input).data("settings").local_data) {
                    // Do the search through local data
                   var results = $.grep($(input).data("settings").local_data, function (row) {
                        return row[$(input).data("settings").propertyToSearch].toLowerCase().indexOf(query.toLowerCase()) > -1;
                    });
  
                    cache.add(cache_key, results);
                    if($.isFunction($(input).data("settings").onResult)) {
                        results = $(input).data("settings").onResult.call(hidden_input, results);
                    }
                    populate_dropdown(query, results);
                }
            //}
        }