package frage;

use template;
use antwort;
use grafik;
#use strict;

@ISA = qw ( template );

####################################################################
####         Konstruktor der Fragenklasse
####         Argumente  : parent, umfid, Fragentext, Fragentyp
####         Returnwert : -
####################################################################
sub init {
	my $that = shift;
	my $class = ref($that) || $that;
	my $self = template->init(@_);
    if (! defined $self->{parent}) { $self->log(1,"Frage bitte mit parent initialisieren");}
    bless $self, $class;	
	$self->{umfid}    = $self->{parent}->{id};
    $self->{name}     = "";
	$self->{typ}      = "E";
	$self->{bild}     = "";	
	$self->{ant}      = [];
	$self->{nextfid}  = 0;
	$self->{template} = $self->{parent}->{template};
    $self->{grafik}   ="BAS";
	$self->{incent}	= 1;
	$self->loadtmp();
	$self->{stfcace}=$self->{parent}->{stface};
	$self->{stsize}=$self->{parent}->{stsize};
	$self->{stcolor}=$self->{parent}->{stcolor};
	return $self;
}

####################################################################
####         Konstruktor der Fragenklasse
####         Argumente  : parent, umfid, fid
####         Returnwert : -
####################################################################
sub load {
	my $self = shift;
        $self->log(4,"Entering: frage:load");
	my $sql = "select typ,frage,nextfid,bild,qtface,qtsize,qtcolor,atface,atsize,atcolor,grafik,incent from fragen where umfid=$self->{umfid} and fid=$self->{id} ";
	($self->{typ}, $self->{name}, $self->{nextfid}, $self->{bild}, $self->{qtface}, $self->{qtsize}, $self->{qtcolor},
	 $self->{atface}, $self->{atsize}, $self->{atcolor}, $self->{grafik}, $self->{incent} ) = $self->sqlselect($sql);
	if (! defined $self->{nextfid}) {return;}
	$self->loadantw;
    return $self;
}

####################################################################
####         Antworten zur Frage laden und in $self->{ant} speichern
####         Argumente  : umfid, fid
####         Returnwert : -
####################################################################
sub loadantw {
	my $self = shift;
	my $sql = "select max(aid) from antworten where umfid=$self->{umfid} and fid=$self->{id}";
	my $maxant = $self->sqlselect($sql);
        my @y=(); my $x=0;
        $self->log(4,"Entering: frage:loadantw");
	$self->{ant}=\@y;
	for ( $x=1; $x<=$maxant; $x++) {
	   $a = antwort->init($self,$x); $a=$a->load();
	   if ($a) { push (@y, $a);}  #existierende Fragen ins Array packen
	}
	return;
}

####################################################################
####         Ermittelt eine neue fid und speichert sich
####         Argumente  : -
####         Returnwert : -
####################################################################
sub new {
	my $self = shift;
	my $sql1 = "select max(fid) from fragen where umfid=$self->{umfid} ";
    my $a;
	$self->log(4,"Entering: frage:new");
	$self->{id} = ($self->sqlselect($sql1))+1;
    if (! $self->{nextfid} ) {$self->{nextfid}=$self->{id}+1;}
	my $sql2 = "insert into fragen set umfid=$self->{umfid}, fid=$self->{id}, frage='$self->{name}', ".
		   "typ='$self->{typ}', bild='$self->{bild}', nextfid='$self->{nextfid}', ".
		   "qtface='$self->{qtface}', qtsize='$self->{qtsize}', qtcolor='$self->{qtcolor}', ".
		   "atface='$self->{atface}', atsize='$self->{atsize}', atcolor='$self->{atcolor}', ".
		   "grafik='$self->{grafik}', incent=$self->{incent}";
	$self->sqldo($sql2);
	foreach $a (@{$self->{ant}}) {$a->{umfid}=$self->{umfid}; $a->{fid}=$self->{id}; $a->new;}
}

