git repos / PlatformFolders

blame: html/doxygen/4.0.0/search/search.js

normal view · raw

3af4e794 Poul Sander 2021-07-07 21:02 1
/*
3af4e794 Poul Sander 2021-07-07 21:02 2
 @licstart  The following is the entire license notice for the JavaScript code in this file.
3af4e794 Poul Sander 2021-07-07 21:02 3
3af4e794 Poul Sander 2021-07-07 21:02 4
 The MIT License (MIT)
3af4e794 Poul Sander 2021-07-07 21:02 5
3af4e794 Poul Sander 2021-07-07 21:02 6
 Copyright (C) 1997-2020 by Dimitri van Heesch
3af4e794 Poul Sander 2021-07-07 21:02 7
3af4e794 Poul Sander 2021-07-07 21:02 8
 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
3af4e794 Poul Sander 2021-07-07 21:02 9
 and associated documentation files (the "Software"), to deal in the Software without restriction,
3af4e794 Poul Sander 2021-07-07 21:02 10
 including without limitation the rights to use, copy, modify, merge, publish, distribute,
3af4e794 Poul Sander 2021-07-07 21:02 11
 sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
3af4e794 Poul Sander 2021-07-07 21:02 12
 furnished to do so, subject to the following conditions:
3af4e794 Poul Sander 2021-07-07 21:02 13
3af4e794 Poul Sander 2021-07-07 21:02 14
 The above copyright notice and this permission notice shall be included in all copies or
3af4e794 Poul Sander 2021-07-07 21:02 15
 substantial portions of the Software.
3af4e794 Poul Sander 2021-07-07 21:02 16
3af4e794 Poul Sander 2021-07-07 21:02 17
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
3af4e794 Poul Sander 2021-07-07 21:02 18
 BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
3af4e794 Poul Sander 2021-07-07 21:02 19
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
3af4e794 Poul Sander 2021-07-07 21:02 20
 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
3af4e794 Poul Sander 2021-07-07 21:02 21
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af4e794 Poul Sander 2021-07-07 21:02 22
3af4e794 Poul Sander 2021-07-07 21:02 23
 @licend  The above is the entire license notice for the JavaScript code in this file
3af4e794 Poul Sander 2021-07-07 21:02 24
 */
