#ifndef MAKE_ID
#define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
#endif

#ifdef _DCC
#define __inline
#endif

#include "loan.h"
#include "loanExtern.h"


struct ObjApp * CreateApp(void)
{
	struct ObjApp * Object;

	APTR	Project, ProjecAbout, MNlabel0Quit, GROUP_ROOT_0, Space_1, obj_aux0;
	APTR	obj_aux1, obj_aux2, obj_aux3, GR_grp_0, LA_label_0, obj_aux4, obj_aux5;
	APTR	obj_aux6, obj_aux7, obj_aux8, obj_aux9, Space_0, GROUP_ROOT_1, GROUP_ROOT_2;
	APTR	LA_label_1, Space_2, LA_label_2, Space_3, LA_label_3, Space_4, LA_label_4;
	APTR	Space_5;
	static const struct Hook calc_loanHook = { { NULL,NULL },(VOID *)calc_loan,NULL,NULL };


	if (!(Object = AllocVec(sizeof(struct ObjApp), MEMF_PUBLIC|MEMF_CLEAR)))
		return(NULL);

	Object->Payment_rateContent[0] = "Daily";
	Object->Payment_rateContent[1] = "Weekly";
	Object->Payment_rateContent[2] = "Fortnightly";
	Object->Payment_rateContent[3] = "Monthly";
	Object->Payment_rateContent[4] = "Yearly";
	Object->Payment_rateContent[5] = NULL;

	Space_1 = VSpace(0);

	Object->capital = StringObject,
		MUIA_Frame, MUIV_Frame_String,
		MUIA_HelpNode, "capital",
		MUIA_String_Accept, "-0123456789",
	End;

	obj_aux1 = Label2("Capital");

	obj_aux0 = GroupObject,
		MUIA_Group_Columns, 2,
		Child, obj_aux1,
		Child, Object->capital,
	End;

	Object->amount = StringObject,
		MUIA_Frame, MUIV_Frame_String,
		MUIA_HelpNode, "amount",
		MUIA_String_Accept, "-0123456789",
	End;

	obj_aux3 = Label2("Amount per Payment");

	obj_aux2 = GroupObject,
		MUIA_Group_Columns, 2,
		Child, obj_aux3,
		Child, Object->amount,
	End;

	LA_label_0 = Label("Payments");

	Object->Payment_rate = CycleObject,
		MUIA_HelpNode, "Payment_rate",
		MUIA_Cycle_Entries, Object->Payment_rateContent,
	End;

	GR_grp_0 = GroupObject,
		MUIA_HelpNode, "GR_grp_0",
		MUIA_Group_Horiz, TRUE,
		Child, LA_label_0,
		Child, Object->Payment_rate,
	End;

	Object->rate = StringObject,
		MUIA_Frame, MUIV_Frame_String,
		MUIA_HelpNode, "rate",
		MUIA_String_Accept, "01234567890.",
	End;

	obj_aux5 = Label2("Interest Rate");

	obj_aux4 = GroupObject,
		MUIA_Group_Columns, 2,
		Child, obj_aux5,
		Child, Object->rate,
	End;

	Object->xtra = StringObject,
		MUIA_Frame, MUIV_Frame_String,
		MUIA_HelpNode, "xtra",
		MUIA_String_Accept, "-0123456789",
	End;

	obj_aux7 = Label2("Extra Payment");

	obj_aux6 = GroupObject,
		MUIA_Group_Columns, 2,
		Child, obj_aux7,
		Child, Object->xtra,
	End;

	Object->xtratime = StringObject,
		MUIA_Frame, MUIV_Frame_String,
		MUIA_HelpNode, "xtratime",
		MUIA_String_Accept, "-0123456789",
	End;

	obj_aux9 = Label2("Number of Extra Payments");

	obj_aux8 = GroupObject,
		MUIA_Group_Columns, 2,
		Child, obj_aux9,
		Child, Object->xtratime,
	End;

	Space_0 = VSpace(0);

	Object->GO = SimpleButton("Go Do It!");

	GROUP_ROOT_0 = GroupObject,
		Child, Space_1,
		Child, obj_aux0,
		Child, obj_aux2,
		Child, GR_grp_0,
		Child, obj_aux4,
		Child, obj_aux6,
		Child, obj_aux8,
		Child, Space_0,
		Child, Object->GO,
	End;

	Object->Loan = WindowObject,
		MUIA_Window_Title, "Loan Calculator",
		MUIA_Window_ID, MAKE_ID('0', 'W', 'I', 'N'),
		WindowContents, GROUP_ROOT_0,
	End;

