#ifndef _Vega_VegaMain_h_
#define _Vega_VegaMain_h_

#include <CtrlCore/CtrlCore.h>
#include <CtrlLib/CtrlLib.h>
#include <GridCtrl/GridCtrl.h>
#include <Report/Report.h>
#include <RichEdit/RichEdit.h>
#include <Web/Web.h>
#include <plugin/ftp/ftp.h>
#include <plugin/pcre/Pcre.h>
#include <RepGen/RepGen.h>

using namespace Upp;
 
#define IMAGECLASS    Vega6Img     
#define IMAGEFILE     <Vega6/Vega.iml>
#include <Draw/iml_header.h>  
//#include <Draw/iml.h>


class ScrollArea : public StaticRect {
public:
	ScrollBars sc;
	StaticRect work;
	void SetWorkSize(Size sz);
	virtual void Scroll();

	typedef ScrollArea CLASSNAME;
	ScrollArea();
	~ScrollArea() {;}
};

class MakeBadge {
public:
	Vector<String> STRINGS;
	int STRINGS_COUNT;
	int STRINGS_I;
	int TOTAL;
	VectorMap<String, String> m;
	typedef MakeBadge CLASSNAME;
	RepGen rep;
	void ClentCallbackReportVar();
	void ClentCallbackReportFinish();
	void ClentCallbackCalcStart();
	void ClentCallbackCalcBody();
	void ClentCallbackCalcFinish();
	void Perform();
	MakeBadge() {};
};

class OptionImage : public Option {
	void ReFocus();
protected:
	Image imgYes, imgNo, imgMaybe;
public:
//	Callback WhenChange;
	virtual void   Paint(Draw& draw);
	OptionImage& SetImage(const Image& m1, const Image& m2, const Image& m3)
			            { imgYes = m1; imgNo = m2; imgMaybe = m3; Refresh(); return *this; }
	OptionImage& SetImage(const Image& m1, const Image& m2)
			            { imgYes = m1; imgNo = m2; Refresh(); return *this; }			            
	OptionImage& ThreeState(bool b = true)    { threestate = b; notnull = false; return *this; }
//	void OnChange() {WhenChange();}
	typedef OptionImage CLASSNAME;
	OptionImage();
	~OptionImage(){;}
};

//put all used class declarations above *.lay
#define LAYOUTFILE     <Vega6/Vega.lay>
#include <CtrlCore/lay.h>

class SelectReportDlg : public WithSelectReport<TopWindow> {
	typedef SelectReportDlg CLASSNAME;
public:
	SelectReportDlg();
	void arr_LeftDouble();
};




class TabStatus : public WithTabStatus<ParentCtrl> {
	typedef TabStatus CLASSNAME;
public:
	ArrayCtrl console;
	TabStatus();
};

#define FIELDS 9
#define FIELDSCSV 12
class BrowseDB : public WithBrowseDB<ParentCtrl> {
    int filter[FIELDS][2]; // [][0]=on/off status, [][1]=start column 
    int filterCSV[FIELDSCSV][2]; // [][0]=on/off status, [][1]=start column 
	void SetFileDB();
	void ChooseDB(Bar& bar);
	void FideFile(Bar& bar);
	void USCFFile(Bar& bar);
	void ECFFile(Bar& bar);
	void CFCFile(Bar& bar);
	void PZSFile(Bar& bar);
	Vector<String> records;
    Vector<uint32> keys;
    VectorMap<int, int> keysidmap;
	Vector<int> SearchFIDEStrings(String str);
	int SearchIDFIDE(int idfide);
	void MakeKey();
	void ShowSelected();
	typedef BrowseDB CLASSNAME;
public:
	int nTab; //position in the dialog
	bool IS_KEY;
	String filedbname; //database filename
    enum{ FNAME=0, FRATING, FTITLE, FKCOEFF, FCOUNTRY, FBIRTH, FIDCODE, FGENDER, FCLUB};
    int IMPORT_DB; //depend by the file type
	BrowseDB();
	void ConnectDatabase(int i);
	void MenuCB(Bar& menu);
    void SetFileDB(Bar& menu);
	void SetConsoleDatabse(String fn, int flagDB);
	void EditSearchCB();
	void EditSearchEnterCB();
	void SetFilterCB();
	void LoadFilter(String fn);
	bool RegisterPlayerCB();
	int  RegisterMultiPlayerCB();
	void UpdateRating();
	int  ParsePlayerFSI(String playerstr, int i, int update);
	int  ParsePlayerVEG(String playerstr, int i, int update);
	int  ParsePlayerFIDE(String playerstr, int i, int update);
	int  ParsePlayerFixedLenghtDB(String playerstr, int i, int update);
	int  ParsePlayerUSCFregular(String playerstr, int i, int update);
	int  ParsePlayerUSCFquick(String playerstr, int i, int update);
	int  ParsePlayerECFstandard(String playerstr, int i, int update);
	int  ParsePlayerECFrapid(String playerstr, int i, int update);
    int  ParsePlayerESP(String playerstr, int i, int update);
	int  ParsePlayerGER(String playerstr, int i, int update);
	int  ParsePlayerCFCstandard(String playerstr, int i, int update);
	int  ParsePlayerCFCrapid(String playerstr, int i, int update);
	int  ParsePlayerPOL(String playerstr, int i, int update);
	int  ParsePlayerCSV(String playerstr, int i, int update);
	void SetSelected();
};