7e54d64b sago007 2018-06-24 15:21 25
function convertToId(search)
7e54d64b sago007 2018-06-24 15:21 26
{
7e54d64b sago007 2018-06-24 15:21 27
  var result = '';
7e54d64b sago007 2018-06-24 15:21 28
  for (i=0;i<search.length;i++)
7e54d64b sago007 2018-06-24 15:21 29
  {
7e54d64b sago007 2018-06-24 15:21 30
    var c = search.charAt(i);
7e54d64b sago007 2018-06-24 15:21 31
    var cn = c.charCodeAt(0);
7e54d64b sago007 2018-06-24 15:21 32
    if (c.match(/[a-z0-9\u0080-\uFFFF]/))
7e54d64b sago007 2018-06-24 15:21 33
    {
7e54d64b sago007 2018-06-24 15:21 34
      result+=c;
7e54d64b sago007 2018-06-24 15:21 35
    }
7e54d64b sago007 2018-06-24 15:21 36
    else if (cn<16)
7e54d64b sago007 2018-06-24 15:21 37
    {
7e54d64b sago007 2018-06-24 15:21 38
      result+="_0"+cn.toString(16);
7e54d64b sago007 2018-06-24 15:21 39
    }
7e54d64b sago007 2018-06-24 15:21 40
    else
7e54d64b sago007 2018-06-24 15:21 41
    {
7e54d64b sago007 2018-06-24 15:21 42
      result+="_"+cn.toString(16);
7e54d64b sago007 2018-06-24 15:21 43
    }
7e54d64b sago007 2018-06-24 15:21 44
  }
7e54d64b sago007 2018-06-24 15:21 45
  return result;
7e54d64b sago007 2018-06-24 15:21 46
}
7e54d64b sago007 2018-06-24 15:21 47
7e54d64b sago007 2018-06-24 15:21 48
function getXPos(item)
7e54d64b sago007 2018-06-24 15:21 49
{
7e54d64b sago007 2018-06-24 15:21 50
  var x = 0;
7e54d64b sago007 2018-06-24 15:21 51
  if (item.offsetWidth)
7e54d64b sago007 2018-06-24 15:21 52
  {
7e54d64b sago007 2018-06-24 15:21 53
    while (item && item!=document.body)
7e54d64b sago007 2018-06-24 15:21 54
    {
7e54d64b sago007 2018-06-24 15:21 55
      x   += item.offsetLeft;
7e54d64b sago007 2018-06-24 15:21 56
      item = item.offsetParent;
7e54d64b sago007 2018-06-24 15:21 57
    }
7e54d64b sago007 2018-06-24 15:21 58
  }
7e54d64b sago007 2018-06-24 15:21 59
  return x;
7e54d64b sago007 2018-06-24 15:21 60
}
7e54d64b sago007 2018-06-24 15:21 61
7e54d64b sago007 2018-06-24 15:21 62
function getYPos(item)
7e54d64b sago007 2018-06-24 15:21 63
{
7e54d64b sago007 2018-06-24 15:21 64
  var y = 0;
7e54d64b sago007 2018-06-24 15:21 65
  if (item.offsetWidth)
7e54d64b sago007 2018-06-24 15:21 66
  {
7e54d64b sago007 2018-06-24 15:21 67
     while (item && item!=document.body)
7e54d64b sago007 2018-06-24 15:21 68
     {
7e54d64b sago007 2018-06-24 15:21 69
       y   += item.offsetTop;
7e54d64b sago007 2018-06-24 15:21 70
       item = item.offsetParent;
7e54d64b sago007 2018-06-24 15:21 71
     }
7e54d64b sago007 2018-06-24 15:21 72
  }
7e54d64b sago007 2018-06-24 15:21 73
  return y;
7e54d64b sago007 2018-06-24 15:21 74
}
7e54d64b sago007 2018-06-24 15:21 75
7e54d64b sago007 2018-06-24 15:21 76
/* A class handling everything associated with the search panel.
7e54d64b sago007 2018-06-24 15:21 77
7e54d64b sago007 2018-06-24 15:21 78
   Parameters:
7e54d64b sago007 2018-06-24 15:21 79
   name - The name of the global variable that will be
7e54d64b sago007 2018-06-24 15:21 80
          storing this instance.  Is needed to be able to set timeouts.
7e54d64b sago007 2018-06-24 15:21 81
   resultPath - path to use for external files
7e54d64b sago007 2018-06-24 15:21 82
*/
3af4e794 Poul Sander 2021-07-07 21:02 83
function SearchBox(name, resultsPath, inFrame, label, extension)
7e54d64b sago007 2018-06-24 15:21 84
{
7e54d64b sago007 2018-06-24 15:21 85
  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
3af4e794 Poul Sander 2021-07-07 21:02 86
  if (!extension || extension == "") { extension = ".html"; }
7e54d64b sago007 2018-06-24 15:21 87
7e54d64b sago007 2018-06-24 15:21 88
  // ---------- Instance variables
7e54d64b sago007 2018-06-24 15:21 89
  this.name                  = name;
7e54d64b sago007 2018-06-24 15:21 90
  this.resultsPath           = resultsPath;
7e54d64b sago007 2018-06-24 15:21 91
  this.keyTimeout            = 0;
7e54d64b sago007 2018-06-24 15:21 92
  this.keyTimeoutLength      = 500;
7e54d64b sago007 2018-06-24 15:21 93
  this.closeSelectionTimeout = 300;
7e54d64b sago007 2018-06-24 15:21 94
  this.lastSearchValue       = "";
7e54d64b sago007 2018-06-24 15:21 95
  this.lastResultsPage       = "";
7e54d64b sago007 2018-06-24 15:21 96
  this.hideTimeout           = 0;
7e54d64b sago007 2018-06-24 15:21 97
  this.searchIndex           = 0;
7e54d64b sago007 2018-06-24 15:21 98
  this.searchActive          = false;
7e54d64b sago007 2018-06-24 15:21 99
  this.insideFrame           = inFrame;
7e54d64b sago007 2018-06-24 15:21 100
  this.searchLabel           = label;
3af4e794 Poul Sander 2021-07-07 21:02 101
  this.extension             = extension;
7e54d64b sago007 2018-06-24 15:21 102
7e54d64b sago007 2018-06-24 15:21 103
  // ----------- DOM Elements
7e54d64b sago007 2018-06-24 15:21 104
7e54d64b sago007 2018-06-24 15:21 105
  this.DOMSearchField = function()
7e54d64b sago007 2018-06-24 15:21 106
  {  return document.getElementById("MSearchField");  }
7e54d64b sago007 2018-06-24 15:21 107
7e54d64b sago007 2018-06-24 15:21 108
  this.DOMSearchSelect = function()
7e54d64b sago007 2018-06-24 15:21 109
  {  return document.getElementById("MSearchSelect");  }
7e54d64b sago007 2018-06-24 15:21 110
7e54d64b sago007 2018-06-24 15:21 111
  this.DOMSearchSelectWindow = function()
7e54d64b sago007 2018-06-24 15:21 112
  {  return document.getElementById("MSearchSelectWindow");  }
7e54d64b sago007 2018-06-24 15:21 113
7e54d64b sago007 2018-06-24 15:21 114
  this.DOMPopupSearchResults = function()
7e54d64b sago007 2018-06-24 15:21 115
  {  return document.getElementById("MSearchResults");  }
7e54d64b sago007 2018-06-24 15:21 116
7e54d64b sago007 2018-06-24 15:21 117
  this.DOMPopupSearchResultsWindow = function()
7e54d64b sago007 2018-06-24 15:21 118
  {  return document.getElementById("MSearchResultsWindow");  }
7e54d64b sago007 2018-06-24 15:21 119
7e54d64b sago007 2018-06-24 15:21 120
  this.DOMSearchClose = function()
7e54d64b sago007 2018-06-24 15:21 121
  {  return document.getElementById("MSearchClose"); }
7e54d64b sago007 2018-06-24 15:21 122
7e54d64b sago007 2018-06-24 15:21 123
  this.DOMSearchBox = function()
7e54d64b sago007 2018-06-24 15:21 124
  {  return document.getElementById("MSearchBox");  }
7e54d64b sago007 2018-06-24 15:21 125
7e54d64b sago007 2018-06-24 15:21 126
  // ------------ Event Handlers
7e54d64b sago007 2018-06-24 15:21 127
7e54d64b sago007 2018-06-24 15:21 128
  // Called when focus is added or removed from the search field.
7e54d64b sago007 2018-06-24 15:21 129
  this.OnSearchFieldFocus = function(isActive)
7e54d64b sago007 2018-06-24 15:21 130
  {
7e54d64b sago007 2018-06-24 15:21 131
    this.Activate(isActive);
7e54d64b sago007 2018-06-24 15:21 132
  }
7e54d64b sago007 2018-06-24 15:21 133
7e54d64b sago007 2018-06-24 15:21 134
  this.OnSearchSelectShow = function()
7e54d64b sago007 2018-06-24 15:21 135
  {
7e54d64b sago007 2018-06-24 15:21 136
    var searchSelectWindow = this.DOMSearchSelectWindow();
7e54d64b sago007 2018-06-24 15:21 137
    var searchField        = this.DOMSearchSelect();
7e54d64b sago007 2018-06-24 15:21 138
7e54d64b sago007 2018-06-24 15:21 139
    if (this.insideFrame)
7e54d64b sago007 2018-06-24 15:21 140
    {
7e54d64b sago007 2018-06-24 15:21 141
      var left = getXPos(searchField);
7e54d64b sago007 2018-06-24 15:21 142
      var top  = getYPos(searchField);
7e54d64b sago007 2018-06-24 15:21 143
      left += searchField.offsetWidth + 6;
7e54d64b sago007 2018-06-24 15:21 144
      top += searchField.offsetHeight;
7e54d64b sago007 2018-06-24 15:21 145
7e54d64b sago007 2018-06-24 15:21 146
      // show search selection popup
7e54d64b sago007 2018-06-24 15:21 147
      searchSelectWindow.style.display='block';
7e54d64b sago007 2018-06-24 15:21 148
      left -= searchSelectWindow.offsetWidth;
7e54d64b sago007 2018-06-24 15:21 149
      searchSelectWindow.style.left =  left + 'px';
7e54d64b sago007 2018-06-24 15:21 150
      searchSelectWindow.style.top  =  top  + 'px';
7e54d64b sago007 2018-06-24 15:21 151
    }
7e54d64b sago007 2018-06-24 15:21 152
    else
7e54d64b sago007 2018-06-24 15:21 153
    {
7e54d64b sago007 2018-06-24 15:21 154
      var left = getXPos(searchField);
7e54d64b sago007 2018-06-24 15:21 155
      var top  = getYPos(searchField);
7e54d64b sago007 2018-06-24 15:21 156
      top += searchField.offsetHeight;
7e54d64b sago007 2018-06-24 15:21 157
7e54d64b sago007 2018-06-24 15:21 158
      // show search selection popup
7e54d64b sago007 2018-06-24 15:21 159
      searchSelectWindow.style.display='block';
7e54d64b sago007 2018-06-24 15:21 160
      searchSelectWindow.style.left =  left + 'px';
7e54d64b sago007 2018-06-24 15:21 161
      searchSelectWindow.style.top  =  top  + 'px';
7e54d64b sago007 2018-06-24 15:21 162
    }
7e54d64b sago007 2018-06-24 15:21 163
7e54d64b sago007 2018-06-24 15:21 164
    // stop selection hide timer
7e54d64b sago007 2018-06-24 15:21 165
    if (this.hideTimeout)
7e54d64b sago007 2018-06-24 15:21 166
    {
7e54d64b sago007 2018-06-24 15:21 167
      clearTimeout(this.hideTimeout);
7e54d64b sago007 2018-06-24 15:21 168
      this.hideTimeout=0;
7e54d64b sago007 2018-06-24 15:21 169
    }
7e54d64b sago007 2018-06-24 15:21 170
    return false; // to avoid "image drag" default event
7e54d64b sago007 2018-06-24 15:21 171
  }
7e54d64b sago007 2018-06-24 15:21 172
7e54d64b sago007 2018-06-24 15:21 173
  this.OnSearchSelectHide = function()
7e54d64b sago007 2018-06-24 15:21 174
  {
7e54d64b sago007 2018-06-24 15:21 175
    this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
7e54d64b sago007 2018-06-24 15:21 176
                                  this.closeSelectionTimeout);
7e54d64b sago007 2018-06-24 15:21 177
  }
7e54d64b sago007 2018-06-24 15:21 178
7e54d64b sago007 2018-06-24 15:21 179
  // Called when the content of the search field is changed.
7e54d64b sago007 2018-06-24 15:21 180
  this.OnSearchFieldChange = function(evt)
