#include "VorLogin.h"
#include "..\Global\Initialisierung.h"

// Inhalt der VorLogin Klasse aus VorLogin.h
// Konstruktor 
VorLogin::VorLogin( Schrift *zSchrift, Bildschirm *zBildschirm )
{
	if( zSchrift )
		schrift = zSchrift->getThis();
	if( zBildschirm )
		bildschirm = zBildschirm->getThis();
	fenster = 0;
	beenden = 0;
	login = 0;
	bestätigung = 0;
	eMailÄndern = 0;
	eMailVergessen = 0;
	geheimnisÄndern = 0;
	geheimnisVergessen = 0;
	nameVergessen = 0;
	passwortÄndern = 0;
	passwortVergessen = 0;
	registrierung = 0;
	unregistrierung = 0;
	ref = 1;
}

// Destruktor 
VorLogin::~VorLogin()
{
	if( fenster )
		setSichtbar( 0 );
	if( schrift )
		schrift = schrift->release();
	if( bildschirm )
		bildschirm = bildschirm->release();
}

// nicht constant
void VorLogin::setSichtbar( bool s ) // Setzt die Sichtbarkeit der VorLogin Oberfräche
{
	if( s )
	{
		if( fenster )
			setSichtbar( 0 );
		fenster = new Fenster();
		fenster->setStyle( Fenster::Style::Erlaubt | Fenster::Style::Sichtbar );
		fenster->setGröße( bildschirm->getBackBufferGröße() );
		fenster->setPosition( 0, 0 );
		beenden = initKnopf( 10, 10, 130, 30, schrift, Knopf::Style::Sichtbar, "Beenden" );
		beenden->setMausEreignis( VorLoginBeendenME );
		initToolTip( beenden, "Beendet den Kolja-Strohm Games Client.", schrift->getThis(), bildschirm );
		fenster->addMember( beenden );
		login = new Login( schrift, fenster );
		bestätigung = new Bestätigung( schrift, fenster );
		eMailÄndern = new EMailÄndern( schrift, fenster );
		eMailVergessen = new EMailVergessen( schrift, fenster );
		geheimnisÄndern = new GeheimnisÄndern( schrift, fenster );
		geheimnisVergessen = new GeheimnisVergessen( schrift, fenster );
		nameVergessen = new NameVergessen( schrift, fenster );
		passwortÄndern = new PasswortÄndern( schrift, fenster );
		passwortVergessen = new PasswortVergessen( schrift, fenster );
		registrierung = new Registrierung( schrift, fenster );
		unregistrierung = new Unregistrierung( schrift, fenster );
		bildschirm->addMember( fenster );
	}
	else
	{
		if( bildschirm )
			bildschirm->removeMember( fenster );
		if( beenden )
			beenden = beenden->release();
		if( login )
			login = login->release();
		if( bestätigung )
			bestätigung = bestätigung->release();
		if( eMailÄndern )
			eMailÄndern = eMailÄndern->release();
		if( eMailVergessen )
			eMailVergessen = eMailVergessen->release();
		if( geheimnisÄndern )
			geheimnisÄndern = geheimnisÄndern->release();
		if( geheimnisVergessen )
			geheimnisVergessen = geheimnisVergessen->release();
		if( nameVergessen )
			nameVergessen = nameVergessen->release();
		if( passwortÄndern )
			passwortÄndern = passwortÄndern->release();
		if( passwortVergessen )
			passwortVergessen = passwortVergessen->release();
		if( registrierung )
			registrierung = registrierung->release();
		if( unregistrierung )
			unregistrierung = unregistrierung->release();
		if( fenster )
			fenster = fenster->release();
	}
}

void VorLogin::setLogin( bool knopfPress ) // macht Login Oberfläche sichtbar
{
	if( !knopfPress )
	{
		MausEreignis me;
		me.id = ME_RLinks;
		if( login )
			login->loginME( 0, me );
		return;
	}
	if( registrierung )
		registrierung->druckFremdKnopf();
	if( unregistrierung )
		unregistrierung->druckFremdKnopf();
	if( passwortÄndern )
		passwortÄndern->druckFremdKnopf();
	if( passwortVergessen )
		passwortVergessen->druckFremdKnopf();
	if( eMailÄndern )
		eMailÄndern->druckFremdKnopf();
	if( eMailVergessen )
		eMailVergessen->druckFremdKnopf();
	if( geheimnisÄndern )
		geheimnisÄndern->druckFremdKnopf();
	if( geheimnisVergessen )
		geheimnisVergessen->druckFremdKnopf();
	if( nameVergessen )
		nameVergessen->druckFremdKnopf();
	if( bestätigung )
		bestätigung->druckFremdKnopf();
}

