
function hilight_glossary_entries( areas, entries, elem, css_class, title, first_only, skip_elems )
{
    var a = areas.split(',');

    // pruefen, ob skip_elems gesetzt
    if ( typeof(skip_elems) == 'undefined' )
      var skip_e = new Array();
    else
      var skip_e = skip_elems.split(',');

    for ( var i = 0; i < entries.length; i++ )
    {
        var found = false;

        for( var j = 0; j < a.length; j++ )
        {
            // var search_exp = eval("/("+entries[j].name+")/gi");

            var search_exp = new RegExp("\\b"+entries[i].name+"\\b","gi");


            var scope = document.getElementById(a[j]);

            if (scope == null)
            {
               //alert("hilight_glossary_entries\n\nWarning!\n\nscope is null. [" + a[j] + ' not found]');
               return;
            }
               
            var res = $(scope).text().search(search_exp);

            if( res != -1){
             found = hilight_text( scope , entries[i].name, elem, css_class, entries[i].url, title, first_only, skip_e );
            }

            if ( first_only && found)
              break;
        }
    }
}


function hilight_text( elem, search_term, hilight_elem, css_class, url, title, first_only, skip_elems )
{
      var search_term = search_term.toLowerCase();

      var search_exp = new RegExp("\\b"+search_term+"\\b","gi");

      for (var node = elem.firstChild,nextnode; node; node=nextnode)
      {

        nextnode = node.nextSibling;

        if (node.nodeType == 1)
        {
            // rekursion
            var found = hilight_text( node, search_term, hilight_elem, css_class, url, title, first_only, skip_elems );

            // nur das erste wort markieren
            if ( first_only && found )
                return true;
        }

        var pos;

        /*
        while(    node.nodeType == 3
               && ( pos = node.nodeValue.toLowerCase().indexOf( search_term ) ) > -1 )
        {
        */
        while(    node.nodeType == 3
               && ( pos = node.nodeValue.toLowerCase().search( search_exp ) ) != -1 )
        {

          // wenn da nix kommt fassen wir zumindest die links nicht an
          if (    typeof( skip_elems ) == 'undefined'
               || skip_elems.length == 0 )
            var skip_elems = new Array( 'A' );

          var skip = false;

          // bestimmte elementtypen werden nicht angefasst
          for ( var i = 0; i < skip_elems.length; i++ )
          {
              if ( node.parentNode.nodeName == skip_elems[ i ] )
              {
                skip = true;
                break;
              }
          }

          if ( skip )
            break;

          var string_before      = node.nodeValue.substring( 0, pos );
          var string_after       = node.nodeValue.substr( pos + search_term.length );
          var string_search_term = node.nodeValue.substring( pos, pos + search_term.length );

          var textnode_before      = document.createTextNode( string_before )
          var textnode_after       = document.createTextNode( string_after  );
          var textnode_search_term = document.createTextNode( string_search_term );

          var node_search_term = document.createElement( hilight_elem );

          if ( css_class != '' )
              $( node_search_term ).addClass ( css_class );

          if ( title != '' )
              node_search_term.setAttribute( 'title', title );

          if ( url != '' )
              node_search_term.setAttribute( 'href', url );

          node_search_term.appendChild( textnode_search_term );

          node.parentNode.replaceChild( textnode_after, node );

          textnode_after.parentNode.insertBefore( textnode_before, textnode_after);
          textnode_after.parentNode.insertBefore( node_search_term, textnode_after);

          node = textnode_after;

          return true;

        }
      }
}