7e54d64b sago007 2018-06-24 15:21 181
  {
7e54d64b sago007 2018-06-24 15:21 182
    if (this.keyTimeout) // kill running timer
7e54d64b sago007 2018-06-24 15:21 183
    {
7e54d64b sago007 2018-06-24 15:21 184
      clearTimeout(this.keyTimeout);
7e54d64b sago007 2018-06-24 15:21 185
      this.keyTimeout = 0;
7e54d64b sago007 2018-06-24 15:21 186
    }
7e54d64b sago007 2018-06-24 15:21 187
7e54d64b sago007 2018-06-24 15:21 188
    var e  = (evt) ? evt : window.event; // for IE
7e54d64b sago007 2018-06-24 15:21 189
    if (e.keyCode==40 || e.keyCode==13)
7e54d64b sago007 2018-06-24 15:21 190
    {
7e54d64b sago007 2018-06-24 15:21 191
      if (e.shiftKey==1)
7e54d64b sago007 2018-06-24 15:21 192
      {
7e54d64b sago007 2018-06-24 15:21 193
        this.OnSearchSelectShow();
7e54d64b sago007 2018-06-24 15:21 194
        var win=this.DOMSearchSelectWindow();
7e54d64b sago007 2018-06-24 15:21 195
        for (i=0;i<win.childNodes.length;i++)
7e54d64b sago007 2018-06-24 15:21 196
        {
7e54d64b sago007 2018-06-24 15:21 197
          var child = win.childNodes[i]; // get span within a
7e54d64b sago007 2018-06-24 15:21 198
          if (child.className=='SelectItem')
7e54d64b sago007 2018-06-24 15:21 199
          {
7e54d64b sago007 2018-06-24 15:21 200
            child.focus();
7e54d64b sago007 2018-06-24 15:21 201
            return;
7e54d64b sago007 2018-06-24 15:21 202
          }
7e54d64b sago007 2018-06-24 15:21 203
        }
7e54d64b sago007 2018-06-24 15:21 204
        return;
7e54d64b sago007 2018-06-24 15:21 205
      }
3af4e794 Poul Sander 2021-07-07 21:02 206
      else
7e54d64b sago007 2018-06-24 15:21 207
      {
3af4e794 Poul Sander 2021-07-07 21:02 208
        window.frames.MSearchResults.postMessage("take_focus", "*");
7e54d64b sago007 2018-06-24 15:21 209
      }
7e54d64b sago007 2018-06-24 15:21 210
    }
7e54d64b sago007 2018-06-24 15:21 211
    else if (e.keyCode==27) // Escape out of the search field
7e54d64b sago007 2018-06-24 15:21 212
    {
7e54d64b sago007 2018-06-24 15:21 213
      this.DOMSearchField().blur();
7e54d64b sago007 2018-06-24 15:21 214
      this.DOMPopupSearchResultsWindow().style.display = 'none';
7e54d64b sago007 2018-06-24 15:21 215
      this.DOMSearchClose().style.display = 'none';
7e54d64b sago007 2018-06-24 15:21 216
      this.lastSearchValue = '';
7e54d64b sago007 2018-06-24 15:21 217
      this.Activate(false);
7e54d64b sago007 2018-06-24 15:21 218
      return;
7e54d64b sago007 2018-06-24 15:21 219
    }
7e54d64b sago007 2018-06-24 15:21 220
7e54d64b sago007 2018-06-24 15:21 221
    // strip whitespaces
7e54d64b sago007 2018-06-24 15:21 222
    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
7e54d64b sago007 2018-06-24 15:21 223
7e54d64b sago007 2018-06-24 15:21 224
    if (searchValue != this.lastSearchValue) // search value has changed
7e54d64b sago007 2018-06-24 15:21 225
    {
7e54d64b sago007 2018-06-24 15:21 226
      if (searchValue != "") // non-empty search
7e54d64b sago007 2018-06-24 15:21 227
      {
7e54d64b sago007 2018-06-24 15:21 228
        // set timer for search update
7e54d64b sago007 2018-06-24 15:21 229
        this.keyTimeout = setTimeout(this.name + '.Search()',
7e54d64b sago007 2018-06-24 15:21 230
                                     this.keyTimeoutLength);
7e54d64b sago007 2018-06-24 15:21 231
      }
7e54d64b sago007 2018-06-24 15:21 232
      else // empty search field
7e54d64b sago007 2018-06-24 15:21 233
      {
7e54d64b sago007 2018-06-24 15:21 234
        this.DOMPopupSearchResultsWindow().style.display = 'none';
7e54d64b sago007 2018-06-24 15:21 235
        this.DOMSearchClose().style.display = 'none';
7e54d64b sago007 2018-06-24 15:21 236
        this.lastSearchValue = '';
7e54d64b sago007 2018-06-24 15:21 237
      }
7e54d64b sago007 2018-06-24 15:21 238
    }
7e54d64b sago007 2018-06-24 15:21 239
  }
7e54d64b sago007 2018-06-24 15:21 240
7e54d64b sago007 2018-06-24 15:21 241
  this.SelectItemCount = function(id)
7e54d64b sago007 2018-06-24 15:21 242
  {
7e54d64b sago007 2018-06-24 15:21 243
    var count=0;
7e54d64b sago007 2018-06-24 15:21 244
    var win=this.DOMSearchSelectWindow();
7e54d64b sago007 2018-06-24 15:21 245
    for (i=0;i<win.childNodes.length;i++)
7e54d64b sago007 2018-06-24 15:21 246
    {
7e54d64b sago007 2018-06-24 15:21 247
      var child = win.childNodes[i]; // get span within a
7e54d64b sago007 2018-06-24 15:21 248
      if (child.className=='SelectItem')
7e54d64b sago007 2018-06-24 15:21 249
      {
7e54d64b sago007 2018-06-24 15:21 250
        count++;
7e54d64b sago007 2018-06-24 15:21 251
      }
7e54d64b sago007 2018-06-24 15:21 252
    }
7e54d64b sago007 2018-06-24 15:21 253
    return count;
7e54d64b sago007 2018-06-24 15:21 254
  }
7e54d64b sago007 2018-06-24 15:21 255
7e54d64b sago007 2018-06-24 15:21 256
  this.SelectItemSet = function(id)
7e54d64b sago007 2018-06-24 15:21 257
  {
7e54d64b sago007 2018-06-24 15:21 258
    var i,j=0;
7e54d64b sago007 2018-06-24 15:21 259
    var win=this.DOMSearchSelectWindow();
7e54d64b sago007 2018-06-24 15:21 260
    for (i=0;i<win.childNodes.length;i++)
7e54d64b sago007 2018-06-24 15:21 261
    {
7e54d64b sago007 2018-06-24 15:21 262
      var child = win.childNodes[i]; // get span within a
7e54d64b sago007 2018-06-24 15:21 263
      if (child.className=='SelectItem')
7e54d64b sago007 2018-06-24 15:21 264
      {
7e54d64b sago007 2018-06-24 15:21 265
        var node = child.firstChild;
7e54d64b sago007 2018-06-24 15:21 266
        if (j==id)
7e54d64b sago007 2018-06-24 15:21 267
        {
7e54d64b sago007 2018-06-24 15:21 268
          node.innerHTML='&#8226;';
7e54d64b sago007 2018-06-24 15:21 269
        }
7e54d64b sago007 2018-06-24 15:21 270
        else
7e54d64b sago007 2018-06-24 15:21 271
        {
7e54d64b sago007 2018-06-24 15:21 272
          node.innerHTML='&#160;';
7e54d64b sago007 2018-06-24 15:21 273
        }
7e54d64b sago007 2018-06-24 15:21 274
        j++;
7e54d64b sago007 2018-06-24 15:21 275
      }
7e54d64b sago007 2018-06-24 15:21 276
    }
7e54d64b sago007 2018-06-24 15:21 277
  }
7e54d64b sago007 2018-06-24 15:21 278
7e54d64b sago007 2018-06-24 15:21 279
  // Called when an search filter selection is made.
7e54d64b sago007 2018-06-24 15:21 280
  // set item with index id as the active item
7e54d64b sago007 2018-06-24 15:21 281
  this.OnSelectItem = function(id)
7e54d64b sago007 2018-06-24 15:21 282
  {
7e54d64b sago007 2018-06-24 15:21 283
    this.searchIndex = id;
7e54d64b sago007 2018-06-24 15:21 284
    this.SelectItemSet(id);
7e54d64b sago007 2018-06-24 15:21 285
    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
7e54d64b sago007 2018-06-24 15:21 286
    if (searchValue!="" && this.searchActive) // something was found -> do a search
7e54d64b sago007 2018-06-24 15:21 287
    {
7e54d64b sago007 2018-06-24 15:21 288
      this.Search();
7e54d64b sago007 2018-06-24 15:21 289
    }
7e54d64b sago007 2018-06-24 15:21 290
  }
7e54d64b sago007 2018-06-24 15:21 291
7e54d64b sago007 2018-06-24 15:21 292
  this.OnSearchSelectKey = function(evt)
7e54d64b sago007 2018-06-24 15:21 293
  {
7e54d64b sago007 2018-06-24 15:21 294
    var e = (evt) ? evt : window.event; // for IE
7e54d64b sago007 2018-06-24 15:21 295
    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
7e54d64b sago007 2018-06-24 15:21 296
    {
7e54d64b sago007 2018-06-24 15:21 297
      this.searchIndex++;
7e54d64b sago007 2018-06-24 15:21 298
      this.OnSelectItem(this.searchIndex);
7e54d64b sago007 2018-06-24 15:21 299
    }
7e54d64b sago007 2018-06-24 15:21 300
    else if (e.keyCode==38 && this.searchIndex>0) // Up
7e54d64b sago007 2018-06-24 15:21 301
    {
7e54d64b sago007 2018-06-24 15:21 302
      this.searchIndex--;
7e54d64b sago007 2018-06-24 15:21 303
      this.OnSelectItem(this.searchIndex);
7e54d64b sago007 2018-06-24 15:21 304
    }
7e54d64b sago007 2018-06-24 15:21 305
    else if (e.keyCode==13 || e.keyCode==27)
7e54d64b sago007 2018-06-24 15:21 306
    {
7e54d64b sago007 2018-06-24 15:21 307
      this.OnSelectItem(this.searchIndex);
7e54d64b sago007 2018-06-24 15:21 308
      this.CloseSelectionWindow();
7e54d64b sago007 2018-06-24 15:21 309
      this.DOMSearchField().focus();
7e54d64b sago007 2018-06-24 15:21 310
    }
7e54d64b sago007 2018-06-24 15:21 311
    return false;
7e54d64b sago007 2018-06-24 15:21 312
  }
