package umfrage;

use template;
use frage;
use CGI;
use grafik;
#use strict;

@ISA = qw ( template );

my $TESTPIN=100;

####################################################################
####         Konstruktor der Umfragenklasse
####         Argumente  : -
####         Returnwert : -
####################################################################
sub init {
	my $that = shift;
	my $class = ref($that) || $that;
	my $self = template->init(@_);
	bless $self, $class;	
	$self->{name}     = "Neue Umfrage";
	$self->{usepanel} = 0;
	$self->{template} = $self->{parent}->{template}+0;
	$self->{knr} 	  = $self->{parent}->{knr}+0;
	$self->{showstat} = 0;	
	$self->{sprache}  = 0;	
        $self->{exiturl}  = "http://www.prorata.de";	
        $self->{beginn}   = '2000-01-01';
	$self->{ende}	  = '2000-01-01';
        $self->{ppf}	  = 100;
        $self->{firstfid} = 1;
	$self->{uspringen} = 1;
	return $self;
}

####################################################################
####         Konstruktor der Umfragenklasse
####         Argumente  : umfid
####         Returnwert : -
####################################################################
sub load {
	my $self = shift;
	my $sql = "select umfrage, usepanel, template, knr, showstat , beginn, ende, ppf, stface, stsize, stcolor, exiturl, name, pass, ".
		  "sprache, firstfid, uspringen from umfragen where umfid=$self->{id}";
	($self->{name}, $self->{usepanel}, $self->{template}, $self->{knr},
	 $self->{showstat},$self->{beginn},$self->{ende},$self->{ppf}, $f,$s,$c, $self->{exiturl},
	 $self->{uname}, $self->{upass}, $self->{sprache}, $self->{firstfid}, $self->{uspringen}) = $self->sqlselect($sql);
	if (! defined $self->{knr}) {$self->log(2,"Umfrage ist nicht vorhanden"); return;}
	$self->{vars}{umfid}=$self->{id};
	$self->loadtmp();                    	
        $self->{stface}=$f; $self->{stsize}=$s; $self->{stcolor}=$c;
	return $self;
}

####################################################################
####         Ermittelt eine neue umfid und speichert sich
####         Argumente  : -
####         Returnwert : -
####################################################################
sub new {
	my $self = shift;
	my $sql1 = "select max(umfid) from umfragen";
	($self->{id}) = ($self->sqlselect($sql1))+1;
        my $sql2 = "insert into umfragen values ( '$self->{name}' , $self->{id} , $self->{usepanel} , $self->{template}, ".
                   "$self->{knr}, $self->{showstat}, '$self->{beginn}', '$self->{ende}', $self->{ppf}, ".
		   "'$self->{stface}', '$self->{stsize}', '$self->{stcolor}', '$self->{exiturl}', '$self->{uname}', '$self->{upass}', ".
		   "$self->{sprache}, $self->{firstfid}, $self->{uspringen})";
	$self->sqldo($sql2);
        ${$self->{vars}}{umfid}=$self->{id}
}

####################################################################
####         Speichert sich mit Update
####         Argumente  : -
####         Returnwert : -
####################################################################
sub store {
	my $self = shift;
	my $sql = "update umfragen set umfrage='$self->{name}', usepanel=$self->{usepanel}, ".
		  "template=$self->{template}, knr=$self->{knr}, ".
		  "showstat=$self->{showstat}, beginn='$self->{beginn}', ".
      		  "ende='$self->{ende}', ppf=$self->{ppf}, ".
		  "stface='$self->{stface}', stsize='$self->{stsize}', stcolor='$self->{stcolor}', ".
	 	  "name='$self->{uname}', pass='$self->{upass}', exiturl='$self->{exiturl}', sprache=$self->{sprache}, ".
		  "firstfid=$self->{firstfid}, uspringen=$self->{uspringen} where umfid=$self->{id}";
	$self->sqldo($sql);
}

