git repos / PlatformFolders

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

normal view · raw

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