// Javascript zum Erzeugen und Testen von linearen und quadratischen Gleichungen
// und Klammertermen sowie deren schrittweiser Lösung
// (c) Arndt Brünner, Januar 2003
// Version: 18.6.2004


var Level=2;
var X,nf,auto=(1==0);
var LR=(1==0);
var XX;
var UEE=(1==0),UET="";
var gltyp=0;

function eingabe()
{
	if(!navigator.javaEnabled()){alert("Sie müssen JAVA installieren und/oder aktivieren, damit diese Seite funktioniert.");return;}
	var g=prompt("Gewünschte Gleichung eingeben","");
	if(g==null)return;
	var gg=""
	var e=(1==1);
	do{gg=makeParseble(g);var ggg=gg.split("=");
	if(ggg.length!=2){alert("Das ist keine Gleichung");return;}
	e=document.parser.parse(ggg[0]+"-("+ggg[1]+")");if(e)break;
	g=prompt("Die eingegebene Gleichung kann nicht verstanden werden.\nBitte korrigieren oder Eingabe abbrechen",g);
	}while(true);
	XX=String(document.parser.getNullstellen(-50,50,50,0.001,1e-14,100000,";")).split(";");
	X="!";LR=true;
	for(var i=0;i<20;i++){if(Math.abs(document.parser.calcY(Math.random()*100-50))>.001){LR=false;break;}}
	clear(0); 
	document.f.g0.value=formatTerm(g);
	document.f.u0.focus();
	return;
}

