//
// Traverses the DOM tree starting at the given node, searching for
// inappropriate words and replacing them with nonsense, e.g. "%#&@$!". This
// function should not be called until the document has finished loading.
//
function filter_profanity(node)
{
    var regexps = [new RegExp("\\b(ass|twat|cum|cock)\\b"),
                   new RegExp("asshole|bitch|cocksucker|cunt|faggot|fuck|nigger|penis|prick|pussy|shit|slut|vagina|whore", "ig")];

    var nodes_to_skip = ["input", "script", "select"];

    function run_regexps(s)
    {
        for (var i = 0; i < regexps.length; i++)
        {
            s = s.replace(regexps[i], "%#&@$!");
        }
        return s;
    }

    function filter_node(node)
    {
        var node_name = node.nodeName.toLowerCase();
        var i;

        for (i = 0; i < nodes_to_skip.length; i++)
        {
            if (node_name == nodes_to_skip[i])
            {
                return;
            }
        }

        var num_children = node.childNodes.length;

        if (num_children == 0)
        {
            if (node.nodeValue)
            {
                node.nodeValue = run_regexps(node.nodeValue);
            }
        }
        else
        {
            for (i = 0; i < num_children; i++)
            {
                filter_node(node.childNodes[i]);
            }
        }
    }

    filter_node(node);
}