####################################################################
####         Löscht sich und alle seine Fragen aus der DB
####         Argumente  : evtl Fragentext und Fragentyp
####         Returnwert : -
####################################################################
sub delete {
	my $self = shift;
	my $sql  = "delete from umfragen where umfid=$self->{id}";
	$self->sqldo($sql);
	
	my $f; my $y=$self->loadfragen;
	while ($f=shift @$y) {$f->delete}
	
	$self->{id} = undef;
}

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

####################################################################
####         Frage zur Umfrage laden
####         Argumente  : -
####         Returnwert : Zeiger auf Fragenarry
####################################################################
sub loadfragen {
	my $self = shift;
	my $sql = "select max(fid) from fragen where umfid=$self->{id}";
	my $max = $self->sqlselect($sql);
        my @y=(); my $x=0;
	my $f;
	#Alle Fragen laden
	for ( $x=1; $x<=$max; $x++) {
	   $f = frage->init($self,$x);
   	   if ($f->load()) { push (@y, $f);}        #existierende Fragen ins Array packen
	}
	return \@y;
}

####################################################################
####         liest die Antworten ein
####         Argumente  : -
####         Returnwert : -
####################################################################
sub enterant {
	my $self = shift;
	my $vars = $self->{vars};
	my %val = %$vars;
	my $f;
	my @RE=("",$self->trans("WA1"),$self->trans("WA2"),"");
	my $query=$self->{query};
	my $x=0;

        # Wenn beendet werden soll : Redirect !
	if ($val{but} eq $self->trans("BU11")) {$self->redirect;}

	# Anmeldedaten übernehmen
        if ($val{but} eq $self->trans("BU12")) {
		$$vars{pin}=$val{apin};
		$$vars{pass}=crypt($val{apass}, "xy");
	}
	
	# Pin überprüfen und nötigenfalls erfragen
	if ($$vars{pin} eq ""){
		if ($self->{usepanel}==0) {$$vars{pin}=$self->newpin;}	
		else {$self->login($self->trans("WA3"));$self->exit;}
	}

        # Passwortüberprüfung
	if ($self->{usepanel}==1) {my $RET = $self->checkpass($$vars{pin}, $$vars{pass});
	        if ($RET == 3) { $self->pstatistik;$self->exit;}
		if ($RET != 0) { $self->login($RE[$RET]);$self->exit; }
        }

	# Ist der Fragebogen aktiv ??
	if ($self->checkdate) {
                $self->login($self->trans("WA11"));
 		$self->log(1,"Fragebogen nicht aktiv");
	}

	# Wenn $val{fid} nicht definiert ist muß die erste Frage genommen werden
	if ( $$vars{fid} <1 ) {
		$f = frage->init($self,$self->{firstfid}); $f->load();
		$f=$f->nextfrage($$vars{pin},1);
	}
	else { $f = frage->init($self,$$vars{fid}); $f=$f->load(); } # sonst jetzt anliegende Frage laden....

        if (! defined $f) { $self->umfende; $self->exit;}
	
	# Wenn gespeichert werden soll
	if ($val{but} eq $self->trans("BU7")) {
	   if ($f->enterant == 0) {$self->{warntext}=$self->trans("WA4");}
	   $self->log(4,"Proband speichert");
	   $f = $f->nextfrage($val{pin});
	}

	# Wenn übersprungen werden soll
	if ($val{but} eq $self->trans("BU3")) {
	   $f = $f->nextfrage($val{pin});
	   $self->log(4,"Proband Überspringt");
	   $self->{warntext}=$self->trans("WA6");
	}

	# Wenn abgebrochen werden soll
	if ($val{but} eq $self->trans("BU2")) {
	   $self->log(4,"Proband Unterbricht");
	   $self->{warntext}=$self->trans("WA7");
	   undef $f;
	}
        	

   # Standardmäßig die neue Frage anzeigen !
   if (defined $f) { $$vars{fid}=$f->{id};}
   if (! defined $f) {$self->umfende;}
   else {$f->htmlfra;}

}     	


