// Javascript (c) Arndt Brünner
// Version: 3.12.2003

var z=0;
var d=parent.frames[2].document;
var a=new Array(),b=new Array(),c=new Array(),poly=new Array(),x=new Array(),X0;
var g=0,level=1,z=1;
var s=0,ci;
var inp=1;
var glmerk="";

function neueAufgabe(l)
{	
	if((l!=null)&&(level>1.25))level-=.25;
	if((z%10)==0)level--;if(level>10)level=10;if(level<1)level=1;
	status="Level: "+Math.round(level);
	document.f.levelsel.selectedIndex=Math.round(level-1);
	var i,j=0,g0,g1;
	var r=new Array();
	b=new Array();
	if(document.f.nurpolynom[1].checked)
	{
		if((l==true)||(s==10000))
		{
			a=new Array();c=new Array();
			g0=1;
			g=Math.floor(rnd(2.1,2+level/1.25));
			if((level>1)&&(g==2))g=3;
			g1=g-1;var ii=0;
			x=new Array(g);
			do{
				ii++;
				a[0]=new Array();
				do{x[0]=Math.round(rnd(-5,5))}while(x[0]==0);
				for(i=1,iii=0;i<g;i++)do{do{x[i]=Math.round(rnd(-level*1.5,level*1.5))}while(x[i]==0);for(j=0;j<i;j++){if(x[j]==x[i])break;};iii++;}while((i>j)&&(iii<10));
				if(i<g){for(i=1;i<g;i++)do{x[i]=Math.round(rnd(-level*1.5,level*1.5))}while(x[i]==0);}
				for(i=0;i<=g;i++)a[0][i]=0;
				a[0][0]=-x[0];a[0][1]=1;
				for(i=1;i<g;i++){for(j=i+1;j>0;j--)a[0][j]=a[0][j-1]-a[0][j]*x[i];a[0][0]*=-x[i];}
			}while((glmerk.indexOf(pstr(a[0]))!=-1)&&(ii<10));
			quicksort(x);
			glmerk+=pstr(a[0])+"\n";
			print(s=-1);
			return;
		}
		if(s==1000)
		{
			a=new Array();a[0]=new Array();
			var ok=(1==0);
			for(i=c.length-1;i>=0;i--){if((!ok)&&(c[i]==0))continue;ok=true;a[0][i]=c[i];}
			g=a[0].length-1;
			c=new Array();
			for(i=0;i<x.length;i++)if(x[i]==X0){x[i]=null;break;}
			print(s=-1);
			return;
		}
		if(s==100)
		{
			b[1]=1;b[0]=-X0;
			g0=1;ci=g1=g-1;
		}
	}
	else
	{
		g0=rnd(1,level);
		if(document.f.linfak.checked)g0=1;
		g1=rnd(1,level+2);ci=g1;
		g=g1+g0;
		a=new Array();c=new Array();
		do{
		for(i=0;i<=g0;i++)b[i]=(Math.random()>.2)?rnd(-7,7):0;if((b[g0]==0)||(level==1))b[g0]=1;
		if(Math.random()>.95)b[rnd(0,g0)]+=.5;
		for(i=0;i<=g0;i++)if(b[i]!=0)j++;}while(j<2);
		if(document.f.linfak.checked)b[1]=1;
		j=0;do{
		for(i=0;i<=g1;i++)c[i]=(Math.random()>.2)?rnd(-8,8):0;if(c[g1]==0)c[g1]=1;
		if(Math.random()>.95)c[rnd(0,g0)]+=.5;
		if(Math.random()>.95)c[rnd(0,g0)]/=4;
		for(i=0;i<=g1;i++)if(c[i]!=0)j++;}while(j<2);
		a[0]=new Array(g+1);
		for(i=0;i<=g;i++)a[0][i]=0;
		if((Math.random()>0.65)&&(!document.f.keinereste.checked))
		{
			var gr=g0-1,ok=(8==9);//rnd(0,g1-1);
			for(i=0;i<=gr;i++){a[0][i]=(Math.random()>.3)?rnd(-5,8):0;if(a[0][i]!=0)ok=true;}
			if(!ok)a[0][rnd(0,gr)]=rnd(-5,-1);
		}
		for(i=0;i<=g0;i++){for(j=0;j<=g1;j++)a[0][i+j]+=b[i]*c[j];}
		//alert(a[0]+"    "+g+"\n"+b+"    "+g0+"\n"+c+"    "+g1);
	}
	var bb=b[g0];j=1;
	for(e=g-g0;e>=0;e--)
	{
		if((a[j-1][e+g0]==0)||((a[j-1][e+g0]==null))){c[e]=0;continue;}
		a[j]=new Array();a[j+1]=new Array();
		var k=a[j-1][e+g0]/bb;
		for(i=0;i<e;i++)a[j][i]=0;
		for(i=0;i<=g0;i++)a[j][i+e]=k*b[i];//alert("("+pstr(b)+")·"+k+"x^"+e+" = "+pstr(a[j]));
		var ok=(1==9);
		for(i=a[j].length-2;i>=0;i--)
		{
			if(a[j-1][i]!=a[j][i])
			{
				a[j+1][i]=a[j-1][i]-a[j][i];
				ok=true;
			}
			else if((ok)||(i==0)) a[j+1][i]=0;
		}
		//alert(pstr(a[j+1]));
		c[e]=k;j+=2;
	}
	//alert(pstr(b)+"  \n"+pstr(c)+"  \n"+a.join("\n"));
	print(s=0.5);//d.f.q.focus();
}
function rnd(n0,n1)
{
	return Math.floor(Math.random()*(n1-n0))+n0;
}

