#ifndef SpieleKaufen_H
#define SpieleKaufen_H

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

using namespace Framework;
using namespace KSGScript;

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

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

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

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

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

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

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

class SpieleKaufen : private Thread
{
private:
	unsigned char alpha;
	bool sichtbar;
	Text *suchText;
	LRahmen *ram;
	TextFeld *suchFilter;
	TextFeld *suchFilterT;
	Knopf *suchen;
	TextFeld *seiten;
	Knopf *weiter;
	Knopf *zurück;
	Punkt pos;
	SpieleKaufenListe *liste;
	SpieleKaufenAuswahl *auswahl;
	Animation2D *laden;
	double tickVal;
	int seite;
	int maxSeite;
	bool rend;
	int ref;

public:
	// Konstruktor
	SpieleKaufen( Schrift *zSchrift );
	// Destruktor
	~SpieleKaufen();
	// 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
	SpieleKaufen *getThis();
	SpieleKaufen *release();
};

#endif