

if (!document.documentElement.outerHTML) {
	Node.prototype.getAttributes = function(){
		var attStr = '';
		if(this && this.attributes.length > 0){
			for(a = 0; a < this.attributes.length; a ++){
				attStr += ' ' + this.attributes.item(a).nodeName + '="';
				attStr += this.attributes.item(a).nodeValue + '"';
			}
		}
		return attStr;
    }
    Node.prototype.getInsideNodes = function() {
		if (this) {
			var cNodesStr = '', i = 0;
			var iEmpty = /^(img|embed|input|br|hr)$/i;
			var cNodes = this.childNodes;
            for (i = 0; i < cNodes.length; i ++){
				switch (cNodes.item(i).nodeType){
            	case 1 :
            		cNodesStr += '<' + cNodes.item(i).nodeName.toLowerCase();
            		if(cNodes.item(i).attributes.length > 0){
            			cNodesStr += cNodes.item(i).getAttributes();
            		}
            		cNodesStr += (cNodes.item(i).nodeName.match(iEmpty))? '' : '>';
            		if(cNodes.item(i).childNodes.length > 0){
            			cNodesStr += cNodes.item(i).getInsideNodes();
            		}
            		if(cNodes.item(i).nodeName.match(iEmpty)){
            			cNodesStr += ' />';
            		} else {
            			cNodesStr += '</' + cNodes.item(i).nodeName.toLowerCase() + '>';
            		}
            		break;
            	case 3 :
            		cNodesStr += cNodes.item(i).nodeValue;
            		break;
            	case 8 :
            		cNodesStr += '<!--' + cNodes.item(i).nodeValue + '-->';
            		break;
				}
			}
			return cNodesStr;
		}
    }
    HTMLElement.prototype.outerHTML getter = function() {
        var s = '';
        var iEmpty = /^(img|embed|input|br|hr)$/i;
        switch (this.nodeType) {
        case 1: //node
            s += '<' + this.nodeName.toLowerCase();
            s += this.getAttributes();
            if (this.nodeName.match(iEmpty)) {
            	s += ' />';
            } else {
            	s += '>'  + this.getInsideNodes();
            	s += '</' + this.nodeName.toLowerCase() + '>';
            }
            break;
        case 3: //text
            s += this.nodeValue;
            break;
        case 8: //comment
            cNodesStr += '<!--' + this.nodeValue + '-->';
            break;
		}
		return s;
	}
	HTMLElement.prototype.outerHTML setter = function(html) {
		var r = document.createRange();
		r.setStartBefore(this);
		var f = r.createContextualFragment(html);
		var n = r.startContainer;
		r.insertNode(f);
        n.removeChild(this);
    }
}
function innerHtml(id, html) {
    var obj = document.getElementById(id);
    var range = obj.ownerDocument.createRange();
    range.selectNodeContents(obj);
    range.deleteContents();
    var fragment = range.createContextualFragment(html);
    obj.appendChild(fragment);
}