function weiter()
{	
	d=parent.frames[2].document;
	var err="",i,j;
	if(s==-1)
	{
		var xx=Number(d.f.x.value.replace(/,/,"."));
		if(isNaN(xx)||(d.f.x.value.replace(/ /g,"")=="")){alert("Fehler");d.f.x.focus();d.f.x.select();return;}
		for(i=0;i<x.length;i++)if(xx==x[i])break;
		if(i==x.length){alert("x = "+xx+"  ist keine Lösung der Gleichung");d.f.x.focus();d.f.x.select();return;}
		X0=xx;
		print(s=-2);
		return;
	}
	if(s==-2)
	{
		var xx=d.f.x.value.replace(/,/,".").replace(/ /g,"");
		if(xx.charAt(0)!="x"){alert("Fehler: Term muß mit x beginnen");d.f.x.focus();d.f.x.select();return;}
		xx=xx.substr(1,xx.length-1);
		if(xx==X0){alert("Achtung: Vorzeichen falsch!\nDie Lösung muß von x subtrahiert werden.");d.f.x.focus();d.f.x.select();return;}
		s=100;
		neueAufgabe();
		return;
	}
	if(s==-3)
	{
		var xx=Number(d.f.x.value.replace(/,/,"."));
		if(isNaN(xx)||(d.f.x.value.replace(/ /g,"")=="")){alert("Fehler");d.f.x.focus();d.f.x.select();return;}
		if(xx==c[0]){alert("Achtung Vorzeichen!!!!");d.f.x.focus();d.f.x.select();return;}
		if(xx!=-c[0]){alert("Leider falsch");d.f.x.focus();d.f.x.select();return;}
		print(s=-3);return;
	}
	if(s==5000){s=10000;neueAufgabe();return;}
	if((s%1)!=0)
	{
		j=Math.floor(s/2)+1;
		for(i=c.length-1;i>0;i--){if(c[i]!=0)j--;if(j==0)break;}ci=i;
		//alert(ci+"  "+c+"   "+j);
		var q=d.f.q.value.replace(/,/,".").replace(/²/,"^2").replace(/ /g,"").replace(/³/,"^3").replace(/·/,"*").replace(/\*x/,"x").split("x");
		//if((ci<c.length-1)&&(q[0].replace(/-/,"+").indexOf("+")==-1)){alert("Bitte nicht das Rechen-/Vorzeichen vergessen");d.f.q.focus();d.f.q.select();return;}
		if((s>1)&&(q[0].replace(/-/,"+").indexOf("+")==-1)){alert("Bitte nicht das Rechen-/Vorzeichen vergessen");d.f.q.focus();d.f.q.select();return;}
		if(q[0]=="")q[0]=1;else if(q[0]=="-")q[0]=-1;else if(q[0]=="+")q[0]=1;else q[0]=Number(q[0]);
		if(q.length==1)q[1]=0;else if(q[1]=="")q[1]=1;else q[1]=parseInt(q[1].replace(/\^/,""));
		if((isNaN(q[0]))||(isNaN(q[1]))){alert("Fehler");d.f.q.focus();d.f.q.select();return;}
		var n=ci;
		if(q[0]*c[n]<0)err+="Falsches Vorzeichen bei "+d.f.q.value+"\n";
		if(Math.abs(q[0])!=Math.abs(c[n]))err+="Falscher Koeffizient bei "+d.f.q.value+"\n";
		if(q[1]!=n)err+="Falscher Exponent (falsche Potenz von x) bei "+d.f.q.value+"\n";
		if(d.f.q.value=="")err="Fehlende Eingabe";
		if(err!=""){alert(err);d.f.q.focus();d.f.q.select();return;}
		if(err==""){ci--;while((ci>0)&&(c[ci]==0))ci--;}
	}
	else
	{
		var k=new Array(),i,o,n;
		if(inp==1)
		{
			n=a[s].length-1;
			o=d.f.k;
			parseKoeffs(o.value.replace(/·/g,"*").replace(/\*x/g,"x").replace(/²/g,"^2").replace(/³/g,"^3"),k,n);
			for(i=k.length-1;i>=0;i--)
			{
				var kk=new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);kk[i]=k[i];
				var K=pstr(kk);
				if(k[i]!=a[s][i])
				{
					if((a[s][i]==0)&&(k[i]!=0))alert(K+" ist falsch. Diese Potenz von x kommt hier nicht vor.");
					else if((a[s][i]!=0)&&(k[i]!=0)){if(a[s][i]==-k[i])alert("Überdenke das Vorzeichen von "+K+".");else alert("Der Koeffizient von "+K+" ist nicht richtig.");}
					else if((a[s][i]!=0)&&(k[i]==0)){if(i>1)alert("Der Summand mit x^"+i+" fehlt.");else if(i==1)alert("Du hast den Summanden mit x vergessen.");else alert("Du hast eine Zahl übersehen.");}
					o.focus();return;
				}
			}
		}
		if(inp==0)
		{
			for(i=0;i<=g;i++){eval('o=d.f.k'+i);if(o==null)break;k[i]=o.value;}
			n=i;
			for(i=n-1;i>=0;i--)
			{
				eval('o=d.f.k'+i);
				if(k[i].indexOf("x")>-1){alert("x im Koeffizienten");o.focus();o.select();return;}
				if((i!=n-1)&&(String(k[i]).replace(/·/g,"*").replace(/\*x/g,"x").replace(/-/,"+").replace(/ /g,"").indexOf("+")==-1)&&(k[i]!="")){alert("Bitte Vor- bzw. Rechenzeichen ergänzen");o.focus();o.select();return;}
				if(k[i]=="+")k[i]=1;if(k[i]=="-")k[i]=-1;
				k[i]=Number(k[i].replace(/,/,"."));
				if(Math.abs(k[i])!=Math.abs(a[s][i])){if((a[s][i]!=0)||(k[i]!=0))err+="Koeffizient falsch\n";}
				if((k[i]==0)&&(a[s][i]!=0)){err="Koeffizient für x^"+i+" fehlt\n";}
				if((k[i]*a[s][i]<0)&&(err=="")){err+="Vorzeichen falsch\n";}
				if(err!=""){alert(err);o.focus();o.select();return;}
			}
		}
	}

	if(err!=""){alert(err);print(s);return;}
	if((s%2)==0)s+=0.5; else if((s%1)!=0)s+=0.5; else s++;
	//alert(s+"  "+a.length);
	if(s>a.length-1)
	{
		print(s=a.length);
	}
	else print(s);
}

