var PATH="";
var RICHTIGANF="<font color=green>";
var RICHTIGEND="</font><img src='"+PATH+"richtig.gif'>";
var FALSCHANF ="<font color=red>";
var FALSCHEND ="</font><img src='"+PATH+"falsch.gif'>";
var FEHLERANF ="<font color=red>";
var FEHLEREND ="</font><img src='"+PATH+"fehler.gif'>";
var FRAGEANF="<font color=red>[";
var FRAGEEND="]</font>";
var NACHFRAGE1="<center><form><input type=button value=Auswerten onClick=window.parent.auswerten()>";
var NACHFRAGE2=" <input type=button value=Aufloesen onClick=window.parent.aufloesen()>"
var NACHFRAGE3="</form></center>";
var NACHLOESUNG="<center><form><input type=button value=Neustart onClick=window.parent.neustart()> <input type=button value=Beenden onClick=window.parent.beenden()></form></center>";
var TEXT="***Text laden***",TYP="auswahl",VERSUCHE=3,KRYPTO=false,ENDEURL="";
var TL,AUSWAHL,V,NEU,GEWAEHLT,RICHTIG,GESAMT,AUFLOESEN;
var CSET,RNDS,RNDA,RNDB,RNDM;
var STATISTIK=true,STAT="";

window.start=starten();

function errormsg(n) {
	var m="FEHLER:\n";
	if(n==0) m+="{ und } nicht ausgeglichen";
	else if(n==1) m+="} vor {";
	m+="\n       ABBRUCH!";
	alert(m);
	}

/*-------------------------  Auswahl  ---------------------------------*/
function achanged(n,sel) {
	var s=","+n+"-"+sel+",",c;
	if(AUSWAHL.indexOf(s)>=0) c="x"; else c="o";
	GEWAEHLT=GEWAEHLT.substring(0,n)+c+GEWAEHLT.substring(n+1);
}

function nurrichtige(s) {
	var r="",c,len=s.length,i;
	for(i=0;i<len;i++) {
		c=s.charAt(i);
		if(c=='*') {
			i++;
			while(i<len) {
				c=s.charAt(i);
				if(c=='|') break;
				r+=c;
				i++;
				}
			r+="/";
			}
		} 
	if(r.charAt(r.length-1)=='/') r=r.substring(0,r.length-1);
	return r;
}

function aauswahlteil(t,n) {
	var r,z,weiter=true,i=0;

 	if(NEU) GEWAEHLT+="o";
	z=nurrichtige(t);
	if(GEWAEHLT.charAt(n)=="x") r=RICHTIGANF+z+RICHTIGEND;
	else  {
		if(AUFLOESEN) r=FALSCHANF+z+FALSCHEND;
		else {
			r="<select onChange=window.parent.achanged("+n+",this.selectedIndex)>";
			r+="<option selected>?";
       			while(weiter) {
				r+="<option>";
				z=t.indexOf('|');
				if(z<0) { z=t.length; weiter=false;}

				if(t.charAt(0)=='*') {
					AUSWAHL=AUSWAHL+n+"-"+(i+1)+",";
					r=r+t.substring(1,z);
					}
				else r=r+t.substring(0,z);
				t=t.substring(z+1);
				i++;
				}
			r=r+"</select>";
			}
		}
	return r;
	}

function aantwort(t) {
	var i=0,v="",h=t,aindex,eindex,z;
	while((aindex=h.indexOf('{'))>=0) {
		v=v+h.substring(0,aindex);
		h=h.substring(aindex);
		eindex=h.indexOf('}');
		z=nurrichtige(h.substring(1,eindex));
		if(GEWAEHLT.charAt(i)=="x") {
			v=v+RICHTIGANF+z+RICHTIGEND;
			RICHTIG++;
			}
		else v=v+FALSCHANF+z+FALSCHEND;
		GESAMT++;
		h=h.substring(eindex+1);
		t=v+h;
		i++;
		}
	return textaufbauen(t);
}
/*-------------------------- Text -----------------------------------*/

function tauswahlteil(t,n) {
	var k,r="",z,s;
	if(NEU) GEWAEHLT+="o";
	TL.length++;
	z=loesungen(t,n);
	if(GEWAEHLT.charAt(n)=="x") r=RICHTIGANF+z+RICHTIGEND;
	else  {
		if(AUFLOESEN) r=FALSCHANF+z+FALSCHEND;
		else {
			k=t.indexOf('|');
			if(k>0) r=FRAGEANF+t.substring(0,k)+FRAGEEND;
			t=t.substring(k+1);
			TL[n]=t;
			s=2+size(t);
			if(s<6) s=6;
			r+=" <input type=text name=f"+n+" size="+s+">";
			}
		}
	return r;
}


function size(s) {
	var k=1,max=1;
	while(k>=0) {
		k=s.indexOf('|');
		if(k>max) max=k;
		s=s.substring(k+1);
		}
	k=s.length;
	if(k>max) max=k;
	return max;
}