####################################################################
####         Laeutet das Ende der Umfrage ein......
####         Argumente  : -
####         Returnwert : -
####################################################################
sub umfende {	
	my $self= shift;
	my ( $HTML, $TITLE );
	my $vars = $self->{vars};
	my $query=$self->{query};
	$TITLE=$self->trans("TI5");
	if ($self->{usepanel}==1) {$self->{warntext}=$self->trans("WA9a")." ".$self->verdient($$vars{pin})." ".$self->trans("WA9b");}
        else {$self->{warntext}=$self->trans("WA10");}
	$self->sqldo("delete from ergebnis where umfid=$self->{id} and pin=$TESTPIN");
        if ($self->{showstat} !=0) {$self->pstatistik;$self->exit;}
	else {
	   $HTML=$self->sfont($query->submit('but',$self->trans("BU11")))."\n";
           $self->printhtml($TITLE,$HTML);
	}
}

####################################################################
####         Listet alle Fragen zu dieser Umfrage auf zur Bearbeitung
####		durch den Kunden
####         Argumente  : -
####         Returnwert : -
####################################################################
sub fragenliste {
	my $self = shift;
	my $query=$self->{query};  	
  	my $f; my $fl=$self->loadfragen;
  	my $TITLE=$self->trans("TI7");
   	my $HTML=$self->sfont($self->trans("HI43")." ".$self->{firstfid})."<BR>\n<TABLE>\n";

   	while ($f = shift @$fl) { $HTML.=$f->fragenliste; }

	$HTML.="</TABLE><BR>\n".
   	$self->sfont( "\n".
   	        $query->submit('but',$self->trans("BU6")) ."&nbsp;&nbsp;\n".   # Bearbeiten
   	        $query->submit('but',$self->trans("BU8")) ."&nbsp;&nbsp;\n".   # Frage löschen
   	        $query->submit('but',$self->trans("BU10")) ."&nbsp;&nbsp;\n".  # Umfrage anzeigen
   	        $query->submit('but',$self->trans("BU5")) ."&nbsp;&nbsp;\n".   # Neue Frage
   	        $query->submit('kbut',$self->trans("BU13")) ."&nbsp;&nbsp;\n". # Zurück
	        $query->submit('but',$self->trans("BU11")) ."\n" );            # Beenden

        $self->printhtml($TITLE, $HTML);
}