7e54d64b sago007 2018-06-24 15:21 313
7e54d64b sago007 2018-06-24 15:21 314
  // --------- Actions
7e54d64b sago007 2018-06-24 15:21 315
7e54d64b sago007 2018-06-24 15:21 316
  // Closes the results window.
7e54d64b sago007 2018-06-24 15:21 317
  this.CloseResultsWindow = function()
7e54d64b sago007 2018-06-24 15:21 318
  {
7e54d64b sago007 2018-06-24 15:21 319
    this.DOMPopupSearchResultsWindow().style.display = 'none';
7e54d64b sago007 2018-06-24 15:21 320
    this.DOMSearchClose().style.display = 'none';
7e54d64b sago007 2018-06-24 15:21 321
    this.Activate(false);
7e54d64b sago007 2018-06-24 15:21 322
  }
7e54d64b sago007 2018-06-24 15:21 323
7e54d64b sago007 2018-06-24 15:21 324
  this.CloseSelectionWindow = function()
7e54d64b sago007 2018-06-24 15:21 325
  {
7e54d64b sago007 2018-06-24 15:21 326
    this.DOMSearchSelectWindow().style.display = 'none';
7e54d64b sago007 2018-06-24 15:21 327
  }
7e54d64b sago007 2018-06-24 15:21 328
7e54d64b sago007 2018-06-24 15:21 329
  // Performs a search.
7e54d64b sago007 2018-06-24 15:21 330
  this.Search = function()
7e54d64b sago007 2018-06-24 15:21 331
  {
7e54d64b sago007 2018-06-24 15:21 332
    this.keyTimeout = 0;
7e54d64b sago007 2018-06-24 15:21 333
7e54d64b sago007 2018-06-24 15:21 334
    // strip leading whitespace
7e54d64b sago007 2018-06-24 15:21 335
    var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
7e54d64b sago007 2018-06-24 15:21 336
7e54d64b sago007 2018-06-24 15:21 337
    var code = searchValue.toLowerCase().charCodeAt(0);
7e54d64b sago007 2018-06-24 15:21 338
    var idxChar = searchValue.substr(0, 1).toLowerCase();
7e54d64b sago007 2018-06-24 15:21 339
    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
7e54d64b sago007 2018-06-24 15:21 340
    {
7e54d64b sago007 2018-06-24 15:21 341
      idxChar = searchValue.substr(0, 2);
7e54d64b sago007 2018-06-24 15:21 342
    }
7e54d64b sago007 2018-06-24 15:21 343
7e54d64b sago007 2018-06-24 15:21 344
    var resultsPage;
7e54d64b sago007 2018-06-24 15:21 345
    var resultsPageWithSearch;
7e54d64b sago007 2018-06-24 15:21 346
    var hasResultsPage;
7e54d64b sago007 2018-06-24 15:21 347
7e54d64b sago007 2018-06-24 15:21 348
    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
7e54d64b sago007 2018-06-24 15:21 349
    if (idx!=-1)
7e54d64b sago007 2018-06-24 15:21 350
    {
7e54d64b sago007 2018-06-24 15:21 351
       var hexCode=idx.toString(16);
3af4e794 Poul Sander 2021-07-07 21:02 352
       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension;
7e54d64b sago007 2018-06-24 15:21 353
       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
7e54d64b sago007 2018-06-24 15:21 354
       hasResultsPage = true;
7e54d64b sago007 2018-06-24 15:21 355
    }
7e54d64b sago007 2018-06-24 15:21 356
    else // nothing available for this search term
7e54d64b sago007 2018-06-24 15:21 357
    {
3af4e794 Poul Sander 2021-07-07 21:02 358
       resultsPage = this.resultsPath + '/nomatches' + this.extension;
7e54d64b sago007 2018-06-24 15:21 359
       resultsPageWithSearch = resultsPage;
7e54d64b sago007 2018-06-24 15:21 360
       hasResultsPage = false;
7e54d64b sago007 2018-06-24 15:21 361
    }
7e54d64b sago007 2018-06-24 15:21 362
7e54d64b sago007 2018-06-24 15:21 363
    window.frames.MSearchResults.location = resultsPageWithSearch;
7e54d64b sago007 2018-06-24 15:21 364
    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
7e54d64b sago007 2018-06-24 15:21 365
7e54d64b sago007 2018-06-24 15:21 366
    if (domPopupSearchResultsWindow.style.display!='block')
7e54d64b sago007 2018-06-24 15:21 367
    {
7e54d64b sago007 2018-06-24 15:21 368
       var domSearchBox = this.DOMSearchBox();
3af4e794 Poul Sander 2021-07-07 21:02 369
       this.DOMSearchClose().style.display = 'inline-block';
7e54d64b sago007 2018-06-24 15:21 370
       if (this.insideFrame)
7e54d64b sago007 2018-06-24 15:21 371
       {
7e54d64b sago007 2018-06-24 15:21 372
         var domPopupSearchResults = this.DOMPopupSearchResults();
7e54d64b sago007 2018-06-24 15:21 373
         domPopupSearchResultsWindow.style.position = 'relative';
7e54d64b sago007 2018-06-24 15:21 374
         domPopupSearchResultsWindow.style.display  = 'block';
7e54d64b sago007 2018-06-24 15:21 375
         var width = document.body.clientWidth - 8; // the -8 is for IE :-(
7e54d64b sago007 2018-06-24 15:21 376
         domPopupSearchResultsWindow.style.width    = width + 'px';
7e54d64b sago007 2018-06-24 15:21 377
         domPopupSearchResults.style.width          = width + 'px';
7e54d64b sago007 2018-06-24 15:21 378
       }
7e54d64b sago007 2018-06-24 15:21 379
       else
7e54d64b sago007 2018-06-24 15:21 380
       {
7e54d64b sago007 2018-06-24 15:21 381
         var domPopupSearchResults = this.DOMPopupSearchResults();
7e54d64b sago007 2018-06-24 15:21 382
         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
7e54d64b sago007 2018-06-24 15:21 383
         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;
7e54d64b sago007 2018-06-24 15:21 384
         domPopupSearchResultsWindow.style.display = 'block';
7e54d64b sago007 2018-06-24 15:21 385
         left -= domPopupSearchResults.offsetWidth;
7e54d64b sago007 2018-06-24 15:21 386
         domPopupSearchResultsWindow.style.top     = top  + 'px';
7e54d64b sago007 2018-06-24 15:21 387
         domPopupSearchResultsWindow.style.left    = left + 'px';
7e54d64b sago007 2018-06-24 15:21 388
       }
7e54d64b sago007 2018-06-24 15:21 389
    }
7e54d64b sago007 2018-06-24 15:21 390
7e54d64b sago007 2018-06-24 15:21 391
    this.lastSearchValue = searchValue;
7e54d64b sago007 2018-06-24 15:21 392
    this.lastResultsPage = resultsPage;
7e54d64b sago007 2018-06-24 15:21 393
  }
7e54d64b sago007 2018-06-24 15:21 394
7e54d64b sago007 2018-06-24 15:21 395
  // -------- Activation Functions
7e54d64b sago007 2018-06-24 15:21 396
7e54d64b sago007 2018-06-24 15:21 397
  // Activates or deactivates the search panel, resetting things to
7e54d64b sago007 2018-06-24 15:21 398
  // their default values if necessary.
7e54d64b sago007 2018-06-24 15:21 399
  this.Activate = function(isActive)
