/**
 * onLoadListener singleton implementation
 * (c) 2010 noldmedia
 */

var onLoadListener = (function() {
	var instance = null;
	
	function privateConstructor() {
		var onLoadListeners = new Array();
		var onLoadParameters = new Array();
		
		// add a listener function
		this.addListener = function() {
			
			var pArr = new Array();
			
			// assign listener function (first argument) and optional function parameters (following arguments)
			// to array so we may pass these values later on function call
			for (var i=0; i<arguments.length; i++) {
				if (!i) {
					// assign function reference
					onLoadListeners[onLoadListeners.length] = arguments[i];
				} else {
					// build parameter array
					pArr[pArr.length] = arguments[i];
				}
			}
			
			// assign parameter array
			onLoadParameters[onLoadParameters.length] = pArr;
		};

		// call all registered listener functions
		this.onLoad = function() {
			for (var i=0; i<onLoadListeners.length; i++) {
				var func = onLoadListeners[i];
				var params = onLoadParameters[i];

				// call function with parameters from array
				func.apply(this,params);
			}
		};
				
		// add document ready() function to automatically call all onLoad listeners
		$(document).ready(function() {
			onLoadListener.getInstance().onLoad();
		});
	}
	
	return new function() {
		this.getInstance = function() {
			if (instance == null) {
				instance = new privateConstructor();
				instance.constructor = null;
			}
			
			return instance;
		};
	};
	
})();

// init global app variable
top.onloadlistener = onLoadListener.getInstance();