####################################################################
####         Gibt sich und die Antworten zur Bearbeitung durch den
####		Kunden aus
####         Argumente  : -
####         Returnwert : HTML-string
####################################################################
sub htmlumfrage {
    my $self = shift;
    my $query=$self->{query};
    my ( $up, $ss, $htemp, $ntemp );
    my @datetext=($self->trans("HI2"),$self->trans("HI3"),$self->trans("HI4"));
    my $TITLE=$self->trans("TI9")." ".$self->{id};
    $self->{warntext}=$self->trans("TI9")." ".$self->{id};
    my $HTML=$self->sfont($self->trans("HI6"))."\n<input type='text' name='umfrage' value='$self->{name}' size=100><BR>".
             $self->sfont($self->trans("HI7"))."\n<input type='text' name='exiturl' value='$self->{exiturl}' size=100><BR><BR>\n";
    if ($self->{usepanel} == 1) {$up="checked";}
    if ($self->{showstat} == 1) {$ss="checked";}
    my $htemp=$self->templatehash;
    my @ntemp= keys %$htemp;
    my $hspr=$self->sprachenhash;
    my @nspr= keys %$hspr;


    $HTML.="<TABLE border=0>\n".
    	$self->TR([
    	    "<input type='checkbox' name='usepanel' $up value='1'>".
	    $self->sfont($self->trans("HI8")),
    	    $self->sfont($self->trans("HI9")),
	    "<input type='text' name='beginn' value='$self->{beginn}'>",
	    $self->sfont($self->trans("HI10")),
	    $self->sfont($query->popup_menu('stface',$self->{RLfontface},$self->{stface}) ) ]) .
	$self->TR([
	    "<input type='checkbox' name='showstat' $ss value='1'>".
            $self->sfont($self->trans("HI11")."&nbsp;&nbsp;"),
    	    $self->sfont($self->trans("HI5")),
	    "<input type='text' name='ende' value='$self->{ende}'>&nbsp;&nbsp;",   	
	    $self->sfont($self->trans("HI12")),
            "<input type='text' name='stsize' value='$self->{stsize}' size=10>" ])  .
	$self->TR([
	    $self->sfont($query->popup_menu('template',\@ntemp,$self->{template},$htemp) ),
    	    $self->sfont($self->trans("HI13")),
	    "<input type='text' name='ppf' value='$self->{ppf}'>",
	    $self->sfont($self->trans("HI14")),
            $self->sfont($query->popup_menu('stcolor',$self->{RLfontcolor},$self->{stcolor},$self->{RHfontcolor}) ) ]) .
	"</TABLE>\n<HR>\n".
	$self->sfont($self->trans("HI15")." <input type='text' name='uname' value='$self->{uname}'> ".$self->trans("HI16").
	                "<input type='text' name='upass' value='$self->{upass}'> ".$self->trans("HI17")."<HR>\n").
	$self->sfont($datetext[$self->checkdate()]). "<HR>\n".
        "<TABLE>\n".
	$self->TR([ $self->sfont($self->trans("HI17a")), $self->sfont($query->popup_menu('sprache',\@nspr,$self->{sprache},$hspr)) ]).
	$self->TR([ $self->sfont($self->trans("HI17b")), "<input type='text' name='firstfid' value='$self->{firstfid}' size='5'>" ]).
	$self->TR([ $self->sfont($self->trans("HI17c")),
		    $self->sfont($query->popup_menu('uspringen',[1,0],$self->{uspringen},{"1" => "Anzeigen","0"=>"Verstecken"})) ]).
	"</TABLE>\n<BR>\n".
        $self->sfont(
    	$query->submit('but',$self->trans("BU9")) ."&nbsp;&nbsp;\n".
    	$query->submit('but',$self->trans("BU5")) ."&nbsp;&nbsp;\n".
    	$query->submit('but',$self->trans("BU4")) ."&nbsp;&nbsp;\n".
        $query->submit('kbut',$self->trans("BU13"))."&nbsp;&nbsp;\n".
    	$query->submit('but',$self->trans("BU11"))."\n" );

    $self->printhtml($TITLE, $HTML);
}

