var DB,POS,TEXT,TYP,V,VERSUCHE=3,AKTPUNKTE=0,GESPUNKTE=0,STATUS,EPUNKTE,MAILTEXT;
var HALBIEREN=false;
var COOKIE=true,KLA=0,NAMEFRAGEN=false,SOUND=true,BESUCHE=0,ANZ=0,BEENDET=false;
var COOKIEDAYS=1;
var TIME=0,TIMER,TIMEOUT=0;
var FRAGENMIXEN=0,ANTWORTENMIXEN=0;
var RICHTIGNAME="ja??.htm",FALSCHNAME="nein??.htm",RICHTIGTXT=0,FALSCHTXT=0,TXTTIME=1;
var PLUSNAME="ok???.htm",MINUSNAME="nok???.htm";
var RWIN=null;
var RWINP="toolbar=no,location=no,status=no";
var RXS=setseed(0),ARND1=3.123456789,RRND1;
var NAME="",EMAIL="",SPERRE=false,BROWSERTYP="?";
var CSET="%_.1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/+*-@";
var RNDS=1123,RNDA=11113,RNDB=1,RNDM=524288;
var KRYPTO=false,DRUCKEN=false;
var MAN=false,CN,RF;
var ENDEURL="";
var VAR1,VAR2,VAR3,VAR4,VAR5,VAR6,VAR7,VAR8,VAR9;

window.start=starten();

function d(typ,text,punkte)
{ var i=DB.length;
  DB.length++;
  DB[i]=new db();
  DB[i].nr=i;
  DB[i].typ=typ;
  if(KRYPTO) text=krypto(text);
  DB[i].text=unescape(text);
  if(punkte) DB[i].punkte=punkte;
  else DB[i].punkte=1;
} 

function db() {
  this.typ=null;
  this.nr=null;
  this.inhalt=null;
  this.punkte=null;
  this.erreicht=0;
  this.loesung="";
  return this;
}

function ende() {
	//nur Netscape: setcookie();
	if(ENDEURL!="")	window.location.href=ENDEURL;
	else window.close();
}

function sendmail() {
	var f=FR0.document;
	if(f.status.Auswertung) f.status.Auswertung.value=MAILTEXT;
	if(f.status.action) f.status.submit();
}

function beenden() {
	var i,out="",z,dat=new Date(),ap;
	ANZ++;
	if(TIMER) clearTimeout(TIMER);
	BEENDET=true;
	POS=0;
	TIME=TIMEOUT;
	RXS=setseed(0);
	STATUS="";
	for(i=0;i<DB.length;i++) STATUS+="o";
	info();
	ap=AKTPUNKTE+" von "+GESPUNKTE+" Punkten erreicht ("
	ap+=(Math.round(1000*AKTPUNKTE/GESPUNKTE)/10)+"%)";
	MAILTEXT=NAME;
	if(EMAIL!="") MAILTEXT+=" ("+EMAIL+") \n";
	MAILTEXT+="\nerreichte Punkte:\n";
	for(i=0;i<DB.length;i++) MAILTEXT+=DB[i].erreicht+" ";
	MAILTEXT+="\n\nInsgesamt: "+ap+"\n\n";
	if(NAMEFRAGEN!=0) out+=("<b>Ergebnis für "+NAME+":</b><p>");
	out+="<center><b>";
	out+="Sie haben "+ap;
	out+=".</b></center><p>";
	if(KLA!=1) {
		for(i=0;i<DB.length;i++) {
			z=DB[RF[i]];
			out+=z.loesung;
			out+="<p align=right>["+z.erreicht+" von "+points(z.punkte)+"]</p>";
			out+="<hr>";
			}
		}
	sendmail();
	EPUNKTE=AKTPUNKTE;
	AKTPUNKTE=0;
	NAME="";
	setcookie();
	if(NAMEFRAGEN) {
		out=out+ANZ+". Durchgang, "+BESUCHE+" mal gestartet<br>"+dat+"<br>";
		if(MAN) out+="Cookies waren teilweise abgeschaltet";
		}
	TEXT=out;
	z="quiz3.htm";
	if(DRUCKEN) z+="?prn";
	FR1.location=z;
}

