$(document).ready(function() {
    if(typeof kulcsszavak != 'undefined') {
        findAndReplace(kulcsszavak, function(text) {
            if(typeof kulcsszavak === 'undefined') {
                return;
            }
            return '<a href=_jtip.php?q=' + text + ' rel="_jtip.php?q=' + text + '" class="kulcsszo">' + text + '</a>';
        }, node);
    }

    $('a.kulcsszo').cluetip({
        delayedClose: 1000,
        sticky: false,
        dropShadow: false,
        showTitle: false,
        mouseOutClose: true,
        closePosition: 'title',
        closeText: '<img src="img/cross.png" alt="close" />',
        fx: {open: 'fadeIn', openSpeed: 750}
    });
});

function findAndReplace(searchText, replacement, searchNode) {
    if (!searchText || typeof replacement === 'undefined') {
        // Throw error here if you want...
        return;
    }
    var regex = typeof searchText === 'string' ?
        new RegExp(searchText, 'gi') : searchText,
            childNodes = (searchNode || document.body).childNodes,
            cnLength = childNodes.length,
            excludes = 'html,head,style,title,link,meta,script,object,iframe';
    while (cnLength--) {
        var currentNode = childNodes[cnLength];
        if (currentNode.nodeType === 1 &&
            (excludes + ',').indexOf(currentNode.nodeName.toLowerCase() + ',') === -1) {
            arguments.callee(searchText, replacement, currentNode);
        }
        if (currentNode.nodeType !== 3 || !regex.test(currentNode.data) ) {
            continue;
        }
        var parent = currentNode.parentNode,
            frag = (function(){
                var html = currentNode.data.replace(regex, replacement),
                    wrap = document.createElement('div'),
                    frag = document.createDocumentFragment();
                wrap.innerHTML = html;
                while (wrap.firstChild) {
                    frag.appendChild(wrap.firstChild);
                }
                return frag;
            })();
        parent.insertBefore(frag, currentNode);
        parent.removeChild(currentNode);
    }
}