class RegOnlineDlg : public WithRegOnline<TopWindow> {
	typedef RegOnlineDlg CLASSNAME;
public:
    String PASSWORD;
	int idTorneo;
	String fname;
	RegOnlineDlg();
	void Login();
	void Download();
	void Upload();
	void SendFile();
	void SetPassword(String user);
	String EloVariation();
};

class RoundRobinPreferenceDlg : public WithRoundRobinPreference<TopWindow> {
	typedef RoundRobinPreferenceDlg CLASSNAME;
public:
	RoundRobinPreferenceDlg();
	void Done();
	void SetR();
};


class VegaConsoleFrame : public WithVegaConsoleFrameLayout<ParentCtrl> {
public:
	TabCtrl tabdb;
	TabStatus tabstatus;
	BrowseDB browse1, browse2, browse3;
	RegOnlineDlg regonline;
	typedef VegaConsoleFrame CLASSNAME;
	VegaConsoleFrame();
};

class DateCtrl : public WithDateCtrlLayout<TopWindow> {
    DropDate date;
	EditString es;
public:
	typedef DateCtrl CLASSNAME;
	DateCtrl();
	void MakeRound();
	void Done();
	void CopyAll();
};


#define NUM_BTN 14
class NewTournamentDlg : public WithNewTournamentLayout<TopWindow> {
public:
    bool modified;    
    int flag;
	DropList dropRating;
	EditInt edtmin, edtmax;
	Label dv___30, dv___32, dv___34;
	void SetNewDate1();
	void SetNewDate2();
    void AddTyebreak();
    void DoneDlg();
    void ExportDlg();
	void SetSchedule();
	void HideRound();
    void SetTournamentDir(String dir);
	typedef NewTournamentDlg CLASSNAME;

	NewTournamentDlg(int flag);  // flag = 1 for a new torneo, 0 to modify it
	~NewTournamentDlg() {;}
};

class SetFilterDlg : public WithSetFilterLayout<TopWindow> {
Option  tbutton[FIELDS];
EditInt edit[FIELDS];
Label   label[FIELDS];
public:
	void LoadFilterCB( int filter[][2]); 		//driver of LoadFilter()
	void LoadFilter(String fn, int filter[][2]);
	void SaveFilterCB(int filter[][2]);
	void DoneFilterCB(int filter[][2]);
	void SetSelection(int i, int l);
	
	typedef SetFilterDlg CLASSNAME;
	SetFilterDlg(String& testdb, int filter[][2]);
	~SetFilterDlg(){;}
};


class SetFilterDlgCSV : public WithSetFilterCSV<TopWindow> {
Option  tbutton[FIELDSCSV];
EditInt edit[FIELDSCSV];
Label   label[FIELDSCSV];
public:
	void LoadFilterCB( int filterCSV[][2]); 		//driver of LoadFilter()
	void LoadFilter(String fn, int filterCSV[][2]);
	void SaveFilterCB( int filterCSV[][2]);
	void DoneFilterCB( int filterCSV[][2]);
	
