package pdat;

use template;
use kasse;

@ISA = qw ( template );

####################################################################
####         Konstruktor der Teilnehmerklasse
####         Argumente  : -
####         Returnwert : -
####################################################################
sub init {
	my $that = shift;
	my $class = ref($that) || $that;
	my $self = template->init(@_);
	bless $self, $class;	
	$self->{pass}     = "";
	$self->{pass1}     = "";
	$self->{template} = 1;
	$self->{anrede}=1;
	$self->{vname}= "";
    $self->{nname}= "";
	$self->{strasse}= "";
    $self->{stadt}= "";
	$self->{plz} = 0;
    $self->{land}= 1;
    $self->{email}= "";
    $self->{tel}= "";
	$self->{tel2}= "";
    $self->{gdat}= "";
	$self->{geb} =0;
    $self->{bildung}= 0;
	$self->{famstand}= 0;
	$self->{arbeit}= 0;
	$self->{pers3} = 0;
	$self->{pers12}= 0;
	$self->{pers22}= 0;
	$self->{pers54}= 0;
	$self->{pers55}= 0;
	$self->{lohnart}= 0;
	$self->{bank}= "";
	$self->{blz}= "";
	$self->{kontonr}= "";
	$self->{provider}=0;
	$self->{bsystem} = 0;
	$self->{knr} = 1;
	$self->{herkunft}= 0;
	$self->{bestjahr}= 0;
	$self->{changed} = 0;
	#foreach $x (1..50) {$self->{pk}[$x]=0;}
	$self->{krit} = [];
	#$self->loadtmp;
	return $self;
}

####################################################################
####         Teilnehmerdaten fom Formular
####         Argumente  : -
####         Returnwert : -
####################################################################
sub getvars {

	my $self = shift;
    $self->log(4,"Entering: pdat:getvars");
	$self->{pass} = $self->fclean($baseq::VARS{pass});
	$self->{pass1} = $self->fclean($baseq::VARS{pass1});
	$self->{anrede}= $baseq::VARS{anrede}+0;
	$self->{vname}= $self->fclean($baseq::VARS{vname});
    $self->{nname}= $self->fclean($baseq::VARS{nname});
	$self->{strasse}= $self->fclean($baseq::VARS{strasse});
    $self->{stadt}= $self->fclean($baseq::VARS{stadt});
	$self->{plz} = $baseq::VARS{plz}+0;
    $self->{land}= $baseq::VARS{land}+0;
    $self->{email}= $self->fclean($baseq::VARS{email});
    $self->{tel}= $self->fclean($baseq::VARS{tel});
	$self->{tel2}= $self->fclean($baseq::VARS{tel2});
    $self->{gdat}=($baseq::VARS{jahr}+0)."-".($baseq::VARS{monat}+0)."-".($baseq::VARS{tag}+0);
    $self->{bildung}= $baseq::VARS{bildung}+0;
	$self->{famstand}= $baseq::VARS{famstand}+0;
	$self->{arbeit}= $baseq::VARS{arbeit}+0;
	$self->{pers3} = $baseq::VARS{pers3}+0;
	$self->{pers12}= $baseq::VARS{pers12}+0;
	$self->{pers22}= $baseq::VARS{pers22}+0;
	$self->{pers54}= $baseq::VARS{pers54}+0;
	$self->{pers55}= $baseq::VARS{pers55}+0;
	$self->{lohnart}= $baseq::VARS{lohnart}+0;
	$self->{bank}= $self->fclean($baseq::VARS{bank});
	$self->{blz}= $self->fclean($baseq::VARS{blz});
	$self->{kontonr}= $self->fclean($baseq::VARS{kontonr});
	$self->{provider}= $baseq::VARS{provider}+0;
	$self->{bsystem} = $baseq::VARS{bsystem}+0;
	$self->{herkunft}= $baseq::VARS{herkunft}+0;
	$self->{bestjahr}= $baseq::VARS{bestjahr}+0;
	foreach $typ (1..3) {
		foreach $nr (0..24) {
			my $kri="krit$typ-$nr";
			$self->{krit}[$typ][$nr] = $baseq::VARS{$kri};
			$self->log(5,"KRIT=$kri -> '".$baseq::VARS{$kri}."'");
		}
	}

	return $self;
}


####################################################################
####         Schreibt ins Logfile
####         Argumente  : Emergency und Logtext
####         Returnwert : -
####################################################################
sub log {
	my $self = shift;
    my $emer = shift;
	my $TEXT = shift;
	$self->printlog($emer, "[Teilnehmer] $TEXT");
}

