function highlight( s, infoText ) {
    var d = document ;
    var o = document.getElementById('highlightThisText') ;

    var browserName = navigator.appName;
    var browserVersion = parseInt(navigator.appVersion);

    if ( browserName == "Microsoft Internet Explorer" &&
            browserVersion == 4 &&
            navigator.appVersion.indexOf("MSIE 5.0") != -1) {
         return 0;
    }

    if( !s || /^\s*$/.test(s) ) {
        return 0;
    }

    o = [ o || d.documentElement || d.body ];
//  var r = new RegExp( s, 'gi' ),
    var r = new RegExp( "([-()+_:., ]|^)(" + s + ")([-()+_:., ]|$)" , 'gi' ),
//      h = d.createElement('span'), i = 0, j, k, l, m, n=0, t;
        h = d.createElement('a'), i = 0, j, k, l, m, n=0, t;

//  h.style.backgroundColor = '#ff0';
//  h.style.color = '#000';
    h.href = infoText;

    var antiLoopBack = 0 ;

    do {
        m = o[i];
        if( m.nodeType === 3 ) {
            r.lastIndex = 0;
            l = r.exec(m.nodeValue);

            if( l !== null ) {
                k = l[0].length;

                if( r.lastIndex > k ) {
                    m.splitText( r.lastIndex - k );
                    m = m.nextSibling;
                }

                if( m.nodeValue.length > k ) {
                    m.splitText(k);
                    o[i++] = m.nextSibling;
                }

                if ( m.parentNode.nodeName != 'A' ) {
                    t = h.cloneNode( true );
                    t.appendChild( d.createTextNode( l[0] ) );n++;
                    m.parentNode.replaceChild( t, m );
                } else {
                    if ( antiLoopBack == m.nodeValue.length )
                        return ;
                    else
                        antiLoopBack = m.nodeValue.length ;
                }
            }
        } else {
            j = m.childNodes.length;
            while (j) {
                o[i++] = m.childNodes.item(--j);
            }
        }
    } while(i--);

    return n;
};
