| var gSelectedIndex = -1; |
| var gSelectedID = -1; |
| var gMatches = new Array(); |
| var gLastText = ""; |
| var ROW_COUNT = 30; |
| var gInitialized = false; |
| var DEFAULT_TEXT = "search developer docs"; |
| |
| function set_row_selected(row, selected) |
| { |
| var c1 = row.cells[0]; |
| // var c2 = row.cells[1]; |
| if (selected) { |
| c1.className = "jd-autocomplete jd-selected"; |
| // c2.className = "jd-autocomplete jd-selected jd-linktype"; |
| } else { |
| c1.className = "jd-autocomplete"; |
| // c2.className = "jd-autocomplete jd-linktype"; |
| } |
| } |
| |
| function set_row_values(toroot, row, match) |
| { |
| var link = row.cells[0].childNodes[0]; |
| link.innerHTML = match.label; |
| link.href = toroot + match.link |
| // row.cells[1].innerHTML = match.type; |
| } |
| |
| function sync_selection_table(toroot) |
| { |
| var filtered = document.getElementById("search_filtered"); |
| var r; //TR DOM object |
| var i; //TR iterator |
| gSelectedID = -1; |
| |
| filtered.onmouseover = function() { |
| if(gSelectedIndex >= 0) { |
| set_row_selected(this.rows[gSelectedIndex], false); |
| gSelectedIndex = -1; |
| } |
| } |
| |
| //initialize the table; draw it for the first time (but not visible). |
| if (!gInitialized) { |
| for (i=0; i<ROW_COUNT; i++) { |
| var r = filtered.insertRow(-1); |
| var c1 = r.insertCell(-1); |
| // var c2 = r.insertCell(-1); |
| c1.className = "jd-autocomplete"; |
| // c2.className = "jd-autocomplete jd-linktype"; |
| var link = document.createElement("a"); |
| c1.onmousedown = function() { |
| window.location = this.firstChild.getAttribute("href"); |
| } |
| c1.onmouseover = function() { |
| this.className = this.className + " jd-selected"; |
| } |
| c1.onmouseout = function() { |
| this.className = "jd-autocomplete"; |
| } |
| c1.appendChild(link); |
| } |
| /* var r = filtered.insertRow(-1); |
| var c1 = r.insertCell(-1); |
| c1.className = "jd-autocomplete jd-linktype"; |
| c1.colSpan = 2; */ |
| gInitialized = true; |
| } |
| |
| //if we have results, make the table visible and initialize result info |
| if (gMatches.length > 0) { |
| filtered.className = "showing"; |
| var N = gMatches.length < ROW_COUNT ? gMatches.length : ROW_COUNT; |
| for (i=0; i<N; i++) { |
| r = filtered.rows[i]; |
| r.className = "show-row"; |
| set_row_values(toroot, r, gMatches[i]); |
| set_row_selected(r, i == gSelectedIndex); |
| if (i == gSelectedIndex) { |
| gSelectedID = gMatches[i].id; |
| } |
| } |
| //start hiding rows that are no longer matches |
| for (; i<ROW_COUNT; i++) { |
| r = filtered.rows[i]; |
| r.className = "no-display"; |
| } |
| //if there are more results we're not showing, so say so. |
| /* if (gMatches.length > ROW_COUNT) { |
| r = filtered.rows[ROW_COUNT]; |
| r.className = "show-row"; |
| c1 = r.cells[0]; |
| c1.innerHTML = "plus " + (gMatches.length-ROW_COUNT) + " more"; |
| } else { |
| filtered.rows[ROW_COUNT].className = "hide-row"; |
| }*/ |
| //if we have no results, hide the table |
| } else { |
| filtered.className = "no-display"; |
| } |
| } |
| |
| function search_changed(e, kd, toroot) |
| { |
| var search = document.getElementById("search_autocomplete"); |
| var text = search.value; |
| |
| // 13 = enter |
| if (kd && (e.keyCode == 13)) { |
| if (gSelectedIndex >= 0) { |
| window.location = toroot + gMatches[gSelectedIndex].link; |
| return false; |
| } |
| } |
| // 38 -- arrow up |
| else if (kd && (e.keyCode == 38)) { |
| if (gSelectedIndex >= 0) { |
| gSelectedIndex--; |
| } |
| sync_selection_table(toroot); |
| return false; |
| } |
| // 40 -- arrow down |
| else if (kd && (e.keyCode == 40)) { |
| if (gSelectedIndex < gMatches.length-1 |
| && gSelectedIndex < ROW_COUNT-1) { |
| gSelectedIndex++; |
| } |
| sync_selection_table(toroot); |
| return false; |
| } |
| else if (!kd) { |
| gMatches = new Array(); |
| matchedCount = 0; |
| gSelectedIndex = -1; |
| for (i=0; i<DATA.length; i++) { |
| var s = DATA[i]; |
| if (text.length != 0 && s.label.toLowerCase().indexOf(text.toLowerCase()) != -1) { |
| gMatches[matchedCount] = s; |
| if (gSelectedID == s.id) { |
| gSelectedIndex = matchedCount; |
| } |
| matchedCount++; |
| } |
| } |
| sync_selection_table(toroot); |
| } |
| } |
| |
| function search_focus_changed(obj, focused) |
| { |
| if (focused) { |
| if(obj.value == DEFAULT_TEXT){ |
| obj.value = ""; |
| obj.style.color="#000000"; |
| } |
| } else { |
| obj.value = DEFAULT_TEXT; |
| obj.style.color="#aaaaaa"; |
| document.getElementById("search_filtered").className = "no-display"; |
| } |
| } |