void VorLogin::setBestätigung() // macht Bestätigung Oberfläche sichtbar
{
	if( registrierung )
		registrierung->druckFremdKnopf();
	if( unregistrierung )
		unregistrierung->druckFremdKnopf();
	if( passwortÄndern )
		passwortÄndern->druckFremdKnopf();
	if( passwortVergessen )
		passwortVergessen->druckFremdKnopf();
	if( eMailÄndern )
		eMailÄndern->druckFremdKnopf();
	if( eMailVergessen )
		eMailVergessen->druckFremdKnopf();
	if( geheimnisÄndern )
		geheimnisÄndern->druckFremdKnopf();
	if( geheimnisVergessen )
		geheimnisVergessen->druckFremdKnopf();
	if( nameVergessen )
		nameVergessen->druckFremdKnopf();
	if( login )
		login->druckFremdKnopf();
}

void VorLogin::setEMailÄndern() // macht EMailÄndern Oberfläche sichtbar
{
	if( registrierung )
		registrierung->druckFremdKnopf();
	if( unregistrierung )
		unregistrierung->druckFremdKnopf();
	if( passwortÄndern )
		passwortÄndern->druckFremdKnopf();
	if( passwortVergessen )
		passwortVergessen->druckFremdKnopf();
	if( bestätigung )
		bestätigung->druckFremdKnopf();
	if( eMailVergessen )
		eMailVergessen->druckFremdKnopf();
	if( geheimnisÄndern )
		geheimnisÄndern->druckFremdKnopf();
	if( geheimnisVergessen )
		geheimnisVergessen->druckFremdKnopf();
	if( nameVergessen )
		nameVergessen->druckFremdKnopf();
	if( login )
		login->druckFremdKnopf();
}

void VorLogin::setEMailVergessen() // macht EMailVergessen Oberfläche sichtbar
{
	if( registrierung )
		registrierung->druckFremdKnopf();
	if( unregistrierung )
		unregistrierung->druckFremdKnopf();
	if( passwortÄndern )
		passwortÄndern->druckFremdKnopf();
	if( passwortVergessen )
		passwortVergessen->druckFremdKnopf();
	if( bestätigung )
		bestätigung->druckFremdKnopf();
	if( eMailÄndern )
		eMailÄndern->druckFremdKnopf();
	if( geheimnisÄndern )
		geheimnisÄndern->druckFremdKnopf();
	if( geheimnisVergessen )
		geheimnisVergessen->druckFremdKnopf();
	if( nameVergessen )
		nameVergessen->druckFremdKnopf();
	if( login )
		login->druckFremdKnopf();
}

void VorLogin::setGeheimnisÄndern() // macht GeheimnisÄndern Oberfläche sichtbar
{
	if( registrierung )
		registrierung->druckFremdKnopf();
	if( unregistrierung )
		unregistrierung->druckFremdKnopf();
	if( passwortÄndern )
		passwortÄndern->druckFremdKnopf();
	if( passwortVergessen )
		passwortVergessen->druckFremdKnopf();
	if( bestätigung )
		bestätigung->druckFremdKnopf();
	if( eMailÄndern )
		eMailÄndern->druckFremdKnopf();
	if( eMailVergessen )
		eMailVergessen->druckFremdKnopf();
	if( geheimnisVergessen )
		geheimnisVergessen->druckFremdKnopf();
	if( nameVergessen )
		nameVergessen->druckFremdKnopf();
	if( login )
		login->druckFremdKnopf();
}

