var infoLayerLinkMaker = new Translator(function(text) {
    var regex = '([\\s]|^)(' + this.searchItem + ')([\\s,\\.]|$)';
    var searchWordExp = new RegExp(regex, 'gi');
    var data = text.replace(searchWordExp, '$1§§§$2§§§$3').split('§§§');
    if (data.length == 1) // no match
        return data[0];
    for (var i = 1; i < data.length; i += 2) {
        var foundItem = data[i];
        data[i] = document.createElement('a');
        data[i].href = 'javascript:void(null)';
        data[i].onmouseover = new Function('getInfoTxt(' + this.glossaryId + ')');
        data[i].onmouseout = function() {
            UnTip();
        };
        data[i].appendChild(document.createTextNode(foundItem));
    }
    var data2 = new Array();
    //sorting out empty objects
    $.each(data, function() {
        //console.log(this.toString()+' '+this.toString().length);
        if (this.toString().length > 0) {
            data2.push(this);
        }
    })
    return data2;
}, function(node) { // filter out existing links
    return node.nodeName != 'A';
});

function findKeywords() {
    $("*[panoverlay='on']").each(function() {
        // check if there are links or images inside the object
        if ($(this).find("img").length > 0) {
            //console.log('exact method');
            //choose the exact method which only touches the text-nodes
            for (var glossaryItemsCount = 0; glossaryItemsCount < glossaryItems.length - 1; glossaryItemsCount += 2) {
                infoLayerLinkMaker.searchItem = glossaryItems[glossaryItemsCount].replace('/', '-');
                infoLayerLinkMaker.glossaryId = glossaryItems[glossaryItemsCount + 1];
                infoLayerLinkMaker.traverse(this);
            }
            $(this).find("a[href='javascript:void(null)']").addClass("ilayerLink");// because setAttribute('class','ilayerLink') doesn't work in ie6,7
        } else {
            //console.log('fast method');
            // if not then choose the fast method
            //replace all links with marker and gather them in an array
            var originalText = this.innerHTML;
            var linkMarker = 'ggaagg';
            var myLinkList = new Array();
            var linkCount = 0;
            var found = false;
            var searchExp = '<a\\b[^>]*>[\\W\\w]*?<\/a>';
            var searchLinks = new RegExp(searchExp, '');
            do{
                var linkResult = searchLinks.exec(originalText);
                if (linkResult != null) {
                    myLinkList.push(linkResult[0]);
                    linkCount++;
                    found = true;
                    originalText = originalText.replace(searchLinks, linkMarker);
                } else {
                    found = false;
                }
            } while (found);

            originalText=originalText.replace(/ /g,'__');
            for (var i = 0; i < glossaryItems.length - 1; i = i + 2) {
                var searchWord = glossaryItems[i].replace(/ /g,'__');
                var regex = '(__|^)(' + searchWord + ')(__|\\.)';
                var searchWordExp = new RegExp(regex, 'gi');
                originalText = originalText.replace(searchWordExp, '$1<a href="javascript:void(null)" onmouseover="getInfoTxt(' + glossaryItems[i + 1] + ');" onmouseout="UnTip();" class="ilayerLink">$2</a>$3');
            }
            // restore the removed links
            for (i = 0; i < linkCount; i++) {
                //console.log('link nr.' + i + ' ' + myLinkList[i]);
                originalText = originalText.replace(linkMarker, myLinkList[i]);
            }
            originalText=originalText.replace(/__/g,' ');            
            this.innerHTML = originalText;
        }
    });
    $(".box.bx .blocker").css("marginBottom","0px");
    $(".contentTable td").css("paddingBottom","3px");    
}

function getInfoTxt(glossaryId) {
    var panDomain = '';
    //var locale = 'de_DE';
    var infoLayerHtml = '<div class="infoLayerTop"></div><div class="infoLayerBody">';
    jQuery.getJSON(panDomain + "/infolayer/" + glossaryId + "?l=" + locale + "&callback=?",
            function(data) {
                infoLayerHtml += data.glossarytext + '</div><div class="infoLayerBottom"></div>';
                Tip(infoLayerHtml);
            });
}

$(document).ready(function() {
    findKeywords();
});