	typedef SetFilterDlgCSV CLASSNAME;
	SetFilterDlgCSV(String& testdb, int filterCSV[][2]);
	~SetFilterDlgCSV(){;}
};

class NonStandardResultDlg : public WithNonStandardResult<TopWindow> {
int round;
public:
    bool gotresult;
	void DoneNonStandardCB(int idw, int idb);
	void CloseCB();
	
	typedef NonStandardResultDlg CLASSNAME;
	NonStandardResultDlg(int idw, int idb, int rnd);
	~NonStandardResultDlg(){;}
};

class PrintTableDlg : public WithPrintTable<TopWindow> {
Option opt[13];
public:
	GridCtrl *arr;
	//bool printed;
	void PrintDlgCB();
	void SaveFileCB();
	void PrintPartecipantsHTML();	
	typedef PrintTableDlg CLASSNAME;
	PrintTableDlg(GridCtrl *array);
	PrintTableDlg();
	~PrintTableDlg(){;}
};

class VegaTab1 : public WithVegaTab1Layout<ParentCtrl> {
	EditString editName, editBirth, editIDNat, editStatus;
	WithDropChoice<EditString> editCountry, editClub;
	ButtonOption tsex;
	EditInt editIDFIDE, editRatFIDE, editRatNat, kcoeff, kfcoeff;
	void AddMenuitem(Bar &bar);
public:
	WithDropChoice<EditString> editTitle;
	bool IsChangedData;
	void SortRecord(int column);
	void AddPlayer();
	void GetAvail(int &total, int &nbye, int &nabsent);
	void OnAcceptRow();
	void PromptCell();
	void ModifyCrossTableCB();
	void RemovePlayer();
	void PrintTable();
    void SetStatus();
	typedef VegaTab1 CLASSNAME;
	VegaTab1();
	~VegaTab1(){;}
};

class ModifyCrossTableDlg : public WithModifyCrossTable<TopWindow> {
int id;
public:
	void DoneCB();
    bool IsPaired();
    
	typedef ModifyCrossTableDlg CLASSNAME;
	ModifyCrossTableDlg(int idplayer);
	~ModifyCrossTableDlg(){;}
};

class AvoidPairsDlg : public WithAvoidPairs<TopWindow> {
	typedef AvoidPairsDlg CLASSNAME;

public:
	AvoidPairsDlg();
	void Done();
	void Moveid();
};


enum {WY=0, WN, BY, BN, NG};
class ColoredRow : public WithRowLayout<ParentCtrl> {
public:
    int wid, bid, board;
    int wrtg, brtg;
    float wscr, bscr;
    int wflag, bflag;
	typedef ColoredRow CLASSNAME;

	ColoredRow();
	void Set(int board, int wid, int bid, int wrtg, int brtg, float wscr, float bscr, int wflag, int bflag);
	void Get(int& wid, int& bid, int& wrtg, int& brtg);
	void SetSide(int side, int id, int rtg, float scr, int flag);
	void GetSide(int side, int& id, int& rtg, float& scr, int& flag);
};

class Abbinamento : public WithAbbinamento<TopWindow> {
	ColoredRow a[200];
//	ScrollArea scrollarea;
    int lastlabel, numlabel;
    int id1, id2; // remind the two ids has been selected
    int iboard[2], side[2]; // remind the board (1...npair) and the side(0=left, 1=right) 
	void FillEdit(int board, int id);
    void CloseCB();
    bool ShowInfo();
    void VerifyPairCB();
    void ExchangePlayersCB();
    void DoneCB();
public:
	typedef Abbinamento CLASSNAME;
	Abbinamento();
};

class ShowVerboseDlg : public TopWindow {
public:
    Splitter h, v;
    LineEdit a, b;
	typedef ShowVerboseDlg CLASSNAME;
//	ShowVerboseDlg(int round);
    void CloseCB();
    void SetVerboseDlg();
	ShowVerboseDlg();
	~ShowVerboseDlg(){;}
};

