#include "..\..\Global\Variablen.h"
#include "Passwort.h"
#include "..\..\Global\Initialisierung.h"
#include <Punkt.h>
#include <Text.h>

// Inhalt der PasswortÄndern Klasse aus Passwort.h
// Konstruktor
PasswortÄndern::PasswortÄndern( Schrift *zSchrift, Fenster *zVorLoginFenster )
{
	Punkt bildschirmmitte = Bildschirmmitte();
	passwortÄndern = initKnopf( 10, 170, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Passwort ändern" );
	passwortÄndern->setMausEreignisParameter( this );
	passwortÄndern->setMausEreignis( passwortÄndernPasswortÄndernME );
	initToolTip( passwortÄndern, "Account Passwort ändern.", zSchrift->getThis(), hauptScreen );
	zVorLoginFenster->addMember( passwortÄndern );
	fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 115, 250, 230, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Passwort ändern" );
	name = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
	name->setTastaturEreignisParameter( this );
	name->setTastaturEreignis( passwortÄndernNameTE );
	initToolTip( name, "Account Name.", zSchrift->getThis(), hauptScreen );
	fenster->addMember( name );
	passwort = initTextFeld( 20, 50, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" );
	passwort->setTastaturEreignisParameter( this );
	passwort->setTastaturEreignis( passwortÄndernPasswortTE );
	initToolTip( passwort, "Account Passwort.", zSchrift->getThis(), hauptScreen );
	fenster->addMember( passwort );
	neuPasswort = initTextFeld( 20, 80, 208, 20, zSchrift, TextFeld::Style::TextFeld, "neues Passwort" );
	neuPasswort->setTastaturEreignisParameter( this );
	neuPasswort->setTastaturEreignis( passwortÄndernNeuPasswortTE );
	initToolTip( neuPasswort, "Neues Account Passwort.", zSchrift->getThis(), hauptScreen );
	fenster->addMember( neuPasswort );
	neuPasswort2 = initTextFeld( 20, 110, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort wiederholen" );
	neuPasswort2->setTastaturEreignisParameter( this );
	neuPasswort2->setTastaturEreignis( passwortÄndernNeuPasswort2TE );
	initToolTip( neuPasswort2, "Neues Passwort Wiederhohlen.", zSchrift->getThis(), hauptScreen );
	fenster->addMember( neuPasswort2 );
	geheimnis = initTextFeld( 20, 140, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Geheimis" );
	geheimnis->setTastaturEreignisParameter( this );
	geheimnis->setTastaturEreignis( passwortÄndernGeheimnisTE );
	initToolTip( geheimnis, "Account Geheimnis.", zSchrift->getThis(), hauptScreen );
	fenster->addMember( geheimnis );
	weiter = initKnopf( 74, 170, 100, 20, zSchrift, Knopf::Style::Sichtbar, "weiter" );
	weiter->setMausEreignisParameter( this );
	weiter->setMausEreignis( passwortÄndernWeiterME );
	nachricht = initTextFeld( 0, 5, 255, 150, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
	fenster->addMember( nachricht );
	fenster->addMember( weiter );
	zVorLoginFenster->addMember( fenster );
	ref = 1;
}

// Destruktor
PasswortÄndern::~PasswortÄndern()
{
	if( passwortÄndern )
		passwortÄndern = passwortÄndern->release();
	if( fenster )
		fenster = fenster->release();
	if( name )
		name = name->release();
	if( passwort )
		passwort = passwort->release();
	if( neuPasswort )
		neuPasswort = neuPasswort->release();
	if( neuPasswort2 )
		neuPasswort2 = neuPasswort2->release();
	if( geheimnis )
		geheimnis = geheimnis->release();
	if( weiter )
		weiter = weiter->release();
	if( nachricht )
		nachricht = nachricht->release();
}

// Privat
void PasswortÄndern::zeigeNachricht( const char *txt )
{
	Punkt bildschirmmitte = Bildschirmmitte();
	name->löscheStyle( TextFeld::Style::Sichtbar );
	passwort->löscheStyle( TextFeld::Style::Sichtbar );
	neuPasswort->löscheStyle( TextFeld::Style::Sichtbar );
	neuPasswort2->löscheStyle( TextFeld::Style::Sichtbar );
	geheimnis->löscheStyle( TextFeld::Style::Sichtbar );
	fenster->setGröße( 250, 150 );
	fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 75 );
	weiter->setPosition( 139, 100 );
	weiter->setText( "Ok" );
	nachricht->setText( txt );
	if( nachricht->zText()->getLänge() > 30 )
	{
		int pos = -1;
		bool set = 0;
		int lastp = 0;
		for( int i = 20; i < nachricht->zText()->getLänge(); )
		{
			char *tmp = &nachricht->zText()->getText()[ i ];
			while( *tmp != ' ' && i < nachricht->zText()->getLänge() )
			{
				tmp++;
				i++;
				if( i - 30 >= lastp )
				{
					if( set )
					{
						lastp = pos;
						set = 0;
						nachricht->zText()->getText()[ pos ] = '\n';
					}
					else
						lastp += 5;
				}
			}
			if( i < nachricht->zText()->getLänge() )
			{
				pos = i;
				set = 1;
				tmp++;
				i++;
			}
		}
	}
	nachricht->addStyle( TextFeld::Style::Sichtbar );
}

// Knopfdruck
void PasswortÄndern::druckFremdKnopf() // Ein anderer Knopf wurde gedrückt
{
	fenster->löscheStyle( Fenster::Style::Sichtbar );
	registerKlient->trenne();
	passwortÄndern->setLinienRahmenBreite( 2 );
	passwortÄndern->setAlphaFeldFarbe( 0x5500FF00 );
	passwortÄndern->setAlphaFeldStärke( -5 );
}

bool PasswortÄndern::passwortÄndernME( void *obj, MausEreignis me ) // MausEreignis im Knopf passwortVergessen
{
	if( me.id == ME_RLinks )
	{
		vorLogin->setPasswortÄndern();

		passwortÄndern->setLinienRahmenBreite( 3 );
		passwortÄndern->setAlphaFeldFarbe( 0xFF000000 );
		passwortÄndern->setAlphaFeldStärke( 20 );
		Punkt bildschirmmitte = Bildschirmmitte();
		fenster->setGröße( 255, 230 );
		fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 115 );
		fenster->addStyle( Fenster::Style::Sichtbar );
		nachricht->löscheStyle( TextFeld::Style::Sichtbar );
		weiter->setText( "weiter" );
		weiter->setPosition( 75, 170 );
		name->addStyle( TextFeld::Style::Sichtbar );
		passwort->addStyle( TextFeld::Style::Sichtbar );
		neuPasswort->addStyle( TextFeld::Style::Sichtbar );
		neuPasswort2->addStyle( TextFeld::Style::Sichtbar );
		geheimnis->addStyle( TextFeld::Style::Sichtbar );
		name->addStyle( TextFeld::Style::Fokus );
		name->setAuswahl( name->zText()->getLänge(), 0 );
	}
	return 1;
}

bool PasswortÄndern::nameTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld name
{
	if( te.id == TE_Press && te.taste == T_Enter )
		return 0;
	if( te.id == TE_Release && ( te.taste == T_Enter || te.taste == T_Tab ) )
	{
		name->löscheStyle( TextFeld::Style::Fokus );
		passwort->addStyle( TextFeld::Style::Fokus );
		passwort->setAuswahl( passwort->zText()->getLänge(), 0 );
	}
	if( name->zText()->getLänge() >= 25 && istSchreibbar( te.taste ) )
		return 0;
	return 1;
}

bool PasswortÄndern::passwortTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld passwort
{
	if( te.id == TE_Press && te.taste == T_Enter )
		return 0;
	if( te.id == TE_Press )
		passwort->setSchowChar( '*' );
	if( te.id == TE_Release && ( te.taste == T_Enter || te.taste == T_Tab ) )
	{
		passwort->löscheStyle( TextFeld::Style::Fokus );
		neuPasswort->addStyle( TextFeld::Style::Fokus );
		neuPasswort->setAuswahl( neuPasswort->zText()->getLänge(), 0 );
	}
	if( passwort->zText()->getLänge() >= 25 && istSchreibbar( te.taste ) )
		return 0;
	return 1;
}

bool PasswortÄndern::neuPasswortTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld neuPasswort
{
	if( te.id == TE_Press && te.taste == T_Enter )
		return 0;
	if( te.id == TE_Press )
		neuPasswort->setSchowChar( '*' );
	if( te.id == TE_Release && ( te.taste == T_Enter || te.taste == T_Tab ) )
	{
		neuPasswort->löscheStyle( TextFeld::Style::Fokus );
		neuPasswort2->addStyle( TextFeld::Style::Fokus );
		neuPasswort2->setAuswahl( neuPasswort2->zText()->getLänge(), 0 );
	}
	if( neuPasswort->zText()->getLänge() >= 25 && istSchreibbar( te.taste ) )
		return 0;
	return 1;
}

bool PasswortÄndern::neuPasswort2TE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld neuPasswort2
{
	if( te.id == TE_Press && te.taste == T_Enter )
		return 0;
	if( te.id == TE_Press )
		neuPasswort2->setSchowChar( '*' );
	if( te.id == TE_Release && ( te.taste == T_Enter || te.taste == T_Tab ) )
	{
		neuPasswort2->löscheStyle( TextFeld::Style::Fokus );
		geheimnis->addStyle( TextFeld::Style::Fokus );
		geheimnis->setAuswahl( geheimnis->zText()->getLänge(), 0 );
	}
	if( neuPasswort2->zText()->getLänge() >= 25 && istSchreibbar( te.taste ) )
		return 0;
	return 1;
}

bool PasswortÄndern::geheimnisTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld geheimnis
{
	if( te.id == TE_Press && te.taste == T_Enter )
		return 0;
	if( te.id == TE_Press )
		geheimnis->setSchowChar( '*' );
	if( te.id == TE_Release && te.taste == T_Enter )
	{
		geheimnis->löscheStyle( TextFeld::Style::Fokus );
		MausEreignis me;
		me.id = ME_RLinks;
		weiterME( 0, me );
	}
	if( geheimnis->zText()->getLänge() >= 50 && istSchreibbar( te.taste ) )
		return 0;
	return 1;
}

bool PasswortÄndern::weiterME( void *obj, MausEreignis me ) // MausEreignis im Knopf weiter
{
	if( me.id == ME_RLinks )
	{
		if( weiter->zText()->istGleich( "weiter" ) )
		{
			if( name->zText()->getLänge() == 0 )
				zeigeNachricht( "Bitte gebe deinen Accountnamen ein." );
			if( passwort->zText()->getLänge() == 0 )
				zeigeNachricht( "Bitte gebe dein Accountpasswort ein." );
			if( neuPasswort->zText()->getLänge() == 0 )
				zeigeNachricht( "Bitte gebe ein neues Passwort ein." );
			if( geheimnis->zText()->getLänge() == 0 )
				zeigeNachricht( "Bitte gebe dein Accountgeheimnis ein." );
			if( !neuPasswort2->zText()->istGleich( neuPasswort->zText()->getText() ) )
				zeigeNachricht( "Das wiederhohlte Passwort stimmt nicht mit dem neuen Passwort überein." );
			if( weiter->zText()->istGleich( "Ok" ) )
				return 1;
			new AktionsThread( 13, name->zText()->getText(), passwort->zText()->getText(), geheimnis->zText()->getText(), neuPasswort->zText()->getText(), 0 );
		}
		else
		{
			Punkt bildschirmmitte = Bildschirmmitte();
			fenster->setGröße( 255, 230 );
			fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 115 );
			fenster->addStyle( Fenster::Style::Sichtbar );
			nachricht->löscheStyle( TextFeld::Style::Sichtbar );
			weiter->setText( "weiter" );
			weiter->setPosition( 75, 170 );
			name->addStyle( TextFeld::Style::Sichtbar );
			passwort->addStyle( TextFeld::Style::Sichtbar );
			neuPasswort->addStyle( TextFeld::Style::Sichtbar );
			neuPasswort2->addStyle( TextFeld::Style::Sichtbar );
			geheimnis->addStyle( TextFeld::Style::Sichtbar );
			name->addStyle( TextFeld::Style::Fokus );
			name->setAuswahl( name->zText()->getLänge(), 0 );
		}
	}
	return 1;
}

void PasswortÄndern::setResult( bool ret ) // Setzt den Returnwert
{
	if( ret )
		zeigeNachricht( "Passwort erfolgreich geändert." );
	else if( registerKlient->getLetzterFehler() )
		zeigeNachricht( registerKlient->getLetzterFehler() );
	else
		zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
}

// Reference Counting
PasswortÄndern *PasswortÄndern::getThis()
{
	ref++;
	return this;
}

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


// Inhalt der PasswortVergessen Klasse aus Passwort.h
// Konstruktor
PasswortVergessen::PasswortVergessen( Schrift *zSchrift, Fenster *zVorLoginFenster )
{
	Punkt bildschirmmitte = Bildschirmmitte();
	passwortVergessen = initKnopf( 10, 330, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Passwort vergessen" );
	passwortVergessen->setMausEreignisParameter( this );
	passwortVergessen->setMausEreignis( passwortVergessenPasswortVergessenME );
	initToolTip( passwortVergessen, "Account Passwort per E-Mail senden.", zSchrift->getThis(), hauptScreen );
	zVorLoginFenster->addMember( passwortVergessen );
	fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 70, 250, 140, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Passwort vergessen" );
	name = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
	name->setTastaturEreignisParameter( this );
	name->setTastaturEreignis( passwortVergessenNameTE );
	initToolTip( name, "Account Name.", zSchrift->getThis(), hauptScreen );
	fenster->addMember( name );
	geheimnis = initTextFeld( 20, 50, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Geheimis" );
	geheimnis->setTastaturEreignisParameter( this );
	geheimnis->setTastaturEreignis( passwortVergessenGeheimnisTE );
	initToolTip( geheimnis, "Account geheimnis.", zSchrift->getThis(), hauptScreen );
	fenster->addMember( geheimnis );
	weiter = initKnopf( 74, 80, 100, 20, zSchrift, Knopf::Style::Sichtbar, "weiter" );
	weiter->setMausEreignisParameter( this );
	weiter->setMausEreignis( passwortVergessenWeiterME );
	nachricht = initTextFeld( 0, 5, 255, 150, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
	fenster->addMember( nachricht );
	fenster->addMember( weiter );
	zVorLoginFenster->addMember( fenster );
	ref = 1;
}

// Destruktor
PasswortVergessen::~PasswortVergessen()
{
	if( passwortVergessen )
		passwortVergessen = passwortVergessen->release();
	if( fenster )
		fenster = fenster->release();
	if( name )
		name = name->release();
	if( geheimnis )
		geheimnis = geheimnis->release();
	if( weiter )
		weiter = weiter->release();
	if( nachricht )
		nachricht = nachricht->release();
}

// Privat
void PasswortVergessen::zeigeNachricht( const char *txt )
{
	Punkt bildschirmmitte = Bildschirmmitte();
	name->löscheStyle( TextFeld::Style::Sichtbar );
	geheimnis->löscheStyle( TextFeld::Style::Sichtbar );
	fenster->setGröße( 250, 150 );
	fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 75 );
	weiter->setPosition( 139, 100 );
	weiter->setText( "Ok" );
	nachricht->setText( txt );
	if( nachricht->zText()->getLänge() > 30 )
	{
		int pos = -1;
		bool set = 0;
		int lastp = 0;
		for( int i = 20; i < nachricht->zText()->getLänge(); )
		{
			char *tmp = &nachricht->zText()->getText()[ i ];
			while( *tmp != ' ' && i < nachricht->zText()->getLänge() )
			{
				tmp++;
				i++;
				if( i - 30 >= lastp )
				{
					if( set )
					{
						lastp = pos;
						set = 0;
						nachricht->zText()->getText()[ pos ] = '\n';
					}
					else
						lastp += 5;
				}
			}
			if( i < nachricht->zText()->getLänge() )
			{
				pos = i;
				set = 1;
				tmp++;
				i++;
			}
		}
	}
	nachricht->addStyle( TextFeld::Style::Sichtbar );
}

// Knopfdruck
void PasswortVergessen::druckFremdKnopf() // Ein anderer Knopf wurde gedrückt
{
	fenster->löscheStyle( Fenster::Style::Sichtbar );
	registerKlient->trenne();
	passwortVergessen->setLinienRahmenBreite( 2 );
	passwortVergessen->setAlphaFeldFarbe( 0x5500FF00 );
	passwortVergessen->setAlphaFeldStärke( -5 );
}

bool PasswortVergessen::passwortVergessenME( void *obj, MausEreignis me ) // MausEreignis im Knopf passwortVergessen
{
	if( me.id == ME_RLinks )
	{
		vorLogin->setPasswortVergessen();

		passwortVergessen->setLinienRahmenBreite( 3 );
		passwortVergessen->setAlphaFeldFarbe( 0xFF000000 );
		passwortVergessen->setAlphaFeldStärke( 20 );
		Punkt bildschirmmitte = Bildschirmmitte();
		fenster->setGröße( 255, 140 );
		fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
		fenster->addStyle( Fenster::Style::Sichtbar );
		nachricht->löscheStyle( TextFeld::Style::Sichtbar );
		weiter->setText( "weiter" );
		weiter->setPosition( 75, 80 );
		name->addStyle( TextFeld::Style::Sichtbar );
		geheimnis->addStyle( TextFeld::Style::Sichtbar );
		name->addStyle( TextFeld::Style::Fokus );
		name->setAuswahl( name->zText()->getLänge(), 0 );
	}
	return 1;
}

bool PasswortVergessen::nameTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld name
{
	if( te.id == TE_Press && te.taste == T_Enter )
		return 0;
	if( te.id == TE_Release && ( te.taste == T_Enter || te.taste == T_Tab ) )
	{
		name->löscheStyle( TextFeld::Style::Fokus );
		geheimnis->addStyle( TextFeld::Style::Fokus );
		geheimnis->setAuswahl( geheimnis->zText()->getLänge(), 0 );
	}
	if( name->zText()->getLänge() >= 25 && istSchreibbar( te.taste ) )
		return 0;
	return 1;
}

bool PasswortVergessen::geheimnisTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld geheimnis
{
	if( te.id == TE_Press && te.taste == T_Enter )
		return 0;
	if( te.id == TE_Press )
		geheimnis->setSchowChar( '*' );
	if( te.id == TE_Release && te.taste == T_Enter )
	{
		geheimnis->löscheStyle( TextFeld::Style::Fokus );
		MausEreignis me;
		me.id = ME_RLinks;
		weiterME( 0, me );
	}
	if( geheimnis->zText()->getLänge() >= 50 && istSchreibbar( te.taste ) )
		return 0;
	return 1;
}

bool PasswortVergessen::weiterME( void *obj, MausEreignis me ) // MausEreignis im Knopf weiter
{
	if( me.id == ME_RLinks )
	{
		if( weiter->zText()->istGleich( "weiter" ) )
		{
			if( name->zText()->getLänge() == 0 )
				zeigeNachricht( "Bitte gebe deinen Accountnamen ein." );
			if( geheimnis->zText()->getLänge() == 0 )
				zeigeNachricht( "Bitte gebe dein Accountgeheimnis ein." );
			if( weiter->zText()->istGleich( "Ok" ) )
				return 1;
			new AktionsThread( 14, name->zText()->getText(), geheimnis->zText()->getText(), 0, 0, 0 );
		}
		else
		{
			Punkt bildschirmmitte = Bildschirmmitte();
			fenster->setGröße( 255, 140 );
			fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
			fenster->addStyle( Fenster::Style::Sichtbar );
			nachricht->löscheStyle( TextFeld::Style::Sichtbar );
			weiter->setText( "weiter" );
			weiter->setPosition( 75, 80 );
			name->addStyle( TextFeld::Style::Sichtbar );
			geheimnis->addStyle( TextFeld::Style::Sichtbar );
			name->addStyle( TextFeld::Style::Fokus );
			name->setAuswahl( name->zText()->getLänge(), 0 );
		}
	}
	return 1;
}

void PasswortVergessen::setResult( bool ret ) // Setzt den Returnwert
{
	if( ret )
		zeigeNachricht( "Dir wurde eine E-Mail mit deinem Accountpasswort gesendet." );
	else if( registerKlient->getLetzterFehler() )
		zeigeNachricht( registerKlient->getLetzterFehler() );
	else
		zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
}

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

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

// messages
bool passwortÄndernPasswortÄndernME( void *p, void *obj, MausEreignis me )
{
	if( !p )
		return 0;
	return ( (PasswortÄndern*)p )->passwortÄndernME( obj, me );
}

bool passwortÄndernNameTE( void *p, void *obj, TastaturEreignis te )
{
	if( !p )
		return 0;
	return ( (PasswortÄndern*)p )->nameTE( obj, te );
}

bool passwortÄndernPasswortTE( void *p, void *obj, TastaturEreignis te )
{
	if( !p )
		return 0;
	return ( (PasswortÄndern*)p )->passwortTE( obj, te );
}

bool passwortÄndernNeuPasswortTE( void *p, void *obj, TastaturEreignis te )
{
	if( !p )
		return 0;
	return ( (PasswortÄndern*)p )->neuPasswortTE( obj, te );
}

bool passwortÄndernNeuPasswort2TE( void *p, void *obj, TastaturEreignis te )
{
	if( !p )
		return 0;
	return ( (PasswortÄndern*)p )->neuPasswort2TE( obj, te );
}

bool passwortÄndernGeheimnisTE( void *p, void *obj, TastaturEreignis te )
{
	if( !p )
		return 0;
	return ( (PasswortÄndern*)p )->geheimnisTE( obj, te );
}

bool passwortÄndernWeiterME( void *p, void *obj, MausEreignis me )
{
	if( !p )
		return 0;
	return ( (PasswortÄndern*)p )->weiterME( obj, me );
}


bool passwortVergessenPasswortVergessenME( void *p, void *obj, MausEreignis me )
{
	if( !p )
		return 0;
	return ( (PasswortVergessen*)p )->passwortVergessenME( obj, me );
}

bool passwortVergessenNameTE( void *p, void *obj, TastaturEreignis te )
{
	if( !p )
		return 0;
	return ( (PasswortVergessen*)p )->nameTE( obj, te );
}

bool passwortVergessenGeheimnisTE( void *p, void *obj, TastaturEreignis te )
{
	if( !p )
		return 0;
	return ( (PasswortVergessen*)p )->geheimnisTE( obj, te );
}

bool passwortVergessenWeiterME( void *p, void *obj, MausEreignis me )
{
	if( !p )
		return 0;
	return ( (PasswortVergessen*)p )->weiterME( obj, me );
}