function beantwortet(n) {
	return (STATUS.charAt(RF[n])=="x");

}

function next() {
	if(SPERRE) return;
	if(BEENDET) window.location=window.location.href;
	else {
		POS++;
		while((POS<DB.length) && beantwortet(POS)) POS++;
		if(POS>=DB.length) {
			POS=0;
			while((POS<DB.length) && beantwortet(POS)) POS++;
			if(POS>=DB.length) {beenden(); return; }
			}
		anzeigen();
		}
}

function prev() {
	if(SPERRE) return;
	if(BEENDET) window.location=window.location.href;
	else {
		POS--;
		while((POS>=0) && beantwortet(POS)) POS--;
		if(POS<0) {
			POS=DB.length-1;
			while((POS>=0) && beantwortet(POS)) POS--;
			if(POS<0) {beenden(); return; }
			}
		anzeigen();
		}
}

function filename(v,n) {
	var a=v.indexOf('?'),b=a,len;
	while(v.charAt(b)=='?') b++;
	len=b-a; n=""+n;
	while(n.length<len)n="0"+n;
	v=v.substring(0,a)+n+v.substring(b);
	return v;	
}


function inbox(loesung,richtig,gesamt,loc) {
	var pos=RF[POS],z=DB[pos],ok=(richtig==gesamt),h,p;
	if(ok) playSound(1); else playSound(0);
	if(!beantwortet(POS)) {
		z.loesung=loesung;
		STATUS=STATUS.substring(0,pos)+"x"+STATUS.substring(pos+1);
		setcookie();
		}
	AKTPUNKTE-=z.erreicht;
	p=100*z.punkte*richtig/gesamt;
	if(HALBIEREN) p/=Math.pow(2,V); else if(V>0) p=100*z.erreicht;
	V++;
	z.erreicht=Math.round(p)/100;
	AKTPUNKTE+=z.erreicht;
	h="";
	if(ok) { 
		if(RICHTIGTXT>0) h=filename(RICHTIGNAME,1+random(RICHTIGTXT));
		if(RICHTIGTXT<0) h=filename(PLUSNAME,DB[pos].nr);
		}
	else 	{
		if(FALSCHTXT>0) h=filename(FALSCHNAME,1+random(FALSCHTXT));
		if(FALSCHTXT<0) h=filename(MINUSNAME,DB[pos].nr);
		}
	if(h!="") {
		if(TXTTIME>=0) FR1.location=h;
		else RWIN=window.open(h,"",RWINP);
		}

	if((V>=VERSUCHE)|| ok) { 
		if((h=="") || (TXTTIME<0))next();
		else if(TXTTIME!=0) {SPERRE=true; setTimeout("SPERRE=false;next();",1000*TXTTIME); }
		}
	else {  if((h=="")||(TXTTIME<0)) FR1.location=loc;
		else if(TXTTIME!=0) {SPERRE=true; setTimeout("SPERRE=false;FR1.location=\""+loc+"\";",1000*TXTTIME);}
		}
}

function points(p) {
	var r=p+" Punkt"
	if(p!=1) r+="e";
	return r;
}

function beginnen() {
	soundcheck();
	time();
	POS--;
	next(); 
}

function info() {
   var f=FR0.document.status,pos=RF[POS];
   if(f.pos) f.pos.value=(1+POS)+"/"+DB.length;
   if(f.points) f.points.value=points(DB[pos].punkte);
   if(f.richtig) f.richtig.value=AKTPUNKTE+"/"+GESPUNKTE;
   if(f.anteil) f.anteil.value=Math.round(1000*AKTPUNKTE/GESPUNKTE)/10+"%";
}