7e54d64b sago007 2018-06-24 15:21 400
  {
7e54d64b sago007 2018-06-24 15:21 401
    if (isActive || // open it
7e54d64b sago007 2018-06-24 15:21 402
        this.DOMPopupSearchResultsWindow().style.display == 'block'
7e54d64b sago007 2018-06-24 15:21 403
       )
7e54d64b sago007 2018-06-24 15:21 404
    {
7e54d64b sago007 2018-06-24 15:21 405
      this.DOMSearchBox().className = 'MSearchBoxActive';
7e54d64b sago007 2018-06-24 15:21 406
7e54d64b sago007 2018-06-24 15:21 407
      var searchField = this.DOMSearchField();
7e54d64b sago007 2018-06-24 15:21 408
7e54d64b sago007 2018-06-24 15:21 409
      if (searchField.value == this.searchLabel) // clear "Search" term upon entry
7e54d64b sago007 2018-06-24 15:21 410
      {
7e54d64b sago007 2018-06-24 15:21 411
        searchField.value = '';
7e54d64b sago007 2018-06-24 15:21 412
        this.searchActive = true;
7e54d64b sago007 2018-06-24 15:21 413
      }
7e54d64b sago007 2018-06-24 15:21 414
    }
7e54d64b sago007 2018-06-24 15:21 415
    else if (!isActive) // directly remove the panel
7e54d64b sago007 2018-06-24 15:21 416
    {
7e54d64b sago007 2018-06-24 15:21 417
      this.DOMSearchBox().className = 'MSearchBoxInactive';
7e54d64b sago007 2018-06-24 15:21 418
      this.DOMSearchField().value   = this.searchLabel;
7e54d64b sago007 2018-06-24 15:21 419
      this.searchActive             = false;
7e54d64b sago007 2018-06-24 15:21 420
      this.lastSearchValue          = ''
7e54d64b sago007 2018-06-24 15:21 421
      this.lastResultsPage          = '';
7e54d64b sago007 2018-06-24 15:21 422
    }
7e54d64b sago007 2018-06-24 15:21 423
  }
7e54d64b sago007 2018-06-24 15:21 424
}
7e54d64b sago007 2018-06-24 15:21 425
7e54d64b sago007 2018-06-24 15:21 426
// -----------------------------------------------------------------------
7e54d64b sago007 2018-06-24 15:21 427
7e54d64b sago007 2018-06-24 15:21 428
// The class that handles everything on the search results page.
7e54d64b sago007 2018-06-24 15:21 429
function SearchResults(name)
7e54d64b sago007 2018-06-24 15:21 430
{
7e54d64b sago007 2018-06-24 15:21 431
    // The number of matches from the last run of <Search()>.
7e54d64b sago007 2018-06-24 15:21 432
    this.lastMatchCount = 0;
7e54d64b sago007 2018-06-24 15:21 433
    this.lastKey = 0;
7e54d64b sago007 2018-06-24 15:21 434
    this.repeatOn = false;
7e54d64b sago007 2018-06-24 15:21 435
7e54d64b sago007 2018-06-24 15:21 436
    // Toggles the visibility of the passed element ID.
7e54d64b sago007 2018-06-24 15:21 437
    this.FindChildElement = function(id)
7e54d64b sago007 2018-06-24 15:21 438
    {
7e54d64b sago007 2018-06-24 15:21 439
      var parentElement = document.getElementById(id);
7e54d64b sago007 2018-06-24 15:21 440
      var element = parentElement.firstChild;
7e54d64b sago007 2018-06-24 15:21 441
7e54d64b sago007 2018-06-24 15:21 442
      while (element && element!=parentElement)
7e54d64b sago007 2018-06-24 15:21 443
      {
3af4e794 Poul Sander 2021-07-07 21:02 444
        if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren')
7e54d64b sago007 2018-06-24 15:21 445
        {
7e54d64b sago007 2018-06-24 15:21 446
          return element;
7e54d64b sago007 2018-06-24 15:21 447
        }
7e54d64b sago007 2018-06-24 15:21 448
3af4e794 Poul Sander 2021-07-07 21:02 449
        if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes())
7e54d64b sago007 2018-06-24 15:21 450
        {
7e54d64b sago007 2018-06-24 15:21 451
           element = element.firstChild;
7e54d64b sago007 2018-06-24 15:21 452
        }
7e54d64b sago007 2018-06-24 15:21 453
        else if (element.nextSibling)
7e54d64b sago007 2018-06-24 15:21 454
        {
7e54d64b sago007 2018-06-24 15:21 455
           element = element.nextSibling;
7e54d64b sago007 2018-06-24 15:21 456
        }
7e54d64b sago007 2018-06-24 15:21 457
        else
7e54d64b sago007 2018-06-24 15:21 458
        {
7e54d64b sago007 2018-06-24 15:21 459
          do
7e54d64b sago007 2018-06-24 15:21 460
          {
7e54d64b sago007 2018-06-24 15:21 461
            element = element.parentNode;
7e54d64b sago007 2018-06-24 15:21 462
          }
7e54d64b sago007 2018-06-24 15:21 463
          while (element && element!=parentElement && !element.nextSibling);
7e54d64b sago007 2018-06-24 15:21 464
7e54d64b sago007 2018-06-24 15:21 465
          if (element && element!=parentElement)
7e54d64b sago007 2018-06-24 15:21 466
          {
7e54d64b sago007 2018-06-24 15:21 467
            element = element.nextSibling;
7e54d64b sago007 2018-06-24 15:21 468
          }
7e54d64b sago007 2018-06-24 15:21 469
        }
7e54d64b sago007 2018-06-24 15:21 470
      }
7e54d64b sago007 2018-06-24 15:21 471
    }
7e54d64b sago007 2018-06-24 15:21 472
7e54d64b sago007 2018-06-24 15:21 473
    this.Toggle = function(id)
7e54d64b sago007 2018-06-24 15:21 474
    {
7e54d64b sago007 2018-06-24 15:21 475
      var element = this.FindChildElement(id);
7e54d64b sago007 2018-06-24 15:21 476
      if (element)
7e54d64b sago007 2018-06-24 15:21 477
      {
7e54d64b sago007 2018-06-24 15:21 478
        if (element.style.display == 'block')
7e54d64b sago007 2018-06-24 15:21 479
        {
7e54d64b sago007 2018-06-24 15:21 480
          element.style.display = 'none';
7e54d64b sago007 2018-06-24 15:21 481
        }
7e54d64b sago007 2018-06-24 15:21 482
        else
7e54d64b sago007 2018-06-24 15:21 483
        {
7e54d64b sago007 2018-06-24 15:21 484
          element.style.display = 'block';
7e54d64b sago007 2018-06-24 15:21 485
        }
7e54d64b sago007 2018-06-24 15:21 486
      }
7e54d64b sago007 2018-06-24 15:21 487
    }
7e54d64b sago007 2018-06-24 15:21 488
7e54d64b sago007 2018-06-24 15:21 489
    // Searches for the passed string.  If there is no parameter,
7e54d64b sago007 2018-06-24 15:21 490
    // it takes it from the URL query.
7e54d64b sago007 2018-06-24 15:21 491
    //
7e54d64b sago007 2018-06-24 15:21 492
    // Always returns true, since other documents may try to call it
7e54d64b sago007 2018-06-24 15:21 493
    // and that may or may not be possible.
7e54d64b sago007 2018-06-24 15:21 494
    this.Search = function(search)
