function HltElm(query) { 
    if (!query) 
	    return; 
	query = query.split(/[\s,\+\.]+/);
    var oldhtml = document.body.innerHTML; 
    var newhtml = HltHTML(oldhtml, query); 

    if (oldhtml != newhtml) 
        document.body.innerHTML = newhtml; 
}; 
function HltHTML(html, query) {
    var re = new Array(); 
    for (var i = 0; i < query.length; i ++) { 
        query[i] = query[i].toLowerCase(); 
        re.push(query[i]); 
    } 
    re = new RegExp('('+re.join("|")+')', "gi"); 

    var subs; 
    var stylemapper = {}; 
    for (var i = 0; i < query.length; i ++) 
        stylemapper[query[i]] = 'hlt'+(i+1); 
    subs = function(match) { 
        return '<span class="'+stylemapper[match.toLowerCase()]+'">'+match+ 
                '</span>'; 
    }; 

    var last = 0; 
    var tag = '<'; 
    var skip = false; 
    var skipre = new RegExp('^(script|style|textarea)', 'gi'); 
    var part = null; 
    var result = ''; 

    while (last >= 0) { 
        var pos = html.indexOf(tag, last); 
        if (pos < 0) { 
            part = html.substring(last); 
            last = -1; 
        } else { 
            part = html.substring(last, pos); 
            last = pos+1; 
        } 

        if (tag == '<') { 
            if (!skip) 
                part = part.replace(re, subs); 
            else 
                skip = false; 
        } else if (part.match(skipre)) { 
            skip = true; 
        } 

        result += part + (pos < 0 ? '' : tag); 
        tag = tag == '<' ? '>' : '<'; 
    } 

    return result; 
};