####################################################################
####         Speichert sich mit Update
####         Argumente  : evtl Fragentext und Fragentyp
####         Returnwert : -
####################################################################
sub store {
	my $self = shift;
        $self->log(4,"Entering: frage:store");
	if (@_[0]) { $self->{name} = @_[0]; }
	if (@_[1]) { $self->{typ} = @_[1]; }
	my $sql = "update fragen set frage='$self->{name}', typ='$self->{typ}', nextfid='$self->{nextfid}', bild='$self->{bild}', ".
		  "qtface='$self->{qtface}', qtsize='$self->{qtsize}', ".
		  "qtcolor='$self->{qtcolor}', atface='$self->{atface}', atsize='$self->{atsize}', atcolor='$self->{atcolor}', ".
		  "grafik='$self->{grafik}', incent=$self->{incent} ".
		  "where umfid=$self->{umfid} and fid=$self->{id}";
	$self->sqldo($sql);
	my $a; 
	foreach $a ( @{$self->{ant}} ) {$a->store}
}

####################################################################
####         Löscht sich und alle seine Antworten der Probanden
####	     aus der DB
####         Argumente  : -
####         Returnwert : -
####################################################################
sub delete {
	my $self = shift;
        $self->log(4,"Entering: frage:delete");
	my $sql  = "delete from fragen where umfid=$self->{umfid} and fid=$self->{id} ";
        my $sql1 = "update fragen set nextfid=$self->{nextfid} where umfid=$self->{umfid} and nextfid=$self->{id}";
        my $sql2 = "update antworten set nextfid=$self->{nextfid} where umfid=$self->{umfid} and nextfid=$self->{id}";
        my $sql3 = "select pin from ergebnis where umfid=$self->{umfid} and fid=$self->{id}";
	my $antw = $self->sqldo($sql3);
	if ($antw>1) {return $self->trans("WA15a")." ".$self->{id}." ".$self->trans("WA15c");}
	$self->sqldo($sql);
 	my $f=frage->init($self->{parent}, $self->{nextfid}); $f=$f->load;
 	if (defined $f) {             # Die nextfids nur updaten
	   $self->sqldo($sql1);
	   $self->sqldo($sql2);       # wenn es meine nextfid-Frage gibt
	}
	my $x=$self->{id};
	$self->{id} = undef;
	my $a; 
	foreach $a (@{$self->{ant}}) {$a->delete}
    return $self->trans("WA15a")." ".$x." ".$self->trans("WA15b");
}

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

####################################################################
####         Liefert einen eindeutigen identifikationsstring
####         Argumente  : -
####         Returnwert : Identifikationsstring
####################################################################
sub IDstr {
	my $self = shift;	
	return "U" . $self->{umfid} . "F" . $self->{id}  ;
}

####################################################################
####         Erstellt eine neue Antwort zur Frage
####         Argumente  : Antworttext
####         Returnwert : AntwortID
####################################################################
sub newant {
	my $self = shift;	
	my $a;
	my $L=$self->{ant};
        $self->log(4,"Entering: frage:newant");
	$a = antwort->init($self); $a->new();
	if ($a) {push (@$L, $a);}  #existierende Fragen ins Array packen
	return $a->{id};
}

####################################################################
####         Aendert die FID der Frage
####         Argumente  : neue FID
####         Returnwert : -
####################################################################
sub changefid {
	my $self = shift;
	my $neue = shift()+0;
	$self->log(4,"Entering: frage:changefid");
	if ($neue == $self->{id} ) { return $neue; }
	my $sql = "select fid from fragen where umfid=$self->{umfid} and fid=$neue";	
	if ($neue != 0){
        my $tst = $self->sqlselect($sql);                        # gibts diese Antw.ID schon ?
		if ($tst == 0) {
			$self->sqldo("update fragen set fid=$neue where umfid=$self->{umfid} and fid=$self->{id}");                    
			if ($self->{nextfid}==$self->{id}) {$self->{nextfid}=$neue; $self->store;}
            my $sql1 = "update fragen set nextfid=$neue where umfid=$self->{umfid} and nextfid=$self->{id}";
            my $sql2 = "update antworten set nextfid=$neue where umfid=$self->{umfid} and nextfid=$self->{id}";
			$self->sqldo($sql1);
			$self->sqldo($sql2);
			$self->{id}=$neue;									# wenn nicht, dann speichern
			foreach $a (@{$self->{ant}}) {$a->changefid($self->{id});}
		}	
			
	}
	return $neue;                                                    # neue ID zurückgeben
}