####################################################################
####         Datenbanklader der Online - Panelisten
####         Argumente  : pin, pass
####         Returnwert : -
####################################################################
sub load {
	my $self = shift;	
	$self->log(4,"Entering: pdat:load");
	# Teilnehmer aus der Datenbank laden
	my $sql = "select anrede, vname, nname,  strasse, stadt, plz, land, email, ".
		"tel, gdat, bildung, famstand, arbeit, pers3, pers12, pers22, pers54, pers55, pass, ".
		"lohnart, bank, blz, kontonr, provider, herkunft, bestjahr, tel2, bsystem from benutzer where pin=$self->{id}";

	($self->{anrede}, $self->{vname}, $self->{nname}, $self->{strasse},
	 $self->{stadt}, $self->{plz}, $self->{land}, $self->{email}, $self->{tel},
	 $self->{gdat}, $self->{bildung}, $self->{famstand}, $self->{arbeit},
	 $self->{pers3}, $self->{pers12}, $self->{pers22}, $self->{pers54}, $self->{pers55},$self->{pass},  
	 $self->{lohnart}, $self->{bank}, $self->{blz}, $self->{kontonr}, $self->{provider},
	 $self->{herkunft},$self->{bestjahr}, $self->{tel2}, $self->{bsystem}) = $self->sqlselect($sql);

	if (! defined $self->{id}) {$self->log(2,"Teilnehmer ist nicht vorhanden");return;}
	$sql="select typ,nummer from kriterien where pin = $self->{id}";
	my $sth=$self->sqlprepare($sql);
	while (($typ,$nr)=$sth->fetchrow_array) {
		$self->{krit}[$typ][$nr]=1;
	}
	$self->loadtmp;
	return $self;

}
####################################################################
####         Ermittelt eine neue pin und speichert sich
####         Argumente  : -
####        !! Returnwert : -
####################################################################
sub new {
	my $self = shift;
	$self->log(4,"Entering: pdat:new");
	my $sql = "select max(pin) from benutzer";
	($self->{id}) = ($self->sqlselect($sql))+1;
     my $sql2 = "insert into benutzer values ($self->{anrede}, '$self->{vname}', '$self->{nname}', '$self->{strasse}',".
	 "'$self->{stadt}', $self->{plz}, $self->{land}, '$self->{email}', '$self->{tel}', ".
	 "$self->{gdat}, $self->{bildung}, $self->{famstand}, $self->{arbeit}, ".
	 "$self->{pers3}, $self->{pers12}, $self->{pers22}, $self->{pers54}, $self->{pers55}, '$self->{pass}', ". 
	 "$self->{id}, $self->{lohnart}, '$self->{bank}', '$self->{blz}', '$self->{kontonr}', $self->{provider}, ".
	 "$self->{herkunft}, $self->{bestjahr}, $self->{geb}, NULL, '$self->{tel2}', $self->{bsystem}, $self->{knr})";
	$self->sqldo($sql2);
	foreach $typ (1..3) {
		foreach $nr (0..24) {
		  if ($self->{krit}[$typ][$nr]) {
			$sql="insert into kriterien values ($typ, $self->{id}, $nr)";
			$self->sqldo($sql);
		  }
		}	
	}
}
####################################################################
####         liest die Angaben ein
####         Argumente  : -
####      !!   Returnwert : -
####################################################################
sub enterang {
	my $self = shift;
	my $f;
       $self->log(4,"Entering: pdat:enterang");
	my @RE=("",$self->trans("WA23"),$self->trans("WA24"),$self->trans("WA25"),$self->trans("WA26"),$self->trans("WA27"),
			$self->trans("WA28"),$self->trans("WA29"),$self->trans("WA30"),$self->trans("WA31"),$self->trans("WA32"),
			$self->trans("WA33"),$self->trans("WA34"),$self->trans("WA35"),$self->trans("WA36"));
	
}
####################################################################
####         Speichert sich mit Update
####         Argumente  : -
####         Returnwert : -
####################################################################
sub store {
	my $self = shift;
	$self->log(4,"Entering: pdat:store");
	my $sql = "update benutzer set ($self->{anrede}, $self->{vname}, $self->{nname}, $self->{strasse},".
	 "$self->{stadt}, $self->{plz}, $self->{land}, $self->{email}, $self->{tel}, ".
	 "$self->{gdat}, $self->{bildung}, $self->{famstand}, $self->{arbeit}, ".
	 "$self->{pers3}, $self->{pers12}, $self->{pers22}, $self->{pers54}, $self->{pers55}, $self->{pass}, ". 
	 "$self->{id}, $self->{lohnart}, $self->{bank}, $self->{blz}, $self->{kontonr}, $self->{provider}, ".
	 "$self->{herkunft}, $self->{bestjahr}, $self->{geb}, $self->{tel2}, $self->{bsystem}, $self->{knr}), where pin=$self->{pin}";
	$self->sqldo($sql);
	$sql="delete from kriterien where pin= $self->{id}";
	$self->sqldo($sql);
	foreach $typ (1..3) {
		foreach $num (0..24) {
		if ($self->{krit}[$typ][$num]) {
			$sql="insert into kriterien values ($typ, $self->{id}, $num)";
			$self->sqldo($sql);
		}
		}	
	}

}

