$(function() { var cache = {}, lastXhr, fullTerm; var mtype_heading = { "B" : "", "E" : "eBook", "R" : "", "M" : "Music", "C" : "Classical", "V" : "Movie", "G" : "Video Game" }; var field_heading = { "BA" : "Author", "BT" : "Title", "BB" : "Subject", "BL" : "Subject", "BP" : "Publisher", "BC" : "Contributor", "BK" : "Keyword", "EA" : "Author", "ET" : "Title", "EB" : "Subject", "EL" : "Subject", "EP" : "Publisher", "EC" : "Contributor", "EK" : "Keyword", "RA" : "Author", "RT" : "Title", "RB" : "Subject", "RL" : "Subject", "RP" : "Publisher", "RC" : "Contributor", "RK" : "Keyword", "MA" : "Artist", "MT" : "Title", "MB" : "Genre", "ML" : "Genre", "MP" : "Label", "MC" : "Composer", "MK" : "Keyword", "CA" : "Artist", "CT" : "Title", "CB" : "Genre", "CL" : "Genre", "CP" : "Label", "CC" : "Composer", "CK" : "Keyword", "VA" : "Director", "VT" : "Title", "VB" : "Genre", "VL" : "Genre", "VP" : "Studio", "VC" : "Actor", "VK" : "Keyword", "GA" : "Developer", "GT" : "Title", "GB" : "Genre", "GL" : "Genre", "GP" : "Publisher", "GC" : "Character", "GK" : "Keyword" }; $("#searchBox").autocomplete({ minLength: 3, delay: 200, select: function(event, ui) { var searchBox = document.getElementById("searchBox"); selectMtype(ui.item.l.charAt(0)); searchBox.name = field_heading[ui.item.l.charAt(0)+ui.item.l.charAt(ui.item.l.length-1)].toLowerCase(); searchBox.value = ui.item.v; if (searchBox.name == 'subject' || searchBox.name == 'genre' || (searchBox.name == 'author' && searchBox.value.indexOf(', ') != -1)) { var searchBrowse = document.getElementById("searchBrowse"); if (searchBrowse != null) { searchBrowse.value = '1'; } } document.searchHorizForm.submit(); return false; }, source: function(request, response) { var term = request.term.toLowerCase().replace(/[^a-z0-9\200-\377,'&<>-]/g, " ").replace(/^(the|a)? /, ""); if (term.length < 3) { response(null); return; } var mtypeMenu = document.getElementById("mtypeMenu"); var mtype = mtypeMenu.options[mtypeMenu.selectedIndex].value; mtype_heading['B'] = (mtype == 'A'? 'Book': ''); if (mtype == 'S') { response(); return; } if (term in cache) { response(cache[mtype+term]); return; } if (fullTerm != null && (mtype+term).indexOf(fullTerm) == 0) { data = cache[fullTerm]; if (data != null && data.length > 0) { var newData = new Array(); var j = 0; for (i = 0; i < data.length; i++) { if (data[i].v.indexOf(term) == 0) { newData[j++] = data[i]; } } if (j < i) data = newData; } cache[mtype+term] = data; response(data); return; } request.term = term; lastXhr = $.getJSON("/cgi-bin/complete?site=18640838&qsort=f&mtype="+mtype, request, function(data, status, xhr) { cache[mtype+term] = data; if (data != null && data.length < 10) fullTerm = mtype + term; if (xhr === lastXhr) { response(data); } }); } }) .data("ui-autocomplete")._renderItem = function(ul, item) { return $("
") .data( "ui-autocomplete-item", item) .append("" + mtype_heading[item.l.charAt(0)] + " " + field_heading[item.l.charAt(0)+item.l.charAt(item.l.length-1)] + ": " + item.v + "") .appendTo(ul); } ; });