// Deze functie staat los van het hele IE naar FF gedoe enzo, maar met deze functie kun je hashes (of assiciatieve arrays) 
// beter met elkaar laten linken enzo
// Gebruik hem zo: var newHash = new Hash('one', 1, 'two', 2, etc...)
// Dan kun je doen newHash['one'] en dat is dan 1.

function Hash()
{
	this.length = 0;
	this.items = new Array();
	for (var i = 0; i < arguments.length; i += 2) {
		if (typeof(arguments[i + 1]) != 'undefined') {
			this.items[arguments[i]] = arguments[i + 1];
			this.length++;
		}
	}
   
	this.removeItem = function(in_key)
	{
		var tmp_value;
		if (typeof(this.items[in_key]) != 'undefined') {
			this.length--;
			var tmp_value = this.items[in_key];
			delete this.items[in_key];
		}
	   
		return tmp_value;
	}

	this.getItem = function(in_key) {
		return this.items[in_key];
	}

	this.setItem = function(in_key, in_value)
	{
		if (typeof(in_value) != 'undefined') {
			if (typeof(this.items[in_key]) == 'undefined') {
				this.length++;
			}

			this.items[in_key] = in_value;
		}
	   
		return in_value;
	}

	this.hasItem = function(in_key)
	{
		return typeof(this.items[in_key]) != 'undefined';
	}
}

//   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()


// Dit script geeft FF enzo wat extra functies die IE ook heeft, wel handig.


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)}

}