	Object->result_list = ListObject,
		MUIA_Frame, MUIV_Frame_ReadList,
		MUIA_List_ConstructHook, MUIV_List_ConstructHook_String,
		MUIA_List_DestructHook, MUIV_List_DestructHook_String,
	End;

	Object->result_list = ListviewObject,
		MUIA_HelpNode, "result_list",
		MUIA_Listview_Input, FALSE,
		MUIA_Listview_List, Object->result_list,
	End;

	GROUP_ROOT_1 = GroupObject,
		Child, Object->result_list,
	End;

	Object->Results = WindowObject,
		MUIA_Window_Title, "Loan Results",
		MUIA_Window_ID, MAKE_ID('1', 'W', 'I', 'N'),
		WindowContents, GROUP_ROOT_1,
	End;

	LA_label_1 = Label("\033c\033bLoan Calculator");

	Space_2 = VSpace(0);

	LA_label_2 = Label("\033cCalculate your compound-interest bank loan");

	Space_3 = VSpace(0);

	LA_label_3 = Label("\033cWritten by Josh Marshall 1997");

	Space_4 = VSpace(0);

	LA_label_4 = Label("\033cCreated with MUIBuilder");

	Space_5 = VSpace(0);

	Object->OK = SimpleButton("_OK");

	GROUP_ROOT_2 = GroupObject,
		MUIA_Background, MUII_SelectedBack,
		Child, LA_label_1,
		Child, Space_2,
		Child, LA_label_2,
		Child, Space_3,
		Child, LA_label_3,
		Child, Space_4,
		Child, LA_label_4,
		Child, Space_5,
		Child, Object->OK,
	End;

	Object->About = WindowObject,
		MUIA_Window_Title, "About Loan",
		MUIA_Window_ID, MAKE_ID('2', 'W', 'I', 'N'),
		WindowContents, GROUP_ROOT_2,
	End;

	ProjecAbout = MenuitemObject,
		MUIA_Menuitem_Title, "About",
	End;

	MNlabel0Quit = MenuitemObject,
		MUIA_Menuitem_Title, "Quit",
	End;

	Project = MenuitemObject,
		MUIA_Menuitem_Title, "Project",
		MUIA_Family_Child, ProjecAbout,
		MUIA_Family_Child, MNlabel0Quit,
	End;

	Object->Projec = MenustripObject,
		MUIA_Family_Child, Project,
	End;

	Object->App = ApplicationObject,
		MUIA_Application_Author, "Josh Marshall",
		MUIA_Application_Menustrip, Object->Projec,
		MUIA_Application_Base, "NONE",
		MUIA_Application_Title, "Loan Calculator",
		MUIA_Application_Version, "$VER: Loan 1.0 (1.0.0)",
		MUIA_Application_Copyright, "Josh Marshall",
		MUIA_Application_Description, "Loan Calculator",
		SubWindow, Object->Loan,
		SubWindow, Object->Results,
		SubWindow, Object->About,
	End;


	if (!Object->App)
	{
		FreeVec(Object);
		return(NULL);
	}

	DoMethod(ProjecAbout,
		MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
		Object->About,
		3,
		MUIM_Set, MUIA_Window_Open, TRUE
		);

	DoMethod(MNlabel0Quit,
		MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
		Object->App,
		2,
		MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit
		);

	DoMethod(Object->Loan,
		MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
		Object->App,
		2,
		MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit
		);

	DoMethod(Object->GO,
		MUIM_Notify, MUIA_Pressed, FALSE,
		Object->GO,
		2,
		MUIM_CallHook, &calc_loanHook
		);

	DoMethod(Object->Loan,
		MUIM_Window_SetCycleChain, Object->capital,
		Object->amount,
		Object->Payment_rate,
		Object->rate,
		Object->xtra,
		Object->xtratime,
		Object->GO,
		0
		);

	DoMethod(Object->Results,
		MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
		Object->Results,
		3,
		MUIM_Set, MUIA_Window_Open, FALSE
		);

	DoMethod(Object->Results,
		MUIM_Window_SetCycleChain, Object->result_list,
		0
		);

	DoMethod(Object->About,
		MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
		Object->About,
		3,
		MUIM_Set, MUIA_Window_Open, FALSE
		);

	DoMethod(Object->OK,
		MUIM_Notify, MUIA_Pressed, FALSE,
		Object->About,
		3,
		MUIM_Set, MUIA_Window_Open, FALSE
		);

	DoMethod(Object->About,
		MUIM_Window_SetCycleChain, Object->OK,
		0
		);

	set(Object->Loan,
		MUIA_Window_Open, TRUE
		);


	return(Object);
}

void DisposeApp(struct ObjApp * Object)
{
	MUI_DisposeObject(Object->App);
	FreeVec(Object);
}
