function makearray(n) 
{ this.length=n; 
  for(var i=0;i<n;i++) this[i]=0;
  return this;
}

function d(frage,w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,antw,punkte)
{ this.frage=frage;
  this.ersteantwort="-";
  if(punkte!=null) this.punkte=punkte;
  else this.punkte=1;
  this.antw=antw-1;   /* Nummer richtigen Auswahl */
  this.w=new makearray(9);
  this.w[0]=w0; this.w[1]=w1; this.w[2]=w2; this.w[3]=w3; this.w[4]=w4;
  this.w[5]=w5; this.w[6]=w6; this.w[7]=w7; this.w[8]=w8;this.w[9]=w9;
  this.richtig=this.w[antw-1];
}  
var DB=new makedbase();


function makerf(anz)
	{ this.length=anz;
	   var i;
	   for(i=0;i<anz;i++) this[i]=i;
	}

var LOC=window.location.href,RNDXSTART;
var ANZANTW=10;    /* maximal 10 Auswahlmoeglichkeiten */
var RF=new makerf(DB.length);
var RFA=new makerf(ANZANTW);
var ANZAHL=1;     // initialisiert in start()
var NACHLADEN=0;
var MAXSCORE=0;
var FIRST= null;
var POS=0,GESAMT=0,NAME="Auswertung";
var RICHTIG=0,GESPUNKTE=0;
var EXPDAYS=3,EXPTIMEOUT=0.02;
var VERSUCHE=0,STAND="";
var dat=new Date(),TMP=0,timer1=0;
var RRND1=0.01*dat.getMinutes()+0.1*dat.getSeconds(),ARND1=3.123456789;
var IEBUG=false;

function setrandomseed(x){
	RRND1=x;
}
function rnd()	/* Zufallszahl in (0,1) */
	{  RRND1=Math.pow(RRND1+1.0*ARND1,8);
	   RRND1-=Math.floor(RRND1);
	   return RRND1;
	}

function random(a,b)  /* Zufallszahl in [a,b] */
	{ return Math.floor((b-a+1)*rnd()+a);
	}

function tmp()
	{  TMP++;
	   FR0.document.erg.time.value=TMP+"s";
	   timer1=setTimeout("tmp();",1000);
	   }

function tmp2() {
	FR0.document.erg.time.value=TMP+"s";
	if(TMP==0) beenden();
	else timer1=setTimeout("tmp2()",1000);
	TMP--;
}

function permutieren(p)
	{ var i,z,a,b,n=p.length-1,anz=n;
          for(i=0;i<anz;i++) { a=random(0,n); b=random(0,n);
			       if(a!=b) {z=p[a]; p[a]=p[b]; p[b]=z;}
			     }
	}

function zeige() {
	SPERRE=true;
	var n=RF[POS],f=DB[n].frage;
	FR0.document.erg.pkt.value=DB[n].punkte;
	if(f.charAt(0)=='!') {
		IEBUG=true;  /* Fehler wenn Frames in geladener Seite, auch bei Netscape */
		FR1.location=f.substring(1);
		}
	else zeige1(n);
	SPERRE=false;
}


function zeige1(n)
{
 var t=TITELTEXT+DB[n].frage+"<p><form><table>";
 for(var i=0; i<ANZANTW; i++)
     if(DB[n].w[RFA[i]]!="") t=t+"<tr valign=center><td><input type='radio' name='r' onClick=window.parent.auswerten("+RFA[i]+")></td><td>"+DB[n].w[RFA[i]]+"</td></tr>";
 t=t+"</table></form>"+NACHTEXT;
 schreibe(t);
}

function schreibe(t) {
	var doc=FR1.document;
	doc.open();
	doc.write("<html><head>"+HEADTXT+"<title>"+POS+"</title></head><body "+BODYTXT+" >");
	doc.write(t+"</body></html>");
	doc.close();
}


function bild(n)
{ if(!controll()) return;
  standakt("x");
  var p=DB[RF[POS]];
  if(VERSUCHE==0) {
	GESAMT+=p.punkte;
	p.ersteantwort="Bereich "+n;
	p.richtig="Bereich "+(1+p.antw);
	}
  auswerten2(n-1);
}