function print(ii)
{
	d=parent.frames[2].document;
	inp=parent.frames[0].document.f.eingabemodus.selectedIndex;
	help(ii);
	d.open();
	var t='<html><head><link rel=stylesheet type="text/css" href="standard1.css">\n';
	t+='<style type="text/css">\ntd{text-align:right;font-size:10pt;}';
	t+='\ninput.t{font-size:9pt;border:0;background-color:#E9EEEB;}\n';
	t+='\ntd.c{text-align:center;}\n';
	t+='body{margin:0 0 0 0;}\n</style>\n';
	t+='</head>\n<body>\n';
	d.writeln(t);t="";
	t+='<p style="text-align:right;margin-top:0px;margin-right:0"><small>&copy; Arndt Brünner</small></p>';
	t+='<form name="f" action="javascript:parent.frames[0].weiter()">\n<center><table border=0 cellpadding=2 style="text-align:center">\n';
	//t+='<tr><td>&nbsp;</td></tr>';
	var i,j,foc="",f1=((ii%1)!=0)?"<b>":"",ff1=f1.replace(/</,"</");
	if(ii<0)
	{
		foc="x";
		if(ii==-1)
		{
			t+='<tr><td class="c">Finde durch Ausprobieren eine ganzzahlige Lösung der Gleichung</td></tr>\n';
			t+='<tr><td class="c">'+pstr(a[0])+' = 0</td><tr>';
			t+='<tr><td>&nbsp;</td><tr>';
			t+='<tr><td class="c">Lösung: &nbsp;x = <input name="x" class="t" size=3></td></tr>\n';
			t+='<tr><td>&nbsp;</td><tr>';
		}
		if(ii==-2)
		{
			t+='<tr><td class="c" colspan="5">Gefundene Lösung: &nbsp;x = '+X0+'</td></tr>\n';
			t+='<tr><td class="c">Das Polynom muß durch </td><td><big> (</big></td><td><input name="x" class="t" size="5"></td><td><big>) </big></td>\n';
			t+='<td> geteilt werden.</td></tr>';
		}
		if(ii==-3)
		{
			t+='<tr><td class="c">OK! Alle Lösungen gefunden!<br>&nbsp;<br>Neue Aufgabe?</td></tr>';
			t+='<tr><td>&nbsp;</td><tr>';
			foc="weiterbutton";
			help(-4);
			s=5000;
		}
		t+='</table>\n<input type="button" class="button" name="weiterbutton" value="weiter" onclick="parent.frames[0].weiter()">\n';
		t+='</center>\n</body>\n</html>';
		t=formatHoch(t);
		d.write(t);
		d.close();
		fokus(foc);
		return;
	}
	var f2=((ii%1)!=0)?f1:"",ff2=((ii%1)!=0)?ff1:"";
	var f3=((ii%2)==1)?"<b>":"",ff3=f3.replace(/</,"</");
	var f4=((ii%2)==1)?"<b>":"",ff4=f4.replace(/</,"</");
	var f5=((ii%2)==0)?"<b>":"",ff5=f5.replace(/</,"</"); // Subtraktionen
	if(((!document.f.markon.checked)&&((level>5)||(document.f.markoff.checked)))||(ii>=a.length))f1=f2=f3=f4=f5=ff1=ff2=ff3=ff4=ff5="";
	for(i=0;i<ii;i++)
	{
		var f_5=(i>ii-3)?f5:"",ff_5=(i>ii-3)?ff5:"";
		t+='  <tr>\n    <td>';
		if(i==0)t+="&nbsp;&nbsp;(";
		else if((i%2)==1)t+='-(';
		for(j=g;j>=a[i].length;j--)t+="</td><td></td><td>";
		if((i==a.length-1)&&(pstr(a[i])=="0"))
		{
			t+='</td><td>0</td>\n';
		}
		else
		{
		t+='</td><td><nobr>'+((i+1>=ii)?f1:'')+f_5+xp(a[i][a[i].length-1],a[i].length-1)+ff_5+((i+1>=ii)?ff1:'')+'</nobr></td>\n';
		for(j=a[i].length-2;j>=0;j--)
		{
			t+='    <td>'+f_5+vz(a[i][j])+ff_5+'</td><td>'+f_5;
			t+=xp(Math.abs(a[i][j]),j)+ff_5+'</td>\n';
		}}
		if((i==0)||((i%2)==1))t+='    <td>)</td>\n';
		if(i==0)
		{
			t+='<td>&nbsp;:&nbsp;</td><td>(</td><td><nobr>'+f3+f2+pstr(b).replace(/-/g,"–").replace(/ /,ff2+" ")+ff3+'</nobr></td><td><nobr>) &nbsp;=&nbsp; ';
			var C=new Array(c.length);
			for(j=c.length-1;j>=0;j--)C[j]=(j>ci)?c[j]:0;
			var pc=pstr(C);if(pc=="0")pc="";
			j=pc.lastIndexOf(" ");pc=pc.substr(0,j)+f4+pc.substring(j,pc.length)+ff4;
			t+=pc+'</nobr></td>\n';
			if((ii%1)!=0)
			{
				t+='    <td><input class="t" name="q" size=7></td>\n';
				foc="q";
			}
			else if((ii>=a.length)&&(pstr(a[a.length-1])!="0"))t+='<td>&nbsp;&nbsp;Rest '+ pstr(a[a.length-1]).replace(/-/g,"–")+'</td>';
		}
		t+="  </tr>\n";
		if((i%2)==1)t+='  <tr><td colspan="'+(g*2+3)+'"><hr width=100% bordercolor="#000000" color="#000000" noshade></td></tr>\n';
	}

	if(ii<a.length)
	{

	t+='  <tr>\n';//    <td>'+xp(a[ii][g],g)+'</td>\n';
	if((ii%1)==0)
	{
	//	if((ii%2)==0)t+="    <td>.</td>\n";alert(g+"  "+a[ii].length);
	//	var iii=(ii<a.length-1)?ii:ii-1;//alert(ii+"   "+iii);
		for(j=g;j>=a[ii].length;j--)t+='    <td colspan=2>&nbsp;</td>\n';
		if((ii%2)==1)	t+='    <td><nobr>'+(((ii%2)==1)?"-(":"")+'</nobr></td>\n';
		//if(iii==ii-1)t+='    <td></td>';
		switch(inp)
		{
		case 0: 
			for(j=a[ii].length-1;j>=0;j--)
			{
				t+='    <td colspan='+(((j<a[ii].length-1)||((ii%2)==0))?2:1)+'>\n';
				t+='    <nobr><input type="text" class="t" size=4 name="k'+j+'">'+((j>0)?xp(1,j):"")+'</nobr></td>\n';
				if(foc=="")foc="k"+j;
			}break;
		case 1:
			var l1=((ii%2)==0)?Math.max(a[ii-1].length,(ii>1)?a[ii-2].length:0)*2-1:a[ii-1].length*2-1;
			var l2=((ii%2)==0)?Math.max(pstr(a[ii-1]).length,(ii>1)?pstr(a[ii-2]).length:0):pstr(mkp(a,ii-1)).length;
			if(pstr(a[ii])=="0")
			{
				l1=a[ii-1].length*2-1;l2=pstr(mkp(a,ii-1)).length;
				l1=2;l2=5;
			}
			t+='    <td colspan='+(l1)+' style="text-align:left">\n';
			t+='    <input name="k" class="t" size="'+l2+'"></td>\n';
			if(foc=="")foc="k";
			break;
		default:;
		}
		if((ii%2)==1)t+='    <td>)</td>\n';
		t+='  </tr>\n'
	}
	t+='  <tr><td>&nbsp;</td></tr>\n  <tr>\n    <td colspan=10><input type="button" class="button" value="Weiter" onclick="parent.frames[0].weiter()"></td>\n  </tr>\n';
	}
	else
	{
		t+='<tr><td>&nbsp;</td></tr>\n';
		t+='<tr><td colspan=10>';
		foc="weiterbutton";
		if(document.f.nurpolynom[1].checked)
		{
			if(g>2)
			{
				t+='<input type="button" class="button" name="weiterbutton" value="OK! Weiter" onclick="parent.frames[0].neueAufgabe()">\n';
				s=1000;
			}
			else
			{
				t+='Gib die letzte Lösung an: &nbsp;&nbsp;x = <input name="x" class="t" size=5><br>&nbsp;<br>\n';
				t+='<input type="button" class="button" value="OK?" onclick="parent.frames[0].weiter()">\n';
				foc="x";
				s=-3;
				help(-3);
			}
		}
		else
		t+='<input type="button" class="button" name="weiterbutton" value="OK! Neue Division?" onclick="parent.frames[0].neueAufgabe()">\n';
		t+='</td>\n  </tr>\n';
		z++;level+=0.25;
	}
	t+="</table></center>\n";
	while((i=t.indexOf("^"))>-1){t=t.substr(0,i)+"<sup>"+t.charAt(i+1)+"</sup>"+t.substring(i+2,t.length);}
	t+='</form>\n</body>\n</html>';
	d.write(t);
	d.close();
	//alert(d);
	if(foc!="") fokus(foc);
}
var cmerk="";

