/*
 * Zlaty Voci O.S. G2 -- Common Library
 */

/*
 * Legacy code
 */

function page_onload_register(hnd_func)
{
	lib.event.onload_register(hnd_func);
}

/*
 * lib namespace
 */

var lib = new Object;

lib.event = new Object;

/** Return the element to which the event 'e' applies.
 * [public static]
 */
lib.event.get_element = function(e)
{
	var elem;
	var prop;
	var props = '';

	elem = null;

	for (prop in e) {
		props = props + ':' + prop;
		if (prop == 'target' || prop == 'srcElement') {
			elem = e[prop];
			break;
		}
	}
	
	if (elem == null) alert('null! / '+props);

	return elem;
}

/* List of functions to run upon the 'load' event */
lib.event.onload_list = Array();

//lib.event.onload_have_run = false;

/** Register a function to run upon window 'load' event
 * [public static]
 */
lib.event.onload_register = function(hnd_func)
{
	lib.event.onload_list.push(hnd_func);

//	if (lib.event.onload_have_run)
//		lib.event.onload_handler();
}

/** Handle the window 'load' event.
 * [private static]
 */
lib.event.onload_handler = function()
{
	var i;

	for (i=0; i < lib.event.onload_list.length; i++)
		lib.event.onload_list[i]();

	/* empty the list */
	lib.event.onload_list = Array();

//	lib.event.onload_have_run = true;

	return true;
}

/** Set event handler on an element.
 * [public static]
 */
lib.event.set_handler = function(elem, event_name, handler)
{
	elem['on' + event_name] = lib.event.wrap_handler(handler);
}

/** Wrapper for event-handler functions.
 * [private static]
 */
lib.event.handler_wrapper = function(event, hnd_func)
{
	var element;

	if (!event) event = window.event;
	element = lib.event.get_element(event);

	hnd_func(event, element);
}

/**
 * [private static]
 */
lib.event.wrap_handler = function(hnd_func)
{
	return function(event) {
		lib.event.handler_wrapper(event, hnd_func);
	};
}

window.onload = lib.event.onload_handler;