####################################################################
####         Gibt Zeiger auf die nächste Frage zurück
####         Argumente  : die PIN und 1 damit auch sichselbst als nächste Frage gibt, sonst nicht
####                              oder bei 2 gibt er immer die nächste , ob beantwortet oder nicht !    										
####         Returnwert : Zeiger auf nächste Frage oder kein Zeiger, wenn letzte
####################################################################

sub nextfrage {
	my $self = shift;	
        my $pin= shift;                               # Benutzerpin
	my $selftoo= shift;                           # Steuervariable
	my $firstfid= shift;			      # erstefid gegen loopings.....	
        $self->log(4,"Entering: frage:nextfrage");
	if ($firstfid==0){$firstfid=$self->{id};}
	my $a; my $nf; my $fra;  my $nextf; my @L=@{$self->{ant}};
	while ($a=shift @L) {
	  if ($nf=$a->getnextfid($pin)) {$nextf=$nf}  # Von allen beantworteten Fragen die Nextfid holen
        }                                             # Und in nextf speichern
        if (! defined $nextf) {                       # nicht def., bzw 0  =  nicht beantwortet
	    if ($selftoo == 1) {return $self;}        # bei "ichauch" gebe ich mich zurück
	    $nextf=$self->{nextfid};                  # sonst die Standardnextfid der Frage
        }
        if ($nextf == -1) {return;}                   # Fragebogen zuende !!
	if ($nextf == $self->{id}) {
		$self->log(4,"Ich bin Nextfid von mir selbst !"); 
		$self->{warntext}=$self->trans("WA5");
		return $self; 
	}
					 	       # bin ich selbst meine nächste ? , Dann halt mich zurück um endlosschl. zu verh.
        if ($nextf == $firstfid) {$self->log(2,"Aaargh, Antwortlooping entdeckt !"); return;}    # Wenn die Anfangsfrage wieder auftaucht:  Loopinggefahr!!! und ENDE !
        $fra=frage->init($self->{parent}, $nextf); $fra=$fra->load;     # nächste Frage fragen !!!
	if (! defined $fra) {return;}                   # wenn nicht definiert dann ende
	if ($selftoo == 2) {return $fra;}             # unbedingt nächste Frage, dann nächste zurück !
	return $fra->nextfrage($pin,1,$firstfid);     # rekursiv die nächste mit "ichauch" aufrufen

}

####################################################################
####         Nummeriert die Antworten neu durch
####         Argumente  : -
####         Returnwert : -
####################################################################
sub renumant {
	my $self = shift;
	my $a=undef; my $x=1; 
        $self->log(4,"Entering: frage:renumant");
	foreach $a ( @{$self->{ant}}) { $a->changeaid($x++) }
}

####################################################################
####         Loescht die Antwort mit der angegebenen ID
####         Argumente  : Aid der Antwort
####         Returnwert : -
####################################################################
sub delant {
	my $self = shift;
	my $a; 
	my $aid = shift;  my @L=();
    $self->log(4,"Entering: frage:delant");
	foreach $a (@{$self->{ant}}) {
		if ($a->{id} == $aid) {$a->delete;}
		else {push (@L, $a); }
	}	
	$self->{ant}=\@L;
}

####################################################################
####         Speichert die Antworten der Panelisten
####         Argumente  : Zeiger auf Variablen
####         Returnwert : -
####################################################################
sub enterant {
	my $self = shift;
	my $a; my $gd; 
        my $sql1= "select pin from ergebnis where umfid=$baseq::VARS{umfid} and fid=$baseq::VARS{fid} and pin=$baseq::VARS{pin}";
        $self->log(4,"Entering: frage:enterant");
	if ( defined $self->sqlselect($sql1) ){ return ;}
	foreach $a (@{$self->{ant}}) { $a->enterant; }	
        return 1;
}