void VorLogin::setGeheilnisVergessen() // macht GeheimnisVergessen Oberfläche sichtbar
{
	if( registrierung )
		registrierung->druckFremdKnopf();
	if( unregistrierung )
		unregistrierung->druckFremdKnopf();
	if( passwortÄndern )
		passwortÄndern->druckFremdKnopf();
	if( passwortVergessen )
		passwortVergessen->druckFremdKnopf();
	if( bestätigung )
		bestätigung->druckFremdKnopf();
	if( eMailÄndern )
		eMailÄndern->druckFremdKnopf();
	if( eMailVergessen )
		eMailVergessen->druckFremdKnopf();
	if( geheimnisÄndern )
		geheimnisÄndern->druckFremdKnopf();
	if( nameVergessen )
		nameVergessen->druckFremdKnopf();
	if( login )
		login->druckFremdKnopf();
}

void VorLogin::setNameVergessen() // macht NameVergessen Oberfläche sichtbar
{
	if( registrierung )
		registrierung->druckFremdKnopf();
	if( unregistrierung )
		unregistrierung->druckFremdKnopf();
	if( passwortÄndern )
		passwortÄndern->druckFremdKnopf();
	if( passwortVergessen )
		passwortVergessen->druckFremdKnopf();
	if( bestätigung )
		bestätigung->druckFremdKnopf();
	if( eMailÄndern )
		eMailÄndern->druckFremdKnopf();
	if( eMailVergessen )
		eMailVergessen->druckFremdKnopf();
	if( geheimnisÄndern )
		geheimnisÄndern->druckFremdKnopf();
	if( geheimnisVergessen )
		geheimnisVergessen->druckFremdKnopf();
	if( login )
		login->druckFremdKnopf();
}

void VorLogin::setPasswortÄndern() // macht PasswortÄndern Oberfläche sichtbar
{
	if( registrierung )
		registrierung->druckFremdKnopf();
	if( unregistrierung )
		unregistrierung->druckFremdKnopf();
	if( nameVergessen )
		nameVergessen->druckFremdKnopf();
	if( passwortVergessen )
		passwortVergessen->druckFremdKnopf();
	if( bestätigung )
		bestätigung->druckFremdKnopf();
	if( eMailÄndern )
		eMailÄndern->druckFremdKnopf();
	if( eMailVergessen )
		eMailVergessen->druckFremdKnopf();
	if( geheimnisÄndern )
		geheimnisÄndern->druckFremdKnopf();
	if( geheimnisVergessen )
		geheimnisVergessen->druckFremdKnopf();
	if( login )
		login->druckFremdKnopf();
}

void VorLogin::setPasswortVergessen() // macht passwortVergessen Oberfläche sichtbar
{
	if( registrierung )
		registrierung->druckFremdKnopf();
	if( unregistrierung )
		unregistrierung->druckFremdKnopf();
	if( nameVergessen )
		nameVergessen->druckFremdKnopf();
	if( passwortÄndern )
		passwortÄndern->druckFremdKnopf();
	if( bestätigung )
		bestätigung->druckFremdKnopf();
	if( eMailÄndern )
		eMailÄndern->druckFremdKnopf();
	if( eMailVergessen )
		eMailVergessen->druckFremdKnopf();
	if( geheimnisÄndern )
		geheimnisÄndern->druckFremdKnopf();
	if( geheimnisVergessen )
		geheimnisVergessen->druckFremdKnopf();
	if( login )
		login->druckFremdKnopf();
}

void VorLogin::setRegistrierung() // macht Registrierung Oberfläche sichtbar
{
	if( passwortVergessen )
		passwortVergessen->druckFremdKnopf();
	if( unregistrierung )
		unregistrierung->druckFremdKnopf();
	if( nameVergessen )
		nameVergessen->druckFremdKnopf();
	if( passwortÄndern )
		passwortÄndern->druckFremdKnopf();
	if( bestätigung )
		bestätigung->druckFremdKnopf();
	if( eMailÄndern )
		eMailÄndern->druckFremdKnopf();
	if( eMailVergessen )
		eMailVergessen->druckFremdKnopf();
	if( geheimnisÄndern )
		geheimnisÄndern->druckFremdKnopf();
	if( geheimnisVergessen )
		geheimnisVergessen->druckFremdKnopf();
	if( login )
		login->druckFremdKnopf();
}

