/* * build a autocomplete handler to a input#cbadDynamicSearch, as well as the whole search box. * hosting page must have: *
* dependency: * * * * */ (function($) { $.fn.cbSiteSearch = function() { var defaults = { text: "Search", template: "site", url: "http://sitesearch.collegeboard.org", maxlength: 5, appendTarget: this, collision: "none", of: null, offset: null, my: "left top", site: "site", at: "left bottom" } var options = $(this).data("cbsearch"); if (typeof options != "undefined") { if (typeof options == "string") { options = $.parseJSON(options.substring(1, options.length - 1)); } if (typeof options.text != "undefined") { defaults.text = options.text; } if (typeof options.site != "undefined") { defaults.template = options.site; } if (typeof options.url != "undefined") { defaults.url = options.url; } if (typeof options.maxlength != "undefined") { defaults.maxlength = options.maxlength; } if (typeof options.appendTo != "undefined") { defaults.appendTarget = options.appendTo; } if (typeof options.collision != "undefined") { defaults.collision = options.collision; } if (typeof options.of != "undefined") { defaults.of = options.of; } if (typeof options.offset != "undefined") { defaults.offset = options.offset; } if (typeof options.my != "undefined") { defaults.my = options.my; } if (typeof options.site != "undefined") { defaults.site = options.site; } if (typeof options.template != "undefined") { defaults.template = options.template; } if (typeof options.site == "undefined" && typeof options.template != "undefined") { defaults.site = options.template; } if (typeof options.site != "undefined" && typeof options.template == "undefined") { defaults.template = options.site; } if (typeof options.at != "undefined") { defaults.at = options.at; } } var formhtml = ""; var searchForm = $(formhtml).appendTo(this); searchForm.submit(function(event) { var qinput = $("input#cbadDynamicSearch").val(); qinput = $.trim(qinput); if (!qinput || qinput === defaults.text) { event.preventDefault(); return false; } }); var searchInput = $("input#cbadDynamicSearch", searchForm); searchInput.focus(function(event) { if ($(this).val() == defaults.text) { $(this).val(''); } }); searchInput.blur(function(event) { if (!$(this).val()) { $(this).val(defaults.text); } }); searchInput.autocomplete({ appendTo: $(defaults.appendTarget), position: { my: defaults.my, at: defaults.at, collision: defaults.collision, offset: defaults.offset }, source: function(request, response) { $.ajax({ url: "https://content.atomz.com/autocomplete/sp10/04/43/11", dataType: "jsonp", data: { max_results: 1000, query: request.term, beginning: 1 }, success: function(data) { var keywordmatch = []; for (var i = 0; data && (i < data.length); ++i) { if (data[i].toLowerCase().search(request.term.toLowerCase()) == 0) { keywordmatch[keywordmatch.length] = { 'label': data[i], 'value': data[i] }; } if (keywordmatch.length >= defaults.maxlength) { break; } } response(keywordmatch); } }); }, minLength: 2, select: function(event, ui) { searchInput.val(ui.item.value); searchForm.submit(); }, create: function(event, ui) { $('.ui-autocomplete.ui-menu').addClass('cbsearch'); } }); }; }(jQuery));