setupOnResize = function()
{
	if ( ! document.bOnResizeHandlerInitialized )
	{
		// Spara undan den gamla onResize funktionen
		if ( window.onresize ) document.oldOnResize = window.onresize;

		document.arrOnResize = new Array();

		// Initiera onresize funktionen till att köra det vi vill
		window.onresize = function()
		{
			if ( document.oldOnResize ) document.oldOnResize();
			var obj;
			for (iIndex in document.arrOnResize)
			{
				obj = document.arrOnResize[iIndex];
				obj.func.apply(obj.scope);
			}
		}
		document.bOnResizeHandlerInitialized = true;
	}
}

addOnResizeHandler = function(scope, func)
{
	if ( ! document.bOnResizeHandlerInitialized ) setupOnResize();
	// Scopet som funktionen köras i, se exempel nedan.
	var obj = new Object();
	obj.scope = scope;
	obj.func = func;
	document.arrOnResize.push(obj);
}

removeOnResizeHandler = function(scope, func)
{
	for (var iIndex = 0; iIndex < document.arrOnResize.length; iIndex++)
	{
		if ( document.arrOnResize[iIndex].scope == scope && document.arrOnResize[iIndex].func == func )
		{
			document.arrOnResize.splice(iIndex, 1);
			return true;
		}
	}
	return false;
}

/******************************************************************************
*	// Exempel:
*	function MyClass(){
*		// Lägg till en function som ska hantera onResize
*		addOnResizeHandler(this, this.onResize);
*	}
*	MyClass.prototype.onResize = function(){
*		// Enkelt test för att se om den kallas.
*		alert("onResize was called!");
*	}
*******************************************************************************/

setupOnLoad = function()
{
	if ( ! document.bOnLoadHandlerInitialized )
	{
		// Spara undan den gamla onLoad funktionen
		if ( window.onload ) document.oldOnLoad = window.onload;

		document.arrOnLoad = new Array();

		// Initiera onLoad funktionen till att köra det vi vill
		window.onload = function()
		{
			if ( document.oldOnLoad ) document.oldOnLoad();
			var obj;
			for (iIndex in document.arrOnLoad)
			{
				obj = document.arrOnLoad[iIndex];
				obj.func.apply(obj.scope);
			}
		}
		document.bOnLoadHandlerInitialized = true;
	}
}

// Note that the object that is added has to have 
addOnLoadHandler = function(scope, func)
{
	if ( ! document.bOnLoadHandlerInitialized ) setupOnLoad();
	// Scopet som funktionen köras i, se exempel nedan.
	var obj = new Object();
	obj.scope = scope;
	obj.func = func;
	document.arrOnLoad.push(obj);
}

removeOnLoadHandler = function(scope, func)
{
	for (var iIndex = 0; iIndex < document.arrOnLoad.length; iIndex++)
	{
		if ( document.arrOnLoad[iIndex].scope == scope && document.arrOnLoad[iIndex].func == func )
		{
			document.arrOnLoad.splice(iIndex, 1);
			return true;
		}
	}
	return false;
}

/*********************************************************************
*	window.setTimeoutEx()
*		Utökad version av window.setTimeout
*		Denna version kan ta en klasspekare för att köra funktionen i
*		klassens scope.
**********************************************************************/	
window.setTimeoutEx = function(scope, func, millisec, lang)
{
	var timeoutFunction = function()
	{
		func.apply(scope);
	}
	setTimeout(timeoutFunction, millisec, lang);
}
