/***********************************************
 * Eventhandler class... handle Events         *
 ***********************************************/

var eventhandler=new Eventhandler();

/* Store the events and route to the correct functions 
   This one may only exist once using global var eventhandler! */
function Eventhandler()
{
	var evt_array;

	this.evt_array=new Array();

	/* Set the methods... */
	this.handle=EH_handle;
	this.addEvent=EH_addEvent;

	function EH_handle(e)
	{
		var posx = 0;
		var posy = 0;
		var code;
		var type;
		var args;

		if (!e) 
		{
			e=window.event;
			e.cancelBubble=true;
		} else if (e.stopPropagation)
		{
			e.stopPropagation();
		}

		if (e.target) targelem=e.target
		else targelem=e.srcElement;

		if (e.pageX || e.pageY)
		{
			posx = e.pageX;
			posy = e.pageY;
		}
		else if (e.clientX || e.clientY)
		{
			posx = e.clientX + document.body.scrollLeft;
			posy = e.clientY + document.body.scrollTop;
		}

		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		
		type='on'+e.type;

		i=0;
		while (eventhandler.evt_array.length && i<eventhandler.evt_array.length)
		{
			evtelem=eventhandler.evt_array[i];
			if (evtelem['type']==type && evtelem['elemname']==targelem.name && evtelem['elemid']==targelem.id) 
			{
				params=new Array();
				params['type']=type;
				params['code']=code;
				params['posx']=posx;
				params['posy']=posy;
				params['func']=evtelem['func'];
				params['arg1']=evtelem['arg1'];
				params['arg2']=evtelem['arg2'];
				params['elem']=evtelem['elem'];
				params['elemid']=evtelem['elemid'];
				params['elemname']=evtelem['elemname'];
				evtelem['func'](params);
			}
			++i;
		}
	}

	function EH_addEvent(type,elemname,elemid,func,arg1,arg2)
	{
		elems=null;
		elemid=null;
		var myarr=new Array();

		if (elemname!=null)
		{
			elems=document.getElementsByName(elemname);
		}
		if (elemid!=null)
		{
			elemid=document.getElementById(elemid);
		}
		if (elems!=null && elemid!=null)
		{
			elems.push(elemid);
		} else if (elemid!=null)
		{
			elems[0]=elemid;
		}

		if (elems.length<1) return;

		myarr['type']=type;
		myarr['func']=func;
		myarr['arg1']=arg1;
		myarr['arg2']=arg2;
		myarr['elem']=elems[0];
		myarr['elemid']=elems[0].id; 
		myarr['elemname']=elems[0].name; 
		eventhandler.evt_array[eventhandler.evt_array.length]=myarr;

		eval("elems[0]."+type+'=this.handle');

		return eventhandler.evt_array.length;
	}

}