class VegaTab3 : public WithVegaTab3Layout<ParentCtrl> {
	void UpdateData();
//	void HideTab(ArrayCtrl *x);
//	bool Key(dword key, int count);
    void StartArrayCursor();
	void MoveNextPair( int position);
	ShowVerboseDlg dlg; //òòò
	RichEdit editorQTF;
	int round;
public:
	
	typedef VegaTab3 CLASSNAME;
	VegaTab3();
	~VegaTab3(){;}
	void ShowPairingCB();
	void ShowPairingNOresultCB();
//	void SavePairing();
	void PrintCB();
	void KeyboardResultCB();
	void SetRound(int r);
	int  GetRound();
	void SpinRoundCB();
	void BtnResultCB(int idresult);
	void AvoidPairs();
	//void BtnOption();
	//void SetSpinRound(int r);
	void ShowVerboseCB();
    void SetOptionCB(int flag);
	void LoadResultCB();
  	void SwapColorsCB();
	int  InvertResult(int res);
    void ImproveColorsCB(); 
   	void MainBar(Bar& bar);
	void Publish();
	void LauchBrowser();
};


class ManualPairingDlg : public WithManualPairing<TopWindow> {
	int npair, remainedplayer, flagcall;
	Vector<int> availplayer; // player to be paired
public:
    void AddPairCB();
    void VerifyPairCB();
    void LoadPairingCB(int flag);
	void SavePairingCB();
	void RemovePairCB();
	void DoneCB(int flag);
	void SelectionListAvalCB();

	typedef ManualPairingDlg CLASSNAME;
	ManualPairingDlg(int flagcall);
	~ManualPairingDlg(){;}
};

class VegaTab4 : public WithVegaTab4Layout<ParentCtrl> {
ToolBar toolbar;
FontHeight edt;
EditString edts;
public:
String  filename;
	typedef VegaTab4 CLASSNAME;
	VegaTab4();
	~VegaTab4(){;}
	void ShowFile(int idfile);
	void MainBar(Bar& bar);
	void MainBar2(Bar& bar);
	void New();
	void Load(const String& name);
	void Open();
	void Save();
	void SaveAs();
	void PrintCB();
	void PrintSelectedTextCB();
	void NewQtf();
	void MakeSmallBadge();
	void MakeLargeBadge();
};

//report FSI - Campionato Regionale
class FSIRegionale : public WithFSIRegionale<TopWindow> {
public:
	typedef FSIRegionale CLASSNAME;
	FSIRegionale();
	void Candidati();
	void Qualificati();
	void NuoviIscritti();
	void Verbale();
	String ProvinciaRegione(String prov);
};

class FSIProvinciale : public WithFSIProvinciale<TopWindow> {
public:
	typedef FSIProvinciale CLASSNAME;
	FSIProvinciale();
	void Candidati();
	void Qualificati();
};

class FSIMasterCertificate : public WithFSIMasterCertificate<TopWindow> {
	typedef FSIMasterCertificate CLASSNAME;
public:
	FSIMasterCertificate();
	~FSIMasterCertificate(){;}
	void GenerateCertificate(int i, String placebirth, String rateplay, String organizer);
	int CalculatePlayerNorm(int i, int arrrating[], int Round, int& ARO);
	void DoneCB();
};

class FSICardCheck : public WithFSICardCheck<TopWindow> {
	typedef FSICardCheck CLASSNAME;
    Vector<String> record;
	int SearchStr1(String pattern, Vector<String> &result);
	int SearchStr2(String pattern1, String pattern2, Vector<String> &result, int &typecard);
	int SearchStrNum(String numero, Vector<String> &result, int &typecard);
public:
	FSICardCheck();
	void Check();
};


//Section 
class USCFSectionReport : public WithUSCFRatingReport<TopWindow> {
public:
	typedef USCFSectionReport CLASSNAME;
	USCFSectionReport();
	~USCFSectionReport(){;}
	void DoneCB();
};


