window.runHandlers = function(handlerName)
{
	var handlers,i,f;

	if ( typeof(this.registeredEventHandlers) == 'undefined' )
	{
		this.registeredEventHandlers = new Object();
	}
	
	if ( typeof(this.registeredEventHandlers[handlerName]) != 'undefined' )
	{
		handlers = this.registeredEventHandlers[handlerName];
		
		for ( i=0; i<handlers.length; i++ )
		{
			f = handlers[i];
			f();
		}
	}
};

window.registerEventHandler = function(eventName, handler)
{
	if ( typeof(this.registeredEventHandlers) == 'undefined' )
	{
		this.registeredEventHandlers = new Object();
	}
	//alert(this[eventName]);
	//if ( this[eventName] )
	//{
		if ( typeof(this.registeredEventHandlers[eventName]) == 'undefined' )
		{
			this.registeredEventHandlers[eventName] = new Array();
		}
		this.registeredEventHandlers[eventName].push(handler);
	//}
};

//window._oldonload = window.onload

window.onload = function()
{
	this.runHandlers('onload');
};

//window.registerEventHandler('onload', window._oldonload);

window.onunload = function()
{
	this.runHandlers('onload');
};

function textMessage()
{
	this.content = '';
	
	this.addLine = addLine;
	
	function addLine(message)
	{
		this.content += message + "\n";
	}
}

function linkObserver(observer)
{
	this.observers.push(observer);
}

function notifyObservers(message)
{
	var i,r;
	var returnVals = new Array();

	if ( typeof(message) == 'undefined' && typeof(self.event) != 'undefined' )
	{
		message = self.event;
		message.target = message.srcElement
	}



	for ( i=0; i<this.observers.length; i++ )
	{
		r = this.observers[i].handleNotificationMessage(message);
		returnVals.push(r);
	}

	if ( returnVals.toString().indexOf('false') == -1 )
	{
		return true;
	}
	else
	{
		return false;
	}
}

function makeObservable(targetRef, eventList)
{
	var i, eventName;
	if ( typeof(targetRef.observers) == 'undefined' )
	{
		targetRef.observers = new Array();
	}

	if ( typeof(targetRef.linkObserver) == 'undefined' )
	{
		targetRef.linkObserver = linkObserver;
	}

	if ( typeof(targetRef.notifyObservers) == 'undefined' )
	{
		targetRef.notifyObservers = notifyObservers;
	}
	
	if ( typeof(eventList) != 'undefined' )
	{
		//alert('attaching notifyobservers to ');
		for ( i=0; i<eventList.length; i++ )
		{
			eventName = eventList[i];
			targetRef[eventName] = notifyObservers;
		}
	}
}