function loesungen(t,n) {
	var a=t.indexOf('|');
	t=t.substring(a+1);
	while ((a=t.indexOf('|'))>=0) t=t.substring(0,a)+"/"+t.substring(a+1);
	if(n>=0) t+="<input type=hidden name=f"+n+" value=''>";
	return t;
}


function tantwort(t) {
	var i=0,v="",h=t,aindex,eindex,z;
	while((aindex=h.indexOf('{'))>=0) {
		v=v+h.substring(0,aindex);
		h=h.substring(aindex);
		eindex=h.indexOf('}');
		z=loesungen(h.substring(1,eindex),-1);
		if(GEWAEHLT.charAt(i)=="x") {
			v=v+RICHTIGANF+z+RICHTIGEND;
			RICHTIG++;
			}
		else v=v+FALSCHANF+z+FALSCHEND;
		GESAMT++;
		h=h.substring(eindex+1);
		t=v+h;
		i++;
		}
	return textaufbauen(t);
}

function richtig(n) {
	var antw,loes,c="|";
	eval("antw=FR1.document.f.f"+n+".value");
	antw=c+antw+c;
	loes=c+TL[n]+c;
	return (loes.indexOf(antw)>=0);
}

function textaufbauen(t) {  
	var n=0,a,e,brace=0,c,aw;
	AUSWAHL=",";
	TL=new Array();
	NEU=(GEWAEHLT=="");
	while(true) {
		c=t;
		a=c.indexOf('{');
		e=c.indexOf('}');
		if(a>=0) brace++;
		if(e>=0) brace--;
		if(a>e) { errormsg(1); return; }
		if((a<0)||(e<0)) break;
		t=c.substring(0,a);
		aw=c.substring(a+1,e);
		if(TYP=="text") t+=tauswahlteil(aw,n);
		else /*if(TYP=="auswahl")*/ t+=aauswahlteil(aw,n);

		t+=c.substring(e+1);
		n++;
		}
	if(brace!=0) {errormsg(0); return; }
	return "<form name='f'>"+t+"</form>";
}

function auswerten() {
	var h,a,w=true,loes,ok,i;
	V--;
	if(TYP=="text") {
		var anz=GEWAEHLT.length,i;
		for(i=0;i<anz;i++) 
			if(richtig(i)) GEWAEHLT=GEWAEHLT.substring(0,i)+"x"+GEWAEHLT.substring(i+1);
		}
	loes=loesung();
	ok=(RICHTIG==GESAMT);
	if(ok) V=0;
	if(STATISTIK) STAT=STAT+RICHTIG+",";
	anzeigen();
	}

function starten() {
	NEU=true;GEWAEHLT="";AUSWAHL="";AUFLOESEN=false;RICHTIG=0;GESAMT=0;
	parameter();
	krndinit();
	if(KRYPTO) TEXT=krypto(TEXT);
	TEXT=unescape(TEXT);
	V=VERSUCHE;
	AUFLOESEN=false;
	NEU=(GEWAEHLT=="");
	}

function neustart() {
	starten();
	anzeigen();
	}

function loesung() {
	var out;
	RICHTIG=0;
	GESAMT=0;
	if(TYP=="radio") out=cantwort(TEXT);
	else /*if(TYP=="auswahl")*/ out=aantwort(TEXT);
	return out;
}

function statistik() {
	if(!STATISTIK) return "";
	var i=1,a,out="<table align=center border=0><tr><th colspan=4>Statistik:</th></tr>";
	while((a=STAT.indexOf(','))>=0) {
		out=out+"<tr><td align=right>"+i+".&nbsp;</td><td align=left>Durchgang:&nbsp;</td>";
		out=out+"<td align=right>"+STAT.substring(0,a);
		out=out+"</td><td align=left>&nbsp;Richtige</td></tr>";
		STAT=STAT.substring(a+1);
		i++;
		}
	out+="</table>";
	return out;
}

function aufloesen() {
	AUFLOESEN=true;
	anzeigen();
}


function anzeigen() {
	var out;
	RICHTIG=0;
	GESAMT=0;
	out=textaufbauen(TEXT);
	if(AUFLOESEN) out=out+statistik()+NACHLOESUNG;
	else {
		out+=NACHFRAGE1;
		if(V<=0) out+=NACHFRAGE2;
		out+=NACHFRAGE3;
		}
	FR1.document.open();
	FR1.document.write(out);
	FR1.document.close();
	}

function beenden() {
	if(ENDEURL=="") self.close();
	else window.location.href=ENDEURL;
}

/*--------------------------Krypto--------------------------*/
function krndinit() {
	CSET="%_.1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/+*-@";
	RNDS=1123,RNDA=11113,RNDB=1,RNDM=524288;
}

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;
}