function anzeigen() {
   var pos=RF[POS];
   if(NAMEFRAGEN &&(NAME=="")) {FR1.location="quiz4.htm"; return; }
   TYP=DB[pos].typ;
   TEXT=DB[pos].text;
   info();
   V=0;
   if(TYP=="file") FR1.location=TEXT;
   else FR1.location="quiz2.htm?EXTERN=true";
}


function starten() 
{  var i;
   DB=new Array(0);
   makedbase();
   RF=new Array(DB.length);
   for(i=0;i<DB.length;i++) RF[i]=i;
   cookiename();	
   BEENDET=false;
   STATUS="";
   for(i=0;i<DB.length;i++) {
		GESPUNKTE+=DB[i].punkte;
		STATUS+="o";
		}
   POS=0;
   parameter();
   getcookie();
   RRND1=RXS;
   BESUCHE++;
   fmixen();
   amixen();	
  }

/*-------------------------Timer-------------------------*/
function timestring(t) {
	var m,s=t%60;
	t-=s;
	t/=60;
	m=t%60;
	t-=m;
	t/=60;
	if(m<10) m="0"+m;
	if(s<10) s="0"+s;
	return t+":"+m+":"+s;
}

function timeup() {
	var f=FR0.document.status.time;
	if(f) {
		TIME++;
		f.value=timestring(TIME);
		if(TIMER) clearTimeout(TIMER);
		TIMER=setTimeout("timeup()",1000);
		}
}

function timedown() {
	var f=FR0.document.status.time;
	if(f) {
		TIME--;
		f.value=timestring(TIME);
		if(TIMER) clearTimeout(TIMER);
		if(TIME>0) TIMER=setTimeout("timedown()",1000);
		else beenden();
		}
}

function time() {
	if(TIMEOUT>0) { if(TIME<=0) TIME=TIMEOUT; timedown();}
	else timeup();
}

/*-------------------------Cookies-------------------------*/

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 = 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 = name+"=" + escape (value) +
     ((expires) ? "; expires=" + expires.toGMTString() : "") +
     ((path) ? "; path=" + path : "") +
     ((domain) ? "; domain=" + domain : "") +
     ((secure) ? "; secure" : "");
 }


function mcookie() {
	var c="POS="+POS+";AKTPUNKTE="+AKTPUNKTE+";STATUS='"+STATUS+"';BESUCHE="+BESUCHE;
	c+=";ANZ="+ANZ+";TIME="+TIME+";RXS="+RXS+";NAME='"+NAME+"';";
	return c;
}

function cookiename() {
	var s=window.location.href,i;
	i=s.lastIndexOf("\\");
	if(i>0) s=s.substring(1+i);
	i=s.lastIndexOf("/");
	if(i>0) s=s.substring(1+i);
	CN=s;
}

function setcookie() {
	if(!COOKIE) return;
	var exp=new Date(),c1=mcookie(),c2;
   	FixCookieDate(exp);
   	exp.setTime(exp.getTime()+1000*60*60*24*COOKIEDAYS);
   	SetCookie(CN,c1,exp);
	c2=GetCookie(CN);
	if(c1!=c2) MAN=true;
}

function getcookie() {
	if(!COOKIE) return;
	var c=GetCookie(CN);
	if(c!=null) eval(unescape(c));
}

/*-------------------------------------------------*/
function soundcheck() {
	var b=navigator.appName,v=navigator.appVersion;
	if(b=='Microsoft Internet Explorer') BROWSERTYP="IE";
	else if(b=='Netscape') {
		if(v.indexOf("5.0")>=0) SOUND=false;
		BROWSERTYP="NS";
		}
	if(!SOUND) return;
	var mimetype = 'audio/midi';
	if (navigator.mimeTypes) {
      		if (navigator.mimeTypes[mimetype] != null)
        	SOUND=(navigator.mimeTypes[mimetype].enabledPlugin != null);
  		}
	if (!SOUND) alert("Sound in ihrem Browser nicht möglich !");
}