####################################################################
####         macht den Teilnehmer zum "Zombi"
####         Argumente  : 
####         Returnwert : 
####################################################################
sub delete {
	my $self = shift;
	$self->log(4,"Entering: pdat:delete");
	my $sql  = "update benutzer set vname='' and nname='' and pass='geloscht' where pin=$self->{id}";
	$self->sqldo($sql);
	#$self->{pin} = undef;
}

####################################################################
####		Versuchen wir mal alles zusammen zu checken
####         Argumente  : -
####         Returnwert : 0=OK, 1=nicht OK -WA23
####################################################################
sub checkalles {
      my $self = shift;
      $self->log(4,"Entering: pdat:checkalles");
	  my $TITLE="Überprüfen Sie bitte Ihre Angaben";
	  $self->{buttonwidth}=21;
	  my @WARNHTML="";

	 #Pflichtfelder

	  if (	$self->{vname} eq "" ||
			$self->{nname} eq "" ||
			$self->{strasse} eq "" ||
			$self->{plz} eq "" ||
			$self->{land} eq "" ||
			$self->{email} eq "" ||
			$self->{tel} eq ""
			#||
			#$self->{gdatum} eq "" ||
			#$self->{gjahr} eq "" 
			)
		{push @WARNHTML,$self->trans("WA23"); $self->log(4,$self->trans("WA23")); }

	  if ($self->{email} !~/.+@.+\.([a-z|A-Z]){2,3}$/) 	#Email-Adresse
		{push @WARNHTML,$self->trans("WA24"); #$self->log(4,$self->trans("WA24"));
		$self->log(4,@WARNHTML); }

	  if ($self->{plz} !~/^\d{4,5}$/)		#PLZ
	    {push @WARNHTML,$self->trans("WA25"); $self->log(4,$self->trans("WA25")); }


	#Ort######################################################################
	
	  if ( $self->{plz}!=0 && $self->{stadt} eq ""){
		my $sql = "select ort from plz where plz=$self->{plz} and land='$baseq::LK[$self->{land}]'";
		$self->{stadt} = $self->sqlselect($sql);
		if($self->{stadt} eq "")
		 {push @WARNHTML,$self->trans("WA26"); $self->log(4,$self->trans("WA26"));  }
	  }

	###########################################################################

	#Telefonnr 1 korrekt?
	$self->{tel}=~s/\D//g;   #Löscht alle nicht digits aus der Telefonnummer
	  if ($self->{tel} !~/0\d{5,}/) 
		{push @WARNHTML,$self->trans("WA27"); $self->log(4,$self->trans("WA27"));  }
    	  
	#Telefonnr 2 korrekt? 
    if($self{tel2} ne ""){
		$self{tel2}=~s/\D//g;
		if ($self{tel2} !~/0\d{5,}/) {push @WARNHTML,$self->trans("WA36"); $self->log(4,$self->trans("WA36"));  }
    }
	###########################################################################
	#Überweisung oder Scheck?
	  if (($self->{lohnart} ==1 ) && (($self->{bank} eq "") || ($self->{blz} eq "") || ($self->{kontonr} eq "")))
		{push @WARNHTML,$self->trans("WA29"); $self->log(4,$self->trans("WA29"));  }	 
	  if ($self->{blz} ne "") {
		  $self->{blz}=~s/\D//g;				
		  if ($self->{blz} !~/^\d{8,15}$/) #testet auf 8-15 stellige Zahl
		{push @WARNHTML,$self->trans("WA30"); $self->log(4,$self->trans("WA30"));  }	  
	  }	
	  
   #Überweisung &&  ist  kontonr  OK?
	  if ($self->{kontonr} ne "") {
		  $self->{kontonr}=~s/\D//g;
		  if ($self->{kontonr} !~/^\d{4,15}$/) #testet auf 8-15 stellige Zahl
		{push @WARNHTML,$self->trans("WA31"); $self->log(4,$self->trans("WA31"));  }
	  }

	##############################################################################
	#Jahr der letzten Bestellung
	  if ($self->{bestjahr} !=0 ) {
			$self->{bestjahr}=~s/\D//g;
			if (($self->{bestjahr} !~/^\d{2,4}$/) || ($self->{bestjahr} < 1950))
		{push @WARNHTML,$self->trans("WA29"); $self->log(4,$self->trans("WA29")); } 			    
	  }

	###########################################################################################
	#Passwort 1 und Passwort 2

	if ($self->{pin}==0) {
		
	  if ($self->{pass} !~/^\S{5,8}$/) 
		{push @WARNHTML,$self->trans("WA35"); $self->log(4,$self->trans("WA35")); } 
		
	 
	  if (($self->{pass} ne $self->{pass1}) || ($self->{pass1} eq "")) 
		{push @WARNHTML,$self->trans("WA34"); $self->log(4,$self->trans("WA34")); } 	
	}

	########################################################################
	#Existierende Benutzer????????????????
	  
	  if($self->{pin} == 0){
		 my $sql = "select * from benutzer where vname='$self->{vname}' and nname='$self->{nname}' and email='$self{email}'";
		 if (defined($row = $self->sqlselect($sql)))
				{push @WARNHTML,$self->trans("WA28"); #$self->log(4,$self->trans("WA28")); }
				$self->log(4,"WARNHTML:".@WARNHTML); }
	}

	########################################################################
	
	if(@WARNHTML > 0){
		$warn= join("<BR>",@WARNHTML);
	}

	return $warn;
}


