
Vn.Module = new Class
({
	Extends: Vn.Object

	,initialize: function (gui, formInfo)
	{
		this.gui = gui;
		this.conn = gui.conn;
		this.hash = gui.hash;
		this.formInfo = formInfo;
	}

	/**
	 * Gets an object from the builder associated to this form.
	 *
	 * @param {string} objectId The object identifier
	 * @return {Object} The object, or %null if not found
	 **/
	,$: function (objectId)
	{
		if (this.builder)
			return this.builder.get (objectId);
			
		return null;
	}

	/**
	 * Called when the form is opened.
	 **/
	,open: function ()
	{
		this.close ();
	
		this.builder = new Vn.Builder ();
		this.builder.signalData = this;
		this.builder.loadXml (Vn.getXml ('forms/'+ this.formInfo.path +'/ui.xml'));
		this.node = this.builder.get ('form');

		var models = this.builder.getObjects ('db-model');

		for (var i = 0; i < models.length; i++)
			models[i].conn = this.conn;

		var queries = this.builder.getObjects ('db-query');

		for (var i = 0; i < queries.length; i++)
			queries[i].conn = this.conn;
			
		this.gui.formHolder.appendChild (this.node);
		this.gui.setTitle (this.builder.$('title'));
		this.gui.setActions (this.builder.$('actions'));
	}
	
	/**
	 * Called when the form is activated.
	 **/
	,activate: function () {}
	
	/**
	 * Called when the form is deactivated.
	 **/
	,deactivate: function () {}

	/**
	 * Called when the form is closed.
	 **/
	,close: function ()
	{
		if (this.node)
		{
			Vn.Node.remove (this.node);
			this.node = null;
		}
		if (this.builder)
		{
			this.builder.unref ();
			this.builder = null;
		}
	}

	,_destroy: function ()
	{
		this.close ();
		this.parent ();
	}
});

