//   Written by Terry Friesen,  tfriesen@mts.net
//   http://www.mts.net/~tfriesen/dhtml/

//   This script gives Netscape 6 the following IE methods:
//   removeNode(),replaceNode(),swapNode(),applyElement(),contains(),
//   insertAdjacentText(),insertAdjacentHTML(),insertAdjacentElement()


if(self.Node&&self.Node.prototype){
	Node.prototype.removeNode=remove_Node;
	Node.prototype.replaceNode=replace_Node;
	Node.prototype.swapNode=swap_Node;
	Element.prototype.applyElement=apply_Element;
	Element.prototype.contains=_contains;
	Element.prototype.insertAdjacentText=insertAdj_Text;
	Element.prototype.insertAdjacentHTML=insertAdj_HTML;
	Element.prototype.insertAdjacentElement=insertAdj_El;
	Element.prototype.insert__Adj=insert__Adj;
}

function remove_Node(a1){
	var p=this.parentNode;
	if(p&&!a1){
		var df=document.createDocumentFragment();
		for(var a=0;a<this.childNodes.length;a++){
			df.appendChild(this.childNodes[a])
		}
		p.insertBefore(df,this)
	}
	return p?p.removeChild(this):this;
}

function replace_Node(a1){
	return this.parentNode.replaceChild(a1,this);
}

function swap_Node(a1){
	var p=a1.parentNode;
	var s=a1.nextSibling;
	this.parentNode.replaceChild(a1,this);
	p.insertBefore(this,s)
	return this;
}

function apply_Element(a1,a2){
	if(!a1.splitText){
		a1.removeNode();
		if(a2&&a2.toLowerCase()=="inside"){
			for(var a=0;a<this.childNodes.length;a++){
				a1.appendChild(this.childNodes[a])
			}
			this.appendChild(a1)
		}else{
			var p=this.parentNode;
			p.insertBefore(a1,this);
			a1.appendChild(this);
		}
		return a1;
	}
}

function _contains(a1){
	var r=document.createRange();
	r.selectNode(this);
	return r.compareNode(a1)==3;
}

function insertAdj_Text(a1,a2){
	var t=document.createTextNode(a2||"")
	this.insert__Adj(a1,t);
}

function insertAdj_HTML(a1,a2){
	var r=document.createRange();
	r.selectNode(this);
	var t=r.createContextualFragment(a2);
	this.insert__Adj(a1,t);
}

function insertAdj_El(a1,a2){
	this.insert__Adj(a1,a2);
	return a2;
}

function insert__Adj(a1,a2){
	var p=this.parentNode;
	var s=a1.toLowerCase();
	if(s=="beforebegin"){p.insertBefore(a2,this)}
	if(s=="afterend"){p.insertBefore(a2,this.nextSibling)}
	if(s=="afterbegin"){this.insertBefore(a2,this.childNodes[0])}
	if(s=="beforeend"){this.appendChild(a2)}
}