####################################################################
####         Bearbeitet die Eingabe der Frage durch den Kunden
####         Argumente  : -
####         Returnwert : -
####################################################################
sub getbearb {
	my $self = shift;
	my $vars = $self->{vars};    # Den Zeiger, weil ich ändern will
	my %val = %$vars;
	my ( $f, $TITLE, $x );
	
	
	# Wenn $val{fid} nicht definiert ist wird eine Fragenliste ausgegeben
	if ( (! defined $val{fid}) ) {
	   $self->htmlumfrage;
	}

	# Wenn gespeichert werden soll
	elsif ($val{but} eq $self->trans("BU7")) {
	  $self->log(4,"Kunde speichert");
	  $f = frage->init($self,$val{fid});  #  jetzt anliegende Frage laden....
	  $f->load();
	  if (! defined $f){$self->htmlumfrage;}
	  $f->getbearb($vars);
	  $self->{warntext}=$self->trans("WA14");
	  $f->htmlbearb;
	}

	# Wenn die Frage gelöscht werden soll
	elsif ($val{but} eq $self->trans("BU8")) {
  	  $self->log(4,"Kunde löscht");
	  if ($val{radio} ne "") {$$vars{fid}=$val{radio};}
	  if ($$vars{fid} > 0) {
	    $f = frage->init($self,$$vars{fid});  #  jetzt anliegende Frage laden....
	    $f=$f->load();
	    if (defined $f) {$x=$f->delete;}
	    $$vars{fid}=0;
	    $self->{warntext}=$x;
	  }
	  else {
	    $self->{warntext}=$self->trans("WA16");
	  }
	  $self->fragenliste();
	}

	# Wenn eine neue Frage erstellt werden soll
	elsif ($val{but} eq $self->trans("BU5")) {
           $self->log(4,"Kunde erstellt neue Frage");
	   $f=frage->init($self);
	   $f->new();
	   $$vars{fid}=$f->{id};
	   $self->{warntext}=$self->trans("WA17");
	   $f->htmlbearb;
	}

	#Wenn aus der Liste bearbeitet werden soll
	elsif ($val{but} eq $self->trans("BU6")) {
	  $self->log(4,"Kunde bearbeitet Frage");
	  if ($val{radio} < 1) {
	     $self->{warntext}=$self->trans("WA16");
	     $self->fragenliste;
	  }
	  else {
	     $f=frage->init($self,$val{radio});
	     $f=$f->load();
	     $$vars{fid}=$f->{id};
	     $self->{warntext}=$self->trans("WA18");
	     $f->htmlbearb;
	  }
	} 	
        # Wenn die Liste angezeigt werden soll.....
	elsif ($val{but} eq $self->trans("BU4")) {
	     $self->log(4,"Kunde sieht Liste der Fragen");
	     $self->{warntext}=$self->trans("WA19");
             $$vars{fid}=0;
             $self->fragenliste;
        }

        # Wenn die Umfrage gespeichert werden soll.....
	elsif ($val{but} eq $self->trans("BU9")) { $self->getumfbearb; $self->log(4,"Kunde speichert Umfrage");}

        # Wenn die Umfrage angezeigt werden soll.....
	elsif ($val{but} eq $self->trans("BU10")) { $self->htmlumfrage; $self->log(4,"Kunde sieht Umfrage");}

	# Beenden mit Redirect....
	elsif ($val{but} eq $self->trans("BU11")) { $self->redirect;}
	
	# Wenn alles andere versagt.....   :-)
	else { $self->htmlumfrage; $self->log(4,"Kein Button gedrückt, Kunde sieht Umfrage"); }

}

####################################################################
####         nimmt die Änderungen aus dem Formular an
####         Argumente  : Zeiger auf Variablen
####         Returnwert : -
####################################################################
sub getumfbearb {
	my $self = shift;
	my %vars = %{$self->{vars}}; 
	$self->{name}=$vars{umfrage};
	$self->{template}=$vars{template}+0;	
	$self->{usepanel}=$vars{usepanel}+0;	
	$self->{showstat}=$vars{showstat}+0;	
	$self->{beginn}=$vars{beginn};
	$self->{ende}=$vars{ende};
	$self->{ppf}=$vars{ppf}+0;
	$self->{stface}=$vars{stface};	
	$self->{stsize}=$vars{stsize};	
	$self->{stcolor}=$vars{stcolor};	
	$self->{exiturl}=$vars{exiturl};	
        $self->{uname}=$vars{uname};	
	$self->{upass}=$vars{upass};	
	$self->{sprache}=$vars{sprache};	
	$self->{firstfid}=$vars{firstfid}+0;
	$self->{uspringen}=$vars{uspringen};
        $self->store;
        $self->load;
	$self->htmlumfrage;
}


####################################################################
####         Liefert den Preis für die Beantwortung !
####         Argumente  : -
####         Returnwert : Betrag in Pfennigen
####################################################################
sub verdient {
	my $self = shift;
	my $pin = shift;
	if ($pin==0) {$self->log(1, "frage->verdient : PIN wurde nicht übergeben !"); }
	my $ret="";  my $x=0;
	my @result=();
	my $sth=$self->sqlprepare("select distinct fid from ergebnis where pin=$pin and umfid=$self->{id}");
	while(@result=$sth->fetchrow_array){$x++};
	return sprintf("%0.2f",$x*$self->{ppf}/100);#/
}