7e54d64b sago007 2018-06-24 15:21 495
    {
7e54d64b sago007 2018-06-24 15:21 496
      if (!search) // get search word from URL
7e54d64b sago007 2018-06-24 15:21 497
      {
7e54d64b sago007 2018-06-24 15:21 498
        search = window.location.search;
7e54d64b sago007 2018-06-24 15:21 499
        search = search.substring(1);  // Remove the leading '?'
7e54d64b sago007 2018-06-24 15:21 500
        search = unescape(search);
7e54d64b sago007 2018-06-24 15:21 501
      }
7e54d64b sago007 2018-06-24 15:21 502
7e54d64b sago007 2018-06-24 15:21 503
      search = search.replace(/^ +/, ""); // strip leading spaces
7e54d64b sago007 2018-06-24 15:21 504
      search = search.replace(/ +$/, ""); // strip trailing spaces
7e54d64b sago007 2018-06-24 15:21 505
      search = search.toLowerCase();
7e54d64b sago007 2018-06-24 15:21 506
      search = convertToId(search);
7e54d64b sago007 2018-06-24 15:21 507
7e54d64b sago007 2018-06-24 15:21 508
      var resultRows = document.getElementsByTagName("div");
7e54d64b sago007 2018-06-24 15:21 509
      var matches = 0;
7e54d64b sago007 2018-06-24 15:21 510
7e54d64b sago007 2018-06-24 15:21 511
      var i = 0;
7e54d64b sago007 2018-06-24 15:21 512
      while (i < resultRows.length)
7e54d64b sago007 2018-06-24 15:21 513
      {
7e54d64b sago007 2018-06-24 15:21 514
        var row = resultRows.item(i);
7e54d64b sago007 2018-06-24 15:21 515
        if (row.className == "SRResult")
7e54d64b sago007 2018-06-24 15:21 516
        {
7e54d64b sago007 2018-06-24 15:21 517
          var rowMatchName = row.id.toLowerCase();
7e54d64b sago007 2018-06-24 15:21 518
          rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
7e54d64b sago007 2018-06-24 15:21 519
7e54d64b sago007 2018-06-24 15:21 520
          if (search.length<=rowMatchName.length &&
7e54d64b sago007 2018-06-24 15:21 521
             rowMatchName.substr(0, search.length)==search)
7e54d64b sago007 2018-06-24 15:21 522
          {
7e54d64b sago007 2018-06-24 15:21 523
            row.style.display = 'block';
7e54d64b sago007 2018-06-24 15:21 524
            matches++;
7e54d64b sago007 2018-06-24 15:21 525
          }
7e54d64b sago007 2018-06-24 15:21 526
          else
7e54d64b sago007 2018-06-24 15:21 527
          {
7e54d64b sago007 2018-06-24 15:21 528
            row.style.display = 'none';
7e54d64b sago007 2018-06-24 15:21 529
          }
7e54d64b sago007 2018-06-24 15:21 530
        }
7e54d64b sago007 2018-06-24 15:21 531
        i++;
7e54d64b sago007 2018-06-24 15:21 532
      }
7e54d64b sago007 2018-06-24 15:21 533
      document.getElementById("Searching").style.display='none';
7e54d64b sago007 2018-06-24 15:21 534
      if (matches == 0) // no results
7e54d64b sago007 2018-06-24 15:21 535
      {
7e54d64b sago007 2018-06-24 15:21 536
        document.getElementById("NoMatches").style.display='block';
7e54d64b sago007 2018-06-24 15:21 537
      }
7e54d64b sago007 2018-06-24 15:21 538
      else // at least one result
7e54d64b sago007 2018-06-24 15:21 539
      {
7e54d64b sago007 2018-06-24 15:21 540
        document.getElementById("NoMatches").style.display='none';
7e54d64b sago007 2018-06-24 15:21 541
      }
7e54d64b sago007 2018-06-24 15:21 542
      this.lastMatchCount = matches;
7e54d64b sago007 2018-06-24 15:21 543
      return true;
7e54d64b sago007 2018-06-24 15:21 544
    }
7e54d64b sago007 2018-06-24 15:21 545
7e54d64b sago007 2018-06-24 15:21 546
    // return the first item with index index or higher that is visible
7e54d64b sago007 2018-06-24 15:21 547
    this.NavNext = function(index)
7e54d64b sago007 2018-06-24 15:21 548
    {
7e54d64b sago007 2018-06-24 15:21 549
      var focusItem;
7e54d64b sago007 2018-06-24 15:21 550
      while (1)
7e54d64b sago007 2018-06-24 15:21 551
      {
7e54d64b sago007 2018-06-24 15:21 552
        var focusName = 'Item'+index;
7e54d64b sago007 2018-06-24 15:21 553
        focusItem = document.getElementById(focusName);
7e54d64b sago007 2018-06-24 15:21 554
        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
7e54d64b sago007 2018-06-24 15:21 555
        {
7e54d64b sago007 2018-06-24 15:21 556
          break;
7e54d64b sago007 2018-06-24 15:21 557
        }
7e54d64b sago007 2018-06-24 15:21 558
        else if (!focusItem) // last element
7e54d64b sago007 2018-06-24 15:21 559
        {
7e54d64b sago007 2018-06-24 15:21 560
          break;
7e54d64b sago007 2018-06-24 15:21 561
        }
7e54d64b sago007 2018-06-24 15:21 562
        focusItem=null;
7e54d64b sago007 2018-06-24 15:21 563
        index++;
7e54d64b sago007 2018-06-24 15:21 564
      }
7e54d64b sago007 2018-06-24 15:21 565
      return focusItem;
7e54d64b sago007 2018-06-24 15:21 566
    }
7e54d64b sago007 2018-06-24 15:21 567
7e54d64b sago007 2018-06-24 15:21 568
    this.NavPrev = function(index)
7e54d64b sago007 2018-06-24 15:21 569
    {
7e54d64b sago007 2018-06-24 15:21 570
      var focusItem;
7e54d64b sago007 2018-06-24 15:21 571
      while (1)
7e54d64b sago007 2018-06-24 15:21 572
      {
7e54d64b sago007 2018-06-24 15:21 573
        var focusName = 'Item'+index;
7e54d64b sago007 2018-06-24 15:21 574
        focusItem = document.getElementById(focusName);
7e54d64b sago007 2018-06-24 15:21 575
        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
7e54d64b sago007 2018-06-24 15:21 576
        {
7e54d64b sago007 2018-06-24 15:21 577
          break;
7e54d64b sago007 2018-06-24 15:21 578
        }
7e54d64b sago007 2018-06-24 15:21 579
        else if (!focusItem) // last element
7e54d64b sago007 2018-06-24 15:21 580
        {
7e54d64b sago007 2018-06-24 15:21 581
          break;
7e54d64b sago007 2018-06-24 15:21 582
        }
7e54d64b sago007 2018-06-24 15:21 583
        focusItem=null;
7e54d64b sago007 2018-06-24 15:21 584
        index--;
7e54d64b sago007 2018-06-24 15:21 585
      }
7e54d64b sago007 2018-06-24 15:21 586
      return focusItem;
7e54d64b sago007 2018-06-24 15:21 587
    }
7e54d64b sago007 2018-06-24 15:21 588
7e54d64b sago007 2018-06-24 15:21 589
    this.ProcessKeys = function(e)
7e54d64b sago007 2018-06-24 15:21 590
    {
7e54d64b sago007 2018-06-24 15:21 591
      if (e.type == "keydown")
7e54d64b sago007 2018-06-24 15:21 592
      {
7e54d64b sago007 2018-06-24 15:21 593
        this.repeatOn = false;
7e54d64b sago007 2018-06-24 15:21 594
        this.lastKey = e.keyCode;
7e54d64b sago007 2018-06-24 15:21 595
      }
7e54d64b sago007 2018-06-24 15:21 596
      else if (e.type == "keypress")
7e54d64b sago007 2018-06-24 15:21 597
      {
7e54d64b sago007 2018-06-24 15:21 598
        if (!this.repeatOn)
7e54d64b sago007 2018-06-24 15:21 599
        {
7e54d64b sago007 2018-06-24 15:21 600
          if (this.lastKey) this.repeatOn = true;
7e54d64b sago007 2018-06-24 15:21 601
          return false; // ignore first keypress after keydown
7e54d64b sago007 2018-06-24 15:21 602
        }
7e54d64b sago007 2018-06-24 15:21 603
      }
7e54d64b sago007 2018-06-24 15:21 604
      else if (e.type == "keyup")
7e54d64b sago007 2018-06-24 15:21 605
      {
7e54d64b sago007 2018-06-24 15:21 606
        this.lastKey = 0;
7e54d64b sago007 2018-06-24 15:21 607
        this.repeatOn = false;
7e54d64b sago007 2018-06-24 15:21 608
      }
7e54d64b sago007 2018-06-24 15:21 609
      return this.lastKey!=0;
7e54d64b sago007 2018-06-24 15:21 610
    }
7e54d64b sago007 2018-06-24 15:21 611
7e54d64b sago007 2018-06-24 15:21 612
    this.Nav = function(evt,itemIndex)