//do USCF Tournament report
class USCFTournamentReport : public WithUSCFTournamentReport<TopWindow> {
String filesection[20];
int Ndirectory, max_rounds;
public:
	typedef USCFTournamentReport CLASSNAME;
	USCFTournamentReport(int SectionNumber, int max_rounds, String listfile[]);
	~USCFTournamentReport(){;}
	void DoneCB();
};


//collect sections 
class USCFReport : public WithUSCFReport<TopWindow> {
int Ndirectory, max_rounds;
public:
	typedef USCFReport CLASSNAME;
	USCFReport();
	~USCFReport(){;}
	void OpenFileCB();
	void SaveFileCB();
	void RemoveCB();
	void AddCB();
	void DoneCB();
};

class ECFTournamentReport : public WithECFTournamentReport<TopWindow> {
Vector<String> defaultdata;
public:
	typedef ECFTournamentReport CLASSNAME;
	void DoneCB();
	void SetNewDate1();
	void SetNewDate2();
	void SaveData();
	void LoadData();
	ECFTournamentReport();
	~ECFTournamentReport(){;}
};

class ECFConversion : public WithECFConversion<TopWindow> {
public:
	typedef ECFConversion CLASSNAME;
	ECFConversion();
	void Grade2Rating();
	void Rating2Grade();
};

class FIDERatingReport : public WithFIDERatingReport<TopWindow> {
	int flag;
public:
	typedef FIDERatingReport CLASSNAME;
	FIDERatingReport(int _flag); //flag=1 for FIDE, otherwise it is the DTF
	~FIDERatingReport(){;}
	void DoneCB();
	void DoneTDFCB();
};

class GERRatingReport : public WithGERRatingReport<TopWindow> {
public:
	typedef GERRatingReport CLASSNAME;
	GERRatingReport(); 
	~GERRatingReport(){;}
	void DoneCB();
};

class FIDEFindNorm : public WithFIDEFindNorm<TopWindow> {
    Vector< Vector<Value> > table;
public:
	typedef FIDEFindNorm CLASSNAME;
	FIDEFindNorm();
	~FIDEFindNorm(){;}
	void DoneCB();
	void SetIDCB();
	void SpinRoundCB();
//	void OpponentSummary(int ctitle[15], int id);
};


class FIDECertificate : public WithFIDECertificate<TopWindow> {
public:
	typedef FIDECertificate CLASSNAME;
	FIDECertificate();
	~FIDECertificate(){;}
	void GenerateCertificate(int i, int typenorm, String placebirth, String rateplay, int Round);
	void DoneCB();
};

#define GROUPS 5
class RankRatedGroup : public WithRankRatedGroup<TopWindow> {
EditInt editgroup[GROUPS+1][2];
int    limitgroup[GROUPS+1][2];
public:
	typedef RankRatedGroup CLASSNAME;
	RankRatedGroup();
	~RankRatedGroup(){;}
	void CloseCB();
	void DoneCB();
	void SaveRankRatedGroup();
	void SaveIntervallData();
	void LoadIntervallData();
};
 
class RankFederationDlg : public WithRankFederation<TopWindow> {
	typedef RankFederationDlg CLASSNAME;
public:
    int nboards;
	RankFederationDlg();
	void Done();
};

class ZermeloDlg : public WithZermelo<TopWindow> {
	typedef ZermeloDlg CLASSNAME;
public:
    int opttheta, optnu;
	int doit;
    double theta, nu;
	ZermeloDlg();
	void CloseCB();
	void Done();
};

class RankDateGroup : public WithRankDateGroup<TopWindow> {
EditInt editgroup[GROUPS+1][2];
int    limitgroup[GROUPS+1][2];
public:
	typedef RankDateGroup CLASSNAME;
	RankDateGroup();
	~RankDateGroup(){;}
	void CloseCB();
	void DoneCB();
	void SaveRankDateGroup();
	void SaveIntervallData();
	void LoadIntervallData();
};

class AcceleratedRound : public WithAcceleratedRoundLayout<TopWindow> {
    int cut1, cut2;
public:
	typedef AcceleratedRound CLASSNAME;
	AcceleratedRound();
	void ShowGroups();
	void Done();
	void SetLimit(Bar& bar);
	void SetUPLimit();
	void SetDOWNLimit();
	void SetDecreasingAcc();
};