####################################################################
####         Gibt die Statistik für die Umfrage aus
####         Argumente  : -
####         Returnwert : -
####################################################################
sub htmlgrafik {
	my $self = shift;
        $self->log(4,"html-Grafik");
	my @FL=@{$self->loadfragen};
	my @FL1=@FL; my @tdiff;
	my $HTML=""; my $minpin; my $maxpin; my $pin; my $changed; my @max; my @min;
	my $f;my $maxdiff=0; my $mindiff=50000000000000;
	my $pins=$self->sqldo("select distinct(pin) from ergebnis where umfid=$self->{id}")+0;
	my $sth=$self->sqlprepare("select pin, changed from ergebnis where umfid=$self->{id}");
	while (($pin,$changed)=$sth->fetchrow_array) {  
	        if( ($min[$pin]>$changed) || ($min[$pin]==0) ){$min[$pin]=$changed;}
	        if( $max[$pin]<$changed) {$max[$pin]=$changed;}
	}
	$sth=$self->sqlprepare("select distinct(pin) from ergebnis where umfid=$self->{id}");
	while ($pin=$sth->fetchrow_array) {  
		@tdiff=$self->timediff($min[$pin], $max[$pin]);
	        if ($tdiff[0]>$maxdiff) {$maxpin=$pin; $maxdiff=$tdiff[0];}
	        if (($tdiff[0]<$mindiff) && ($max[$pin]-$min[$pin] !=0 )) {$minpin=$pin; $mindiff=$tdiff[0];}
		$self->log(4,join(" - ",@tdiff));
	}

	$mindate=$self->sqlselect("select min(changed) from ergebnis where umfid=$self->{id}");
	$maxdate=$self->sqlselect("select max(changed) from ergebnis where umfid=$self->{id}");
	$HTML.="<TABLE>".
		$self->TR([ $self->sfont("Erste Antwort:"),$self->sfont($self->timestamp($mindate)) ]).
		$self->TR([ $self->sfont("Letzte Antwort:"),$self->sfont($self->timestamp($maxdate)) ]).
		$self->TR([ $self->sfont("Zeitraum:"),$self->sfont($self->duration($mindate, $maxdate)) ]).
		$self->TR([ $self->sfont("Teilnehmer:"),$self->sfont($pins) ]).
		$self->TR([ $self->sfont("Min. Teilnahmezeit:"),$self->sfont($self->duration($min[$minpin], $max[$minpin])) ]).
		$self->TR([ $self->sfont("Max. Teilnahmezeit:"),$self->sfont($self->duration($min[$maxpin], $max[$maxpin])) ]).
	"</TABLE>";
		$self->log(4,"Min: ". $min[$minpin]." -- ".$max[$minpin]);
		$self->log(4,"Max: ". $min[$maxpin]." -- ".$max[$maxpin]);
	my @L1;
	while ($f = shift @FL1) {
	push (@L1, $f->anzahlstr);
	}
	my $PATH="../www.prorata.de/";
	my $filename="umfimg/U".$self->{id}."FRAGEN".$pins.".gif";
	if ($pins>0) {
	  grafik::paint("VL",$PATH.$filename,25,\@L1,5,$pins);
	  $HTML.="<IMG src=\"/$filename\" border=0>";
	}
	$HTML.="<HR>\n";
	if ($self->{knr}==4) {$HTML.=$self->otto;}
	while ($f = shift @FL) {
	$HTML.=$f->htmlgrafik;
	}
	return $HTML
}

sub kstatistik {
	$self=shift;
	$HTML=$self->htmlgrafik;
	$self->printhtml($self->trans("TI4"),$HTML.$self->sfont($self->{query}->submit('kbut',$self->trans("BU13"))) )
}

sub pstatistik {
	$self=shift;
	$HTML=$self->htmlgrafik;
	$self->printhtml($self->trans("TI4"),$HTML.$self->sfont($self->{query}->submit('but',$self->trans("BU11"))) )
}