function neu()
{
	var i,j,s,f,p=new Array(25),t=new Array("","","","","","","","","",""),pp=new Array(0,0,0);
	Level=document.f.level.selectedIndex;
	var bin1=document.f.bf1.checked,bin2=document.f.bf2.checked,bin3=document.f.bf3.checked;
	var kk=document.f.KlaKla.checked,fk=document.f.FakKla.checked,mk=document.f.minKl.checked;
	gltyp=(document.f.gltyp!=null)?document.f.gltyp.selectedIndex:0;
//	if(!bin1&&!bin2&&!bin3&&!kk&&!fk&&!mk&&(Level>0)){alert("Irgendein Klammertyp muß schon aktiviert sein...");return;}
	if(!UEE)clear(0);
	var L=document.f.level.selectedIndex;
	//document.f.reset();
	if(!UEE){for(i=0;i<document.images.length;i++)document.images[i].scr="nix.gif";}
	for(i=0;i<p.length;i++)p[i]=new Array(0,0,0);
	var kmax=Math.round(Math.random()*(Level-Math.sqrt(Level))+Math.sqrt(Level));
	if((gltyp==0)||((gltyp<2)&&(Math.random()<.5)))
	{
		pp[1]=1;
		if(Math.random()>.5){pp[1]*=2;if(Math.random()>.7){pp[1]*=2;if(Math.random()>.8)pp[1]*=2;}}
		else if(Math.random()>.6)pp[1]*10*Math.floor(Math.random()*20-10);
		pp[0]=Math.round(Math.random()*30*pp[1]-15*pp[1]);
		if((Math.random()>.85)&&(Level>0)){pp[1]=0;if(Math.random()>.5)pp[0]=0;}
		X=(pp[1]!=0)?-pp[0]/pp[1]:"";
		LR=false;
		if((pp[0]==0)&&(pp[1]==0))LR=true;
		XX=null;

	}
	else  // Quadratische Gleichung
	{
		var x1,x2,aQ,bQ,cQ;
		LR=false;
		if(Math.random()<.2) // keine Lösung
		{
			pp[2]=((Level>2)&&(Math.random()>.5))?Math.round(Math.random()*10-5):1;
			if(pp[2]==0)pp[2]=-1;
			pp[1]=Math.round(Math.random()*10-5);
			pp[0]=Math.round(pp[1]*pp[1]/(4*pp[2])+Math.random()*10+1);
			
			X="!";XX=new Array(1);XX[0]="";
		}
		else if(Math.random()<.2) // eine Lösung
		{
			x1=Math.round(Math.random()*30-15);
			if(Math.random()>.9)x1+=0.5;
			if(Math.random()>.95)x1+=Math.floor(Math.random()*10)/10;
			pp[2]=((Level>2)&&(Math.random()>.5))?Math.round(Math.random()*10-5):1;
			if(pp[2]==0)pp[2]=-1;
			pp[1]=-2*pp[2]*x1;
			pp[0]=pp[1]*pp[1]/(4*pp[2]);
			X="!";XX=new Array(0);XX[0]=String(x1).replace(/\./,",");
		}
		else         // zwei Lösungen
		{
			x1=Math.round(Math.random()*30-15);
			if(Math.random()>.95)x1+=0.5;
			do{
				x2=Math.round(Math.random()*30-15);
				if(Math.random()>.95)x2+=0.5;
			}while(x1==x2);
			pp[1]=-x1-x2;
			pp[0]=x1*x2;
			pp[2]=((Level>2)&&(Math.random()>.5))?Math.round(Math.random()*10-5):1;
			if(pp[2]==0)pp[2]=-1;
			pp[1]*=pp[2];pp[0]*=pp[2];
			X="!";XX=(x1<x2)?new Array(x1,x2):new Array(x2,x1);
			XX[0]=String(XX[0]).replace(/\./,",");
			XX[1]=String(XX[1]).replace(/\./,",");
		}
		//alert(X+"\n"+XX+"\n"+pp);
	}

	i=0;
	if(kmax<4)
	{
		do{p[0][0]=Math.round(Math.random()*10-5);}while(p[0][0]==0);
		do{p[1][1]=Math.round(Math.random()*10-5);}while(p[1][1]==0);
		pp[0]+=p[0][0];pp[1]+=p[1][1];
		t[0]=p[0][0];t[1]=p[1][1]+"x";
		i=2;
	}
	if((Level<=1)&&(Math.random()>.5))
	{
		if(Math.random()>.5){p[0][0]-=pp[0];pp[0]=0;t[0]=p[0][0];}
		else{p[1][1]-=pp[1];pp[1]=0;t[1]=p[1][1]+"x";}
	}


	for(var I=0;I<kmax;I++)
	{
		t[i]="";
		s=(Math.random()>.6)?-1:1;
		f=1;
		if((Math.random()>.7)&&(I<kmax-1))f=Math.round(Math.random()*5+1);
		for(j=0;j<3;j++)p[i][j]=Math.round(-pp[j]*s/f+Math.random()*4-2);
		if((pp[2]==0)&&(I>1))break;
		var sp2=(p[i][2]<0)?-1:1;
		if((Math.random()>.6)&&(kk||bin1||bin2||bin3))
		{
			if((kk)&&((((I==kmax-1)&&(!isQZ(p[i][2])))||(Math.random()>.5))))t[i]=machKlammerProdukt(p[i]); else t[i]=machBinom(p[i],bin1,bin2,bin3);
			if(p[i][2]*sp2<0)s=-s;
			t[i]=(f*s)+t[i];
		}
		else 
		{
			t[i]=(Math.random()>.5)?machMinusklammer(p[i]):machFaktorklammer(p[i]);
			s=1;f=1;
		}
		for(j=0;j<3;j++)pp[j]+=p[i][j]*s*f;
		if(f==1)t[i]=t[i].replace(/1\(/,"(");
		//alert(t[i]);
		i++;
	}
	if((pp[2]!=0)&&(pp[1]!=0))
	{
		f=ggT(pp[2],pp[1]);
		if((Math.abs(f)!=1)&&(Math.random>.2))
		{
			t[i]=(-f)+"x(";
			if(Math.random()>.5)t[i]+=(pp[2]/f)+"x+"+(pp[1]/f)+")"; else t[i]+=(pp[1]/f)+"+"+(pp[2]/f)+"x)";
			p[i][1]=-pp[1];p[i][2]=-pp[2];
			pp[2]=0;pp[1]=0;
			if(pp[0]!=0){t[++i]=-pp[0];p[i][0]=-pp[0];pp[0]=0;}
			i++;
		}
	}
	if((pp[0]!=0)&&(pp[1]!=0))
	{
		f=ggT(pp[0],pp[1]);
		if(Math.abs(f)!=1)
		{
			t[i]=(-f)+"(";
			if(Math.random()>.5)t[i]+=(pp[1]/f)+"x+"+(pp[0]/f)+")"; else t[i]+=(pp[0]/f)+"+"+(pp[1]/f)+"x)";
			pp[0]=0;pp[1]=0;
			i++;
		}
	}
	if(pp[2]!=0){p[i][2]=-pp[2];t[i++]=(-pp[2])+"x^2";}
	if(pp[1]!=0){p[i][1]=-pp[1];t[i++]=(-pp[1])+"x";}
	if(pp[0]!=0){p[i][0]=-pp[0];t[i++]=(-pp[0]);}
	var j,jj=i/3+Math.random()*(i/3),k,j1=0,j2=0;
	var L=new Array(),R=new Array(),LC=(1==0),LX=(1==0);
	for(k=0;k<i;k++)
	{
		if((p[k][1]==0)&&(p[k][2]==0)&&(t[k]!="")){if(LC){L[j1++]=t[k];}else{R[j2++]="-"+t[k];}t[k]="";LC=!LC;jj-=.5;}
		if((p[k][0]==0)&&(p[k][2]==0)&&(t[k]!="")){if(LX){R[j2++]="-"+t[k];}else{L[j1++]=t[k];}t[k]="";LX=!LX;jj-=.5;}
	}
	for(j=0;j<jj;j++)
	{
		var z=0;
		do{k=Math.floor(Math.random()*i);z++;}while((t[k]=="")&&(z<50));if(z==50)break;
		L[j1++]=t[k];t[k]="";
	}
	for(j=0;j<=i;j++){if(t[j]!=""){R[j2++]="-"+t[j];t[j]="";}}
	if(R[0]==null)R[0]="0";
	R[0]=R[0].replace(/--/,"");
	for(j=0;j<4;j++)
	{
		var it0=Math.floor(Math.random()*L.length),it1=Math.floor(Math.random()*L.length);
		var tausch=L[it0];L[it0]=L[it1];L[it1]=tausch;
		it0=Math.floor(Math.random()*R.length),it1=Math.floor(Math.random()*R.length);
		tausch=R[it0];R[it0]=R[it1];R[it1]=tausch;
	}
	//alert(L+"\n"+R);
	var RR=R.join("+").replace(/--/g,"+").replace(/\++/g,"+").replace(/\+-/g,"-");
	var LL=L.join("+").replace(/--/g,"+").replace(/\++/g,"+").replace(/\+-/g,"-");
	var gl=(LL=formatTerm(LL))+" = "+(RR=formatTerm(RR));
	gl=gl.replace(/= \+ /,"= ");
	if(!UEE)
	{
		document.f.g0.value=gl;
		document.f.neubutton.focus();
		document.f.u0.focus();
	}
	else UET=gl;
	//gl=makeParseble(LL+"-("+RR+")");
	//document.parser.parse(gl);
	//alert(gl);
	//var ns=String(document.parser.getNullstellen(Number(X-5),Number(X+5),20,0.001,1e-14,100000,";")).split(";");
	//if(ns.length!=1)alert("Fehler - Lösungen: {"+ns+"}");
	//if(ns[0].replace(/,/,".")!=X)alert("Fehler - ermittelte Lösung: {"+ns+"} anstatt "+X);
}


function checkgl()
{
	var i;
	if(!navigator.javaEnabled()){alert("Sie müssen JAVA installieren und/oder aktivieren, damit diese Seite funktioniert.");return;}
	for(i=1;i<12;i++)
	{
		var t="",t0,u="";
		if((document.images[i*2].src.indexOf("haken1.gif")>-1)&&(document.images[i*2-1].src.indexOf("haken1.gif")>-1))continue;
		if((X=="!")&&(document.images[i*2].src.indexOf("haken1.gif")>-1))continue;
		if(i>0)eval("u=document.f.u"+(i-1)+".value;");
		u=u.toLowerCase();
		if(u.indexOf("t")>-1)u="V";
		eval("t=document.f.g"+i+".value;");
		t=t.replace(/²/g,"^2").replace(/\+-/g,"±");
		if(t.indexOf("±")>-1)t=t.replace(/±/,"-")+"    v     "+t.replace(/±/,"+");
		if((u!="")&&(u.toLowerCase().indexOf("v")==-1))u=formatTerm(u).replace(/ +/g,"");
		if((u.indexOf(":-")>-1)||(u.indexOf("/-")>-1))
		{
			alert("Beim Dividieren durch negative Zahlen muß der Divisor eingeklammert werden, denn es dürfen nicht zwei Rechenzeichen hintereinander stehen.");
			document.images[i*2-1].src="roterpunkt.gif";
			clear(i+1);
			eval("document.f.u"+(i-1)+".focus();document.f.u"+(i-1)+".select();");
			return;
		}
		if((u.indexOf("·-")>-1)||(u.indexOf("*-")>-1))
		{
			alert("Beim Multiplizieren mit einer negativen Zahl muß der Faktor eingeklammert werden, denn es dürfen nicht zwei Rechenzeichen hintereinander stehen.");
			document.images[i*2-1].src="roterpunkt.gif";
			clear(i+1);
			eval("document.f.u"+(i-1)+".focus();document.f.u"+(i-1)+".select();");
			return;
		}
		if((u!="")&&(t=="")&&(!auto))
		{
			alert("Die Gleichung entsprechend umformen!");
			clear(i+1);
			eval("document.f.g"+i+".focus();");
			return;
		}
		if((t=="")&&(!auto))
		{
			clear(i);
			autoSetFocus();return;
		}

		if(t.indexOf("v")>-1)return checkVgl(t,i);
		if(t.indexOf("±")>-1)return checkVgl(formatTerm(t.replace(/±/,"-"))+"   v   "+formatTerm(t.replace(/±/,"+")),i);

		t=t.replace(/ +/g,"").toLowerCase();
		if(t.indexOf("l=")>-1)
		{
			var LM=t.split("="),LOK=(1==2);
			if(LR&&((LM[1]=="r")||(LM[1]=="q")||(LM[1]=="g")))LOK=true;
			if((LM[1]!="r")&&(LM[1]!="q")&&(LM[1]!="g")&&(t.indexOf("{")==-1))
			{
				alert("Lösungsmenge mit geschweifeten Klammern schreiben!");
				document.images[i*2].src="roterpunkt.gif";
				clear(i+1);
				return;
			}
			LM[1]=LM[1].replace(/\{/,"").replace(/\}/,"");
			if((X=="!")&&(!LOK))
			{//alert(LOK);
				if((X=="!")&&(XX[0]=="")&&(LM[1]=="{}")&&(!LR))LOK=true;
				if(Number(LM[1].replace(/,/,"."))==Number(XX[0].replace(/,/,"."))&&(XX.length==1))LOK=true;
				LM=LM[1].split(";");
				LM[0]=String(LM[0]);if(LM.length==2)LM[1]=String(LM[1]);
				if((XX.length==2)&&(LM.length==2))
				{
					if(((Number(XX[0].replace(/,/,"."))==Number(LM[0].replace(/,/,".")))&&(Number(XX[1].replace(/,/,"."))==Number(LM[1].replace(/,/,".")))))LOK=true;
					if(((Number(XX[0].replace(/,/,"."))==Number(LM[1].replace(/,/,".")))&&(Number(XX[1].replace(/,/,"."))==Number(LM[0].replace(/,/,".")))))LOK=true;
				}
				if((XX.length==1)&&(Number(XX[0].replace(/,/,"."))==Number(LM[0].replace(/,/,"."))))LOK=true;
				if(XX.length!=LM.length)LOK=false;
				if((XX[0]=="")&&(LM[0]!=""))LOK=false;
				if((LM=="")&&(LR))LOK=false;
				//alert("X="+X+"\nXX="+XX+"\nLM="+LM+"\nLOK="+LOK);
			}
			else
			{
				if(LM.length==2)
				{
					if((X==Number(LM[1].replace(/,/,".").replace(/\}/,"").replace(/\{/,"")))&&(X!="!"))LOK=true;
					if((X=="")&&(LM[1]!=""))LOK=false;
					if((X!=="")&&(LM[1]==""))LOK=false;
					if((X=="")&&(LM[1]==""))LOK=true;
				}
			}
			if(!LOK)
			{
				alert("Leider falsch");
				document.images[i*2].src="roterpunkt.gif";
				clear(i+1);
				eval("document.f.g"+i+".focus()");
				return;
			}
			document.images[i*2].src="haken1.gif";
			clear(i+1);
			if(confirm("Richtig!\n\nNeue Aufgabe?",""))neu();
			return;
		}

		t=formatTerm(t);
		if(u.substr(0,1)=="-")u="- "+u.substr(1,u.length);
		if(u.replace(/ /g,"").replace(/v/,"").replace(/t/,"")=="")u="+000.000";
		//eval("document.f.u"+(i-1)+".value=u;");
		eval("t0=document.f.g"+(i-1)+".value;");
		t0=formatTerm(t0);
		eval("document.f.g"+i+".value=t;");
		//if(i>0)u=u.replace(/,/g,".").replace(/ +/g,"");
		t=t.replace(/,/g,".").replace(/ +/g,"");
		if(t!="")
		{
			t=makeParseble(t).replace(/ /g,"");
			var T=t.split("=");
			if(T.length==1)
			{
				eval("document.f.g"+i+".focus();document.f.g"+i+".select();");
				alert("Keine Gleichung!");
				return;
			}
			var tt=T[0]+"-("+T[1]+")";
			t0=makeParseble(t0);
			var T0=t0.split("=");
			if((u.replace(/ +/g,"")!="")&&(u.toLowerCase().indexOf("v")==-1))
			{
				eval("document.f.u"+(i-1)+".value=u.replace(/ +/g,'').replace(/\\+000.000/,'V');");
				u=(makeParseble(u));
				if((u.indexOf("x")>-1)&&(u.indexOf("/")>-1))
				{
					alert("Es ist nicht sinnvoll, durch x zu teilen.");
					document.images[i*2-1].src="roterpunkt.gif";
					clear(i+1);
					eval("document.f.u"+(i-1)+".focus();document.f.u"+(i-1)+".select();");
					return;
				}
				if((u.indexOf("y")>-1)||(u.indexOf("z")>-1)||(!document.parser.parse("1"+u)))
				{
					alert("Die Angabe der Umformung ist nicht korrekt");
					document.images[i*2-1].src="roterpunkt.gif";
					document.images[i*2].src="roterpunkt.gif";
					clear(i+1);
					eval("document.f.u"+(i-1)+".focus();document.f.u"+(i-1)+".select();");
					return;
				}
				for(var x=-10;x<11;x+=2)
				{
					document.parser.parse("("+T0[0]+")"+u);
					var uy0=document.parser.calcY(x);
					document.parser.parse("("+T0[1]+")"+u);
					var uy1=document.parser.calcY(x);
					document.parser.parse(T[0]);					
					var uy2=document.parser.calcY(x);
					document.parser.parse(T[1]);					
					var uy3=document.parser.calcY(x);
					if((uy0==uy3)&&(uy1==uy2)&&(uy0!=uy1))
					{//alert(uy0+"  "+uy1+"  "+uy2+"  "+uy3);
						if(!confirm("Hast Du die Seiten der Gleichung vertauscht?"))
						{
							document.images[i*2].src="roterpunkt.gif";
							clear(i+1);
							eval("document.f.g"+(i)+".focus();document.f.g"+(i)+".select();");
							return;
						}
						for(var j=0;j<i;j++)eval("var tt=document.f.g"+j+".value.split('=');document.f.g"+j+".value=(tt[1]+' = '+tt[0]).replace(/ +/g,' ');");
						var tt=T[0];T[0]=T[1];T[1]=tt;checkgl();return;
					}
					else if((uy3==0)&&(uy1==0)&&(uy2*uy2==uy0))
					{
						//eval("document.f.u"+(i-1)+".value='sqr';");
					}
					else if((uy0!=uy2)&&(uy1!=uy3))
					{
						alert("Die Angabe der Umformung ist nicht korrekt");
						document.images[i*2-1].src="roterpunkt.gif";
						document.images[i*2].src="roterpunkt.gif";
						clear(i+1);
						eval("document.f.u"+(i-1)+".focus();document.f.u"+(i-1)+".select();");
						return;
					}
					else if((uy0!=uy2)||(uy1!=uy3))
					{
						alert("Auf der "+((uy0==uy2)?"rechten":"linken")+" Seite wurde falsch umgeformt.");
						document.images[i*2].src="roterpunkt.gif";
						clear(i+1);
						eval("document.f.g"+(i)+".focus();document.f.g"+(i)+".select();");
						return;
					}
				}
			}
			else
			{
				var U0=0;
				for(var x=-10;x<11;x+=2)
				{
					document.parser.parse(T0[0]);
					var uy0=document.parser.calcY(x);
					document.parser.parse(T0[1]);
					var uy1=document.parser.calcY(x);
					document.parser.parse(T[0]);					
					var uy2=document.parser.calcY(x);
					document.parser.parse(T[1]);					
					var uy3=document.parser.calcY(x);
					if((uy0!=uy1)&&(uy2!=uy3))
					{
						U0++;
						continue;
					}
					if((uy0!=uy2)&&(uy1!=uy3))
					{
					//	alert(uy0+" "+uy1+" "+uy2+" "+uy3);
						alert("Die Angabe der Umformung fehlt oder ist falsch");
						clear(i+1);
						eval("document.f.u"+(i-1)+".focus();document.f.u"+(i-1)+".select();");
						return;
					}
					if(((uy0!=uy2)&&(uy1==uy3))||((uy0==uy2)&&(uy1!=uy3)))
					{
						alert("Auf der "+((uy0==uy2)?"rechten":"linken")+" Seite wurde falsch vereinfacht");
						clear(i+1);
						eval("document.f.g"+(i)+".focus();document.f.g"+(i)+".select();");
						return;
					}
				}
				if(U0==10)
				{
					clear(i+1);
					document.images[2*i-1].src="haken1.gif";
					document.images[2*i].src="haken1.gif";
					eval("document.f.u"+(i-1)+".value='V';");
					autoSetFocus();
					return;						
					}
				eval("document.f.u"+(i-1)+".value='V';");
			}

			document.parser.parse(tt);
			var ns;
			if(X!="!")ns=String(document.parser.getNullstellen(Number(X)-5,Number(X)+5,20,0.001,1e-14,100000,";")).split(";");
			ns=String(document.parser.getNullstellen(-50,50,20,0.001,1e-14,100000,";")).split(";");
			var OK=(1==0);
			if(LR)
			{
				OK=true;
				for(var iLR=0;iLR<20;iLR++)
				{
					if(Math.abs(document.parser.calcY(Math.random()*100-50))>.001)
						{OK=false;break;}
				}
			}
			if((ns.length>4)&&(LR))OK=true;
			if((X=="")&&(ns.length==0))OK=true;
			if((X=="")&&(ns.length==1)&&(ns[0]==""))OK=true;
			if((X=="!")&&(XX.length==ns.length)&&(!LR)&&(XX[0]=="")&&(ns[0]==""))OK=true;
			if((X=="!")&&(XX.length==ns.length)&&(!LR))
			{
				for(var j=0;j<ns.length;j++)
				{
					if(Number(ns[j].replace(/,/,"."))!=Number(String(XX[j]).replace(/,/,".")))break;
				}
				if(j==ns.length)OK=true;
				else
				{
					clear(i+1);
					alert("Die Gleichungen sind nicht äquivalent!\n\n\n"+XX+"\n"+ns);
					return;
				}
			}
			if(((ns.length!=1)||(ns[0].replace(/,/,".")!=X))&&(!OK)&&(XX[0]==""))
			{
				document.images[2*i].src="roterpunkt.gif";
				clear(i+1);
//				alert("Die "+(i+1)+". Gleichung ist nicht äquivalent!\nL={"X"}\nns={"+ns+"}");
				alert("Die Gleichungen sind nicht äquivalent!\n"+XX+"\n"+ns);
				break;
			}
//			var n1=Number(ns[0].replace(/,/,"."));
//			if(n1>n2){var nn=n1;n1=n2;n2=nn;}
//			if((n1!=x1)||(n2!=x2)){alert("Gleichung "+i+" ist nicht äquivalent\nx1 = "+x1+"\nx2 = "+x2+"\nn1 = "+n1+"\nn2 = "+n2);break;}
//			if((n1!=x1)||(n2!=x2)){alert("Die Gleichung ist nicht äquivalent.");break;}
			document.images[2*i].src="haken1.gif";
		}
		else
		{
			clear(i);
			autoSetFocus();
			break;
		}
		document.images[2*i-1].src="haken1.gif";
		document.images[2*i].src="haken1.gif";
		var Nenner=1000000,ggt=1,XXX=(X!="!")?X:XX;
		XXX=Nenner*Number(String(XXX).replace(/,/,"."));
		ggt=ggT(Nenner,XXX);XXX=String((XXX/ggt)+"/"+(Nenner/ggt));
		if(((T[0]=="x")&&((T[1]==X)||(T[1]==XXX)))||((T[1]=="x")&&((T[0]==X)||(T[0]==XXX))))
		{
			document.images[i].src="haken1.gif";
			if(confirm("Richtig!\n\nNeue Aufgabe?",""))neu();
			return;
		}
		if((T[0].indexOf("x")==-1)&&(T[1].indexOf("x")==-1))
		{
			var OK=(1==0);
			while(!OK)
			{
			var LM=prompt("Richtig!\n\nLösungsmenge eingeben:","");
			if((LM=="")||(LM==null))return;
			if((LM.replace(/ /g,"")=="{}")&&(X==""))OK=true;
			if((LM.replace(/ /g,"")=="{}")&&(X=="!")&&(XX==""))OK=true;
			if(((LM.replace(/ /g,"")=="R")||(LM.replace(/ /g,"")=="Q")||(LM.replace(/ /g,"")=="G"))&&(LR))OK=true;
			if(!OK)	alert("Falsch");
			}
			if(confirm("Richtig!\n\nNeue Aufgabe?",""))neu();
			return;
		}
	}
	i=autoSetFocus();
}

function checkVgl(g,i)
{
	g=g.replace(/ /g,"").replace(/=\+/,"=");
	if(g.indexOf("±")>-1){alert("Das Zeichen ± darf nur einmal in der Gleichung auftreten!");return;}
	var gg=g.split("v"),j,jj,jjj;
	var ns=new Array(gg.length);
	eval("document.f.g"+i+".value=formatTerm(gg[0])+'    v     '+formatTerm(gg[1])");
	for(j=0;j<ns.length;j++)
	{
		//gg[j]=formatTerm(gg[j]);
		var t=makeParseble(gg[j]);
		var ggg=gg[j].split("=");
		document.parser.parse(ggg[0]+"-("+ggg[1]+")");
		ns[j]=String(document.parser.getNullstellen(-50,50,20,0.001,1e-14,100000,";")).split(";");
	}
	for(j=0;j<XX.length;j++)
	{
		XX[j]=String(XX[j]).replace(/\./,",");
		for(jj=0;jj<ns.length;jj++)
		{
			for(jjj=0;jjj<ns[jj].length;jjj++)
			{
				if(Number(ns[jj][jjj].replace(/,/,"."))==Number(XX[j].replace(/,/,".")))break;
			}
			if(jjj<ns[jj].length)break;
		}
		if((jj==ns.length)&&(jjj==ns[ns.length-1].length))
		{
			eval("document.images["+(i*2)+"].src='roterpunkt.gif'");
			clear(i+1);
			return;
		}
	}
	eval("document.images["+(i*2)+"].src='haken1.gif'");
	eval("document.f.g"+(i+1)+".focus()");
}

function isQZ(n)
{
	n=Math.abs(n);
	var w=Math.floor(Math.sqrt(n));
	return (n==w*w);
}

function machMinusklammer(p)
{
	var i,t="-(";
	for(i=0;i<3;i++)p[i]+=Math.round(Math.random()*4-2);
	if((p[0]!=0)&&(p[1]!=0)&&(p[2]!=0))if(Math.random()>.3)p[2]=0;
	if(Math.random()>.3)p[2]=0;
	if((p[1]==0)&&(p[2]==0))p[1]=-Math.floor(Math.random()*3+1);
	if((p[0]==0)&&(p[2]==0))p[0]=-Math.floor(Math.random()*3+1);
	if(Math.random()>.5)t+=(-p[0])+"+"+((p[2]!=0)?(-p[2])+"x^2+":"")+(-p[1])+"x)";
	else t+=(-p[1])+"x+"+((p[2]!=0)?(-p[2])+"x^2+":"")+(-p[0])+")";
	//alert("Minusklammer:\n"+t+"\n"+p);
	return t.replace(/\+-/g,"-");
}

function machFaktorklammer(p)
{
	var i,t="";
	for(i=0;i<3;i++)p[i]=Math.round(Math.random()*8-4);
	if(Math.random()>.3)p[2]=0;
	if((p[1]==0)&&(p[2]==0))p[1]=-Math.floor(Math.random()*3+1);
	if((p[0]==0)&&(p[2]==0))p[0]=-Math.floor(Math.random()*3+1);
	var f=Math.round(Math.random()*3+2);
	if(Math.random()>.5)f*=-1;
	t=f+"(";
	if((p[0]!=0)&&(p[1]!=0)&&(p[2]!=0))if(Math.random()>.3)p[2]=0;
	if(Math.random()>.5)t+=(p[0])+"+"+((p[2]!=0)?(p[2])+"x^2+":"")+(p[1])+"x)";
	else t+=(p[1])+"x+"+((p[2]!=0)?(p[2])+"x^2+":"")+(p[0])+")";
	for(i=0;i<3;i++)p[i]*=f;
	//alert("Faktorklammer:\n"+t+"\n"+p);
	return t.replace(/\+-/g,"-");
}


function machKlammerProdukt(p)
{
	var f=new Array(4),t="(";
	while(p[2]==0)p[2]=Math.round(Math.random()*50-25);
	f[1]=getFaktor(p[2]);if(Math.random()>.6)f[1]=-f[1];f[3]=p[2]/f[1];
	while(p[0]==0)p[0]=Math.round(Math.random()*50-25);
	f[0]=getFaktor(p[0]);if(Math.random()>.6)f[0]=-f[0];f[2]=p[0]/f[0];
	p[1]=f[1]*f[2]+f[0]*f[3];
	if(Math.random()>.5)t+=f[0]+"+"+f[1]+"x";else t+=f[1]+"x"+"+"+f[0];
	t+=")(";
	if(Math.random()>.5)t+=f[2]+"+"+f[3]+"x";else t+=f[3]+"x"+"+"+f[2];
	t+=")";
	return t.replace(/\+-/g,"-");
}

function machBinom(p,b1,b2,b3)
{
	var t="(",f=new Array(2);
	while(Math.abs(p[0])<1)p[0]=Math.round(Math.random()*200-100);
	while(Math.abs(p[2])<1)p[2]=Math.round(Math.random()*50-25);
	f[1]=Math.round(Math.sqrt(Math.abs(p[2])));
	f[0]=Math.round(Math.sqrt(Math.abs(p[0])));
	if((b1||b2)&&!b3){p[2]=Math.abs(p[2]);p[0]=Math.abs(p[0]);}
	if(((p[0]<0)&&(p[2]>0)&&(Math.random()>.2)&&b3)||(!b1&&!b2))
	{
		p[0]=-f[0]*f[0];p[2]=f[1]*f[1];p[1]=0;
		if(Math.random()>.7)t+=f[0]+"+"+f[1]+"x)(";
		else t+=f[1]+"x+"+f[0]+")(";
		t+=f[1]+"x-"+f[0]+")";
		return t.replace(/\+-/g,"-");
	}
	if((p[2]<0)&&(p[0]>0)&&(Math.random()>.2))
	{
		p[2]=-f[1]*f[1];p[0]=f[0]*f[0];p[1]=0;
		if(Math.random()>.7)t+=f[1]+"x+"+f[0]+")(";
		else t+=f[0]+"+"+f[1]+"x)(";
		t+=f[0]+"-"+f[1]+"x)";
		return t.replace(/\+-/g,"-");
	}
	if(Math.random()>.8)f[0]=-f[0];
	if(Math.random()>.8)f[1]=-f[1];
	var s=(Math.random()>.5)?"+":"-";
	if(b1&&!b2){s="+";f[0]=Math.abs(f[0]);f[1]=Math.abs(f[1]);}
	if(b2&&!b1){s="-";f[0]=Math.abs(f[0]);f[1]=Math.abs(f[1]);}
	if(Math.random()>.7)t+=f[1]+"x"+s+f[0]+")^2";
	else t+=f[0]+s+f[1]+"x)^2";
	p[0]=f[0]*f[0];p[2]=f[1]*f[1];
	p[1]=f[0]*f[1]*2;
	if(s=="-")p[1]*=-1;
	return t.replace(/--/g,"+").replace(/\+-/g,"-");
}		



function getFaktor(n)
{	if(n==0){alert("n=0");return 1;}
	if(n!=Math.floor(n))return 1;
	while(true)
	{
		var f=Math.round(Math.random()*n+1);
		if(n%f==0)return f;
	}
}

function ggT(a,b)
{
    if((a==0)&&(b==0))return 1;
    if(a!=Math.floor(a))return 1;
    if(b!=Math.floor(b))return 1;
    if((isNaN(a))||(isNaN(b)))return 1;
    if (a==0) return b;
    if (b == 0) return a;
    
    do
    {
        c = a%b;
        a = b;
        b = c;
    }while (c != 0);
    return a;
}

function makeParseble(t)
{
	t=t.replace(/,/g,".").replace(/ /g,"").replace(/²/g,"^2").replace(/³/g,"^3").replace(/phi/g,"0.61803398874989").replace(/:/g,"/");
	t=t.replace(/\)\(/g,")*(");
	do{I=t.search(/\dx/);if(I==-1)break;t=t.substr(0,I+1)+"*"+t.substring(I+1,t.length);}while(true);
	do{I=t.search(/\d\(/);if(I==-1)break;t=t.substr(0,I+1)+"*"+t.substring(I+1,t.length);}while(true);
	do{I=t.search(/\)\(/);if(I==-1)break;t=t.substr(0,I+1)+"*"+t.substring(I+1,t.length);}while(true);
	do{I=t.search(/x\(/);if(I==-1)break;t=t.substr(0,I+1)+"*"+t.substring(I+1,t.length);}while(true);
	t=t.replace(/\(\+/g,"(").replace(/[\+-]\)/g,")");
	return t;
}

function formatTerm(t)
{
	t=t.replace(/\(0x/g,"(").replace(/\+0x/g,"");
	t=t.replace(/\./g,",").replace(/-/g," - ").replace(/x2/g,"x²").replace(/\+/g," + ").replace(/\*/g,"·");
	t=t.replace(/\( - /g,"(-").replace(/ 0x²/g," ").replace(/\(1x/g,"(x");
	t=t.replace(/ +/g," ").replace(/\^2/g,"²").replace(/xx/g,"x²");
	t=t.replace(/=/," = ").replace(/\+ \-/g,"- ").replace(/\./g,",").replace(/ 1x/g," x").replace(/ ,/g," 0,").replace(/-,/g,"-0,").replace(/ 0 /g,"");
	if(t.indexOf("1x")==0)t=t.substr(1,t.length);
	if(t.indexOf("-1x")==0)t="-"+t.substr(2,t.length);
	t=t.replace(/\+ 0 /g,"").replace(/\+ 0x/g,"").replace(/ 0\+/g,"").replace(/ 0x/g,"").replace(/ +/g," ");
	t=t.replace(/\(0 \+ /g,"(").replace(/\(0 - /g,"(-").replace(/ \+ 0\)/g,")");
	//if(t.indexOf("=")>t.length-3)t+=" 0";
	t=t.replace(/\+=/,"=").replace(/-=/,"=").replace(/=\- /,"= -").replace(/=\+/,"=");
	t=t.replace(/\+ =/,"=").replace(/- =/,"=").replace(/= \- /,"= -").replace(/= \+/,"=");
	t=t.replace(/-1x/g,"-x").replace(/-1·\(/g,"-(");
	t=t.replace(/ \)/g,")").replace(/\( \+ /g,"(").replace(/\( - /g,"(-");
	if(t.substr(0,3)==" - ")t="-"+t.substr(3,t.length);
	var i=t.indexOf("= - ");if(i>-1)t=t.substr(0,i+2)+"-"+t.substr(i+4,t.length);
	while(t.charAt(0)==" ")t=t.substr(1,t.length);
	while((t.charAt(t.length-1)==" ")||(t.charAt(t.length-1)=="-")||(t.charAt(t.length-1)=="+"))t=t.substr(0,t.length-1);
	if((t.substr(0,2)=="+ ")&&(t.indexOf("=")>-1))t=t.substring(2,t.length);
	if(t.substr(0,4)=="0x +")t=t.substring(5,t.length);
	if(t.substr(0,4)=="0x -")t="-"+t.substring(5,t.length);
	if(t.substr(0,2)=="0x")t="0"+t.substring(2,t.length);
	if(t.substr(0,1)==",")t="0"+t;
	if(t.replace(/ /g,"").indexOf("=")==0)t="0 "+t;
	if(t.replace(/ /g,"").indexOf("=")==t.replace(/ /g,"").length-1)t+=" 0";
	while((t.charAt(t.length-1)==" ")||(t.charAt(t.length-1)=="-")||(t.charAt(t.length-1)=="+"))t=t.substr(0,t.length-1);
	return t;
}

function calc()
{
	var t=document.f.term.value;
	t=makeParseble(t);
	document.parser.parse(t);
	t=String(document.parser.calcY(0)).replace(/\./,",").replace(/-,/,"-0,");
	document.f.erg.value=t;
}

function clearBild(i)
{
	eval("document.images["+(2*i)+"].src='nix.gif'");
	eval("document.images["+(2*i-1)+"].src='nix.gif'");
}

function clear(i0)
{
	for(var j=i0;j<21;j++)
	{
		eval("document.f.g"+j+".value=''");
		if(j>0)eval("document.f.u"+(j-1)+".value=''");
		document.images[2*j].src="nix.gif";
		document.images[2*j+1].src="nix.gif";
	}
}

function autoSetFocus()
{
	for(var i=0;i<21;i++)
	{
		var t="";
		eval("t=document.f.g"+i+".value.replace(/ /g,'');");
		if(t==""){eval("document.f.g"+i+".focus();");return i;}
		eval("t=document.f.u"+i+".value.replace(/ /g,'');");
		if(t==""){eval("document.f.u"+i+".focus();");return i;}
	}
}

var klTestX=new Array(0,0,0,0,0,0,0,0,0,0);
var klTestY=new Array(0,0,0,0,0,0,0,0,0,0);
var klTestP=new Array(0,0,0);
var klTestX_=new Array(0,0,0,0,0,0,0,0,0,0);
var klTestY_=new Array(0,0,0,0,0,0,0,0,0,0);
var klTestP_=new Array(0,0,0);
var merkKlammerTerm;

function neueKlammer_()
{
	neueKlammer(2);
}
function checkKl_()
{
	checkKl(2);
} 
function showKl_()
{
	alert(merkKlammerTerm);
}

function neueKlammer(w)
{
	var o=document.f;
	var b1=o.bf1.checked,b2=o.bf2.checked,b3=o.bf3.checked,af=o.af.checked,fb=(1==0);
	var kk=o.KlaKla.checked,fk=o.FakKla.checked,mk=o.minKl.checked;
	if(w==2)
	{
		b1=o.bf1_.checked;b2=o.bf2_.checked;b3=o.bf3_.checked;af=false;
		kk=false;fk=o.FakKla_.checked;mk=false;fb=o.af_.checked;
		if(fb&&!b1&&!b2&&!b3)b1=b2=b3=true;
		if(fb&&(fk||mk))
		{
			if(Math.random()>.5)fb=b1=b2=b3=false; else mk=fk=false;
		}
		af=fb;
	}
	if(!b1&&!b2&&!b3&&!kk&&!fk&&!mk){alert("Irgendein Klammertyp muß schon aktiviert sein...");return;}
	var p=new Array(0,0,0),pp=new Array(0,0,0),t="",i,typ=-1;
	do{
		for(i=0;i<3;i++){do{p[i]=Math.round(Math.random()*150+1);}while(p[i]==0);if(Math.random()>.5)p[i]*=-1;}
		if((b1||b2)&&!b3){p[0]=Math.abs(p[0]);p[2]=Math.abs(p[2]);}
		if(!(b1||b2)&&b3){p[0]=Math.abs(p[0]);p[2]=-Math.abs(p[2]);}
		if((Math.random()<1/6)&&(b1)){do{t=machBinom(p,b1,b2,b3);p[0]=Math.abs(p[0]);p[1]=Math.abs(p[1]);p[2]=Math.abs(p[2])}while(p[1]==0);typ=0;t=t.replace(/-/g,"+");break;}
		if((Math.random()<1/5)&&(b2)){p[0]=Math.abs(p[0]);p[2]=Math.abs(p[2]);t=machBinom(p,b1,b2,b3);typ=1;break;}
		if((Math.random()<1/4)&&(b3)){p[0]=Math.abs(p[0]);p[2]=Math.abs(p[2]);if(Math.random()>.5)p[0]*=-1;else p[2]*=-1;t=machBinom(p,b1,b2,b3);typ=2;break;}
		if((Math.random()<1/3)&&(mk)){t=machMinusklammer(p);typ=3;break;}
		if((Math.random()<1/2)&&(fk)){t=machFaktorklammer(p);typ=4;break;}
		if((Math.random()<1/1)&&(kk)){t=machKlammerProdukt(p);typ=5;break;}
	}while(true);
	var AF=1;
	if(((t.charAt(0)!="-")&&(af)&&(Math.random()>.7))||fb)
	{
		AF=Math.floor(Math.random()*12+1)*((Math.random()>.5)?-1:1);
		t=(AF)+t;
	}
	if(t.substr(0,2)=="1(")t=t.substring(1,t.length);
	if(t.substr(0,3)=="-1(")t="-"+t.substring(2,t.length);
	if(!UEE)
	{
		if(w==2)
		{
			var tt=((p[2]!=0)?p[2]*AF+"x²+":"")+((p[1]!=0)?p[1]*AF+"x+":"")+((p[0]!=0)?p[0]*AF:"")
			document.f.kl1_.value=" "+formatTerm(tt);
			merkKlammerTerm=formatTerm(t);
		}
		else document.f.kl1.value=" "+formatTerm(t);
		t=makeParseble(t);
		document.parser.parse(t);
		if(w==2)
		{
			for(i=0;i<10;i++){klTestX_[i]=Math.round(Math.random()*40-20);klTestY_[i]=document.parser.calcY(klTestX_[i]);}
			//alert(t+"\n"+klTestY_);
			document.f.kl2_.value="";//typ+"\n"+merkKlammerTerm;
			document.f.kl2_.focus();
		}
		else
		{
			for(i=0;i<10;i++){klTestX[i]=Math.round(Math.random()*40-20);klTestY[i]=document.parser.calcY(klTestX[i]);}
			document.f.kl2.value="";
			document.f.kl2.focus();
		}
	}else UET=formatTerm(t);
	if(w==2){klTestP_[0]=p[0]*AF;klTestP_[1]=p[1]*AF;klTestP_[2]=p[2]*AF;}
	else{ klTestP[0]=p[0]*AF;klTestP[1]=p[1]*AF;klTestP[2]=p[2]*AF;}
}

function checkKl(w)
{
	var t=document.f.kl2.value.replace(/\r/g,"").replace(/x\(/g,"x*(").replace(/\)x/g,")*x").split("\n");
	if(w==2)t=document.f.kl2_.value.replace(/\r/g,"").split("\n");
	var i,j,tt="",e=(1==9);
	for(i=0;i<t.length;i++)
	{
		t[i]=t[i].replace(/OK/,"").replace(/FALSCH/,"").replace(/FEHLER/,"");
		t[i]=formatTerm(t[i].replace(/·/g,"*").replace(/\*/g,"*"));
		if(t[i].replace(/ +/g,"")=="0")t[i]="";
		if(t[i].replace(/ +/g,"")!="")
		{
			tt=makeParseble(t[i]);//alert(tt);
			e=document.parser.parse(tt);
			if(e==false){t[i]+="       FEHLER im Term";break;}
			if(w==2)
			for(j=0;j<10;j++){if(Math.abs(document.parser.calcY(klTestX_[j])-klTestY_[j])>0.00001){t[i]+="        FALSCH";/*alert(klTestX_[j]+"\n"+document.parser.calcY(klTestX_[j])+"\n"+klTestY_[j]);*/  break;}}
			else
			for(j=0;j<10;j++){if(Math.abs(document.parser.calcY(klTestX[j])-klTestY[j])>0.000001){t[i]+="        FALSCH";break;}}
			if(j==10)
			{
				t[i]+="       OK";
			}
		}
	}
	var tt=t.join("\n"),ii;
	ii=tt.indexOf("FALSCH");if(ii==-1)ii=tt.length-6;
	if(w==2)
	{
		document.f.kl2_.value=(tt.substr(0,ii+6)+"\n ").replace(/\n+/,"\n");
		document.f.kl2_.focus();
	}
	else
	{	
		document.f.kl2.value=(tt.substr(0,ii+6)+"\n ").replace(/\n+/,"\n");
		document.f.kl2.focus();
	}
	if((j==10)&&(t[i-1].indexOf("(")==-1))
	{
//		if(confirm("Richtig!\n\nNeue Aufgabe?",""))neueKlammer();
	}
}

function showKl()
{
	var t=((klTestP[2]!=0)?klTestP[2]+"x²+":"")+((klTestP[1]!=0)?klTestP[1]+"x+":"")+((klTestP[0]!=0)?klTestP[0]:"");
	alert(formatTerm(t));
}

var W;

function createPage(ng,nk)
{

	if((ng<=0)&&(nk<=0))return;
	UEE=true;
	var t="<html>\n<head>\n<meta http-equiv=\"content-type\" content=\"text/html; charset=iso-8859-1\">\n";
	t+="<meta name=\"author\" content=\"Arndt Brünner\">\n";
	t+="<title>Übungen</title>\n<link rel=stylesheet type=\"text/css\" href=\"standard1.css\">\n";
	t+="</head>\n<body bgcolor=\"#FFFAEE\" link=\"#000066\" alink=\"#000066\" vlink=\"#000066\">\n";
	t+="<h3>Übungsaufgaben</h3>\n<p><small>erzeugt auf: http://www.arndt-bruenner.de/mathe/java/gleichungenloesen.htm</small></p>\n";
	var g=new Array(ng),k=new Array(nk),Lg=new Array(ng),Lk=new Array(nk),i,l="<p>&nbsp;</p>\n<hr><p>&nbsp;</p>\n<h5>Lösungen</h5>\n<p>&nbsp;<br><small>";
	if(ng>0)
	{
		t+="<p>&nbsp;</p>\n<h5>Gleichungen lösen</h5>\n<table>\n";
		l+="<b><u>Lösungsmengen:</u></b><br>&nbsp;<br>"
		for(i=0;i<ng;i++)
		{
			status="erzeuge Gleichung "+(i+1);
			neu();g[i]=UET;
			Lg[i]=(LR)?"R":"{"+String(X).replace(/\./,",")+"}";
			if((X=="!")&&(XX.length==2)){Lg[i]="{"+XX.join("; ")+"}";}
			if((X=="!")&&(XX.length==1)){Lg[i]="{"+XX[0]+"}";}
		}
		var sp=3-Level;if(sp<1)sp=1;
		status="sortiere Gleichungen";
		sortLength(g,Lg);
		status="erzeuge HTML-Text";
		for(i=1;i<=ng;i++)
		{
			if((i%sp==1)||(sp==1))t+="<tr>\n";
			t+="<td>"+i+".)&nbsp;&nbsp;&nbsp;</td><td><nobr>"+g[i-1]+"</nobr></td>\n";
			if(i%sp==0)t+="</tr>\n";else t+="<td><nobr>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</nobr></td>\n";
			l+="<nobr>"+i+".)&nbsp;L="+Lg[i-1];
			l+="</nobr>&nbsp;&nbsp;&nbsp;&nbsp;\n";
		}
		l+="</small><br>&nbsp;</p>\n";
		t+="</table>\n";
	}
	if(nk>0)
	{
		t+="<p>&nbsp;</p>\n<h5>Klammerterme auflösen</h5>\n<table>\n";
		for(i=0;i<nk;i++)
		{
			status="erzeuge Klammerterm "+(i+1);
			neueKlammer();k[i]=UET;
			Lk[i]=((klTestP[2]!=0)?klTestP[2]+"x²+":"")+((klTestP[1]!=0)?klTestP[1]+"x+":"")+((klTestP[0]!=0)?klTestP[0]:"");
			Lk[i]=formatTerm(Lk[i]);
		}
		//status="sortiere Klammerterme";
		//sortLength(k,Lk);
		status="erzeuge HTML-Text";
		l+="<p><small><b><u>aufgelöste Klammerterme:</u></b><br>&nbsp;<br>\n";
		for(i=1;i<=nk;i++)
		{
			if(i%3==1)t+="<tr>\n";
			t+="<td>"+i+".)&nbsp;&nbsp;&nbsp;</td><td>"+k[i-1]+"</td>\n";
			if(i%3==0)t+="</tr>\n";else t+="<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n";
			l+="<nobr>"+i+".)&nbsp;&nbsp;"+Lk[i-1]+"</nobr>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n";
		}
		l+="</small><br>&nbsp;</p>\n";
		t+="</table>\n";
	}
	l=l.replace(/\{\}/g,"{ }").replace(/\{,/g,"{0,").replace(/\{-,/g,"{-0,").replace(/-/g,"–");
	document.f.uebutton.focus();
	t+=l+"<p>&nbsp;</p><hr><p><small>&copy; Arndt Brünner&nbsp;&nbsp;<br>eMail: <img src='../bilder/email.gif' width=178 height=12>\n";
	t+="<br>Homepage: http://www.arndt-bruenner.de/mathe<br>&nbsp;</p></body>\n</html>";
	status="erzeuge neues Browserfenster mit Übungen";
	while(W==null) W=window.open("","newpage");
	W.document.open();
	W.document.write(t);
	W.document.close();
	status="";
	W.focus();
	UEE=false;
}

function sortLength(a,c)
{
	var n=a.length,l=new Array(n),b=new Array(n),d=new Array(n),i,j,L=0;
	for(i=0;i<a.length;i++)l[i]=String(a[i]).length;
	i=0;for(L=0;L<1000;L++){for(j=0;j<n;j++){if(l[j]==L){d[i]=c[j];b[i++]=a[j];}}}
	for(i=0;i<n;i++){a[i]=b[i];c[i]=d[i];}
}
