window.onload = function(){
	// Testing
	var removeClicked = false;
	var test = document.getElementById("test");
	var results = document.getElementById("results");
	var data = "";
	
	addEvent(results,'onfocus',function(){ this.blur(); });
	
	test.onmouseover = back;
	
	data += "1: system not setup, outside assignment, new handler \n"+ 
	addEvent(test,'onmouseover',fore) + "\n";
	data += status(test,'onmouseover') + "\n";
	data += "2: system not setup, no outside assignment, new handler\n"+
	addEvent(test,'onmouseout',restore) + "\n";
	data += status(test,'onmouseout') + "\n";
	data += "3 system setup, repeate handler\n"+
	addEvent(test,'onmouseout',restore) + "\n";
	data += status(test,'onmouseout') + "\n";
	//setup removal
	addEvent(test,'onclick',removeBack) + "\n";
	
	data += "1: system not setup \n"+
	removeEvent(results,'onclick',back) + "\n\n";
	data += "2: system setup, handler not found\n"+
	removeEvent(test,'onmouseover',restore) + "\n";
	data += status(test,'onmouseover') + "\n";
	
	results.value = data;
	
	function fore(){            
		this.style.color = "blue";
	}
	function back(){
		this.style.backgroundColor = '#ddf';
	}
	function removeBack(){
		if(!removeClicked){
		data += "3: system setup, multiple handlers, target handler first\n"+
		removeEvent(test,'onmouseover',back) + "\n";
		data += status(test,'onmouseover') + "\n";
		removeClicked = true;
		}else{
		data += "4 system setup, target handler last\n"+
		removeEvent(test,'onmouseover',fore) + "\n";
		data += status(test,'onmouseover') + "\n";
		data += "5 system setup, no handlers\n"+
		removeEvent(test,'onmouseover',fore) + "\n";
		data += status(test,'onmouseover') + "";
		//remove this handler
		removeEvent(test,'onclick',removeBack);
		addEvent(test,'onclick',function(){ return false; });
		}
		
		results.value = data;
		return false;
	}
	function restore(){
		this.style.color = "#ccc";
		this.style.backgroundColor = '#fff';
		this.innerHTML = "Test Link";
	}
	
	function status(element, listener){
	var r = listener+"_num = "+element[listener + '_num']+"\n";
	for(var i = 0; i < element[listener + '_num']; i++)
		r += listener+i+(" = "+element[listener+i])+"\n";
	return r;
	}
	
	//browser detect
	var detect = navigator.userAgent.toLowerCase();
	var OS,browser,version,total,thestring;
	
	if (checkIt('konqueror'))
	{
		browser = "Konqueror";
		OS = "Linux";
	}
	else if (checkIt('safari')) browser = "Safari"
	else if (checkIt('omniweb')) browser = "OmniWeb"
	else if (checkIt('opera')) browser = "Opera"
	else if (checkIt('webtv')) browser = "WebTV";
	else if (checkIt('icab')) browser = "iCab"
	else if (checkIt('msie')) browser = "Internet Explorer"
	else if (checkIt('firefox')) browser = "Mozilla Firefox"
	else if (!checkIt('compatible'))
	{
		browser = "Netscape Navigator"
		version = detect.substr(8).match(/[\d\.]+/);
	}
	else browser = "An unknown browser";
	
	if (!version)
		version = detect.substr(place + thestring.length).match(/[\d\.]+/);
	
	if (!OS)
	{
		if (checkIt('linux')) OS = "Linux";
		else if (checkIt('x11')) OS = "Unix";
		else if (checkIt('mac')) OS = "Mac"
		else if (checkIt('win')) OS = "Windows"
		else OS = "an unknown operating system";
	}
	
	function checkIt(string)
	{
		place = detect.indexOf(string) + 1;
		thestring = string;
		return place;
	}
	document.getElementById("os").value = OS;
	document.getElementById("browser").value = browser;
	document.getElementById("version").value = version;
};