####################################################################
####         Gibt die Statistik für die Umfrage aus
####         Argumente  : -
####         Returnwert : -
####################################################################
sub otto {
	my $self = shift;
        my $SQL1 = "select benutzer.pin ,benutzer.plz, hermes.depot from benutzer
		    left join hermes on hermes.plz=benutzer.plz where benutzer.otto=1";
	my $SQL2 = "select distinct ergebnis.pin ,benutzer.plz, hermes.depot from ergebnis
		    left join benutzer on benutzer.pin=ergebnis.pin
		    left join hermes on hermes.plz=benutzer.plz where ergebnis.umfid=$self->{id} and ergebnis.fid=1";
        my $SQL3 = "select distinct depot from hermes order by depot";
        my $SQL4 = "select distinct pin from ergebnis where umfid=$self->{id}";
	my $rows = $self->sqldo($SQL4);
        my ($HTML, $pin, $plz, $depot, @adepot, @xdepot, @aleit, @xleit, $x, $leit, $proz, @Lleit, @Ldepot);

        my $PATH="../www.prorata.de";
        my $file1="/umfimg/U".$self->{id}."O1T".$rows.".gif";
	my $file2="/umfimg/U".$self->{id}."O2T".$rows.".gif";
	
	my $sth=$self->sqlprepare($SQL1);
	while ( ($pin, $plz, $depot)=$sth->fetchrow_array) {
		$adepot[$depot]++;
		if (length($plz) < 5){$leit="0".substr($plz,0,1);}
		else {$leit=substr($plz,0,2);}
		$aleit[$leit]++;
	}
	$sth->finish;
	$sth=$self->sqlprepare($SQL2);
	while ( ($pin, $plz, $depot)=$sth->fetchrow_array) {
		$xdepot[$depot]++;
		if (length($plz) < 5){$leit=substr($plz,0,1);}
		else {$leit=substr($plz,0,2);}
		$xleit[$leit]++;
	}
        $sth->finish;
	$HTML="<TABLE><TR><TD>\n<TABLE>\n".$self->TR(["Leitregion","Gesamt","Empfangen","in Prozent"]);
	for (my $x=1; $x<100; $x++) {
		if ($aleit[$x]>0){$proz=sprintf("%.1f",$xleit[$x]*100/$aleit[$x]);}
		else {$proz="0.0";}
                if ($x<10) {$x="0".$x;}
		push @Lleit,"$proz Leitregion[$x]";
		if ($xleit[$x]==0){$xleit[$x]="0";}
	        $HTML.=$self->TR(["[$x]",$aleit[$x],$xleit[$x],$proz."%" ]);
	}
	my $Y=open (FILE, "<$PATH.$file1"); close FILE;
	if (! $Y){grafik::paintverlauf($PATH.$file1, 25,\@Lleit,100);}

	$HTML.="</TABLE>\n</TD><TD>\n<IMG src=\"".$file1."\"></TD></TR>\n</TABLE>\n<HR>\n";
	$HTML.="<TABLE><TR><TD>\n<TABLE>\n".$self->TR(["Depot","Gesamt","Empfangen","in Prozent"]);
       	$sth=$self->sqlprepare($SQL3);
	while ( ($x)=$sth->fetchrow_array) {
		if ($adepot[$x]>0){$proz=sprintf("%.1f",$xdepot[$x]*100/$adepot[$x]);}
		else {$proz="0.0";}
		if ($x<10) {$x="0".$x;}
		push @Ldepot,"$proz Depot[$x]";
		if ($xdepot[$x]==0){$xdepot[$x]="0";}
	        $HTML.=$self->TR(["[$x]",$adepot[$x],$xdepot[$x],$proz."%" ]);
	}
       	$Y=open (FILE, "<$PATH.$file2"); close FILE;
	if (! $Y) {grafik::paintverlauf($PATH.$file2, 25,\@Ldepot,100);}
        $HTML.="</TABLE>\n</TD><TD>\n<IMG src=\"".$file2."\"></TD></TR>\n</TABLE>\n<HR>\n";
	
	return $HTML;

}
####################################################################
####         Gibt die Statistik für die Umfrage aus
####         Argumente  : -
####         Returnwert : -
####################################################################
sub login {
	my $self = shift;
        $self->{warntext}=shift;
	my $query=$self->{query};

	my $HTML = "<TABLE>\n".
	        $self->TR([$self->sfont("PIN")," <INPUT type='textfield' name='apin'>" ]) .
		$self->TR([$self->sfont($self->trans("HI18")), " <INPUT type='password' name='apass'>" ]) .
		"</TABLE>\n<BR><BR>\n".
    	$self->sfont( "\n".
    	$query->submit('but',$self->trans("BU12")) ."&nbsp;&nbsp;\n".  # Anmelden
    	$query->submit('but',$self->trans("BU11"))."\n" );  #ENDE
	
	$self->printhtml($self->trans("TI3"), $HTML);
}

