 var gAccordion;
      var gFilterTimeout;

      function init() {
        var stretchers  = document.getElementsByClassName('stretcher');
        var toggles     = document.getElementsByClassName('display');
        gAccordion      = new fx.Accordion(toggles, stretchers, {opacity: true, duration: 400});
      }

      function filter() {
        var stretchers  = document.getElementsByClassName('stretcher');
        var toggles     = document.getElementsByClassName('display');
        var headers     = document.getElementsByClassName('header');

        var query       = document.getElementById('query').value;
        query           = query.split(/\s+/);

        gAccordion.hideAll();

        for (var x = 0; x < toggles.length; ++x) {
          var hide = false;

          for (var y = 0; y < query.length; ++y) {
            if (toggles[x].innerHTML.toLowerCase().indexOf(query[y].toLowerCase()) == -1
                && stretchers[x].innerHTML.toLowerCase().indexOf(query[y].toLowerCase()) == -1) {
              hide = true;
              break;
            }
          }

          if (hide && query.length) {
            toggles[x].style.display = 'none';
            stretchers[x].style.display = 'none';
          } else {
            toggles[x].style.display = 'block';
            stretchers[x].style.display = 'block';
          }
        }

        for (var x = 0; x < headers.length; ++x) {
          var display        = 'none';
          var currentSibling = headers[x].nextSibling;

          while (currentSibling) {
            if (currentSibling.className && currentSibling.className == 'header') {
              break;
            }

            if (currentSibling.className && currentSibling.className == 'display' && currentSibling.style.display == 'block') {
              display = 'block';
              break;
            }

            currentSibling = currentSibling.nextSibling;
          }

          headers[x].style.display = display;
        }

        var noAnswers = 'block';
        for (var x = 0; x < headers.length; ++x) {
          if (headers[x].style.display == 'block') {
            noAnswers = 'none';
            break;
          }
        }

        document.getElementById('noAnswers').style.display = noAnswers;
      }

      function filterTimer() {
        if (gFilterTimeout) {
          clearTimeout(gFilterTimeout);
          gFilterTimeout = null;
        }

        gFilterTimeout = setTimeout(filter, 500);
      }