git repos / PlatformFolders

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

normal view · raw

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