####################################################################
####         Geburtsdatum in ein Feld schreiben
####         Argumente  : -
####         Returnwert : 0=alles OK, 1= nicht OK -WA29
####					  geb= Geburtsjahr
####		 
####################################################################
sub checkgdat {
      my $self = shift;
      $self->log(4,"Entering: pdat:checkgdat");
	  my $ret=0;
	  $val{gdatum}=~s/\D//g;   #Löscht alle nicht digits aus dem Tag
	  $val{gjahr}=~s/\D//g;    #Löscht alle nicht digits aus dem Jahr
	  if ((($val{gdatum}+0) > 31) || (($val{gjahr}+0) > 2100)) {$ret=1;}
	  if (($val{gdatum} eq "") || ($val{gjahr} eq "") || ($val{gmonat} eq ""))
		{$gdat="1800-01-01";
		 $geb="1800";
		 $ret=$geb;}
	  elsif (($val{gdatum} ne "") && ($val{gjahr} ne "") && ($val{gjahr} =~/^\d{2}$/))
		{$gdat="19$val{gjahr}-$mon{$val{gmonat}}-$val{gdatum}";
		 $geb="19$val{gjahr}";
		 $ret=$geb;}
	  elsif (($val{gdatum} ne "") && ($val{gjahr} ne "") && ($val{gjahr} =~/^\d{4}$/))
		{$gdat="$val{gjahr}-$mon{$val{gmonat}}-$val{gdatum}";
		 $geb="$val{gjahr}";
		 $ret=$geb;}
	  return $ret;
}

####################################################################
####         Geburtsdatum in ein Feld schreiben
####         Argumente  : - $gdat
####         Returnwert : - $gdat,$geb
####		 0=alles OK, 1= nicht OK -WA29
####					  geb= Geburtsjahr
####		 
####################################################################
sub makegdat {
      my $self = shift;
      $self->log(4,"Entering: pdat:checkgdat");
	  my $ret=0;
	  my ($geb, $gjahr, $gmonat, $gdatum) = (0,0,0,0);
	  

	  
	  #Aus der MySQL auslesen und zerlegen
	  
	  ($gjahr,$gmonat,$gdatum)=split /-/, $gdat;
		return $gdatum, $gmonat, $gjahr;	  
	  
	
	  $self->{gdatum}=~s/\D//g;   #Löscht alle nicht digits aus dem Tag
	  $self->{gjahr}=~s/\D//g;    #Löscht alle nicht digits aus dem Jahr
	  if ((($self->{gdatum}) > 31) || (($self->{gjahr}) > 2100)) {return $ret=1;}
	  if (($self->{gdatum} eq "") || ($self->{gjahr} eq "") || ($self->DDMonat('monat',$self->{monat}) eq ""))
		{$gdat="1800-01-01";
		 $geb=1800;
		 return $geb, $gdat;
		 }
	  elsif (($self->{gdatum} ne "") && ($self->{gjahr} ne "") && ($self->{gjahr} =~/^\d{2}$/))
		{$gdat=join("-","19".$gjahr,$gdmonat,$gdatum);
		 $geb="19".$self->{gjahr};
		 return $geb,$gdat;
		 }
	  elsif (($self->{gdatum} ne "") && ($self->{gjahr} ne "") && ($self->{gjahr} =~/^\d{4}$/))
		{$gdat=join("-",$self->{gjahr},$self->DDMonat('monat',$self->{monat}),$self{gdatum});
		 $geb=$self->{gjahr};
		 return $geb,$gdat;
	  }

}


