
// Check namespace
if (!namespace.exists('xwp'))
	namespace.create('xwp');

xwp.xwpage = new function () {
	var self = this;
	
	// Create plugins container
	self.plugins = {};
	
	// Eval when DOM is loaded
	self.load = function () {
		
		// Init all loaded plugins
		for (k in self.plugins)
			xwp.xwpage_plugin(self.plugins[k], k);
		
		// Eval load on all plugins
		for (k in self.plugins)
			self.plugins[k]._load();	
		
		self.doEvent('ready');	
		
	};
	
	self.onError = function (where, text) {
		alert('Error: ' + text + '\nSource: ' + where);
	};

	jQuery(document).ready(self.load);
	
};

xwp.xwpage_plugin = function (self, name) {

	self.name	= name;
	self._events = {};
	self.loaded	= null;
	
	self._load = function () {
		// init (new) conf container
		if (!self.conf)
			self.conf = {};

		for (k in xwp.xwpage.conf)
			if (k.substr(0, k.indexOf('.')) == name)
				self.conf[k.substr(k.indexOf('.') + 1)] = xwp.xwpage.conf[k];
		self.loaded = false;
		
		if (typeof(self.load) == 'undefined' || self.load() !== false)
			self.loaded = true;
	};
	
	self.onEvent = function (event, func) {
		if (typeof(self._events[event]) == 'undefined')
			self._events[event] = new Array();
		self._events[event].push(func);
	};
	
	self.doEvent = function (event, args) {
		if (typeof(self._events[event]) == 'undefined')
			return;
		for (var k in self._events[event])
			self._events[event][k](args);
	};

	self.triggerError = function (text) {
		xwp.xwpage.onError('plugin "' + self.name + '"', text);
	};
	
};

xwp.xwpage_plugin(xwp.xwpage, 'xwpage');

var $x = xwp.xwpage;
var $p = xwp.xwpage.plugins;