// BOOKMARKLET
doit=
function()
{
    function _traverse(_node,_parent)
    {
        // Declare all the variables up front, to save bytes.
        var _item=0,
            node_nodeType=_node.nodeType,
            node_childNodes=_node.childNodes,
            reg_exps=[/(.*?)\$\$(.*?)\$\$(.*)/m,
                /(.*?)<tex>(.*?)<\/tex>(.*)/m,
                /(.*?)<dtex>(.*?)<\/dtex>(.*)/],
            text_quad,
            img_node;

        // Recurse over all appropriate nodes.
        if(node_nodeType==1&&node_childNodes)
            for(_item;_item<node_childNodes.length;++_item)
                _traverse(node_childNodes[_item],_node);

        // else
        if(node_nodeType==3)
        {
            while(_item<2&&!text_quad)
                // Use replace because regular expression discards leading \n.
                text_quad=reg_exps[_item++].exec(_node.data.replace(/\n/g," "));

            if(text_quad)
            {
                // Create the new image node.
                img_node=document.createElement("img");
                img_node.src="http://www.mathtran.org/cgi-bin/mathtran?tex="+
                    encodeURIComponent(
                        img_node.tex=text_quad[2]
                    );
                img_node.texX=_item;
                
                a_node=_node.splitText(0);
                b_node=a_node.splitText(0);
                
                _node.nodeValue=text_quad[1];
                b_node.nodeValue=text_quad[3];
                
                _parent.replaceChild(img_node,a_node);
            }
        }
    }
    _traverse(document.body)
}


// BOOKMARKLET
undoit=
function()
{
    var _images=document.getElementsByTagName('img'),
        _item=0,
        _image,
        pre_tex=post_tex="$$";

    while(_item<_images.length)
    {
        _image=_images[_item];
        if(_image.tex)
        {
            //[pre_tex,post_tex]=2-_image.texX?["$$","$$"]:["<tex>","</tex>"];
            
            _image.parentNode.replaceChild(
                document.createTextNode(pre_tex+_image.tex+post_tex),
            _image)
           
        }else _item++
    }
}