void VorLogin::setUnregistrierung() // macht Unregistrierung Oberfläche sichtbar
{
	if( passwortVergessen )
		passwortVergessen->druckFremdKnopf();
	if( registrierung )
		registrierung->druckFremdKnopf();
	if( nameVergessen )
		nameVergessen->druckFremdKnopf();
	if( passwortÄndern )
		passwortÄndern->druckFremdKnopf();
	if( bestätigung )
		bestätigung->druckFremdKnopf();
	if( eMailÄndern )
		eMailÄndern->druckFremdKnopf();
	if( eMailVergessen )
		eMailVergessen->druckFremdKnopf();
	if( geheimnisÄndern )
		geheimnisÄndern->druckFremdKnopf();
	if( geheimnisVergessen )
		geheimnisVergessen->druckFremdKnopf();
	if( login )
		login->druckFremdKnopf();
}

// constant
Login *VorLogin::getLogin() const // gibt die Login Oberfläche zurück
{
	return login ? login->getThis() : 0;
}

Login *VorLogin::zLogin() const
{
	return login;
}

Bestätigung *VorLogin::getBestätigung() const // gibt die Bestätigung Oberfläche zurück
{
	return bestätigung ? bestätigung->getThis() : 0;
}

Bestätigung *VorLogin::zBestätigung() const
{
	return bestätigung;
}

EMailÄndern *VorLogin::getEMailÄndern() const // gibt die EMailÄndern Oberfläche zurück
{
	return eMailÄndern ? eMailÄndern->getThis() : 0;
}

EMailÄndern *VorLogin::zEMailÄndern() const
{
	return eMailÄndern;
}

EMailVergessen *VorLogin::getEMailVergessen() const // gibt die EMailVergessen Oberfläche zurück
{
	return eMailVergessen ? eMailVergessen->getThis() : 0;
}

EMailVergessen *VorLogin::zEMailVergessen() const
{
	return eMailVergessen;
}

GeheimnisÄndern *VorLogin::getGeheimnisÄndern() const // gibt die GeheimnisÄndern Oberfläche zurück
{
	return geheimnisÄndern ? geheimnisÄndern->getThis() : 0;
}

GeheimnisÄndern *VorLogin::zGeheimnisÄndern() const
{
	return geheimnisÄndern;
}

GeheimnisVergessen *VorLogin::getGeheimnisVergessen() const // gibt die GeheimnisVergessen Oberfläche zurück
{
	return geheimnisVergessen ? geheimnisVergessen->getThis() : 0;
}

GeheimnisVergessen *VorLogin::zGeheimnisVergessen() const
{
	return geheimnisVergessen;
}

NameVergessen *VorLogin::getNameVergessen() const // gibt die NameVergessen Oberfläche zurück
{
	return nameVergessen ? nameVergessen->getThis() : 0;
}

NameVergessen *VorLogin::zNameVergessen() const
{
	return nameVergessen;
}

PasswortÄndern *VorLogin::getPasswortÄndern() const // gibt die PasswortÄndern Oberfläche zurück
{
	return passwortÄndern ? passwortÄndern->getThis() : 0;
}

PasswortÄndern *VorLogin::zPasswortÄndern() const
{
	return passwortÄndern;
}

PasswortVergessen *VorLogin::getPasswortVergessen() const // gibt die PasswortVergessen Oberfläche zurück
{
	return passwortVergessen ? passwortVergessen->getThis() : 0;
}

PasswortVergessen *VorLogin::zPasswortVergessen() const
{
	return passwortVergessen;
}

Registrierung *VorLogin::getRegistrierung() const // gibt die Registrierung Oberfläche zurück
{
	return registrierung ? registrierung->getThis() : 0;
}

Registrierung *VorLogin::zRegistrierung() const
{
	return registrierung;
}

Unregistrierung *VorLogin::getUnregistrierung() const // gibt die Unregistrierung Oberfläche zurück
{
	return unregistrierung ? unregistrierung->getThis() : 0;
}

Unregistrierung *VorLogin::zUnregistrierung() const
{
	return unregistrierung;
}

Fenster *VorLogin::zFenster() const
{
	return fenster;
}

// Reference Counting
VorLogin *VorLogin::getThis()
{
	ref++;
	return this;
}

VorLogin *VorLogin::release()
{
	ref--;
	if( !ref )
		delete this;
	return 0;
}

// Ereignisse
bool VorLoginBeendenME( void *p, void *obj, MausEreignis me )
{
	if( me.id == ME_RLinks )
		PostQuitMessage( 0 );
	return 1;
}