function savecookie() 
{  if(!COOKIES) return;
   var exp=new Date();
   FixCookieDate(exp);
   exp.setTime(exp.getTime()+18000);
   SetCookie("t","tgebhardt",exp);
   if(GetCookie("t")!="tgebhardt") {COOKIES=false; return;}

   if(POS>=DB.length) {
   	ANZAHL++;
   	RNDXSTART=rnd();
   	var res=Math.round(100*RICHTIG/GESAMT);
   	if(res>MAXSCORE) MAXSCORE=res;
   	}
   exp.setTime(exp.getTime()+(86400000*EXPDAYS));
   SetCookie("q",cookieinf(),exp);
}

function cookieinf() {
	var s="",p=POS,g=GESAMT;
	if(VERSUCHE!=0) { p++; g++; }
	s+=MAXSCORE+"#"+TMP+"#"+RNDXSTART+"#"+p+"#"+g+"#"+RICHTIG+"#"+ANZAHL+"#"+FIRST+"#"+STAND+"#"+NACHLADEN+"#";
	return s;
}

function send()
{ var doc=window.parent.FR1.document,w=doc.schluss;
  var z="mailto:"+RUECKADRESSE+"?subject="+LOC;
  w.action=z;
  return true;
}

function ende() {
	if(SPERRE) return gesperrt();
	if(IEBUG) {
		window.open(ENDEURL);
		window.parent.close();
		return;
		}
	window.location=ENDEURL;
}

function beenden() {
  SPERRE=true;
  FR0.document.erg.pos.value="";
  clearTimeout(timer1);
  var nb=0,s=STAND,i,res=Math.round(100*RICHTIG/GESPUNKTE);
  FR0.document.erg.pro.value=res+"%";
  FR0.document.erg.pkt.value="";
  while((i=s.indexOf("o"))>=0) {nb++; s=s.substring(++i); }
  var txt="<hr><h2 align=center>Endergebnis: "+res+"%</h2><hr>Sie haben "+(DB.length-nb)+" von "+DB.length+" Fragen beantwortet. Dabei haben Sie "+RICHTIG+" von insgesamt "+GESPUNKTE+" möglichen Punkten erreicht. <a href=javascript:window.parent.statistik()>Details</a><p>";

   if(RUECKADRESSE!="") txt+="<center><FORM ENCTYPE='text/plain' METHOD='POST' NAME=schluss ACTION='' ONSUBMIT='return window.parent.send()'><INPUT TYPE=HIDDEN NAME=Anteil VALUE='"+res+"%'><INPUT TYPE=HIDDEN NAME=Zeit VALUE='"+TMP+"s'><table><tr><td>E-mail-Adresse:</td><td><input type=text name=Emailadresse size=35></td></tr><tr><td>Bemerkungen:</td><td><textarea name=Kommentar rows=5 cols=35 WRAP=1></textarea></td></tr></table><input type=SUBMIT VALUE=ABSENDEN></form></center>";
txt+=klainfo();
   schreibe(txt);
   if(KLA) FR1.print();
   SPERRE=false;
}

function klainfo() {
	if(!KLA) return "";
	var d=new Date(),a=cookieinf(),z,txt="<h3>"+NAME+"</h3>"+d+"<br>";
	if((z=GetCookie("q"))!=null) {
		txt+=(z+"<br>");
		if(a!=z) txt=txt+a+"***";
		}
	else txt+="<b>Cookies abgeschaltet</b>";
	return txt;
}