####################################################################
####         Gibt eine Dropdown der Anreden zurueck
####         Argumente  : -
####         Returnwert : -
####################################################################
sub DDanrede {
	my ($self, $name, $val)=@_;
	my ($x, @L, %H);
	if ($name eq "") {$name="anrede";}
	if ($val eq "") {$val=$self->{anrede};}
	for ($x=1; $x<3; $x++) {push @L,$x; $H{$x}=$baseq::HF[$x];}
	return $self->DD($name,\@L,$val,\%H);
}
####################################################################
####         Gibt eine Dropdown der Länder zurueck
####         Argumente  : -
####         Returnwert : -
####################################################################
sub DDland {
	my ($self, $name, $val)=@_;
	my ($x, @L, %H);
	if ($name eq "") {$name="land";}
	if ($val eq "") {$val=$self->{land};}
	for ($x=1; $x<4; $x++) {push @L,$x; $H{$x}=$baseq::LA[$x];}
	return $self->DD($name,\@L,$val,\%H);
}
####################################################################
####         Gibt eine Dropdown der Provider zurueck
####         Argumente  : -
####         Returnwert : -
####################################################################
sub DDprovider {
	my ($self, $name, $val)=@_;
	my ($x, @L, %H);
	if ($name eq "") {$name="provider";}
	if ($val eq "") {$val=$self->{provider};}
	for ($x=1; $x<21; $x++) {push @L,$x; $H{$x}=$baseq::PR[$x];}
	return $self->DD($name,\@L,$val,\%H);
}
####################################################################
####         Gibt eine Dropdown Herkunft zurueck(v.wo kommen die Teilnehmer her?)
####         Argumente  : -
####         Returnwert : -
####################################################################
sub DDmonat{
	my ($self, $name, $val)=@_;
	my ($x, @L, %H);
	if ($name eq "") {$name="monat";}
	if ($val eq "") {$val=$self->{monat};}
	for ($x=1; $x<13; $x++) {push @L,$x; $H{$x}=$baseq::MO[$x];}
	return $self->DD($name,\@L,$val,\%H);
}
####################################################################
####         Gibt eine Dropdown der Provider zurueck
####         Argumente  : -
####         Returnwert : -
####################################################################
sub DDherkunft {
	my ($self, $name, $val)=@_;
	my ($x, @L, %H);
	if ($name eq "") {$name="herkunft";}
	if ($val eq "") {$val=$self->{herkunft};}
	for ($x=0; $x<9; $x++) {push @L,$x; $H{$x}=$baseq::HK[$x];}
	return $self->DD($name,\@L,$val,\%H);
}

####################################################################
####         Gibt eine Dropdown der Familienstaende zurueck
####         Argumente  : -
####         Returnwert : -
####################################################################
sub DDfamstand {
	my ($self, $name, $val)=@_;
	my ($x, @L, %H);
	if ($name eq "") {$name="famstand";}
	if ($val eq "") {$val=$self->{famstand};}
	for ($x=0; $x<3; $x++) {push @L,$x; $H{$x}=$baseq::FS[$x];}
	return $self->DD($name,\@L,$val,\%H);
}

####################################################################
####         Gibt eine Dropdown der Bildungen zurueck
####         Argumente  : -
####         Returnwert : -
####################################################################
sub DDbildung {
	my ($self, $name, $val)=@_;
	my ($x, @L, %H);
	if ($name eq "") {$name="bildung";}
	if ($val eq "") {$val=$self->{bildung};}
	for ($x=0; $x<8; $x++) {push @L,$x; $H{$x}=$baseq::BI[$x];}
	return $self->DD($name,\@L,$val,\%H);
}