####################################################################
####         Selektiert eine neue PIN für Panellose Umfragen
####         Argumente  : -
####         Returnwert : Neue Pin
####################################################################
sub newpin {
	my $self = shift;
        my ($a,$b,$c,$d)=$ENV{REMOTE_ADDR}=~/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/;
	my $avgpin=$self->sqlselect("select avg(pin) from ergebnis where umfid=$self->{id}");
	$avgpin=~s/\..*$//;
	my $resu=$avgpin+$a+$b+$c+$d;
	$self->log(4,"AveragePIN: $avgpin+$a+$b+$c+$d=$resu");
	while ($self->sqlselect("select pin from ergebnis where umfid=$self->{id} and pin=$resu")>0) {$resu++;}
	$self->log(4,${$self->{vars}}{fid});
	${$self->{vars}}{fid}=$self->{firstfid};
	return $resu;
}


####################################################################
####         Führt einen sicheren Redirect aus
####         Argumente  : -
####         Returnwert : -
####################################################################
sub redirect {
	my $self = shift;
        my $exu="http://www.prorata.de";
        if ($self->{exiturl}=~/^http:\/\/.*/i) {$exu=$self->{exiturl};}
        print $self->{query}->redirect($exu);
        $self->exit("Redirect to: $exu");
}

####################################################################
####         Überprüft den Umfragenzeitraum
####         Argumente  : -
####         Returnwert : 0=aktuell, 1=noch nicht aktiv, 2=vorbei
####################################################################
sub checkdate {
      my $self = shift;
      my $date =$self->sqlselect("select NOW() from umfragen");
      my $ret=0;
      $self->log(4,"Datum=$date");
      if ($date gt $self->{ende}) {$ret=2;}
      if ($date lt $self->{beginn}) {$ret=1;}
      return $ret;
}


####################################################################
####         Prüft das Passwort
####         Argumente  : pin und encrypted passwd
####         Returnwert : 0=OK, 1=Pass falsch, 2=nicht in umfidpin, 3=Statistik ok
####################################################################
sub checkpass {
	my $self = shift;
	my $pin = shift;
	my $pass = shift;
       	if (($self->{uname} eq $pin) && (crypt($self->{upass},"xy")) eq $pass){return 3;}
	$pin+=0;
	if ( ($pin == $TESTPIN) && ( $pass eq crypt("muster","xy") ) ) {return 0;}
        my $dbpass = $self->sqlselect("select pass from benutzer where pin=$pin");
   	$dbpass=crypt($dbpass,"xy");
        if ($dbpass ne $pass) {$self->log(2,"Falsches Passwort von $pin");return 1;}
        my $teil = $self->sqlselect("select pin from umfidpin where umfid=$self->{id} and pin=$pin");
        if ($teil<1) {$self->log(2,"$pin war nicht in Umfidpin");return 2;}
	return 0;
}