####################################################################
####         Uebernimmt Textattribute des Parent
####         Argumente  : Zeiger auf Variablen
####         Returnwert : -
####################################################################
sub settext {
	my $self = shift;
        $self->log(4,"Entering: frage:settext");
	$self->{qtface} = $self->{parent}->{qtface};
 	$self->{qtsize} = $self->{parent}->{qtsize};
 	$self->{qtcolor} = $self->{parent}->{qtcolor};
	$self->{atface} = $self->{parent}->{atface};
 	$self->{atsize} = $self->{parent}->{atsize};
 	$self->{atcolor} = $self->{parent}->{atcolor};
    $self->store;
}


####################################################################
####         Gibt die Frage als html für Panelisten aus
####         Argumente  : -
####         Returnwert : HTML-text der Frage
####################################################################
sub htmlfra {
	my $self = shift;
	my $BILD;
        $self->log(4,"Entering: frage:htmlfra");
	if ($self->{bild} ne "") { $BILD=$self->IMG($self->{bild}); } else {$BILD="&nbsp;"}
	if ($self->{warntext} eq "") {$self->{warntext}=$self->{parent}->{warntext};}
        $TITLE=$self->trans("TI6");
        $HTML= $self->qfont($self->{name})."\n<BR>\n".
		"<TABLE>\n".
 	        $self->TR([ $self->htmlant , $BILD ]).
		"</TABLE>\n<BR><BR>\n";
	my @L1=("but","but","but"); my @L2=("BU25","BU3","BU2");
	if (! $self->{parent}{uspringen}) {@L1=("but","but"); @L2=("BU25","BU2");}  # Überspringen
	if ($self->{typ} eq "H")  {@L1=("but"); @L2=("BU25");}  # Nur Weiter
	$HTML.=$self->SMrow(\@L1,\@L2);

        $self->printhtml("prorata.web: internet market research", $HTML)
}

####################################################################
####         Gibt die Antworten als html für Probanden zurück
####         Argumente  : -
####         Returnwert : Antworten als HTML
####################################################################
sub htmlant {
	my $self = shift;
	my ($a, $ret, $me );
	my @L=@{$self->{ant}} ;
 	my @LI=("&nbsp;","&nbsp;");
	my $typ = $self->{typ};
        (my $typ1, my $menge) = $typ =~/^(.)(.*)/;
	my $me=0;
	my $Start="<TABLE size=100% >\n";
	my $End="</TABLE>\n";
        $self->log(4,"Entering: frage:htmlant");
	if ($typ1 eq "D" ) {$Start="<SELECT name='".$self->IDstr."'>\n"; $End="</SELECT>\n";}
	if ($typ1 eq "S" ) {
		for ($me=1; $me<=$menge; $me++) { @Li[$me+1] = $self->afont($me); }
        	$Start.=$self->TR(\@Li);
        }
        $ret .= $Start;
	while ($a=shift @L) { $ret .= $a->htmlant;  }	
        $ret .= $End;

	return $ret
}	
			
####################################################################
####         Gibt sich und die Antworten zur Bearbeitung
####		durch den Kunden aus
####         Argumente  : -
####         Returnwert : HTML-string
####################################################################

