// check browsers
var ua		= navigator.userAgent;
var isOpera		= /opera [56789]|opera\/[56789]/i.test(ua);
var isWebkit	= /webkit/i.test(ua);
var isIE		= !isOpera && /msie [56789]/i.test(ua); // preventing opera to be identified as ie
var isMozilla	= !isOpera && /mozilla\/[56789]/i.test(ua);	// preventing opera to be identified as mz
var isSafari 	= (ua.indexOf("Safari")!=-1); 
if(isMozilla)
{
	var _emptyTags = {
				   "IMG":   true,
				   "BR":    true,
				   "INPUT": true,
				   "META":  true,
				   "LINK":  true,
				   "PARAM": true,
				   "HR":    true
				};


	HTMLElement.prototype.__defineGetter__("outerHTML", function () {
	   var attrs = this.attributes;
	   var str = "<" + this.tagName;
	   for (var i = 0; i < attrs.length; i++)
	      str += " " + attrs[i].name + "=\"" + attrs[i].value + "\"";
	
	   if (_emptyTags[this.tagName])
	      return str + ">";
	
	   return str + ">" + this.innerHTML + "</" + this.tagName + ">";
	});
	
	HTMLElement.prototype.__defineSetter__("outerHTML", function (sHTML) {
	   var r = this.ownerDocument.createRange();
	   r.setStartBefore(this);
	   var df = r.createContextualFragment(sHTML);
	   this.parentNode.replaceChild(df, this);
	});

	HTMLElement.prototype.__defineSetter__("innerText", function (sText) {
	   this.innerHTML = sText.replace(/\&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
	});

	HTMLElement.prototype.__defineGetter__("innerText", function () {
	   var r = this.ownerDocument.createRange();
	   r.selectNodeContents(this);
	   return r.toString();
	});
}
