#ifndef KartenKaufen_H
#define KartenKaufen_H

#include <Schrift.h>
#include <Knopf.h>
#include <KSGScript.h>
#include <Array.h>
#include <Scroll.h>
#include <Animation.h>
#include <Thread.h>
#include <AuswahlBox.h>

using namespace Framework;
using namespace KSGScript;

class KartenKaufenAuswahl : private Thread
{
private:
	int karteId;
	unsigned char alpha;
	KSGScriptObj *fenster;
	Framework::Animation2D *laden;
	Punkt pos;
	LRahmen *ram;
	HINSTANCE ksgs;
	bool aktion;
	int ref;

public:
	// Konstruktor
	KartenKaufenAuswahl( Schrift *zSchrift );
	// Destruktor
	~KartenKaufenAuswahl();
	// nicht constant
	void ladeKarteSeite( int id );
	void reset();
	virtual void thread();
	void ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal );
	void doMausEreignis( MausEreignis &me );
	void doTastaturEreignis( TastaturEreignis &te );
	bool tick( double zeit );
	void render( Bild &zRObj );
	// constant

	// Reference Counting
	KartenKaufenAuswahl *getThis();
	KartenKaufenAuswahl *release();
};

class KartenKaufenListeEintrag
{
private:
	int karteId;
	Knopf *auswählen;
	Bild *hintergrund;
	AlphaFeld *ausgewählt;
	LRahmen *ram;
	bool ausw;
	bool rend;
	int ref;

public:
	// Konstruktor
	KartenKaufenListeEintrag( int id, Schrift *schrift );
	// Destruktor
	~KartenKaufenListeEintrag();
	// nicht constant
	void resetAuswahl();
	bool doMausEreignis( MausEreignis &me );
	bool tick( double zeit );
	void render( int yOff, Bild &zRObj );
	// constant
	int getKarteId() const;
	// Reference Counting
	KartenKaufenListeEintrag *getThis();
	KartenKaufenListeEintrag *release();
};

class KartenKaufenListe
{
private:
	Schrift *s;
	LRahmen *ram;
	Punkt pos;
	RCArray< KartenKaufenListeEintrag > *einträge;
	VScrollBar *vScroll;
	bool rend;
	int ref;
	CRITICAL_SECTION cs;

public:
	// Konstruktor
	KartenKaufenListe( Schrift *schrift );
	// Destruktor
	~KartenKaufenListe();
	// nicht constant
	void ladeKarten( Array< int > *karten );
	void leeren();
	int doMausEreignis( MausEreignis &me );
	bool tick( double zeit );
	void render( Bild &zRObj );
	// constant
	int getEintragAnzahl();
	// Reference Counting
	KartenKaufenListe *getThis();
	KartenKaufenListe *release();
};

class KartenKaufen : private Thread
{
private:
	unsigned char alpha;
	bool sichtbar;
	Text *suchText;
	LRahmen *ram;
	AuswahlBox *spielArt;
	TextFeld *suchFilterT;
	TextFeld *suchFilter;
	Knopf *suchen;
	TextFeld *seiten;
	Knopf *weiter;
	Knopf *zurück;
	Punkt pos;
	KartenKaufenListe *liste;
	KartenKaufenAuswahl *auswahl;
	Framework::Animation2D *laden;
	double tickVal;
	int seite;
	int maxSeite;
	int aktion;
	bool rend;
	int ref;

public:
	// Konstruktor
	KartenKaufen( Schrift *zSchrift );
	// Destruktor
	~KartenKaufen();
	// nicht constant
	void setSichtbar( bool sicht );
	virtual void thread();
	void doMausEreignis( MausEreignis &me );
	void doTastaturEreignis( TastaturEreignis &te );
	bool tick( double zeit );
	void render( Bild &zRObj );
	// constant
	bool istSichtbar() const;
	// Reference Counting
	KartenKaufen *getThis();
	KartenKaufen *release();
};

#endif