class Groups : public WithGroupsLayout<TopWindow> {
	typedef Groups CLASSNAME;
	void Done();
	void ColorRow();
	void CountPlayers();
	void Reset();
public:
	String namegroup[10];
	Groups();
	void LoadGroup();
	void AssignGroup(int group);
};

class FtpWebSite : public WithFtpWebSite<TopWindow> {
	String FTPHOST, FTPUSER, FTPPATH, FTPPASS; 
public:
    Vector<String> sectionlink;
	typedef FtpWebSite CLASSNAME;
	FtpWebSite();
//	void Publish();
//	void PublishHtml();
	void LoadFTPData();
	void SaveFTPData();
	void Generate();
	void Done();
	void SelectHost();
	String encrypt(const char str[],int key);
	String decrypt(const char str[],int key);
};

class PublishSiteDlg : public WithPublishSite<TopWindow> {
	String FTPHOST, FTPUSER, FTPPATH, FTPPASS; 
	typedef PublishSiteDlg CLASSNAME;
public:
    Vector<String> sectionlink;
	PublishSiteDlg();
	void Publish();
	void PublishVega(int flag);
	void PublishFEDA();
	void PublishHtml();
	void PublishPairHtml();
	void Settings();
	void GetServerFolder();
	void LoadFTPData();
	String decrypt(const char str[],int key);
};

class LicenseDlg : public WithLicense<TopWindow> {
	typedef LicenseDlg CLASSNAME;
    String email, name, fed, expire, license, upgrade;
public:
	LicenseDlg();
	void GetMail();
	void TestLicense();
	void LoadLicense();
	void SaveLicense();
	int  Verify();
	void VerifyData();
	void Setcursor();
	void ShowMessage(int flag);
	int  CheckRegistration();
	void ProcessWord(const char words[], String& str);
};

class Memo : public WithMemo<TopWindow> {
public:
	typedef Memo CLASSNAME;
	void Done();
	Memo();
};

class ShowStatusPlayerDlg : public WithShowStatusPlayer<TopWindow> {
	typedef ShowStatusPlayerDlg CLASSNAME;
public:
	ShowStatusPlayerDlg();
};

class SetStatusPlayerDlg : public WithSetStatusPlayer<TopWindow> {
	typedef SetStatusPlayerDlg CLASSNAME;
	int sround;
public:
	SetStatusPlayerDlg(int id);
	void Remove();
	void Done(int id);
};

class FestivalDlg : public WithFestival<TopWindow> {
	typedef FestivalDlg CLASSNAME;
	void AddTournament();
	void Done();
	void SetTournamentDir();
	void SaveData();
	void RemoveAll();
public:
    String base;
    FestivalDlg();
	Vector<String> LoadData();
};

class FileSelectNew : public FileSel {
public:
	typedef FileSelectNew CLASSNAME;
	Option optita;
virtual	void MkDir();
	FileSelectNew(int flag);
};

class HortSystem : public WithHortSystem<TopWindow> {
public:
	EditDouble edtp;
	typedef HortSystem CLASSNAME;
	void SplitPrice(Vector<int>& pvec);
	void Done();
	HortSystem();
};

class PluginPairing : public WithPluginPairing<TopWindow> {
public:
	typedef PluginPairing CLASSNAME;
	PluginPairing();
	void AddPlugin();
	void RemovePlugin();
	void Done();
	void Activate();
	void SetTournamentDir();	
	void LoadPluginData();
	void SavePluginData();
};

class VegaMain : public WithVegaMainLayout<TopWindow> {
//these are protected to access then from app instance...
	void DataFromArchiveToArray(int fromPlayer, int toPlayer);
    void DataFromArchiveToArray();
    void DataFromArrayToArchive();
    void ReadVegFile(String filename);
    void ImportTournamentFIDE(String filename);
    void ImportTournamentTDF(String filename);
protected:
	Splitter spls;
	VegaTab1 tab1;  
	VegaTab3 tab3;  
	VegaTab4 tab4;  
	VegaConsoleFrame consoleFrame;

public:
	void VegaMainMenu(Bar& menu);
	void File(Bar& bar);
	void Export(Bar& bar);
	void NationalReport(Bar& bar);