function statistik() {
	var res=Math.round(100*RICHTIG/GESPUNKTE),i,p,txt="<html><head>"+HEADTXT;
	txt+=("<title>"+NAME+"</title></head><body "+BODYTXT+" >");
	txt+="<center><hr><h2>Endergebnis:  "+res+"%</h2><hr><table border=1>";
	txt+="<tr><th>Frage</th><th>Punkte</th><th>Richtig</th><th>Geantwortet</th></tr>";
	for(i=0;i<DB.length;i++) {
			p=DB[RF[i]];
			txt+="<tr><td>"+p.frage+"</td><td>";
			txt+=p.punkte+"</td><td>";
			txt+=p.richtig+"</td><td>";
			txt+=p.ersteantwort+"</td></tr>";
		}

	txt+="</table><form>";
	txt+="<input type=button value=Schliessen onClick=self.close()></form></center>";
	txt+=klainfo();
	txt+="</body></html>";
	var w=window.open();
	w.document.open();
	w.document.write(txt);
	w.document.close();
}

function aktualisieren() {
	var z=FR0.document.erg;
  	z.ric.value=RICHTIG+"/"+GESPUNKTE;
	z.pos.value=(1+POS)+"/"+DB.length;
        if(GESAMT!=0) z.pro.value=Math.round(1000*RICHTIG/GESAMT)/10+"%";
	else z.pro.value="";
	savecookie();
	if(POS < DB.length) zeige(); 
	else { 	z.pkt.value=""; beenden(); }
}

function extern(richtig,gesamt) {
	if((richtig==-1)&&(gesamt==-1)) return true;
	if(!controll()) return;
	if(richtig<10) standakt(""+richtig);
	else standakt("e");
	var p=DB[RF[POS]];
	p.richtig=richtig+" von "+gesamt;
	p.ersteantwort="&nbsp;"
	GESAMT+=p.punkte;
	RICHTIG+=(richtig/gesamt)*p.punkte;
	}

function controll() {
	var r=false,s;
	if((POS>=0)&&(POS<DB.length)) {
		s=DB[RF[POS]].frage;
		if(s.charAt(0)=="!") r=(FR1.location.href.indexOf(s.substring(1))>=0);
		else r=(FR1.document.title==POS);
		}
	if(!r) alert("  Falsche Position !! \nWeiter mit << bzw. >>");
	return r;
}

function standakt(z) {
    STAND=STAND.substring(0,POS)+z+STAND.substring(POS+1);
}

function auswerten(n){ 
  if(!controll()) return;
  standakt("x");
  var p=DB[RF[POS]];
  if(VERSUCHE==0) {
	GESAMT+=p.punkte;
	p.ersteantwort=p.w[n];
	}
  auswerten2(n);
}

function auswerten2(n) {
 var p=DB[RF[POS]];
 if(n==p.antw)
     { if(VERSUCHE==0) { standakt("X");RICHTIG+=p.punkte; }
       if(SOUND) playSound(1);
       if(RICHTIGTXT!="") alert(RICHTIGTXT);
       next();
    }
  else { VERSUCHE++;
	 p.w[n]="";
	 if(SOUND) playSound(0);
	 if(VERSUCHE>=MAXVERSUCHE) next();
 	 else { if(FALSCHTXT!="") alert(FALSCHTXT); 
		aktualisieren();
		}
       }
}

function cookaw(z,v,typ) {
	if(z=="") return "";
	var i=z.indexOf("#");
	if(i>=0) { 
		if(typ==0) eval(v+"="+z.substring(0,i));
		else eval(v+"=\""+z.substring(0,i)+"\"");
        	return z.substring(i+1);
	}
	return "";
}


function down() {
	while(POS>=0) {if(STAND.charAt(POS)=="o") break; POS--;}
}

function prev() {
	POS--;
	down();
	if(POS<0) POS=DB.length-1;
	down();
	if(POS<0) POS=DB.length;
	VERSUCHE=0;
	aktualisieren();
}

function up() {
	while(POS<DB.length) {if(STAND.charAt(POS)=="o") break; POS++;}
}

function gesperrt() {
	alert("Erst rechts weiter");
}


function next() {
	if(SPERRE) return gesperrt();
	POS++;
	up();
	if(POS>=DB.length) POS=0;
	up();
	VERSUCHE=0;
	aktualisieren();
}