####################################################################
####         Gibt eine Dropdown der Beschaeftigungen zurueck
####         Argumente  : -
####         Returnwert : -
####################################################################
sub DDarbeit {
	my ($self, $name, $val)=@_;
	my ($x, @L, %H);
	if ($name eq "") {$name="arbeit";}
	if ($val eq "") {$val=$self->{arbeit};}
	for ($x=0; $x<7; $x++) {push @L,$x; $H{$x}=$baseq::BS[$x];}
	return $self->DD($name,\@L,$val,\%H);
}

####################################################################
####         Gibt eine Dropdown der Lohnarten zurueck
####         Argumente  : -
####         Returnwert : -
####################################################################
sub DDlohn {
	my ($self, $name, $val)=@_;
	my ($x, @L, %H);
	if ($name eq "") {$name="lohnart";}
	if ($val eq "") {$val=$self->{lohnart};}
	for ($x=1; $x<4; $x++) {push @L,$x; $H{$x}=$baseq::LO[$x];}
	return $self->DD($name,\@L,$val,\%H);
}
####################################################################
####         Gibt eine Dropdown der Betriebsystemen zurueck
####         Argumente  : -
####         Returnwert : -
####################################################################
sub DDbsystem {
	my ($self, $name, $val)=@_;
	my ($x, @L, %H);
	if ($name eq "") {$name="bsystem";}
	if ($val eq "") {$val=$self->{bsystem};}
	for ($x=0; $x<12; $x++) {push @L,$x; $H{$x}=$baseq::BSYS[$x];}
	return $self->DD($name,\@L,$val,\%H);
}
####################################################################
####         Gibt eine Dropdown Herkunft zurueck(v.wo kommen die Teilnehmer her?)
####         Argumente  : -
####         Returnwert : -
####################################################################
sub DDherkunft{
	my ($self, $name, $val)=@_;
	my ($x, @L, %H);
	if ($name eq "") {$name="herkunft";}
	if ($val eq "") {$val=$self->{herkunft};}
	for ($x=0; $x<6; $x++) {push @L,$x; $H{$x}=$baseq::HK[$x];}
	return $self->DD($name,\@L,$val,\%H);
}
####################################################################
####         Gibt die Produktkategorien-Tabelle zurueck
####         Argumente  : -
####         Returnwert : Produktkategorien
####################################################################
sub krittable {
	my ($self )=@_;
	my $krit;
	my $ret="<TABLE BORDER=1>\n";
    my $xa=3; my @L=();
	for ($x=1; $x<25 ;$x++) {
         if ($baseq::KRIT[$x] eq "") {next}
         push @L, $self->sfont($self->CB("krit1-$x",1,$self->{krit}[1][$x]).$baseq::KRIT[$x]);
         $xa--; 
		 if ($xa==0) {$xa=3; $ret.=$self->TR(\@L); @L=();}
	}
	if ($L!=0) {$ret.=$self->TR(\@L); }
	return $ret."</TABLE>\n"; 
}

####################################################################
####         Gibt die Hobbys-Tabelle zurueck
####         Argumente  : -
####         Returnwert : Hobbys
####################################################################
sub hobtable {
	my ($self, $klicked)=@_;
	my $hob;
	my $ret="<TABLE BORDER=1>\n";
    my $xa=3; my @L=();
	for ($x=1; $x<25 ;$x++) {
         if ($baseq::HOB[$x] eq "") {next}
         push @L, $self->sfont($self->CB("krit2-$x",1,$self->{krit}[2][$x]).$baseq::HOB[$x]);
         $xa--; if ($xa==0) {$xa=3; $ret.=$self->TR(\@L); @L=()}
	}
	if ($L!=0) {$ret.=$self->TR(\@L); }
	return $ret."</TABLE>\n"; 
}
####################################################################
####         Gibt die Versandhaus-Tabelle zurueck
####         Argumente  : -
####         Returnwert : Versandhauser
####################################################################
sub vhtable {
	my ($self, $klicked)=@_;
	my $vh;
	my $ret="<TABLE BORDER=1>\n";
    my $xa=3; my @L=();
	for ($x=0; $x<20 ;$x++) {
         if ($baseq::VH[$x] eq "") {next}
         push @L, $self->sfont($self->CB("krit3-$x",1,$self->{krit}[3][$x]).$baseq::VH[$x]);
         $xa--; if ($xa==0) {$xa=3; $ret.=$self->TR(\@L); @L=()}
	}
	if ($L!=0) {$ret.=$self->TR(\@L); }
	return $ret."</TABLE>\n"; 
}

