
function ClassPicker()
	var class_list := dictionary;
	var class_num := 10000;
	
	ClassLayout();
	GFResizePic(15, 55, 5054, 155, 380);
	GFResizePic(175, 55, 5054, 450, 380);

	var class_cfg := ReadConfigFile(":classes:classes");
	if ( class_cfg.errortext )
		SysLog("Error - Could not read in :classes:classes ->"+class_cfg.errortext);
	endif
	var base_list := GetConfigStringArray(class_cfg["All"], "BaseClass");

	//Class picker intro gump
	ClassButtons(base_list);
	GFTextMid(175, 200, 450, StdColor, "Select a class from the list on the left.");
	CCGumpElem.SetProp("Class-0", GfStoreGump());

	//Begin rendering gumps for base & sub classes.
	var i:=1;
	for ( i:=1; i<=base_list.size(); i:=i+1 )
		var base_class := class_cfg[base_list[i]];
		ClassLayout();

		//Draw buttons on Page '0'
		var sub_list := GetConfigStringArray(base_class, "SubClass");
		ClassButtons(base_list, sub_list, i);

		GFPage(1);
		//Base class description.
		GFTextLine(185, 65, StdColor, base_list[i]);
		var summary := GetConfigString(base_class, "Desc:");
		if ( !summary )
			summary := "No summary available";
		endif
		summary := WordWrap(summary, 450);
		var y_pos := 90;
		foreach line in summary
			GFTextLine(185, y_pos, StdColor, line);
			y_pos := y_pos + 20;
		endforeach

		//Sub class info.
		var gump_page := 2;
		foreach sub_class in sub_list
			class_num := class_num+1;
			class_list[class_num] := sub_class;
			
			GFPage(gump_page);
			GFTextLine(185, 65, StdColor, sub_class);
			sub_class := class_cfg[sub_class];
			
			if( sub_class.CanCreate )
				GFTextLine(505, 65, StdColor, "Select Class");
				GFRadioButton(600, 65, 210, 211, 0, class_num);
			else
				GFTextRight(615, 65, 1208, "Not a starting class - In development");
			endif
			
			var summary := GetConfigString(sub_class, "Desc:");
			if ( !summary )
				summary := "No summary available";
			endif
			summary := WordWrap(summary, 450);
			y_pos := 90;
			foreach line in summary
				GFTextLine(185, y_pos, StdColor, line);
				y_pos := y_pos + 20;
			endforeach
			
			var desc_y := 270;
			foreach type in {"Specialist","Primary","Normal"}
				var temp_string := type + " skills: ";
				foreach Attribute in GetConfigStringArray(sub_class, type)
					Attribute := AttribName(Attribute);

					temp_string := temp_string + Attribute + ", ";
					sleepms(2);
				endforeach
				temp_string[len(temp_string)-1, len(temp_string)] := "";
				foreach line in (WordWrap(temp_string, 440))
					GFTextLine(180, desc_y, StdColor, line);
					desc_y := desc_y+20;
					sleepms(2);
				endforeach
				desc_y := desc_y+5;
			endforeach
			
			gump_page := gump_page+1;
		endforeach

		sleepms(2);
		CCGumpElem.SetProp("Class-"+(i+10), GfStoreGump());
	endfor
	var CCClassElem := DFFindElement(CCGumpsDataFile, "Classes", DF_CREATE);
	CCClassElem.SetProp("Classes", class_list);
endfunction

function ClassLayout()
	Header();

	GFResizePic(15, 55, 5054, 155, 380);
	GFResizePic(175, 55, 5054, 450, 380);
	
	GFTextLine(75, 440, StdColor, "Back");
	GFButtonID(20, 425, 0x119E, 0x119E, 1, BACK_BTN);
	
	GFTextLine(530, 440, StdColor, "Next");
	GFButtonID(570, 425, 0x1196, 0x1196, 1, NEXT_BTN);	
endfunction

function ClassButtons(base_list, sub_list:=0, expand:=0)
	var y_pos := 75;
	var i:=1;
	for ( i:=1; i<=base_list.size(); i:=i+1 )
		//Base class name
		GFTextLine(50, y_pos, StdColor, base_list[i]);

		if ( i == expand )
			//If its the base class we're on, then show the subclasses
			GFButtonID(25, y_pos+3, 0x1458, 0x1458, 1, 9);
			y_pos := y_pos + 20;
			var page_num := 2;
			foreach sub_class in sub_list
				GFButtonPage(45, y_pos+3, 0x1468, 0x1468, page_num);
				GFTextLine(70, y_pos, StdColor, sub_class);
				page_num := page_num+1;
				sleepms(2);
				y_pos := y_pos + 20;
			endforeach
			y_pos := y_pos + 5;
		else
			//Otherwise just show the base class's button.
			GFButtonID(25, y_pos+3, 0x1459, 0x1459, 1, (i+10));
			y_pos := y_pos + 20;
		endif
		sleepms(2);
	endfor
endfunction