sub htmlbearb {
	my $self = shift;
	my ( $a, $ret, @merk, $x, $fid, @fidl, @freefids  );
    my $TITLE=$self->trans("TI6")." ".$self->{id};
    $self->log(4,"Entering: frage:htmlbearb");
	my $sql="select fid from fragen where umfid=$self->{umfid} order by fid";
	my $sth=$self->sqlprepare($sql);		# Alle fids heraussuchen
	while ($fid=$sth->fetchrow_array) {$fidl[$fid]=1; $maxfid=$fid+1}  # und in eine Liste speichern
	@freefids=($self->{id});				# Erstmal sich selbst
	for ($x=1; $x<=$maxfid ; $x++) {	
		if (! ($fidl[$x]) ) { push @freefids ,$x; }	  # und dann alle sonst noch freien Fids in die Liste
	}
		
	$ret=$self->DD("newfid", \@freefids, $self->{id} ).$self->qfont($self->trans("HI24"))."\n".
	$self->TF("frage",$self->{name},80)."\n<BR><BR>\n";

        $ret.="<TABLE>\n".
                $self->TR([ $self->sfont($self->trans("HI25")),
                            $self->sfont($self->trans("HI26")),
                            $self->sfont($self->trans("HI27")),
                            $self->sfont($self->trans("HI28")) ]).
                $self->TR([ $self->sfont($self->trans("HI24")),
                            $self->DDfface("qtface",$self->{qtface}),
                            $self->TF("qtsize",$self->{qtsize},5),
                            $self->DDfcolor("qtcolor",$self->{qtcolor})  ]).
                $self->TR([ $self->sfont($self->trans("HI29")),
                            $self->DDfface("atface",$self->{atface}),
                            $self->TF("atsize",$self->{atsize},5),
                            $self->DDfcolor("atcolor",$self->{atcolor})  ]).
	      "</TABLE>\n<BR><BR>\n";	

        my %htyp=("E",$self->trans("HI32"),"M",$self->trans("HI33"),"T",$self->trans("HI34"),
		  "S5",$self->trans("HI35"),"S7",$self->trans("HI36"),"S11",$self->trans("HI36c"),"D",$self->trans("HI36a"),"H",$self->trans("HI36b"));
        my @ltyp = keys %htyp;
        my %hgrafik=("BAU",$self->trans("HI46"),"BAS",$self->trans("HI47"),"VLU",$self->trans("HI48"),"VLS",$self->trans("HI49"),"SKU",$self->trans("HI50"),"SKS",$self->trans("HI51"),"PIS",$self->trans("HI52"));
        my @lgrafik = keys %hgrafik;

	$ret.="<TABLE>\n".
	      $self->TR([$self->sfont($self->trans("HI31c")),$self->CB("incent", 1, $self->{incent}) ]).
		  $self->TR([$self->sfont($self->trans("HI30")), $self->TF("bild",$self->{bild},30) ]).
	      $self->TR([$self->sfont($self->trans("HI31")), $self->TF("nextfid",$self->{nextfid},5) ]).
	      $self->TR([$self->sfont($self->trans("HI31a")),$self->DD("typ",\@ltyp,$self->{typ},\%htyp) ]).
	      $self->TR([$self->sfont($self->trans("HI31b")),$self->DD("grafik",\@lgrafik,$self->{grafik},\%hgrafik) ]).
	      "</TABLE>\n";
	



        $ret.="<TABLE>\n".$self->TR([
                $self->sfont($self->trans("HI37")),
                $self->sfont($self->trans("HI38")),
                $self->sfont($self->trans("HI44")),
                $self->sfont($self->trans("HI45")),
                $self->sfont($self->trans("HI31"))    ]);

        for ($x=1;$x<6;$x++){ push (@merk, $self->newant); }     # 5 neue Antworten bauen
	my @L=@{$self->{ant}};
	while ($a=shift @L) { $ret.=$a->htmlbearb; }                     # alle Antworten ausgeben
	while ($a=shift @merk) {$self->delant($a);}                      # und die 5 wieder löschen....
        $ret.="</TABLE>\n<BR>\n".
      	$self->SMrow(["but","but","but","but","but","but"] , ["BU1","BU5","BU10","BU8","BU4","BU24"]); 

        $self->{helpkontext}="fragebearbeiten";
        $self->printhtml($TITLE, $ret);
        return;
}

####################################################################
####         nimmt die Änderungen aus dem Formular an
####         Argumente  : Zeiger auf Variablen
####         Returnwert : -
####################################################################

