61 if (!name || !resultsPath) { alert(
"Missing parameters to SearchBox."); }
65 this.resultsPath = resultsPath;
67 this.keyTimeoutLength = 500;
68 this.closeSelectionTimeout = 300;
69 this.lastSearchValue =
"";
70 this.lastResultsPage =
"";
73 this.searchActive =
false;
74 this.insideFrame = inFrame;
75 this.searchLabel = label;
79 this.DOMSearchField =
function()
80 {
return document.getElementById(
"MSearchField"); }
82 this.DOMSearchSelect =
function()
83 {
return document.getElementById(
"MSearchSelect"); }
85 this.DOMSearchSelectWindow =
function()
86 {
return document.getElementById(
"MSearchSelectWindow"); }
88 this.DOMPopupSearchResults =
function()
89 {
return document.getElementById(
"MSearchResults"); }
91 this.DOMPopupSearchResultsWindow =
function()
92 {
return document.getElementById(
"MSearchResultsWindow"); }
94 this.DOMSearchClose =
function()
95 {
return document.getElementById(
"MSearchClose"); }
97 this.DOMSearchBox =
function()
98 {
return document.getElementById(
"MSearchBox"); }
103 this.OnSearchFieldFocus =
function(isActive)
105 this.Activate(isActive);
108 this.OnSearchSelectShow =
function()
110 var searchSelectWindow = this.DOMSearchSelectWindow();
111 var searchField = this.DOMSearchSelect();
113 if (this.insideFrame)
115 var left =
getXPos(searchField);
116 var top =
getYPos(searchField);
117 left += searchField.offsetWidth + 6;
118 top += searchField.offsetHeight;
121 searchSelectWindow.style.display=
'block';
122 left -= searchSelectWindow.offsetWidth;
123 searchSelectWindow.style.left = left +
'px';
124 searchSelectWindow.style.top = top +
'px';
128 var left =
getXPos(searchField);
129 var top =
getYPos(searchField);
130 top += searchField.offsetHeight;
133 searchSelectWindow.style.display=
'block';
134 searchSelectWindow.style.left = left +
'px';
135 searchSelectWindow.style.top = top +
'px';
139 if (this.hideTimeout)
141 clearTimeout(this.hideTimeout);
147 this.OnSearchSelectHide =
function()
149 this.hideTimeout = setTimeout(this.name +
".CloseSelectionWindow()",
150 this.closeSelectionTimeout);
154 this.OnSearchFieldChange =
function(evt)
158 clearTimeout(this.keyTimeout);
162 var e = (evt) ? evt : window.event;
163 if (e.keyCode==40 || e.keyCode==13)
167 this.OnSearchSelectShow();
168 var win=this.DOMSearchSelectWindow();
169 for (i=0;i<win.childNodes.length;i++)
171 var child = win.childNodes[i];
172 if (child.className==
'SelectItem')
180 else if (window.frames.MSearchResults.searchResults)
182 var elem = window.frames.MSearchResults.searchResults.NavNext(0);
183 if (elem) elem.focus();
186 else if (e.keyCode==27)
188 this.DOMSearchField().blur();
189 this.DOMPopupSearchResultsWindow().style.display =
'none';
190 this.DOMSearchClose().style.display =
'none';
191 this.lastSearchValue =
'';
192 this.Activate(
false);
197 var searchValue = this.DOMSearchField().value.replace(/ +/g,
"");
199 if (searchValue != this.lastSearchValue)
201 if (searchValue !=
"")
204 this.keyTimeout = setTimeout(this.name +
'.Search()',
205 this.keyTimeoutLength);
209 this.DOMPopupSearchResultsWindow().style.display =
'none';
210 this.DOMSearchClose().style.display =
'none';
211 this.lastSearchValue =
'';
216 this.SelectItemCount =
function(id)
219 var win=this.DOMSearchSelectWindow();
220 for (i=0;i<win.childNodes.length;i++)
222 var child = win.childNodes[i];
223 if (child.className==
'SelectItem')
231 this.SelectItemSet =
function(id)
234 var win=this.DOMSearchSelectWindow();
235 for (i=0;i<win.childNodes.length;i++)
237 var child = win.childNodes[i];
238 if (child.className==
'SelectItem')
240 var node = child.firstChild;
243 node.innerHTML=
'•';
247 node.innerHTML=
' ';
256 this.OnSelectItem =
function(id)
258 this.searchIndex = id;
259 this.SelectItemSet(
id);
260 var searchValue = this.DOMSearchField().value.replace(/ +/g,
"");
261 if (searchValue!=
"" && this.searchActive)
267 this.OnSearchSelectKey =
function(evt)
269 var e = (evt) ? evt : window.event;
270 if (e.keyCode==40 &&
this.searchIndex<
this.SelectItemCount())
273 this.OnSelectItem(this.searchIndex);
275 else if (e.keyCode==38 &&
this.searchIndex>0)
278 this.OnSelectItem(this.searchIndex);
280 else if (e.keyCode==13 || e.keyCode==27)
282 this.OnSelectItem(this.searchIndex);
283 this.CloseSelectionWindow();
284 this.DOMSearchField().focus();
292 this.CloseResultsWindow =
function()
294 this.DOMPopupSearchResultsWindow().style.display =
'none';
295 this.DOMSearchClose().style.display =
'none';
296 this.Activate(
false);
299 this.CloseSelectionWindow =
function()
301 this.DOMSearchSelectWindow().style.display =
'none';
305 this.Search =
function()
310 var searchValue = this.DOMSearchField().value.replace(/^ +/,
"");
312 var code = searchValue.toLowerCase().charCodeAt(0);
313 var idxChar = searchValue.substr(0, 1).toLowerCase();
314 if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1)
316 idxChar = searchValue.substr(0, 2);
320 var resultsPageWithSearch;
326 var hexCode=idx.toString(16);
327 resultsPage = this.resultsPath +
'/' +
indexSectionNames[this.searchIndex] +
'_' + hexCode +
'.html';
328 resultsPageWithSearch = resultsPage+
'?'+escape(searchValue);
329 hasResultsPage =
true;
333 resultsPage = this.resultsPath +
'/nomatches.html';
334 resultsPageWithSearch = resultsPage;
335 hasResultsPage =
false;
338 window.frames.MSearchResults.location = resultsPageWithSearch;
339 var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
341 if (domPopupSearchResultsWindow.style.display!=
'block')
343 var domSearchBox = this.DOMSearchBox();
344 this.DOMSearchClose().style.display =
'inline';
345 if (this.insideFrame)
347 var domPopupSearchResults = this.DOMPopupSearchResults();
348 domPopupSearchResultsWindow.style.position =
'relative';
349 domPopupSearchResultsWindow.style.display =
'block';
350 var width = document.body.clientWidth - 8;
351 domPopupSearchResultsWindow.style.width = width +
'px';
352 domPopupSearchResults.style.width = width +
'px';
356 var domPopupSearchResults = this.DOMPopupSearchResults();
357 var left =
getXPos(domSearchBox) + 150;
358 var top =
getYPos(domSearchBox) + 20;
359 domPopupSearchResultsWindow.style.display =
'block';
360 left -= domPopupSearchResults.offsetWidth;
361 domPopupSearchResultsWindow.style.top = top +
'px';
362 domPopupSearchResultsWindow.style.left = left +
'px';
366 this.lastSearchValue = searchValue;
367 this.lastResultsPage = resultsPage;
374 this.Activate =
function(isActive)
377 this.DOMPopupSearchResultsWindow().style.display ==
'block' 380 this.DOMSearchBox().className =
'MSearchBoxActive';
382 var searchField = this.DOMSearchField();
384 if (searchField.value ==
this.searchLabel)
386 searchField.value =
'';
387 this.searchActive =
true;
392 this.DOMSearchBox().className =
'MSearchBoxInactive';
393 this.DOMSearchField().value = this.searchLabel;
394 this.searchActive =
false;
395 this.lastSearchValue =
'' 396 this.lastResultsPage =
'';
var indexSectionNames
Definition: searchdata.js:11
function getXPos(item)
Definition: search.js:24
if(!b.support.opacity)
Definition: jquery.js:23
var indexSectionsWithContent
Definition: searchdata.js:1
function getYPos(item)
Definition: search.js:38