####################################################################
####         Gibt den Resetbutton zurueck
####         Argumente  : -
####         Returnwert : 
####################################################################
sub RB {
  my ($self, $name, $val, $width) = @_;
  my ($li,$re);
  my $value=$self->trans($val);
  if ($width<1) {$width=$self->{buttonwidth};}
  $self->log(4,"Entering: Baseq:RB N=$name V=$val");
  $width -= length($value);
  if ($width>0) {
     $li=$re=$width>>1;$re+=$width%2;
     $self->log(4,"Überbreite=$width, Links=$li, Rechts=$re");
     #$value=(" " x $li) .$value.( " " x $re); 
	 $value="Zurücksetzen";
  }
  return "<INPUT TYPE=\"reset\" NAME=\"$name\" VALUE=\"$value\" style=\"font-family: Fixedsys\">";
}

####################################################################
####         Gibt die Standardmaske aus
####         Argumente  : Emergency und Logtext
####         Returnwert : -
####################################################################
sub htmlbearb {
	my $self = shift;
	$self->{buttonwidth}=21;
	$self->log(4,"Entering: pdat:htmlbearb");
    my $TITLE=$self->trans("TI1");
	$self->log(4,$self->{warntext});
	$HTML="<TABLE width=100%>\n".
		$self->TR([ $self->sfont($self->trans("HI53").":").$self->sfont($self->{id}),"<P ALIGN='RIGHT'>".$self->SM("bbut","BU35")."</P>"    ]).
		"</TABLE>\n<BR><CENTER>".$self->sfont($self->trans("HI54"))."</CENTER>\n".

		"<HR><BR>\n<TABLE cellspacing=10>\n".
		$self->TR([ "***",$self->afont($self->trans("HI55")),$self->DDanrede('anrede',$self->{anrede}) ]).
        $self->TR([ "***",$self->afont($self->trans("HI56")),$self->TF("vname",$self->{vname},25,100)]).
		$self->TR([ "***",$self->afont($self->trans("HI57")),$self->TF("nname",$self->{nname},25,100)]).
		$self->TR([ "***",$self->afont($self->trans("HI58")),$self->TF("strasse",$self->{strasse},25,100)]).
		$self->TR([ "***",$self->afont($self->trans("HI59")),$self->TF("plz",$self->{plz},25,100)]).
		$self->TR([ "   ",$self->afont($self->trans("HI60")),$self->TF("stadt",$self->{stadt},25,100)]).
		$self->TR([ "   ",$self->afont($self->trans("HI61")),$self->DDland('land',$self->{land}) ]).
		$self->TR([ "***",$self->afont($self->trans("HI62")),$self->TF("email",$self->{email},25,100)]).
		$self->TR([ "   ",$self->afont($self->trans("HI63")),$self->DDprovider('provider',$self->{provider}) ]).
		$self->TR([ "   ",$self->afont($self->trans("HI90")),$self->DDbsystem ('bsystem',$self->{bsystem})]).
		$self->TR([ "***",$self->afont($self->trans("HI64")),$self->TF("tel",$self->{tel},25,100)]).
		$self->TR([ "   ",$self->afont($self->trans("HI65")),$self->TF("tel2",$self->{tel2},25,100)]).
		$self->TR([ "***",$self->afont($self->trans("HI66")),$self->TF("tag",$self->{tag},2,2).$self->DDmonat('monat',$self->{monat}).$self->TF("jahr",$self->{jahr},4,4).$self->afont($self->trans("HI67")) ]).	
		$self->TR([ "   ",$self->afont($self->trans("HI68")),$self->DDbildung('bildung',$self->{bildung}) ]).	
		$self->TR([ "   ",$self->afont($self->trans("HI69")),$self->DDfamstand('famstand',$self->{famstand}) ]).	
		$self->TR([ "   ",$self->afont($self->trans("HI70")),$self->DDarbeit('arbeit',$self->{arbeit}) ])."</TABLE>\n".

		"<BR><BR>".$self->afont($self->trans("HI81"))."<BR><BR>".
		"<CENTER>".$self->DDherkunft('herkunft',$self->{herkunft})."</CENTER>".
		"<BR><HR>".$self->afont($self->trans("HI71"))."<BR><BR>".
		"<TABLE cellspacing=10>\n".
		$self->TR([$self->afont($self->trans("HI72")),$self->afont($self->trans("HI73")), $self->afont($self->trans("HI74")),$self->afont($self->trans("HI75")),$self->afont($self->trans("HI76"))]).	
		$self->TR([$self->TF("pers3",$self->{pers3},5,5),$self->TF("pers12",$self->{pers12},5,5),
		$self->TF("pers22",$self->{pers22},5,5),$self->TF("pers54",$self->{pers54},5,5),$self->TF("pers55",$self->{pers55},5,5) ]).
		"\n</TABLE>".

		"<HR><BR>".$self->afont($self->trans("HI77"))."<BR>\n".
		"<BR>\n".$self->krittable.
		"<BR><HR><BR>".$self->afont($self->trans("HI78"))."<BR>\n".
		"<BR>\n".$self->hobtable.
		"<BR><HR><BR>".$self->afont($self->trans("HI79"))."<BR>\n".
		"<BR>\n".$self->vhtable.

		"<BR><BR>\n".
		"<TABLE cellspacing=10>\n".
		$self->TR([$self->afont($self->trans("HI80")),$self->TF("bestjahr",$self->{bestjahr},4,11) ]).
		"\n</TABLE>".

		"<BR><HR><BR>".$self->afont($self->trans("HI83"))."<BR><BR>".
		"<CENTER>".$self->DDlohn('lohnart',$self->{lohnart})."</CENTER>".
		"<BR><BR>".$self->afont($self->trans("HI91"))."<BR><BR>".
		"<TABLE cellspacing=10>\n".
		$self->TR([$self->afont($self->trans("HI84")),$self->TF("bank",$self->{bank},100,100) ]).
		$self->TR([$self->afont($self->trans("HI85")),$self->TF("blz",$self->{blz},20,20) ]).
		$self->TR([$self->afont($self->trans("HI86")),$self->TF("kontonr",$self->{kontonr},20,20) ]).
		"\n</TABLE>".

		"<BR><HR><BR>".$self->afont($self->trans("HI87"))."<BR><BR>".
		"<TABLE cellspacing=10>\n".
		$self->TR([$self->afont($self->trans("HI88")), " <INPUT TYPE='password' NAME='pass'>","&nbsp;&nbsp;",$self->afont($self->trans("HI89"))," <INPUT TYPE='password' NAME='pass1'>" ]).
		# $self->TF("pass1",$self->{pass},8,8),$self->TF("pass1",$self->{pass1},8,8)
		"\n</TABLE>".

		"<BR><HR><BR>\n".
		#$self->SM ( "bbut", "BU38" )."   ".$self->SM( "bbut" , "BU1" )."   ".$self->SM( "bbut" , "BU11" );
		$self->SMrow( ["bbut","bbut","bbut"] , ["BU38","BU1","BU11"] );
		$self->printhtml($TITLE,$HTML);

		#$self->printhtml($self->trans("TI3"), $HTML);
		
}

