/* Copyright (C) 2002-2008 by Home of the Brave
   Web http://home.of.the.brave.de
   E-Mail info@brave.de */
/* $Revision: 1.3 $ $Date: 2008/02/25 15:22:14 $ */

/*
 * ------ Global body event-handler wrapper -------------
 * usage: var id = BodyEvents.addListener('scroll',function () {...});
 *        BodyEvents.removeListener(id);
 * notes: If a function is attached to 'load' after loading
 *        completed, it is called immediately.
 * owner: Simon.Leidig@brave.de
 * ------------------------------------------------------
 *
 */

var BodyEvents = {
	Listeners:	{},
	IDMap:		{},
	Count:		0,
	Loaded:		false,
	IE:			navigator.userAgent.indexOf('MSIE')                != -1 &&
				navigator.userAgent.toLowerCase().indexOf('opera') == -1
};
BodyEvents.addListener = function (event,func) {
	var id = 'ID' + ++BodyEvents.Count;
	if (BodyEvents.Listeners[event]) {
		BodyEvents.Listeners[event].push([id,func]);
	} else {
		BodyEvents.Listeners[event] = [[id,func]];
		if (BodyEvents.Loaded) BodyEvents.setListener(event);
	}
	if (BodyEvents.Loaded && event == 'load') func();
	BodyEvents.IDMap[id] = BodyEvents.Listeners[event];
	return id;
}
BodyEvents.removeListener = function (id) {
	var i = BodyEvents.IDMap[id].length;
	while (i-- > 0) {
		if (BodyEvents.IDMap[id][i][0] == id) {
			BodyEvents.IDMap[id].splice(i,1);
			return true;
		}
	}
	return false;
}
BodyEvents.setListener = function (event) {
	if (BodyEvents.IE) {
		document.body['on'+event] = function () { BodyEvents.call(event) };
	} else {
		document.body.setAttribute('on'+event,"BodyEvents.call('"+event+"')");
	}
}
BodyEvents.call = function (event) {
	for (var i in BodyEvents.Listeners[event]) BodyEvents.Listeners[event][i][1]()
}
BodyEvents.load = function () {
	BodyEvents.Loaded = true;
	for (var event in BodyEvents.Listeners) BodyEvents.setListener(event);
	if (BodyEvents.Listeners['load']) BodyEvents.call('load');
	return true;
}
