git repos / PlatformFolders

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

normal view · raw

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