7e54d64b sago007 2018-06-24 15:21 613
    {
7e54d64b sago007 2018-06-24 15:21 614
      var e  = (evt) ? evt : window.event; // for IE
7e54d64b sago007 2018-06-24 15:21 615
      if (e.keyCode==13) return true;
7e54d64b sago007 2018-06-24 15:21 616
      if (!this.ProcessKeys(e)) return false;
7e54d64b sago007 2018-06-24 15:21 617
7e54d64b sago007 2018-06-24 15:21 618
      if (this.lastKey==38) // Up
7e54d64b sago007 2018-06-24 15:21 619
      {
7e54d64b sago007 2018-06-24 15:21 620
        var newIndex = itemIndex-1;
7e54d64b sago007 2018-06-24 15:21 621
        var focusItem = this.NavPrev(newIndex);
7e54d64b sago007 2018-06-24 15:21 622
        if (focusItem)
7e54d64b sago007 2018-06-24 15:21 623
        {
7e54d64b sago007 2018-06-24 15:21 624
          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
7e54d64b sago007 2018-06-24 15:21 625
          if (child && child.style.display == 'block') // children visible
7e54d64b sago007 2018-06-24 15:21 626
          {
7e54d64b sago007 2018-06-24 15:21 627
            var n=0;
7e54d64b sago007 2018-06-24 15:21 628
            var tmpElem;
7e54d64b sago007 2018-06-24 15:21 629
            while (1) // search for last child
7e54d64b sago007 2018-06-24 15:21 630
            {
7e54d64b sago007 2018-06-24 15:21 631
              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
7e54d64b sago007 2018-06-24 15:21 632
              if (tmpElem)
7e54d64b sago007 2018-06-24 15:21 633
              {
7e54d64b sago007 2018-06-24 15:21 634
                focusItem = tmpElem;
7e54d64b sago007 2018-06-24 15:21 635
              }
7e54d64b sago007 2018-06-24 15:21 636
              else // found it!
7e54d64b sago007 2018-06-24 15:21 637
              {
7e54d64b sago007 2018-06-24 15:21 638
                break;
7e54d64b sago007 2018-06-24 15:21 639
              }
7e54d64b sago007 2018-06-24 15:21 640
              n++;
7e54d64b sago007 2018-06-24 15:21 641
            }
7e54d64b sago007 2018-06-24 15:21 642
          }
7e54d64b sago007 2018-06-24 15:21 643
        }
7e54d64b sago007 2018-06-24 15:21 644
        if (focusItem)
7e54d64b sago007 2018-06-24 15:21 645
        {
7e54d64b sago007 2018-06-24 15:21 646
          focusItem.focus();
7e54d64b sago007 2018-06-24 15:21 647
        }
7e54d64b sago007 2018-06-24 15:21 648
        else // return focus to search field
7e54d64b sago007 2018-06-24 15:21 649
        {
7e54d64b sago007 2018-06-24 15:21 650
           parent.document.getElementById("MSearchField").focus();
7e54d64b sago007 2018-06-24 15:21 651
        }
7e54d64b sago007 2018-06-24 15:21 652
      }
7e54d64b sago007 2018-06-24 15:21 653
      else if (this.lastKey==40) // Down
7e54d64b sago007 2018-06-24 15:21 654
      {
7e54d64b sago007 2018-06-24 15:21 655
        var newIndex = itemIndex+1;
7e54d64b sago007 2018-06-24 15:21 656
        var focusItem;
7e54d64b sago007 2018-06-24 15:21 657
        var item = document.getElementById('Item'+itemIndex);
7e54d64b sago007 2018-06-24 15:21 658
        var elem = this.FindChildElement(item.parentNode.parentNode.id);
7e54d64b sago007 2018-06-24 15:21 659
        if (elem && elem.style.display == 'block') // children visible
7e54d64b sago007 2018-06-24 15:21 660
        {
7e54d64b sago007 2018-06-24 15:21 661
          focusItem = document.getElementById('Item'+itemIndex+'_c0');
7e54d64b sago007 2018-06-24 15:21 662
        }
7e54d64b sago007 2018-06-24 15:21 663
        if (!focusItem) focusItem = this.NavNext(newIndex);
7e54d64b sago007 2018-06-24 15:21 664
        if (focusItem)  focusItem.focus();
7e54d64b sago007 2018-06-24 15:21 665
      }
7e54d64b sago007 2018-06-24 15:21 666
      else if (this.lastKey==39) // Right
7e54d64b sago007 2018-06-24 15:21 667
      {
7e54d64b sago007 2018-06-24 15:21 668
        var item = document.getElementById('Item'+itemIndex);
7e54d64b sago007 2018-06-24 15:21 669
        var elem = this.FindChildElement(item.parentNode.parentNode.id);
7e54d64b sago007 2018-06-24 15:21 670
        if (elem) elem.style.display = 'block';
7e54d64b sago007 2018-06-24 15:21 671
      }
7e54d64b sago007 2018-06-24 15:21 672
      else if (this.lastKey==37) // Left
7e54d64b sago007 2018-06-24 15:21 673
      {
7e54d64b sago007 2018-06-24 15:21 674
        var item = document.getElementById('Item'+itemIndex);
7e54d64b sago007 2018-06-24 15:21 675
        var elem = this.FindChildElement(item.parentNode.parentNode.id);
7e54d64b sago007 2018-06-24 15:21 676
        if (elem) elem.style.display = 'none';
7e54d64b sago007 2018-06-24 15:21 677
      }
7e54d64b sago007 2018-06-24 15:21 678
      else if (this.lastKey==27) // Escape
7e54d64b sago007 2018-06-24 15:21 679
      {
7e54d64b sago007 2018-06-24 15:21 680
        parent.searchBox.CloseResultsWindow();
7e54d64b sago007 2018-06-24 15:21 681
        parent.document.getElementById("MSearchField").focus();
7e54d64b sago007 2018-06-24 15:21 682
      }
7e54d64b sago007 2018-06-24 15:21 683
      else if (this.lastKey==13) // Enter
7e54d64b sago007 2018-06-24 15:21 684
      {
7e54d64b sago007 2018-06-24 15:21 685
        return true;
7e54d64b sago007 2018-06-24 15:21 686
      }
7e54d64b sago007 2018-06-24 15:21 687
      return false;
7e54d64b sago007 2018-06-24 15:21 688
    }
7e54d64b sago007 2018-06-24 15:21 689
7e54d64b sago007 2018-06-24 15:21 690
    this.NavChild = function(evt,itemIndex,childIndex)
7e54d64b sago007 2018-06-24 15:21 691
    {
7e54d64b sago007 2018-06-24 15:21 692
      var e  = (evt) ? evt : window.event; // for IE
7e54d64b sago007 2018-06-24 15:21 693
      if (e.keyCode==13) return true;
7e54d64b sago007 2018-06-24 15:21 694
      if (!this.ProcessKeys(e)) return false;
7e54d64b sago007 2018-06-24 15:21 695
7e54d64b sago007 2018-06-24 15:21 696
      if (this.lastKey==38) // Up
7e54d64b sago007 2018-06-24 15:21 697
      {
7e54d64b sago007 2018-06-24 15:21 698
        if (childIndex>0)
7e54d64b sago007 2018-06-24 15:21 699
        {
7e54d64b sago007 2018-06-24 15:21 700
          var newIndex = childIndex-1;
7e54d64b sago007 2018-06-24 15:21 701
          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
7e54d64b sago007 2018-06-24 15:21 702
        }
7e54d64b sago007 2018-06-24 15:21 703
        else // already at first child, jump to parent
7e54d64b sago007 2018-06-24 15:21 704
        {
7e54d64b sago007 2018-06-24 15:21 705
          document.getElementById('Item'+itemIndex).focus();
7e54d64b sago007 2018-06-24 15:21 706
        }
7e54d64b sago007 2018-06-24 15:21 707
      }
7e54d64b sago007 2018-06-24 15:21 708
      else if (this.lastKey==40) // Down
7e54d64b sago007 2018-06-24 15:21 709
      {
7e54d64b sago007 2018-06-24 15:21 710
        var newIndex = childIndex+1;
7e54d64b sago007 2018-06-24 15:21 711
        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
7e54d64b sago007 2018-06-24 15:21 712
        if (!elem) // last child, jump to parent next parent
7e54d64b sago007 2018-06-24 15:21 713
        {
7e54d64b sago007 2018-06-24 15:21 714
          elem = this.NavNext(itemIndex+1);
7e54d64b sago007 2018-06-24 15:21 715
        }
7e54d64b sago007 2018-06-24 15:21 716
        if (elem)
7e54d64b sago007 2018-06-24 15:21 717
        {
7e54d64b sago007 2018-06-24 15:21 718
          elem.focus();
7e54d64b sago007 2018-06-24 15:21 719
        }
7e54d64b sago007 2018-06-24 15:21 720
      }
7e54d64b sago007 2018-06-24 15:21 721
      else if (this.lastKey==27) // Escape
7e54d64b sago007 2018-06-24 15:21 722
      {
7e54d64b sago007 2018-06-24 15:21 723
        parent.searchBox.CloseResultsWindow();
7e54d64b sago007 2018-06-24 15:21 724
        parent.document.getElementById("MSearchField").focus();
7e54d64b sago007 2018-06-24 15:21 725
      }
7e54d64b sago007 2018-06-24 15:21 726
      else if (this.lastKey==13) // Enter
7e54d64b sago007 2018-06-24 15:21 727
      {
7e54d64b sago007 2018-06-24 15:21 728
        return true;
7e54d64b sago007 2018-06-24 15:21 729
      }
7e54d64b sago007 2018-06-24 15:21 730
      return false;
7e54d64b sago007 2018-06-24 15:21 731
    }
