/*
	Extender os recursos do IE 6.0 para:
		Mozilla ver ?
		FireFox ver ?
		Opera ver ?
	Utilizando este módulo como o primeiro cabeçalho de include javascript, é possível programar a página
	HTML como se estivesse programando para IE, sem se preocupar com o browser em que está rodando o código.
	
	Métodos implementados:
		HTMLElement.innerText
		[continuar...]
*/

function isIE()
{
	return /internet explorer/i.test(window.navigator.appName) && window.opera == null;
}

function isIE7()
{
	return /internet explorer/i.test(window.navigator.appName) && window.navigator.appVersion > 6;
}

function isNetscape()
{
	return /netscape/i.test(window.navigator.appName);
}

function isOpera()
{
	return window.opera != null;
}


if (isNetscape() || isOpera())
{
	//innerText
		Node.prototype.innerText
			getter = function () {
				var tmp = this.innerHTML.replace(/<br>/gi,"\n");
				return tmp.replace(/<[^>]+>/g,"");
			}
		Node.prototype.innerText 
			setter = function (value) {
				var parsedText = document.createTextNode(value);
				this.innerHTML = "";
				this.appendChild(parsedText);
			}
	//ActiveXObject
		window.ActiveXObject = function (progId) {
				switch (progId.toUpperCase()) {
					case "MICROSOFT.XMLHTTP":
						return new XMLHttpRequest();
						break;
					case "MSXML2.XMLHTTP":
						return new XMLHttpRequest();
						break;
					default:
						throw "Automation server can't create object";
				}
			}
	//attachEvent
		window.attachEvent = function (event, pdisp) {
			this.addEventListener(event.substr(2), pdisp, false);
		}
		Node.prototype.attachEvent = function (event, pdisp) {
			this.addEventListener(event.substr(2), pdisp, false);
		}
	//removeNode
		Node.prototype.removeNode = function(fDeep) {
			var self = this;
			if (Boolean(fDeep))
				return this.parentNode.removeChild(self);
			else {
				var range = document.createRange();
				range.selectNodeContents(self);
				return this.parentNode.replaceChild(range.extractContents(), self);		
			}
		}
	//outerHTML
		Node.prototype.outerHTML 
			getter = function () {
				var parent = this.parentNode;
				var shell = document.createElement("DIV");
				var temp = this.cloneNode(true);
				shell.appendChild(temp);
				return shell.innerHTML;
			}
		Node.prototype.outerHTML 
			setter = function (str) {
				var iRange = document.createRange();
				iRange.setStartBefore(this);
				var strFragment = iRange.createContextualFragment(str);
				var sRangeNode = iRange.startContainer;
				iRange.insertNode(strFragment);
				sRangeNode.removeChild(this);
			}
	//fireEvent
		Node.prototype.fireEvent = function (bstrEventName, pvarEventObject) {
			var e = document.createEvent("Events");
			e.initEvent(bstrEventName.substr(2), false, false);
			this.dispatchEvent(e);
		}
	//{$Method|Property}
	
}

