/*
	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}
	
}