function starten() 
{ var d=new Date(),z,ze,i;
   GESPUNKTE=0;
   for(i=0;i<DB.length;i++) GESPUNKTE+=DB[i].punkte;
   TMP=0;
   MAXSCORE=0;
   ANZAHL=1;
   POS=0;
   GESAMT=0;
   RICHTIG=0;
   FIRST=d.getDate()+"."+(1+d.getMonth())+"."+d.getYear();
   RNDXSTART=rnd();
   for(i=0;i<DB.length;i++) STAND+="o";	
   if(COOKIES) {
	if((z=GetCookie("q"))!=null) {
		z=cookaw(z,"MAXSCORE",0);
		z=cookaw(z,"TMP",0);
		z=cookaw(z,"RNDXSTART",0);
		z=cookaw(z,"POS",0);
		z=cookaw(z,"GESAMT",0);
		z=cookaw(z,"RICHTIG",0);
		z=cookaw(z,"ANZAHL",0);
		z=cookaw(z,"FIRST",1);
		z=cookaw(z,"STAND",1);
		z=cookaw(z,"NACHLADEN",0);
		}
	}
  if(POS>=DB.length) { POS=0; GESAMT=0; RICHTIG=0; TMP=0; NACHLADEN=0;} 
  if(STAND.indexOf("o")<0) {STAND=""; for(i=0;i<DB.length;i++) STAND+="o";}
  RRND1=RNDXSTART;
  if(ANZAHL>1) alert(ANZAHL+". Durchgang.\nIhr bestes Resultat war "+MAXSCORE+"%");
  NACHLADEN++;
  aktualisieren();
  if(FRAGENMIXEN) permutieren(RF);
  if(ANTWORTENMIXEN) permutieren(RFA);
  if(TIMEOUT>0) {
	EXPDAYS=EXPTIMEOUT;
	if(TMP<=0) TMP=TIMEOUT; 
	tmp2();
	}
  else tmp();
  NAME="";
  if(KLA) ident(); 
  else zeige();
}

function ident2(n){
	if(n=="") return;
	NAME=n;
	SPERRE=false;
	zeige();
}

function ident() {
	SPERRE=true;
	var txt=TITELTEXT+"<b>Geben Sie bitte Ihren Namen an:</b><center><form name='f'><input type=text size=20 name=n><p><input type=button value=START onClick='window.parent.ident2(document.f.n.value)'></form></center>";
	schreibe(txt);
}

function FixCookieDate (date)
{ var base = new Date(0);
  var skew = base.getTime();
  if (skew > 0) date.setTime (date.getTime()-skew);
}

function getCookieVal (offset)
{ var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1)
    endstr = document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie(name)
{ var arg = LOC+"."+name+"=";
   var alen = arg.length;
   var clen = document.cookie.length;
   var i = 0;
   while (i < clen)
      { var j = i + alen;
        if (document.cookie.substring(i,j)==arg) return getCookieVal(j);
        i = document.cookie.indexOf(" ",i)+1;
        if (i==0) break; 
      }
  return null;
}

function SetCookie (name,value,expires,path,domain,secure)
 {  document.cookie = LOC+"."+name+"=" + escape (value) +
     ((expires) ? "; expires=" + expires.toGMTString() : "") +
     ((path) ? "; path=" + path : "") +
     ((domain) ? "; domain=" + domain : "") +
     ((secure) ? "; secure" : "");
 }

/*------------ Sound ---------------*/
var can_play_sounds = soundcheck();

function soundcheck() {
	if(navigator.appName=='Microsoft Internet Explorer') return true;
	/* vorläufig */
	var mimetype = 'audio/midi';
	if (navigator.mimeTypes) {
      		if (navigator.mimeTypes[mimetype] != null)
        	return (navigator.mimeTypes[mimetype].enabledPlugin != null);
  		}
	return false;
}

function playSound(i) {
      if (FR0.document.embeds && can_play_sounds) {
          if (navigator.appName == 'Netscape') FR0.document.embeds[i].play();
          else { 
		if (i==0) FR0.document.FALSCHIE.run();
		else if(i==1) FR0.document.RICHTIGIE.run();
		}
      }
  }