####################################################################
####         Gibt die Standardmaske aus
####         Argumente  : Emergency und Logtext
####         Returnwert : -
####################################################################
sub getbearb {
	my $self = shift;
	my ($pin, $pass, $trans);
	$self->log(4,"Entering: pdat:getbearb");
	
	
	#Neue Teilnehmer
	if ($baseq::VARS{bbut} eq $self->trans("BU37")) {$self->htmlbearb;}

	
	#Konto abrufen
	if ($baseq::VARS{bbut} eq $self->trans("BU35")) {
			$self->log(4,"Kontostand wird abgerufen");
			$kasse=kasse->init($self);			
			$kasse->{warntext}=$kasse->trans("WA22");
			$HTML.=$kasse->kontohtml($baseq::VARS{pin})."<HR>\n";
			$kasse->printhtml("Kontostand",$HTML);
	}
	
	#Beenden
	if ($baseq::VARS{bbut} eq $self->trans("BU11")) {$self->redirect;}
	
	#Existierende Teilnehmer - Loginmaske
	if ($baseq::VARS{bbut} eq $self->trans("BU6")) {
	$self->login;}

	#Button Anmelden
	if ($baseq::VARS{lbut} eq $self->trans("BU12")) {
		$self->{id}=$baseq::VARS{apin};
		$baseq::VARS{pin}=$baseq::VARS{apin};
		$baseq::VARS{pass}=crypt($baseq::VARS{apass},"xy");
		$res=$self->checkpass($baseq::VARS{pin}, $baseq::VARS{pass});
		if ($res != 0 && $res != 2) {$baseq::VARS{pin}=0; $self->login; $self->exit;};
        $self->load;
		$self->htmlbearb;
	}


	#Speichern
	if ($baseq::VARS{bbut} eq $self->trans("BU1")) {

			$self->log(4,"Speichern");
			
			$self->getvars;
			#$self->checkalles;
			$warn=$self->checkalles;
			$self->{warntext}=$warn;

			#Wenn alles OK
			if ($warn eq "") {$self->new;$self->load;}
			$self->htmlbearb;

	}
	else {		$self->htmlbearb;}
}