function mkp(a,i)
{
	var b=new Array();
	for(var j=0;j<=i;j++)for(var k=0;k<a[i].length;k++)b[k]=Math.max(Math.abs(a[0][k]),Math.abs(a[i][k]));
	return b;
}

function help(s)
{
	var hf=parent.frames[1].document,t="";
	hf.open();
	hf.writeln('<html><head><link rel=stylesheet type="text/css" href="standard1.css">');
	hf.writeln('<style type="text/css">p{font-size:9pt;color:#336655;}</style>');
	hf.writeln('</head><body>');
	if(s<a.length)hf.writeln('<p align="center">&nbsp;<br>Wenn Du hier herunterscrollst, erhältst Du</p><p align="center"><big><b>Hilfe zum aktuellen Schritt</b></big><br>&nbsp;</p><p>&nbsp;</p>');
	if(s==-1)
	{
		hf.writeln('<p>Da das Polynom nur ganzzahlige Koeffizienten und Nullstellen hat, muß der Betrag jeder Lösung Teiler des absoluten Gliedes sein.</p>\n');
		hf.writeln('<p>Das absolute Glied ist die einzelne Zahl ohne x, <nobr>hier also &nbsp;<b>'+a[0][0]+'</b>.</nobr></p>\n');
		var tl=new Array(),l=new Array();
		for(i=1;i<11;i++)if((a[0][0]%i)==0)tl[tl.length]=i;
		hf.writeln('<p>&nbsp;</p><center><p>Kleine Teiler von |'+a[0][0]+'| und damit potentielle Kandidaten für die Lösungen sind: <nobr>{±'+tl.join("; ±")+'}</nobr></p>\n');
		hf.writeln('<p>&nbsp;</p><p>Erstelle eine Wertetabelle für diese Werte.</p>');
		hf.writeln('<p>&nbsp;</p><p>Wertetabelle:</p><table border=1 style="text-align:center"><tr><td style="text-align:center"><small><b>x</b></small></td><td> &nbsp;<small><b>'+formatHoch(pstr(a[0]))+'</b></small>&nbsp; </td></tr>\n');
		for(i=tl.length-1;i>=0;i--)
		{
			if(i>0){if(tl[i]==tl[i-1])continue;}
			hf.writeln('<tr><td style="text-align:center"><nobr>&nbsp;&nbsp;<small>'+(-tl[i])+'</small>&nbsp;&nbsp;</nobr></td><td style="text-align:center"><nobr>&nbsp;&nbsp;<small>'+horner(-tl[i],a[0])+'</small>&nbsp;&nbsp;</nobr></td></tr>\n');
		}
		for(i=0;i<tl.length;i++)
		{
			if(i>0){if(tl[i]==tl[i-1])continue;}
			hf.writeln('<tr><td style="text-align:center">&nbsp;&nbsp;<small>'+(tl[i])+'</small>&nbsp;&nbsp;</td><td style="text-align:center">&nbsp;&nbsp;<small>'+horner(tl[i],a[0])+'</small>&nbsp;&nbsp;</td></tr>\n');
		}
		hf.writeln('</table><p>&nbsp;</p>\n');
		hf.writeln('<p>&nbsp;</p>\n');
		for(i=0;i<x.length;i++)if(x[i]!=null)l[l.length]=x[i];
		hf.writeln('<p>Lösungen:</p><p>x <font face="Symbol">Î</font> {'+l.join("; ")+'}</p></center>');
	}
	else if(s==-2)
	{
		hf.writeln('<p>Das Polynom '+formatHoch(pstr(a[0]))+' kann als Produkt von Linearfaktoren &nbsp;');
		for(var i=1;i<=g;i++)hf.write('(x - x<sub>'+i+'</sub>)');
		hf.writeln('&nbsp;&nbsp;geschrieben werden, wobei die x<sub>i</sub> die Lösungen der Gleichung &nbsp;<nobr>'+formatHoch(pstr(a[0]))+' = 0 &nbsp;</nobr>sind.</p>');
		hf.writeln(('<p>Da x<sub>1</sub> bekannt ist (x<sub>1</sub>='+X0+'), kann man das Polynom also ohne Rest durch <tt>(x - '+X0+')</tt> teilen.</p>').replace(/- -/,"+ "));
		hf.writeln('<p></p>');
	}
	else if(s==-3)
	{
		hf.writeln('<p>Lies die Lösung aus dem Quotienten &nbsp;<b>'+pstr(c)+'</b>&nbsp; ab.</p>');
		hf.writeln('<p>&nbsp;</p><p>Der Quotient entspricht &nbsp;x - a&nbsp;, wobei a die gesuchte Lösung ist. Beachte das negative Rechenzeichen!</p>');
		hf.writeln('<p>&nbsp;</p><p>Die Lösung ist x = '+(-c[0])+'</p>');
		hf.writeln('<p></p>');
	}
	else if((s>=a.length)||(s==-4))
	{
		hf.writeln('<p>Du hast es geschafft!</p> <p>Klicke auf den Button, um die nächste Aufgabe zu lösen.</p>');
	}
	else if((s%1)==0.5)
	{
		t=(s==0.5)?"ersten":"nächsten";
		var tt=(s==0.5)?"Dividenden":"letzten Restes";
		hf.writeln('<p>Du mußt den '+t+' Summanden des Quotienten finden.');
		hf.writeln('<br>Überlege dazu, wie oft der Summand des Divisors mit der höchsten Potenz von x ');
		hf.writeln('(hier <nobr><b>'+xp(b[b.length-1],b.length-1)+'</b>)</nobr> in den Summanden des '+tt+' mit der höchsten Potenz von x ');
		hf.writeln('(hier <nobr><b>'+xp(a[s-0.5][a[s-0.5].length-1],a[s-0.5].length-1)+'</b>)</nobr> paßt.</p>');
		hf.writeln('<p>Anders ausgedrückt:<br>Mit was muß man <nobr><b>'+xp(b[b.length-1],b.length-1)+'</b></nobr> multiplizieren, um <nobr><b>'+xp(a[s-0.5][a[s-0.5].length-1],a[s-0.5].length-1)+'</b></nobr> zu erhalten?');
		hf.writeln('<p>&nbsp;<p><p>Dividiere die Koeffizienten, um den Faktor zu erhalten (dabei Vorzeichen beachten), und ');
		hf.writeln('subtrahiere die Exponenten (Hochzahlen von x), um den Exponenten zu erhalten.</p>');
		hf.writeln('<p>&nbsp;</p><p>Berechne &nbsp;&nbsp;&nbsp;<b>'+xp(a[s-0.5][a[s-0.5].length-1],a[s-0.5].length-1)+" : "+((b[b.length-1]!=1)?"(":"")+xp(b[b.length-1],b.length-1)+((b[b.length-1]!=1)?")":"")+'</b></p>');
		hf.writeln('<p>&nbsp;</p><p>Das Ergebnis ist &nbsp;<b>'+(cmerk=t=xp(c[ci],ci))+'.</b></p>');
		hf.writeln('<p>Daher ist '+t+' der '+((s<1)?'er':'näch')+'ste Summand des Quotienten.</p>');
		if((c[ci]>0)&&(s>1))hf.writeln('<p>Gib ihn mit Rechenzeichen, also als&nbsp;&nbsp;<b>+ '+t+'</b>&nbsp; ein.');
		hf.writeln('<p>Du kannst Hochzahlen mit dem Zeichen <tt>^</tt> eingeben.');
	}
	else if((s%2)==1)
	{
		hf.writeln('<p>Der Divisor muß nun komplett mit dem neuen Summanden des Quotienten multipliziert werden.<p>');
		if(inp==0)hf.writeln('Falls der Koeffizient 1 ist, mußt du auch 1 schreiben. Falls eine im Produkt Potenz fehlt, so laß das Feld frei.</p>');
		hf.writeln('<p>Multipliziere <b>'+cmerk+'</b> mit jedem Summanden des Divisors:</p><p>');
		for(i=b.length-1;i>=0;i--)
		{
			if(b[i]==0)continue;
			hf.writeln('&nbsp;&nbsp;<b>'+cmerk+' · '+((b[i]<0)?"(":"")+xp(b[i],i)+((b[i]<0)?")":"")+' &nbsp;=&nbsp; ?</b><br>');
		}
		hf.writeln('</p><p>Beachte die Vor- und Rechenzeichen der Terme. Außerdem die Vorzeichenregeln beim Multiplizieren:<br>');
		hf.write('<br>&nbsp;&nbsp;(+)·(+) = (+)<br>&nbsp;&nbsp;(+)·(-) = (-)<br>&nbsp;&nbsp;(-)·(+) = (-)<br>&nbsp;&nbsp;(-)·(-) = (+)</p>');
		if(inp==0)hf.write('Außer am Anfang müssen auch + geschrieben werden. ');
		hf.writeln('<p>Die Koeffizienten (Zahlen) werden multipliziert; die Exponenten werden addiert.<p>');
		if(inp==0)hf.writeln('Trage nur die Koeffizienten und die Vorzeichen an der richtigen Stelle ein.</p>');
		j=a[s].length-1;
		hf.writeln('<p>');
		for(i=b.length-1;i>=0;i--)
		{
			if(b[i]==0)continue;
			hf.writeln('&nbsp;&nbsp;<b>'+cmerk+' · '+((b[i]<0)?"(":"")+xp(b[i],i)+((b[i]<0)?")":"")+' &nbsp;=&nbsp; '+xp(a[s][j],j)+'</b><br>');
			j--;while((a[s][j]==0)&&(j>0))j--;
		}
		hf.writeln('</p><p>Das Produkt ist also: &nbsp;<b>'+formatHoch(pstr(a[s]))+'</b></p>');
		hf.writeln('<p>Du kannst Hochzahlen mit dem Zeichen <tt>^</tt> eingeben.');
	}
	else if((s%2)==0)
	{
		hf.writeln('<p>Nun mußt Du stellenweise die Differenz der Koeffizienten bilden. Achte auf die Vorzeichen und beachte die Vorzeichenregeln.');
		if(inp==0)hf.writeln('<br>Auch hier dürfen die + nicht weggelassen werden.</p>');
		hf.writeln('<p>&nbsp;</p><p>&nbsp;</p>');
		hf.writeln('<p>Subtrahiere jede Potenz von x für sich:</p>');
		for(i=g;i>=0;i--)
		{
			var s1=a[s-2][i],s2=a[s-1][i],s3=a[s][i];
			if((s1==null)||(s2==null))continue;
			if((s1==0)&&(s2==0))continue;
			s1=xp(s1,i);if(s1=="")s1="0";
			s2=xp(s2,i);if(s2=="")s2="0";
			s3=xp(s3,i);if(s3=="")s3="0";
			if(s2.charAt(0)=="-")s2="("+s2+")";
			hf.writeln('<p>&nbsp;&nbsp;&nbsp;<b>'+s1+" – "+s2+" = "+s3+"</b></p>");
		}
		hf.writeln('<p>Die Differenz ist also &nbsp;&nbsp;<b>'+formatHoch(pstr(a[s]).replace(/-/g,"–"))+'</b></p>');
		hf.writeln('<p>Du kannst Hochzahlen mit dem Zeichen <tt>^</tt> eingeben.');
	}
	hf.writeln('</body></html>');
	hf.close();
}