	void NewTournament();
    void ExportTournament();
    void ExportAllPlayers();
    void ExportPlayer();
	void UpdateRatingCB(int i);

	void OpenTournament();
    void JumpTournament();
	void SaveTournament();
    void SyncStatus(int r);
    
	void DownloadPlayer();
    void VesusC16();
	
	void CloseRegistration();
	void AssignIDtoPlayers(int n);
		
	void Standing(Bar& bar); //menu Standing
	void Extras(Bar& bar);  //menu Extra
	void FideReport(Bar& bar);   // submenu FideReport
	void CalculatePerformance();
	void FideEloVariation();
	void FIDERatingReportCB();
	void ReportCB(Bar& bar);
	void FidePlayerCard();
	void ShowStatistics();
    void PrintFIDECertificateCB();
	void PrintFIDECertificateIT3();

	void ExportNZCF();
 	void ExportFEDA();
    void ExportTDF();
	void ImportTDF();

	void Import(int flag);
    void ExportXml();
    void ImportXml(String fn);
	
	void FSIReportCB(Bar& bar);
	void FSIFileelo();
	void FSIProv();
	void FSIReg();
	void FSIGiovanile(int flag);
	void PrintFSICertificateCB();
	void FSIIscritti();
	void FSIVerbale();
	void FSIEloprev();
	void FSIControllo();
	void FSIVariazioniEloHTML();

	void USCFReportMenu(Bar& bar);
	void USCFSectionReportCB();
	void USCFTournamentReportCB();

	void ECFReportMenu(Bar& bar);
	void ECFSectionReportCB();
	void ECFGradesConversionCB();

	void GERReportMenu(Bar& bar);
	void GERSectionReportCB();
	void GERConversionSpielerCB();

	void PZSReportMenu(Bar& bar);
	void PZSSectionReportCB();
	void PZSConversionPlayerCB();
	void SetPZSRating();

	void RegeneratePairingNumber();
	void RankDateGroupCB();
	void RankRatedGroupCB();
	void RoundRobinCalendar();
	void HortSystemCB();
	void SelectLanguage(Bar& bar);
	void ChooseLng(int lng);
	void MakeBadgeCB();	
	void MPScoreSystem();
	void Upset(int flag);
	void ZermeloCB(int flag);
	void RankFedCB();
	void RankCatCB();
	void RankGroupCB();
	void BackupVegFile();
	void AddPairingPlugin();
	void SetFestival();
	void OpenOutputFolder();
	void OpenWWWOutputFolder();
	void PublishWWWOutputFolder();
	void SetAcceleratedRound();
	void SetGroups();
	void FindDuplicate();
	void SetName();
	void SetMemo();
	void ShowStatus();

	void DangerousStuff(Bar& bar); // submenu DangerousStuff
	void ModifyTournament();
    void LoadBackupRoundCB();
    void ResetTournamentCB();	
    void ReopenRegistrationCB();
    void DeleteRoundCB();
	
    void Help(Bar& bar);           // menu Help
	void HelpContent();
	void HelpRegistered();
	void HelpRegister();
	void HelpAbout();
	void CheckUpdate();
	
	void SetBars();
	void SetTabs();
	void DopairingCB();
	void DoManualPairingCB();
	void ModifyPairingCB();
	void PrintTable();
	void PrintPairingCB();
	//void Init();

	void UpdateInfo(const String& _what);
	String InfoCurrentPlayerAndStatus();
    void ThreeButtonAction();
	void btnAddAction();
	void arrAcceptRow();
    void btnRemoveAction();	
//	void AddImportedPlayer();
	void AddImportedPlayer1();
	void AddImportedPlayer2();
	void AddImportedPlayer3();
	void Exit();
	virtual bool Key(dword key, int count);
	void GetSplitterSize();

public:
	typedef VegaMain CLASSNAME;
	VegaMain();
};


#endif