function playSound(i) {
      if(!SOUND) return;
      if(BROWSERTYP=="IE") {
		if (i==0) FR0.document.FALSCHIE.run();
		else if(i==1) FR0.document.RICHTIGIE.run();
		}
      else if (BROWSERTYP=="NS") FR0.document.embeds[i].play();
}


function soundcheckxxx() {
	if(!SOUND) return;
	var mimetype = 'audio/midi';
	if (navigator.mimeTypes) {
      		if (navigator.mimeTypes[mimetype] != null)
        	SOUND=(navigator.mimeTypes[mimetype].enabledPlugin != null);
  		}
	if(SOUND) SOUND=(FR0.document.embeds[0]!=null);
	if(SOUND) SOUND=(FR0.document.embeds[1]!=null);

	if(navigator.appName.indexOf("Opera")>=0) SOUND=false;

	if (!SOUND) alert("Sound in ihrem Browser nicht möglich !");
}

function playSoundxxx(i) {
      if(!SOUND) return;
      FR0.document.embeds[i].play();
      }

/*-------------------------------------------------*/

function setseed(x) {
	if(x!=0) return x;
	var d=new Date();
	return Math.abs(Math.sin(1.*d));
}

function rnd()	/* Zufallszahl in (0,1) */
	{  RRND1=Math.pow(RRND1+1.0*ARND1,8);
	   RRND1-=Math.floor(RRND1);
	   return RRND1;
	}

function random(n)  /* Zufallszahl in [0,n) */
	{ return Math.floor(n*rnd());
	}
/*-------------------------------------------------*/

function fmixen() {
	var len=DB.length,i,k,h;
	for(j=0;j<FRAGENMIXEN;j++) {
		for(i=0;i<len;i++) {
			k=random(len);
			if(i!=k) { h=RF[k]; RF[k]=RF[i]; RF[i]=h; }
			}
		}
}

function amix2(s) {
	var a,b,r="",aw=new Array(0),i,j,z;
	s="|"+s;
	while((a=s.indexOf('|'))>=0) {
			z=s.substring(1);
			b=z.indexOf('|');
			if(b<0) b=s.length; else b++;
			i=aw.length++;
			aw[i]=s.substring(a,b);
			s=s.substring(b);
		}
	for(j=0;j<ANTWORTENMIXEN;j++) {
		for(i=0;i<aw.length;i++) {
			k=random(aw.length);
			if(i!=k) { z=aw[k]; aw[k]=aw[i]; aw[i]=z;}
			}
		}
	aw[0]=aw[0].substring(1);
	for(i=0;i<aw.length;i++) r+=aw[i];
	return r;
}

function amix(n) {
	var a,e,z=DB[n].text,weiter=true,r="";
	while(weiter) {
		a=z.indexOf('{');
		e=z.indexOf('}');
		if((a<0)||(e<0)||(a>e)) {weiter=false; break;}
		r+=z.substring(0,a+1);
		r+=amix2(z.substring(a+1,e));
		r+=z.substring(e);
		z=z.substring(e+1);
		}
	DB[n].text=r;
}

function amixen() {
	var i,z;
	if(ANTWORTENMIXEN<=0) return;
	for(i=0;i<DB.length;i++) {
		z=DB[i].typ;
		if((z=="radio")||(z=="checkbox")||(z=="bildsequenz")) amix(i);
		else continue;
		}
}

/*--------------------------Krypto--------------------------*/
function krnd(n) 
        { RNDS=(RNDA*RNDS+RNDB)%RNDM;
          return Math.floor(RNDS/RNDM*n);
	}

function krypto(txt) {
	var out="",i,n,len=txt.length,c,m=CSET.length;
	for(i=0;i<len;i++) {
		c=txt.charAt(i);
		n=CSET.indexOf(c);
		if(n>=0) { n+=krnd(1234); n%=m; c=CSET.charAt(n); }
		else alert("Fehler in CSET: "+c);
		out+=c;
		}
	return out;
}