function fokus(foc)
{
	if(parent.frames[2].document.f!=null)
	eval("parent.frames[2].document.f."+foc+".focus()");
	else window.setTimeout("fokus('"+foc+"')",500);
}

function vz(x){if(x<0)return "–";if(x>0)return "+";return "";}

function xp(k,p)
{
	if((k==null)||(isNaN(k))||(k==0))return "";
	var t=(" "+String(k)).replace(/\./,",").replace(/ ,/,"0,").replace(/-,/,"-0,");
	if(p>0)t+="x";if(p>1)t+="<sup>"+p+"</sup>";
	t=t.replace(/ 1x/,"x").replace(/-1x/,"-x").replace(/ /g,"");
	return t;
}

function formatHoch(t)
{
	var i=0;
	while((i=t.indexOf("^"))>-1)
	{
		t=t.substr(0,i)+"<sup>"+t.charAt(i+1)+"</sup>"+t.substring(i+2,t.length);
	}
	return t;
}

function parseKoeffs(t,k,n)
{
	t=t.replace(/[–—]/g,"-");
	var tt=t.replace(/,/g,".").replace(/-/g,"+-").replace(/ /g,"").replace(/x\^/g,"x").split("+");
	var i;
	for(i=0;i<=n;i++)k[i]=0;
	for(i=0;i<tt.length;i++)
	{
		if(tt[i]=="")continue;
		if(tt[i].charAt(tt[i].length-1)=="x")tt[i]+="1";
		if(tt[i].indexOf("x")==-1)tt[i]+="x0";
		u=tt[i].split("x");
		if(u[0]=="")u[0]=1;else if(u[0]=="-")u[0]=-1; else u[0]=Number(u[0]);
		u[1]=Number(u[1]);
		if(k[u[1]]==null)k[u[1]]=0;
		k[u[1]]+=u[0];
	}
}

function horner(x,k)
{
	var y=0;
	for(var i=k.length-1;i>=0;i--)y=y*x+k[i];
	return y;
}