class GeDialog : GeUserDialog
{
		var createlayout;

	public:
		GeDialog(pluginid);

		Message(msg);

		Init();
		CreateLayout();
		Command(id,msg);
		CoreMessage(id,msg);
		Timer(msg);
		AskClose();
}

GeDialog::GeDialog(pluginid)
{
	createlayout = FALSE;
	super(pluginid);
}

GeDialog::Init()         { return FALSE; }
GeDialog::CreateLayout() { return FALSE; }
GeDialog::Command(id,msg){ return FALSE; }
GeDialog::CoreMessage(id,msg){ return FALSE; }
GeDialog::Timer(msg)     { }
GeDialog::AskClose()     { return FALSE; }

GeDialog::Message(msg)
{
	try
	{
		switch (msg->GetId())
		{
			case BFM_INIT:
				if (createlayout) return TRUE;
				createlayout = TRUE;
				return CreateLayout();

			case BFM_DESTROY:
				createlayout = FALSE;
				break;

			case BFM_INITVALUES:
				return Init();
				break;

			case BFM_CORE_MESSAGE:
				return CoreMessage(msg->GetInt(BFM_CORE_ID),msg);
				break;

			case BFM_ACTION:
				return Command(msg->GetInt(BFM_ACTION_ID),msg);
				break;

			case BFM_CHECKCLOSE:
				return AskClose();
				break;

			case BFM_TIMER_MESSAGE:
				Timer(msg);
				return TRUE;
				break;
		}
		return FALSE;
	}
	catch(ExLastException)
	{
		ExShowLastError();
		return FALSE;
	}
}