sub getbearb {
	my $self = shift;
	my ( $a, $gd, $good, @L, @L1, $x );
        $self->log(4,"Entering: frage:getbearb");
	$self->{name}=$self->clean($baseq::VARS{frage});
	$self->{bild}=$self->fclean($baseq::VARS{bild});	
	$self->{nextfid}=$baseq::VARS{nextfid}+0;
	$self->{typ}=$self->fclean($baseq::VARS{typ});
	$self->{qtface}=$self->fclean($baseq::VARS{qtface});	
	$self->{qtsize}=$self->fclean($baseq::VARS{qtsize});	
	$self->{qtcolor}=$self->fclean($baseq::VARS{qtcolor});	
	$self->{atface}=$self->fclean($baseq::VARS{atface});	
	$self->{atsize}=$self->fclean($baseq::VARS{atsize});	
	$self->{atcolor}=$self->fclean($baseq::VARS{atcolor});
	$self->{grafik}=$self->fclean($baseq::VARS{grafik});
	$self->{incent}=$baseq::VARS{incent}+0;
	my $newfid=$baseq::VARS{newfid}+0;
	for ($x=1;$x<6;$x++){  $self->newant; }           # 5 neue Antworten bauen
	@L=@{$self->{ant}};
	foreach $a (@L) { $a->getbearb($#L+2); }            # Werte einlesen
	foreach $a (@L) {if ( $a->{name} eq "") {$self->delant($a->{id});};} # alle leeren Antworten loeschen
		$self->loadantw;
		$self->renumant;
		$self->store;
	if ($newfid != $self->{id}) {$self->changefid($newfid);}	
}
	
####################################################################
####         Listet die Fragen auf zur Anzeige für den Kunden
####         Argumente  : -
####         Returnwert : HTML-text
####################################################################

sub fragenliste {
	my $self = shift;
	my $ret=""; my $a; my @L=@{$self->{ant}};
	my $umf=$self->{parent};
	my $warn="&nbsp;";
        $self->log(4,"Entering: frage:fragenliste");
	if ($self->{nextfid} == $self->{id}) {$warn=$self->trans("LW5");}
	if ($self->{nextfid} == -1) {$warn=$self->trans("LW4");}
	my $f=$self->sqlselect("select fid from fragen where umfid=$self->{umfid} and fid=$self->{nextfid}");
	if ($f==0) {$warn=$self->trans("LW4");}
	if (! ($self->{qtsize}=~/^\+{0,1}[0-9]$/)) {$warn=$self->trans("LW6");}
	if (! ($self->{atsize}=~/^\+{0,1}[0-9]$/)) {$warn=$self->trans("LW7");}
	if ($self->{typ} eq "" ) {$warn=$self->trans("LW8");}
	if ($self->{nextfid} < $self->{id} && $self->{nextfid} != -1) {$warn=$self->trans("LW2");}
	$ret.=$self->TR([
	        $self->RB("radio",$self->{id}),
	      	$self->{id}.")",
	      	$self->sfont("[".$self->{typ}."]") . $self->qfont($self->{name}),
	      	$self->sfont(">".$self->{nextfid}),
	      	$self->sfont($warn)  ]);
	$self->log(4,"Jetzt in die Antwortenliste");      	
	while ($a=shift @L) { $ret.=$a->antwortenliste; }
	$ret.=$self->TR(["&nbsp","&nbsp;","&nbsp;","&nbsp;"]);  # Eine Leerzeile......
	return $ret;
}
	
####################################################################
####         Strickt die Grafik für Live statistik
####         Argumente  : -
####         Returnwert : HTML-text
####################################################################

sub makegrafik {
	my $self = shift;
        $self->log(4,"Entering: frage:makegrafik");
	my ($X)=$self->{typ}=~/^S(\d{1,2})$/;    # $X=5 oder 7 wenn Skalenantwort 	      	
	my $size = shift;
	$self->{olda}=0;                   ######### Nochn OTTO-HACK (siehe antwort.pm->grafikstring)
	my $GRA=substr($self->{grafik},0,2);
        my $sort =substr($self->{grafik},2,1);
	if ($size == 0) {$size=35;}
        my $sql="select distinct(pin) from ergebnis where umfid=$self->{umfid} and fid=$self->{id}";
	my $sth=$self->sqlprepare($sql);
	my $N=$sth->rows;
	$sth->finish;
	$self->log(4,"OTTO HACK: ".$self->{parent}->{knr}." | ".$self->{id});

	########################### OTTO HACK :-)
	if ( ($self->{parent}->{knr}==4) && ($self->{id}==1) ) {
		$N=$self->sqlselect("select count(pin) from umfidpin where umfid=$self->{umfid}");
	}
	########################### OTTO Hack Ende.....
	
	my $filename=$baseq::UMFIMG.$self->IDstr.$self->{grafik}.$N.".gif";
	my $Y=open (FILE, "<$baseq::PATH.$filename"); close FILE;
	if ($Y){return $filename;}

	$self->log(4,"Grafikdatei = $baseq::PATH.$filename / X=$X, GRA=$GRA, sort=$sort");
	
	my @Liste=();
        my @L=@{$self->{ant}};
	my $anz=$#L+1;
	$self->log(4, "Anzahl der Teilnehmer N: $N ,  Anzahl der Antworten: $anz" );

	while ($a= shift @L) {push @Liste,$a->grafikstring($X);}
	grafik::paint($GRA, $baseq::PATH.$filename , $size , \@Liste , $X , $N, $sort);
        return $filename;
}

####################################################################
####         Strickt die Grafik für Live statistik
####         Argumente  : -
####         Returnwert : HTML-text
####################################################################

sub htmlgrafik {
	my $self = shift;
	my $IMG="";
        $self->log(4,"Entering: frage:htmlgrafik");
	if ($self->{typ} eq "H") {return;}
	$pin=$self->sqlselect("select pin from ergebnis where umfid=$self->{umfid} and fid=$self->{id}");
        if ($pin>0){
	    if ($self->{typ} ne "T") {	
		$IMG=$self->IMG($self->makegrafik)."<BR>\n".$self->htmltextant;
            }
            if ($self->{typ} eq "T") { $IMG=$self->htmltextant; }
	}	
	else {$IMG=$self->afont($self->trans("HI40"));}
	
	return  $self->qfont($self->{name}) ."<BR>\n". $IMG . "\n<HR>\n"; 	

}

####################################################################
####         Anzahl und Text fuer Grafik
####         Argumente  : -
####         Returnwert : HTML-text
####################################################################

sub anzahlstr {
	my $self = shift;
	my $IMG="";
        $self->log(4,"Entering: frage:anzahlstr");
	if ($self->{typ} eq "H") {return;}
	my $pinz=$self->sqldo("select distinct(pin) from ergebnis where umfid=$self->{umfid} and fid=$self->{id}");
        return $pinz." Frage ".$self->{id};
}

####################################################################
####         Erstellt HTML-Datei mit Textantworten
####         Argumente  : -
####         Returnwert : Link auf HTML-Datei
####################################################################

sub htmltextant {
	my $self = shift;
        $self->log(4,"Entering: frage:htmltextant");
	my $TITLE=$self->trans("TI13");
	my $HTML=$self->qfont($self->{name})."<BR>\n";
	my $ret="";
	my @L=@{$self->{ant}} ;
	my $typ = $self->{typ} =~/^(.)\d*/;
        my $sql="select distinct(pin) from ergebnis where umfid=$self->{umfid} and fid=$self->{id}";
	my $sth=$self->sqlprepare($sql);
	my $N=$sth->rows;
	$sth->finish;
	my $filename=$baseq::UMFIMG.$self->IDstr."N".$N.".html";
	my $retw = $self->AH($filename, $self->sfont($self->trans("HI41")));
	my $X=open (FILE, "<$baseq::PATH.$filename"); close FILE;
	if ($X){return $retw;}
	if ($typ ne "S" ) {                                    # Antwortliste ausgeben
	    while ($a=shift @L) {$ret .= $a->htmltextant; }
	}	


	if ($ret eq ""){return;}
        $self->printhtml($TITLE, $HTML.$ret, $baseq::PATH.$filename);
	return $retw;
}

####################################################################
####         liefert ein Array der Antworttexte zurueck
####         Argumente  : -
####         Returnwert : Link auf HTML-Datei
####################################################################

sub antwortarray {
	my $self = shift;
	my @erg=();
	foreach $a (@{$self->{ant}}) {$erg[$a->{id}]=$a->{name};}
	$self->log(4,join (" - ", @erg) );
	return @erg;
}

####################################################################
####         liefert den fuer diese Frage verdienten Betrag
####		 in Eurocent
####         Argumente  : -
####         Returnwert : Link auf HTML-Datei
####################################################################

sub verdient {
	my $self = shift;
	my $pin = shift;
	if ($pin==0) {$self->log(1, "frage->verdient : PIN wurde nicht übergeben !"); }
	my $sql="select aid from ergebnis where umfid=$self->{umfid} and fid=$self->{id} and pin=$pin";
	if ($self->sqlselect($sql)){return $self->{incent};}
	return 0;
}