// The base 'event aware' class
var Toolkit = Class.create(
{
	bound_listener_register: new Hash(),
	event_ident: null,
	
	initialize: function ()
	{
		this.event_ident = this.generateEventIdentifier();
		return this;
	},
	
	generateEventIdentifier: function ()
	{
		var s = [], itoh = '0123456789ABCDEF';
		for (var i = 0; i <36; i++) s[i] = Math.floor(Math.random()*0x10);
		s[14] = 4; s[19] = (s[19] & 0x3) | 0x8;
		for (var i = 0; i <36; i++) s[i] = itoh[s[i]];
		s[8] = s[13] = s[18] = s[23] = '-';
		return s.join('');
	},
	
	observe: function (event_name, callback)
	{
		document.observe(event_name + this.event_ident, callback);
	},
	
	stopObserving: function (event_name, callback)
	{
		if(typeof callback == 'string') document.stopObserving(event_name + this.event_ident, this.getListener(callback)); 
		else document.stopObserving(event_name + this.event_ident, callback); 
	},
	
	fire: function (event_name, memo)
	{
    //if(console) console.log(event_name);
		document.fire(event_name + this.event_ident, memo); 
	},
	
	setListener: function (listener, handle)
	{
		this.bound_listener_register.set(handle, listener);
		return this.getListener(handle);
	},
	
	getListener: function (handle)
	{
		return this.bound_listener_register.get(handle)
	}
});

// Provide a safe namespace for adjunct classes
var toolkit = {};
