git repos / PlatformFolders

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

normal view · raw

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