function innerXHTML(str, replace, target) {
    if (typeof target == 'string') {
        var target = document.getElementById(target);
    } else if (target == undefined) {
        var target = document.getElementsByTagName('body')[0];
    }

    if (!target) {
        return false;
    }

    if (window.DOMParser) {
        try {
            var dom = new DOMParser().parseFromString(
                '<div xmlns="http://www.w3.org/1999/xhtml">' + 
                str + 
                '</div>', 'application/xhtml+xml');
            if (dom.firstChild.nodeName == 'parsererror') {
                return false;
            }
        } catch(e) {
            return false;
        }

        if (replace) {
            while (target.hasChildNodes()) {
                target.removeChild(target.firstChild);
            }
        }

        for (var i = 0; i < dom.firstChild.childNodes.length; ++i) {
            target.appendChild(
                document.importNode(dom.firstChild.childNodes[i], true)
            );
        }

    } else {
        if (replace) {
            target.innerHTML = str;
        } else {
            target.innerHTML += str;
        }
    }
    return true;
}

