if ( window && window.addEventListener && Element && Element.prototype ) {
    Element.prototype.getInnerXHTML = function()  {
        var markup = "";
        function getMarkupFor( currentNode ) {
            var kids = currentNode.childNodes;
            for ( var i = 0; i < kids.length; i++ ) {
                if ( kids[i].nodeName == "#text" ) {
                    markup += kids[i].nodeValue;
                } else if ( kids[i].nodeName == "#cdata-section" ) {
                    markup += unescape("%3C!%5BCDATA%5B");
                    markup += kids[i].nodeValue;
                    markup += unescape("%5D%5D%3E");
                } else if ( kids[i].nodeName == "#comment" ) {
                    markup += unescape("%3C%21%2D%2D%20");
                    markup += kids[i].nodeValue;
                    markup += unescape("%20%2D%2D%3E");
                } else {
                    markup += "<";
                    markup += kids[i].tagName.toLowerCase();
                    var attrs = kids[i].attributes;
                    for ( var a = 0; a < attrs.length; a++ ) {
                        markup += " ";
                        markup += attrs[a].nodeName.toLowerCase();
                        markup += "=\"";
                        markup += attrs[a].nodeValue.replace(/\"/g,"&quot;");
                        markup += "\"";
                    }
                    if ( !kids[i].hasChildNodes() ) {
                        markup += "/>";
                    } else {
                        markup += ">";
                        getMarkupFor( kids[i] );
                        markup += "<";
                        markup += "/";
                        markup += kids[i].tagName.toLowerCase();
                        markup += ">";
                    }
                }
            }
        }
        getMarkupFor( this );
        return markup;
    };
    window.addEventListener("load", function() {
        alert( document.documentElement.getInnerXHTML() );
    }, false );
}
