pH8.Page = (function(){
	var _widgetList = [];
	var _readyList = [];
	var _instance = null;
	var _status = false;
	return function(){
		
		if(_instance !== null){
			return _instance;
		}
		_instance = this;
		
		this.registerWidget = function(widget){
			console.log(widget, 'registered');
			_widgetList[_widgetList.size()] = widget;
			_readyList[_readyList.size()] = false;
		};
		this.widgetReady = function(widget){
			console.log(widget, 'ready');
			var index = _widgetList.indexOf(widget);
			if (index !== false) {
				_readyList[index] = true;
				var status = true;
				_readyList.each(function(value, key) {
					status = (status == true && value == true);
				});
				if (status) {
					_status = true;
					document.fire('page:ready', {widgets: _widgetList});
				}
			}
		};
		this.widgetsReady = function(){
			return _status;
		}
	};
})();

pH8.Mixin.needsSocialWidgets = {
	waitForSocialWidgets: function(callback){
		var page = new pH8.Page();
		if(page.widgetsReady()){
			callback();
		}else{
			document.observe('page:ready', callback);
		}
	},
	registerWidget: function(widget){
		var page = new pH8.Page();
		page.registerWidget(widget);
	},
	widgetReady: function(widget){
		var page = new pH8.Page();
		page.widgetReady(widget);
	}
}