7e54d64b sago007 2018-06-24 15:21 732
}
7e54d64b sago007 2018-06-24 15:21 733
7e54d64b sago007 2018-06-24 15:21 734
function setKeyActions(elem,action)
7e54d64b sago007 2018-06-24 15:21 735
{
7e54d64b sago007 2018-06-24 15:21 736
  elem.setAttribute('onkeydown',action);
7e54d64b sago007 2018-06-24 15:21 737
  elem.setAttribute('onkeypress',action);
7e54d64b sago007 2018-06-24 15:21 738
  elem.setAttribute('onkeyup',action);
7e54d64b sago007 2018-06-24 15:21 739
}
7e54d64b sago007 2018-06-24 15:21 740
7e54d64b sago007 2018-06-24 15:21 741
function setClassAttr(elem,attr)
7e54d64b sago007 2018-06-24 15:21 742
{
7e54d64b sago007 2018-06-24 15:21 743
  elem.setAttribute('class',attr);
7e54d64b sago007 2018-06-24 15:21 744
  elem.setAttribute('className',attr);
7e54d64b sago007 2018-06-24 15:21 745
}
7e54d64b sago007 2018-06-24 15:21 746
7e54d64b sago007 2018-06-24 15:21 747
function createResults()
7e54d64b sago007 2018-06-24 15:21 748
{
7e54d64b sago007 2018-06-24 15:21 749
  var results = document.getElementById("SRResults");
7e54d64b sago007 2018-06-24 15:21 750
  for (var e=0; e<searchData.length; e++)
7e54d64b sago007 2018-06-24 15:21 751
  {
7e54d64b sago007 2018-06-24 15:21 752
    var id = searchData[e][0];
7e54d64b sago007 2018-06-24 15:21 753
    var srResult = document.createElement('div');
7e54d64b sago007 2018-06-24 15:21 754
    srResult.setAttribute('id','SR_'+id);
7e54d64b sago007 2018-06-24 15:21 755
    setClassAttr(srResult,'SRResult');
7e54d64b sago007 2018-06-24 15:21 756
    var srEntry = document.createElement('div');
7e54d64b sago007 2018-06-24 15:21 757
    setClassAttr(srEntry,'SREntry');
7e54d64b sago007 2018-06-24 15:21 758
    var srLink = document.createElement('a');
7e54d64b sago007 2018-06-24 15:21 759
    srLink.setAttribute('id','Item'+e);
7e54d64b sago007 2018-06-24 15:21 760
    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
7e54d64b sago007 2018-06-24 15:21 761
    setClassAttr(srLink,'SRSymbol');
7e54d64b sago007 2018-06-24 15:21 762
    srLink.innerHTML = searchData[e][1][0];
7e54d64b sago007 2018-06-24 15:21 763
    srEntry.appendChild(srLink);
7e54d64b sago007 2018-06-24 15:21 764
    if (searchData[e][1].length==2) // single result
7e54d64b sago007 2018-06-24 15:21 765
    {
7e54d64b sago007 2018-06-24 15:21 766
      srLink.setAttribute('href',searchData[e][1][1][0]);
7e54d64b sago007 2018-06-24 15:21 767
      if (searchData[e][1][1][1])
7e54d64b sago007 2018-06-24 15:21 768
      {
7e54d64b sago007 2018-06-24 15:21 769
       srLink.setAttribute('target','_parent');
7e54d64b sago007 2018-06-24 15:21 770
      }
7e54d64b sago007 2018-06-24 15:21 771
      var srScope = document.createElement('span');
7e54d64b sago007 2018-06-24 15:21 772
      setClassAttr(srScope,'SRScope');
7e54d64b sago007 2018-06-24 15:21 773
      srScope.innerHTML = searchData[e][1][1][2];
7e54d64b sago007 2018-06-24 15:21 774
      srEntry.appendChild(srScope);
7e54d64b sago007 2018-06-24 15:21 775
    }
7e54d64b sago007 2018-06-24 15:21 776
    else // multiple results
7e54d64b sago007 2018-06-24 15:21 777
    {
7e54d64b sago007 2018-06-24 15:21 778
      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
7e54d64b sago007 2018-06-24 15:21 779
      var srChildren = document.createElement('div');
7e54d64b sago007 2018-06-24 15:21 780
      setClassAttr(srChildren,'SRChildren');
7e54d64b sago007 2018-06-24 15:21 781
      for (var c=0; c<searchData[e][1].length-1; c++)
7e54d64b sago007 2018-06-24 15:21 782
      {
7e54d64b sago007 2018-06-24 15:21 783
        var srChild = document.createElement('a');
7e54d64b sago007 2018-06-24 15:21 784
        srChild.setAttribute('id','Item'+e+'_c'+c);
7e54d64b sago007 2018-06-24 15:21 785
        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
7e54d64b sago007 2018-06-24 15:21 786
        setClassAttr(srChild,'SRScope');
7e54d64b sago007 2018-06-24 15:21 787
        srChild.setAttribute('href',searchData[e][1][c+1][0]);
7e54d64b sago007 2018-06-24 15:21 788
        if (searchData[e][1][c+1][1])
7e54d64b sago007 2018-06-24 15:21 789
        {
7e54d64b sago007 2018-06-24 15:21 790
         srChild.setAttribute('target','_parent');
7e54d64b sago007 2018-06-24 15:21 791
        }
7e54d64b sago007 2018-06-24 15:21 792
        srChild.innerHTML = searchData[e][1][c+1][2];
7e54d64b sago007 2018-06-24 15:21 793
        srChildren.appendChild(srChild);
7e54d64b sago007 2018-06-24 15:21 794
      }
7e54d64b sago007 2018-06-24 15:21 795
      srEntry.appendChild(srChildren);
7e54d64b sago007 2018-06-24 15:21 796
    }
7e54d64b sago007 2018-06-24 15:21 797
    srResult.appendChild(srEntry);
7e54d64b sago007 2018-06-24 15:21 798
    results.appendChild(srResult);
7e54d64b sago007 2018-06-24 15:21 799
  }
7e54d64b sago007 2018-06-24 15:21 800
}
7e54d64b sago007 2018-06-24 15:21 801
7e54d64b sago007 2018-06-24 15:21 802
function init_search()
7e54d64b sago007 2018-06-24 15:21 803
{
7e54d64b sago007 2018-06-24 15:21 804
  var results = document.getElementById("MSearchSelectWindow");
7e54d64b sago007 2018-06-24 15:21 805
  for (var key in indexSectionLabels)
7e54d64b sago007 2018-06-24 15:21 806
  {
7e54d64b sago007 2018-06-24 15:21 807
    var link = document.createElement('a');
7e54d64b sago007 2018-06-24 15:21 808
    link.setAttribute('class','SelectItem');
7e54d64b sago007 2018-06-24 15:21 809
    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
7e54d64b sago007 2018-06-24 15:21 810
    link.href='javascript:void(0)';
7e54d64b sago007 2018-06-24 15:21 811
    link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
7e54d64b sago007 2018-06-24 15:21 812
    results.appendChild(link);
7e54d64b sago007 2018-06-24 15:21 813
  }
7e54d64b sago007 2018-06-24 15:21 814
  searchBox.OnSelectItem(0);
7e54d64b sago007 2018-06-24 15:21 815
}
3af4e794 Poul Sander 2021-07-07 21:02 816
/* @license-end */
1970-01-01 00:00 817