// http://indy.sven-drieling.de/testarea/JavaScript/Playground/HighlightTarget.html

    function addEvent(obj, evType, fn)
    {
        // Scott Andrew / Christian Heilmann
        // http://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.html
        
        if(obj.addEventListener)
        { 
            obj.addEventListener(evType, fn, false); 
            
            return true; 
        } 
        else if(obj.attachEvent)
        { 
            var r = obj.attachEvent("on"+evType, fn); 
           
            return r; 
        } 
        else 
        { 
            return false; 
        } 
    }// addEvent



    function highlight(hash)
    {
        var el = document.getElementById(hash);
                
        if(el)
        {        
            // Hervorheben

            el.style.backgroundColor = "aqua";


            // Benutztes Closure führt zur Speicherleck in verschiedenen Browsern.

            setTimeout(function(){el.style.backgroundColor = "";}, 2 * 1000);
        }
    }// highlight
    
    
    
    function onclickHandler(e)
    {
        // IE
        
        if(!e){var e = window.event;}
    
    
        // IE
        
        if(e.srcElement)
        {
            var target = e.srcElement;
        }
        else
        {
            var target = e.target;
        }

        var hash = target.hash.substr(1); // Ohne #
        highlight(hash);
        
          
        // Event nicht verwerfen -> Sprung zum Ziel durch Browser
        
        return true;
    }// onclickHandler(e)
        
        
           
    function init()
    {
        // OnClick-Handler für a-Elemente mit Dokument-internen Links setzen.
        
        var links = document.getElementsByTagName("a");

        // llink für Erkennung von Dokument-internen Links.
        // Bereich ab ? bzw. # abschneiden.

        if(location.search.length)
        {
            llink = location.href.substring(0, location.href.indexOf("?"));
        }
        else if(location.hash.length)
        {
            llink = location.href.substring(0, location.href.indexOf("#"));
        } 
        else
        {
            llink = location.href;
        }
            
            
        for(i = 0; i < links.length; i++)
        {
            // Interner Link?
                 
            if(links[i].hash.length)
            {
                // Bereich ab ? bzw. # abschneiden.
                
                if(links[i].search.length)
                {
                    link = links[i].href.substring(0, links[i].href.indexOf("?"));
                }
                else
                {
                    link = links[i].href.substring(0, links[i].href.indexOf("#"));
                } 
            
                if(link == llink)
                {
                    // alert("add" + links[i].hash);                 
                    addEvent(links[i], "click", onclickHandler);
                }// if(link == llink)
            }// if(links[i].hash.length)
        }// for(i = 0; i < links.length; i++)
        
        
        // Seite über externen Link mit #foo aufgerufen?
        
        if(window.location.hash.length)
        {
            highlight(window.location.hash.substr(1)); // ohne #
        }
    }// init
    
    
    addEvent(window, "load", init); 

