// Autor: Michael Johann, www.schulabakus.de
// Das Programm darf zu nicht-kommerziellen Zwecken frei verwendet werden.
// Der Verweis auf meine Urheberschaft muss erhalten bleiben. (3. April 2008) 
// Grundlegend überarbeitet: 7. April 2009
// if(purpose==non-commercial){use=free}else{contact(me)}


  var Enter=13;
  var vorw=37; // Pfeiltaste <-
  var rueckw=39; // Pfeiltaste ->
  var Tab=9;
  var PlusZ=107;
  var MinusZ=109;
  var ersterTab=100; // Index
  TabFolge = new Array();
  var level=-2;
  var opnd1 = new Object(); // Wert, Ziffern, Laenge
  opnd1["ziffer"] = new Array();
  var opnd2 = new Object();
  opnd2["ziffer"] = new Array();
  var opnd3 = new Object();
  opnd3["ziffer"] = new Array();
  var result = new Object();
  result["ziffer"] = new Array();
  var carry = new Array();
  var borrow = new Array();
  var ok = new Array(false, false, false, false, false, false);
  fehler = new Array();
  ambiente = new Array();
  var tiktak=0;
  var tiktak_alt=0;
  var pause = new Boolean(false);
  zeit = new Array(6);
  var n = 0;
  var aktiveStelle="";
  var plusZeichen='<img src="plus.ico" border=0 alt="+" width="10" height="10">';
  var minusZeichen='<img src="minus.ico" border=0 alt="-" width="10" height="10">';
  var abakus;
  var abakus_opened= new Boolean (false);
  var solving= new Boolean (false);
  var Inhalt= new Array();
  Lsg = new Array();
  stopzeit = new Array();
  var step=0;
  var MovieIndex=0;
  var MoviePause= new Boolean(false);
  var MovieStop= new Boolean(false);
  var MovieNormspeed= 1250;
  var MovieSpeed= 1250;
  var MoviePlaying = new Boolean(false);
  var MovieTrigger;
  var MoviePausetrigger;
  var nr=1;
  var zahl1=0;
  var zahl2=0;
  var op="";
  var Rechenfenster;
//
function ins(ziffer) {
  var obj=document.getElementById("anzeige")
  if(obj.value.length<6) {obj.value = obj.value + ziffer;}
}
//
function ClearAll() {
  document.getElementById("anzeige").value="";
  document.getElementById("anzeige").focus();
  zahl1=0; zahl2=0; nr=1; op="";
}
//
function plus() {
  var a=parseInt(document.getElementById("anzeige").value);
  if(isNaN(a) || a!=document.getElementById("anzeige").value){
    alert("Das war keine Zahl!");
    document.getElementById("anzeige").value="";
    document.getElementById("anzeige").focus(); 
    return;
  } 
  if (nr==2){enter2();}
  if (nr==1){zahl1=a; nr=2; op="plus";
             document.getElementById("anzeige").value=""; 
             document.getElementById("anzeige").focus();}
}
//
function minus() {
  var a=parseInt(document.getElementById("anzeige").value);
  if(isNaN(a) || a!=document.getElementById("anzeige").value) {
    alert("Das war keine Zahl!");
    document.getElementById("anzeige").value="";
    document.getElementById("anzeige").focus(); 
    return;
  }
  if (nr==2){enter2();}
  if (nr==1){zahl1=a; nr=2; op="minus"; 
             document.getElementById("anzeige").value="";
             document.getElementById("anzeige").focus();}
}
//
function durch2() {
  var a=parseInt(document.getElementById("anzeige").value);
  if(isNaN(a) || a!=document.getElementById("anzeige").value) {
    alert("Das war keine Zahl!");
    document.getElementById("anzeige").value="";
    document.getElementById("anzeige").focus(); 
    return;
  }
  if(a%2==1){
    alert("Wähle eine gerade Zahl!"); 
    location.reload(); 
    return;
  }
  zahl1=a; op="halb";
  start(-1);
}
//
function enter2() {
  document.getElementById("anzeige").focus();
  var a=parseInt(document.getElementById("anzeige").value);
  if(isNaN(a) || a!=document.getElementById("anzeige").value) {
    alert("Das war keine Zahl!"); 
    document.getElementById("anzeige").value="";
    document.getElementById("anzeige").focus(); 
    return;
  }
  if (nr==1){alert("Gib +, - oder 1/2 ein!"); return;}
  if (nr==2){
    zahl2=a; nr=1;
    start(-1);
  }
}
//
function gerade (zahl) {
  var status = new Boolean(false)
  status= (zahl%2==0)? true : false;
  return status;
}
//
function Zaehlen () {
  tiktak++;
  var min = Math.floor(tiktak/60);
  var sec = tiktak - min * 60;
  var t = sec > 9? min + "&nbsp;:&nbsp;" + sec : min + "&nbsp;:&nbsp;" + "0" + sec;
  document.getElementById("dauer").innerHTML='<b>'+t+'<\/b>';
  aktiv = window.setTimeout("Zaehlen()", 1000);
}
//
//Attributknoten einfügen (id, class, etc.)
function addAttribute(tObj, aType, aValue) {
 var tAtt=document.createAttribute(aType);
 tAtt.nodeValue=aValue;
 tObj.setAttributeNode(tAtt);
}

function eintragen(ziffer){
  if(aktiveStelle!=""){document.getElementById(aktiveStelle).value=ziffer;}
}

//erzeugt bei id="ort" Tastatur 0..9 und "weiterbutton"
function makeZfrTasten(ort) {
var objekt=document.getElementById(ort);
  addAttribute(objekt, "align", "center");
  objekt.innerHTML='<table bgcolor=#E0E0E0 border=0 cellpadding=0 cellspacing=2><\/table>';
  objekt=objekt.firstChild;
  var reihe=objekt.insertRow(0);
  for(var k=0; k<=4; k++){
    var zelle=reihe.insertCell(k);
//    addAttribute(zelle, "align", "center");
    zelle.innerHTML='<input type="button" width="20" class="zfrButton" value="'+k+'" onclick="eintragen('+k+')">';}
  var reihe=objekt.insertRow(1);
  for(var k=5; k<=9; k++){
    var zelle=reihe.insertCell(k-5);
    zelle.innerHTML='<input type="button" width="15" class="zfrButton" value="'+k+'" onclick="eintragen('+k+')">';}
  var reihe=objekt.insertRow(2);
  var zelle=reihe.insertCell(0);
  addAttribute(zelle, "colspan", 5);
  addAttribute(zelle, "align", "center");
  addAttribute(zelle, "id", "weiterbutton");
//  reihe.innerHTML='<td colspan="5" align="center" id="weiterbutton"><\/td>';//
}

//erzeugt Tabellenform für +/-Aufgabe bei id=ort>
function makeTbl (ort, zeilen, spalten) {
  var tObj = document.getElementById(ort);
  tObj.innerHTML="";
  tObj=tObj.appendChild(document.createElement("table"));
  for (var i=0; i<zeilen; i++) {
   var tRow=tObj.insertRow(i); //neue Zeile nach der letzten
   addAttribute(tRow, "align", "center"); // Inhalte zentrieren
   for (var k=0; k<spalten; k++) {
    var tCell=tRow.insertCell(k); //neue Zelle
    addAttribute(tCell, "id", i+"_"+(spalten-1-k)); // "i_(spalten-1-k)" als Id
    if (i==0) {addAttribute(tCell, "width", 15);}}} // Spaltenbreite: 15, 15, 15, ...
  tRow=tObj.insertRow(zeilen-1); // Zeile für Summenstrich
  addAttribute(tRow, "align", "center"); // Inhalte zentrieren
  tCell=tRow.insertCell(0);
  addAttribute(tCell, "colspan", spalten);
  addAttribute(tCell, "height", 2);
  addAttribute(tCell, "bgcolor", "black");
//  tCell.innerHTML='<hr noshade size="2" color="black">';
//  tRow.innerHTML='<td colspan='+spalten+' height=1 bgColor=0><\/td>'; // Spalten zusammenziehen, Hintergrund: schwarz
}

// <INPUT TYPE="text" SIZE=1 maxlength=1 class=ziffer id=label>
function zfrBox (ort, label){
  document.getElementById(ort).innerHTML='<input type="text" size="1" maxlength="1" class="ziffer" id="'+label+'" onfocus="javascript: this.select(); aktiveStelle=this.id;" onclick="this.select()">'
}

function carryBox (ort, label){
  document.getElementById(ort).innerHTML='<input type="text" size="1" maxlength="1" class="uebertrag" id="'+label+'" onfocus="javascript: this.select(); aktiveStelle=this.id;" onclick="this.select()">'
}

function ganzZahl(x){
  return Math.floor(Math.round(Math.pow(10,10)*Math.log(x)/Math.LN10)/Math.pow(10,10)); //runde auf zehn Dezimale und bestimme nächst niedrigere ganze Zahl
}
//
function erzPlusaufg(typ){
  var x=opnd1["wert"];;
  var y=opnd2["wert"];
//  var l1=2+Math.round(3*Math.random()); // Höchste Stelle des ersten Summanden 0...5
//  var l2=2+Math.round(3*Math.random()); // Höchste Stelle des zweiten Summanden 0...5
  opnd1["ziffer"]= new Array();
  opnd2["ziffer"]= new Array();
  var z=x+y;
  result["wert"]=z;
  opnd1["laenge"] = (x==0)? 1 : ganzZahl(x)+1; // Laenge
  opnd2["laenge"] = (y==0)? 1 : ganzZahl(y)+1;
  result["laenge"] = (z==0)? 1 :  ganzZahl(z)+1;
  var m= 1 + Math.max(opnd1["laenge"],opnd2["laenge"]); // eine Stelle mehr als die Summanden
  for (var k=0; k<m; k++){opnd1["ziffer"][k]=x % 10; x = Math.floor(x/10);} // zerlege in Stellen
  for (var k=0; k<m; k++){opnd2["ziffer"][k]=y % 10; y = Math.floor(y/10);}
  for (var k=0; k<m; k++){result["ziffer"][k]=z % 10; z = Math.floor(z/10);}
  carry[0]=0;
  for (var k=1; k<m; k++){carry[k]= (opnd1["ziffer"][k-1]+opnd2["ziffer"][k-1]+carry[k-1]>9)? 1 : 0;}
}
//
function erzMinusaufg(typ){
  var x=opnd1["wert"];
  var y=opnd2["wert"];
  var l1=2+Math.round(3*Math.random()); // Höchste Stelle des Minuenden 0...5
  var l2=2+Math.round((l1-2)*Math.random()); // Höchste Stelle des Subtrahenden 0...l1
  opnd1["ziffer"]= new Array();
  opnd2["ziffer"]= new Array();
  var z=x-y;
  result["wert"]=z;
  opnd1["laenge"] = ganzZahl(x)+1; // Laenge
  opnd2["laenge"] = ganzZahl(y)+1;
  result["laenge"] = ganzZahl(z)+1;
  var m=Math.max(opnd1["laenge"], opnd2["laenge"]); // max. Stellenzahl
  for (var k=0; k<m; k++){opnd1["ziffer"][k]=x % 10; x = Math.floor(x/10);} // zerlege in Stellen
  for (var k=0; k<m; k++){opnd2["ziffer"][k]=y % 10; y = Math.floor(y/10);}
  for (var k=0; k<m; k++){result["ziffer"][k]=z % 10; z = Math.floor(z/10);}
  borrow[0]=0;
  for (var k=1; k<m; k++){borrow[k]= (opnd1["ziffer"][k-1]<opnd2["ziffer"][k-1]+borrow[k-1])? 1 : 0;}
}
//
function erzHalbaufg(typ){
  var l1=2+Math.floor(4*Math.random()); // Höchste Stelle des ersten Summanden 0...5
  var l2=2+Math.floor(4*Math.random()); // Höchste Stelle des zweiten Summanden 0...5
  opnd1["ziffer"]= new Array();
  opnd2["ziffer"]= new Array();
  opnd3["ziffer"]= new Array();
  var x=opnd1["wert"]/2;
  var y=x;
  var w=0;
  var z=w+x+y;
  opnd1["wert"]=x;
  opnd2["wert"]=y;
  opnd3["wert"]=w;  
  result["wert"]=z;
  opnd1["laenge"] = ganzZahl(x)+1; // Laenge
  opnd2["laenge"] = ganzZahl(y)+1;
  opnd3["laenge"] = ganzZahl(w)+1;
  result["laenge"] = ganzZahl(z)+1;
  var m= 1 + Math.max(Math.max(opnd1["laenge"],opnd2["laenge"]),opnd3["laenge"]); // eine Stelle mehr als die Summanden
  for (var k=0; k<m; k++){opnd1["ziffer"][k]=x % 10; x = Math.floor(x/10);} // zerlege in Stellen
  for (var k=0; k<m; k++){opnd2["ziffer"][k]=y % 10; y = Math.floor(y/10);}
  for (var k=0; k<m; k++){opnd3["ziffer"][k]=w % 10; w = Math.floor(w/10);}
  for (var k=0; k<m; k++){result["ziffer"][k]=z % 10; z = Math.floor(z/10);}
  carry[0]=0;
  for (var k=1; k<m; k++){carry[k]= Math.floor((opnd1["ziffer"][k-1]+opnd2["ziffer"][k-1]+opnd3["ziffer"][k-1]+carry[k-1])/10)}
}
//
function addition(L) {
  if(abakus.closed==false){abakus.close();}
  level=L;
  n++; // Aufgaben-Nummer erhöhen
  erzPlusaufg(level);
  TabFolge.splice(0, TabFolge.length-1) // alte TabFolge löschen
    document.getElementById("SolveButton").innerHTML='<button type="button" value="=!" title="" onclick="StartSolve();"><img src="teacher.ico" width="32" height="32" alt="Lösung"><br><small>Lösung<\/small><\/button>'
    var m= 1 + Math.max(opnd1["laenge"],opnd2["laenge"]); // einen Platzhalter mehr als die Summanden Stellen haben
    makeTbl("aufgabe", 4, m+1)
    document.getElementById("1_"+m).innerHTML=plusZeichen; // Plus-Zeichen
    for(var k=0; k<opnd1["laenge"]; k++){document.getElementById("0_"+k).innerHTML=opnd1["ziffer"][k]}
    for(var k=0; k<opnd2["laenge"]; k++){document.getElementById("1_"+k).innerHTML=opnd2["ziffer"][k]}
    for(var k=1; k<m; k++){carryBox("2_"+k, "carry"+k);}
    for(var k=0; k<m; k++){zfrBox("3_"+k, "erg"+k);}
    var i=0;
    addAttribute(document.getElementById("erg"+0), "tabindex", ersterTab); // Tab-Index beginnt mit ersterTab
    TabFolge[i]="erg"+0; i++;
    for(var k=1; k<m; k++){
      addAttribute(document.getElementById("carry"+k), "tabindex", ersterTab+i); 
      TabFolge[i]="carry"+k;
      i++;
      addAttribute(document.getElementById("erg"+k), "tabindex", ersterTab+i);
      TabFolge[i]="erg"+k;
      i++;}
    document.getElementById("erg"+0).focus();
  document.getElementById("weiterbutton").innerHTML='<input type="button" value="&crarr;" title="Enter" width=100% height=30px style="font-size:large; font-weight:bold; width:100%; height:30px;" onclick="addition_check('+level+')">' // Weiter-Button
  var tab_id=TabFolge[0];
  document.getElementById(tab_id).focus();
}
//
function subtraktion_1 (L) {
  if(abakus.closed==false){abakus.close();}
  level=L;
  n++; // Aufgaben-Nummer erhöhen
  erzMinusaufg(level);
  TabFolge.splice(0, TabFolge.length-1) // alte TabFolge löschen
  var m=Math.max(opnd1["laenge"], opnd2["laenge"]);
  makeTbl("aufgabe", 4, m+1)
  document.getElementById("1_"+m).innerHTML=minusZeichen; // Minus-Zeichen
    document.getElementById("SolveButton").innerHTML='<button type="button" value="=!" title="" onclick="StartSolve();"><img src="teacher.ico" width="32" height="32" alt="Lösung"><br><small>Lösung<\/small><\/button>'
    for(var k=0; k<opnd1["laenge"]; k++){document.getElementById("0_"+k).innerHTML=opnd1["ziffer"][k]}
    for(var k=0; k<opnd2["laenge"]; k++){document.getElementById("1_"+k).innerHTML=opnd2["ziffer"][k]}
    for(var k=1; k<m; k++){carryBox("2_"+k, "borr"+k);}
    for(var k=0; k<m; k++){zfrBox("3_"+k, "erg"+k);}
    with(document){
      addAttribute(getElementById("erg"+0), "tabindex", ersterTab);
      var i=0;
      TabFolge[i]="erg"+0; i++;
      for(k=1; k<m; k++){
        addAttribute(getElementById("borr"+k), "tabindex", ersterTab+i);
        TabFolge[i]="borr"+k; i++;
        addAttribute(getElementById("erg"+k), "tabindex", ersterTab+i);
        TabFolge[i]="erg"+k; i++;}
      getElementById("erg"+0).focus();}
  document.getElementById("weiterbutton").innerHTML='<input type="button" value="&crarr;" title="Enter" width=100% height=30px style="font-size:large; font-weight:bold; width:100%; height:30px;" onclick="subtraktion_1_check('+level+')">' // Weiter-Button
  var tab_id=TabFolge[0];
  document.getElementById(tab_id).focus();
}
//
function halb(L) {
  if(abakus.closed==false){abakus.close();}
  level=L;
  n++; // Aufgaben-Nummer erhöhen
  erzHalbaufg(level);
  TabFolge.splice(0, TabFolge.length-1) // alte TabFolge löschen
    document.getElementById('level2').innerHTML="Teile&nbsp;die Zahl&nbsp;in&nbsp;zwei gleiche Summanden."
    document.getElementById("SolveButton").innerHTML='<button type="button" value="=!" title="" onclick="StartSolve(3);"><img src="teacher.ico" width="32" height="32" alt="Lösung"><br><small>Lösung<\/small><\/button>'
    var m= result["laenge"];
    makeTbl("aufgabe", 4, m+1)
    document.getElementById("1_"+m).innerHTML=plusZeichen; // Plus-Zeichen
    for(var k=0; k<m; k++){zfrBox("0_"+k, "sumnd1"+k);}
    for(var k=0; k<m; k++){zfrBox("1_"+k, "sumnd2"+k);}
    if (level==2 || level==-1) {for(var k=1; k<m; k++){carryBox("2_"+k, "carry"+k);}}
    for(var k=0; k<result["laenge"]; k++){document.getElementById("3_"+k).innerHTML=result["ziffer"][k]}
    var i=0;
    addAttribute(document.getElementById("sumnd2"+0), "tabindex", ersterTab); // Tab-Index beginnt mit 100
    TabFolge[i]="sumnd2"+0;
    i++;
    addAttribute(document.getElementById("sumnd1"+0), "tabindex", ersterTab+i); // Tab-Index beginnt mit 100
    TabFolge[i]="sumnd1"+0;
    i++;
    for(var k=1; k<m; k++){
      if (level==2 || level==-1){
      addAttribute(document.getElementById("carry"+k), "tabindex", ersterTab+i); 
      TabFolge[i]="carry"+k;
      i++;}
      addAttribute(document.getElementById("sumnd2"+k), "tabindex", ersterTab+i);
      TabFolge[i]="sumnd2"+k;
      i++;
      addAttribute(document.getElementById("sumnd1"+k), "tabindex", ersterTab+i);
      TabFolge[i]="sumnd1"+k;
      i++;      }
    document.getElementById("sumnd1"+(m-1)).focus();
  document.getElementById("weiterbutton").innerHTML='<input type="button" value="&crarr;" title="Enter" width=100% height=30px style="font-size:large; font-weight:bold; width:100%; height:30px;" onclick="halb_check('+level+')">' // Weiter-Button
  var tab_id=TabFolge[TabFolge.length-1]
  document.getElementById(tab_id).focus();
}
//
function addition_check (L) {
  level=L;
  var wertung = new Boolean(true);
    var i=0; // Fehler-Zähler
    fehler = new Array();
    var m= 1 + Math.max(opnd1["laenge"],opnd2["laenge"]); // einen Platzhalter mehr als die Summanden Stellen haben
    for(var k=0; k<m; k++){
      var z=(document.getElementById("erg"+k).value=="")? 0 : document.getElementById("erg"+k).value;
      if(result["ziffer"][k]!=z){fehler[i]="erg"+k; i++; wertung=false;}}
    for(var k=1; k<m; k++){
      var z= (document.getElementById("carry"+k).value=="")? 0 : document.getElementById("carry"+k).value;
      if(carry[k]!=z){fehler[i]="carry"+k; i++; wertung=false;}}
    for(var k=0; k<result["laenge"]; k++){
      if(document.getElementById("erg"+k).value==""){wertung=false; fehler[i]="erg"+k; i++;}}
  if(wertung==false){
    document.getElementById("smilie"+n).innerHTML='<img src="unhappy.gif" border=0 alt="f" width="20" height="20" >';
    document.getElementById("HinweisButton").innerHTML='<button type="button" value="?" title="Tipp" onclick="Fehlerhinweis();"><img src="hint.gif" width="32" height="32" alt="Hinweis?"><br><small>Hinweis<\/small><\/button>'//'<input type="button" value="  ?  " width=40px height=40px style="width:40px; height:40px; font-size:x-large" onclick="Fehlerhinweis()">' // HinweisButton
    }
  else {
    document.getElementById("HinweisButton").innerHTML=' ' // Lösche HinweisButton
    document.getElementById("SolveButton").innerHTML='' // Lösche LösungsButton
    document.getElementById("smilie"+n).innerHTML='<img src="happy.gif" border=0 alt="r" width="20" height="20" >';
    window.clearTimeout(aktiv); // Zeit anhalten
    document.getElementById("weiterbutton").innerHTML='<input type="button" value="Reset" title="Reset" width=100% height=30px style="width:100%; height:30px;" onclick="location.reload()">' // Weiter-Button font-size:large; font-weight:bold; 
  }
}
//
function subtraktion_1_check (L) {
  level=L;
  var wertung = new Boolean(true);
  var m=Math.max(opnd1["laenge"], opnd2["laenge"]);
    var i=0; // Fehler-Zähler
    fehler = new Array();
    for(var k=0; k<m; k++){
      var z=(document.getElementById("erg"+k).value=="")? 0 : document.getElementById("erg"+k).value;
      if(result["ziffer"][k]!=z){wertung=false; fehler[i]="erg"+k; i++;}}
    for(var k=1; k<m; k++){
      var z= (document.getElementById("borr"+k).value=="")? 0 : document.getElementById("borr"+k).value;
      if(borrow[k]!=z){wertung=false; fehler[i]="borr"+k; i++;}}
    for(var k=0; k<result["laenge"]; k++){
      if(document.getElementById("erg"+k).value==""){wertung=false; fehler[i]="erg"+k; i++;}}
  if(wertung==false){
    document.getElementById("smilie"+n).innerHTML='<img src="unhappy.gif" border=0 alt="f" width="20" height="20" >';
    document.getElementById("HinweisButton").innerHTML='<button type="button" value="?" title="Tipp" onclick="Fehlerhinweis();"><img src="hint.gif" width="32" height="32" alt="Hinweis?"><br><small>Hinweis<\/small><\/button>'//'<input type="button" value="  ?  " width=40px height=40px style="width:40px; height:40px; font-size:x-large" onclick="Fehlerhinweis()">' // HinweisButton
    }
  else {
    document.getElementById("HinweisButton").innerHTML=' ' // Lösche HinweisButton
    document.getElementById("SolveButton").innerHTML='' // Lösche LösungsButton
    document.getElementById("smilie"+n).innerHTML='<img src="happy.gif" border=0 alt="Richtig!" width="20" height="20" >';
    window.clearTimeout(aktiv); // Zeit anhalten
    document.getElementById("weiterbutton").innerHTML='<input type="button" value="Reset" title="Reset" width=100% height=30px style="width:100%; height:30px;" onclick="location.reload()">' // Weiter-Button 
    }
}
//
function halb_check (L) {
  level=L;
  var wertung = new Boolean(true);
    var i=0; // Fehler-Zähler
    fehler = new Array();
    var m= result["laenge"];
    for(var k=0; k<m; k++){
      var z=(document.getElementById("sumnd1"+k).value=="")? 0 : document.getElementById("sumnd1"+k).value;
      if(opnd1["ziffer"][k]!=z){wertung=false; fehler[i]="sumnd1"+k; i++;}}
    for(var k=0; k<m; k++){
      var z=(document.getElementById("sumnd2"+k).value=="")? 0 : document.getElementById("sumnd2"+k).value;
      if(opnd1["ziffer"][k]!=z){wertung=false; fehler[i]="sumnd2"+k; i++;}}
    if(level!=1){
      for(var k=1; k<m; k++){
      var z= (document.getElementById("carry"+k).value=="")? 0 : document.getElementById("carry"+k).value;
      if(carry[k]!=z){wertung=false; fehler[i]="carry"+k; i++;}}}
    for(var k=0; k<opnd1["laenge"]; k++){
      if(document.getElementById("sumnd1"+k).value==""){wertung=false; fehler[i]="sumnd1"+k; i++;}}
  if(wertung==false){
    document.getElementById("smilie"+n).innerHTML='<img src="unhappy.gif" border=0 alt="f" width="20" height="20" >';
    document.getElementById("HinweisButton").innerHTML='<button type="button" value="?" title="Tipp" onclick="Fehlerhinweis();"><img src="hint.gif" width="32" height="32" alt="Hinweis?"><br><small>Hinweis<\/small><\/button>'//'<input type="button" value="  ?  " width=40px height=40px style="width:40px; height:40px; font-size:x-large" onclick="Fehlerhinweis()">' // HinweisButton
    }
  else {
    document.getElementById("HinweisButton").innerHTML=' ' // Lösche HinweisButton
    document.getElementById("SolveButton").innerHTML='' // Lösche LösungsButton
    document.getElementById("smilie"+n).innerHTML='<img src="happy.gif" border=0 alt="r" width="20" height="20" >';
    window.clearTimeout(aktiv); // Zeit anhalten
    document.getElementById("weiterbutton").innerHTML='<input type="button" value="Reset" title="Reset" width=100% height=30px style="width:100%; height:30px;" onclick="location.reload()">' // Weiter-Button 
  }
}
//
function Fehlerhinweis(){
  for(var k=0; k<fehler.length; k++){document.getElementById(fehler[k]).value="?";}
  document.getElementById("HinweisButton").innerHTML=' ' // HinweisButton löschen
  alert('Dieser Hinweis kostet 15 Sekunden!');
  tiktak += 15;
}
//
function StartSolve(){
  if(abakus.closed==false){abakus.focus(); return;}
  window.clearTimeout(MovieTrigger);
  solving=false; 
  abakus_opened=false;
  if (op=="plus") {SolvePlus();}
  if (op=="minus") {SolveMinus();}
  if (op=="halb") {SolveHalb();}
}
//
function addAttributeAbak(tObj, aType, aValue) {
 var tAtt=abakus.document.createAttribute(aType);
 tAtt.nodeValue=aValue;
 tObj.setAttributeNode(tAtt);
}
//
function click(t){
  Lsg[step]=abakus.document.getElementById("rechenfelder").innerHTML;
  stopzeit[step]= (t=="k")? "k" : "n"; 
  step++;
}
//
function SolvePlus(){
  var zeiger='<img src="point.ico" border=0 alt="V" title="" width="32" height="32" >';
  var calculus_v='<img src="o.gif" border=0 alt="o" title="" width="15" height="15">';
  var calculus_t='<img src="o_t.gif" border=0 alt="o" title="" width="15" height="15">';
  if(solving==false){ // open() nur beim ersten Aufruf
    solving=true;
    abakus= window.open("Addition_am_Abakus.html", "Lösung", "width=800, height=450");}
//    document.getElementById("SolveButton").innerHTML=''
  if(abakus_opened==false){window.setTimeout("SolvePlus()",100); return;} // Warte auf Rückmeldung von geöffnetem Fenster
  Lsg=new Array();
  step=0; // Zähler
//
// Rechenfelder:
  var zeilen=6; var spalten=1 + Math.max(opnd1["laenge"],opnd2["laenge"]);
  var tab= abakus.document.getElementById("rechenfelder")
  tab.innerHTML="";
  tab=tab.appendChild(abakus.document.createElement("table"));
  addAttributeAbak(tab, "cellspacing", 10);
  addAttributeAbak(tab, "cellpadding", 2);
  for (var i=0; i<zeilen; i++) {
    var tRow=tab.insertRow(i); //neue Zeile nach der letzten
    for (var k=0; k<=spalten; k++) {
      var tCell=tRow.insertCell(k); //neue Zelle
      switch(i){
      case 0:
        if(k==0){addAttributeAbak(tCell, "height", 40);}
        addAttributeAbak(tCell, "align", "center"); 
        addAttributeAbak(tCell, "id", "pointer"+(spalten-k)); // Zeiger-Stellen
      break;
      case 1:
        if(k==0){ // Spalte für's Rechenzeichen
          addAttributeAbak(tCell, "height", 70);
          addAttributeAbak(tCell, "width", 30);
          addAttributeAbak(tCell, "align", "right");
          }
        else{     // die Abakusfelder
          addAttributeAbak(tCell, "align", "center"); 
          addAttributeAbak(tCell, "id", "F"+(spalten-k)); // id= F0, F1, ...
          addAttributeAbak(tCell, "width", 90);
          addAttributeAbak(tCell, "bgcolor", "#00B600"); // grün
          }
        var ttab=tCell.appendChild(abakus.document.createElement("table")); // die Stellen der Calculi
        addAttributeAbak(ttab, "cellspacing", "2");
        addAttributeAbak(ttab, "cellpadding", "0");
        var j=0;
        for(var s=0; s<4; s++){
          var ttRow=ttab.insertRow(s)
          for(var t=0; t<5; t++){
            ttCell=ttRow.insertCell(t)
            addAttributeAbak(ttCell, "id", (spalten-k)+"p"+j); // id= 0p0, 0p1, ..., 0p19; 1p0, 1p1, ...
            j++;
            if(s==0){addAttributeAbak(ttCell, "width", 15);}
            if(t==0){addAttributeAbak(ttCell, "height", 15);}
            } }
      break;
      case 2:
        if(k!=0){addAttributeAbak(tCell, "id", "op1_"+(spalten-k));} // id= op1_0, op1_1, ...
      break;
      case 3:
        if(k==0){addAttributeAbak(tCell, "id", "rz");} // Rechenzeichen
        else{addAttributeAbak(tCell, "id", "op2_"+(spalten-k));} // id= op2_0, op2_1, ...
      break;
      case 4:
        if(k!=0){addAttributeAbak(tCell, "id", "carry"+(spalten-k));} // id= carry0, carry1, ...
      break;
      case 5:
        if(k!=0){addAttributeAbak(tCell, "id", "res"+(spalten-k));} // id= res0, res1, ...
      break;
      }}}
  click();
//
// Aufgabenstellung:
  for(var k=0; k<opnd1["laenge"]; k++){
    abakus.document.getElementById("op1_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+opnd1["ziffer"][k]+'<\/div>';
  }
  for(var k=0; k<opnd2["laenge"]; k++){
    abakus.document.getElementById("op2_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+opnd2["ziffer"][k]+'<\/div>';
  }
    abakus.document.getElementById("rz").innerHTML='<div align=center style="font-size:xx-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">+<\/div>';
// Summenstrich:
  abakus.document.getElementById("carry0").innerHTML='<div align=center style="font-size:xx-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">&nbsp;<\/div>';
  abakus.document.getElementById("res0").innerHTML='<div align=center style="font-size:xx-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">&nbsp;<\/div>';
  tRow=tab.insertRow(zeilen-1); // Zeile für Summenstrich
  addAttributeAbak(tRow, "align", "center"); // Inhalte zentrieren
  tCell=tRow.insertCell(0);
  addAttributeAbak(tCell, "colspan", spalten+1);
  addAttributeAbak(tCell, "height", 2);
  addAttributeAbak(tCell, "bgcolor", "black");
  click();
//
// erster Summand:
  for(var k=0; k<opnd1["laenge"]; k++){
    abakus.document.getElementById("op1_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">>'+opnd1["ziffer"][k]+'<<\/div>';
    click();
    abakus.document.getElementById("pointer"+k).innerHTML=zeiger;
    click();
    for(var t=0; t<opnd1["ziffer"][k]; t++){abakus.document.getElementById(k+"p"+t).innerHTML=calculus_t;}
    if(opnd1["ziffer"][k]!=0){click("k");}
    for(var t=0; t<opnd1["ziffer"][k]; t++){abakus.document.getElementById(k+"p"+t).innerHTML=calculus_v;}
    click();
    // Pfeil und Markierung der Ziffer weg
    abakus.document.getElementById("pointer"+k).innerHTML='';
    abakus.document.getElementById("op1_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+opnd1["ziffer"][k]+'<\/div>';
  }
  click();
//
// zweiter Summand:  
  for(var k=0; k<opnd2["laenge"]; k++){
    abakus.document.getElementById("op2_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">>'+opnd2["ziffer"][k]+'<<\/div>';
    click();
    abakus.document.getElementById("pointer"+k).innerHTML=zeiger;
    click();
    for(var t=0; t<opnd2["ziffer"][k]; t++){
      var z=opnd1["ziffer"][k]; // <- das liegt bereits im Rechenfeld
      abakus.document.getElementById(k+"p"+(t+z)).innerHTML=calculus_t;
    }
    if(opnd2["ziffer"][k]!=0){click("k");}
    for(var t=0; t<opnd2["ziffer"][k]; t++){
      var z=opnd1["ziffer"][k]; // <- das liegt bereits im Rechenfeld
      abakus.document.getElementById(k+"p"+(t+z)).innerHTML=calculus_v;
    }
    click();
    // Pfeil und Markierung der Ziffer weg
    abakus.document.getElementById("pointer"+k).innerHTML='';
    abakus.document.getElementById("op2_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+opnd2["ziffer"][k]+'<\/div>';
  }
  click();
//
// Bündeln:
  for(var k=1; k<result["laenge"]; k++){
  if(carry[k]==1){
    abakus.document.getElementById("pointer"+(k-1)).innerHTML=zeiger;
    click();
    for(var t=0; t<10; t++){abakus.document.getElementById((k-1)+"p"+t).innerHTML=calculus_t;}    
    click("k");
    for(var t=0; t<10; t++){abakus.document.getElementById((k-1)+"p"+t).innerHTML='';}    
    click();
    abakus.document.getElementById("pointer"+(k-1)).innerHTML='';
    abakus.document.getElementById("pointer"+k).innerHTML=zeiger;
    click();
    var t= opnd1["ziffer"][k]+opnd2["ziffer"][k];
    abakus.document.getElementById(k+"p"+t).innerHTML=calculus_t;
    click("k");
    abakus.document.getElementById(k+"p"+t).innerHTML=calculus_v;    
    click();
    abakus.document.getElementById("carry"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">>1<<\/div>';    
    click();
    abakus.document.getElementById("carry"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">1<\/div>';
    abakus.document.getElementById("pointer"+k).innerHTML='';
    click();
    }
  }
//
// Ergebnis:
  for(var k=0; k<result["laenge"]; k++){
    abakus.document.getElementById("pointer"+k).innerHTML=zeiger;
    click();
    abakus.document.getElementById("res"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+result["ziffer"][k]+'<\/div>';
    click();
    abakus.document.getElementById("pointer"+k).innerHTML='';
    if(k+1==result["laenge"]){click()}
  }
//
  abakus.document.getElementById("Nachricht").innerHTML="... los geht's:";
  setTimeout("abakus.document.getElementById('Nachricht').innerHTML='';", 1000);
  abakus.stop();
//  abakus.play();
  setTimeout("abakus.play();", 1000);
}
//
// Enbündeln in Stelle s
function resolve(s){
  var zeiger='<img src="point.ico" border=0 alt="V" title="" width="32" height="32" >';
  var calculus_v='<img src="o.gif" border=0 alt="o" title="" width="15" height="15">';
  var calculus_t='<img src="o_t.gif" border=0 alt="o" title="" width="15" height="15">';
  if(Inhalt[s+1]==0){resolve(s+1);}
  abakus.document.getElementById("pointer"+(s+1)).innerHTML=zeiger;
  click();
  abakus.document.getElementById((s+1)+"p"+(Inhalt[s+1]-1)).innerHTML=calculus_t;
  click("k");
  abakus.document.getElementById((s+1)+"p"+(Inhalt[s+1]-1)).innerHTML='';
  click();
  abakus.document.getElementById("carry"+(s+1)).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">>1<<\/div>';
  click();
  Inhalt[s+1]--;
  abakus.document.getElementById("pointer"+(s+1)).innerHTML='';
  abakus.document.getElementById("pointer"+s).innerHTML=zeiger;
  abakus.document.getElementById("carry"+(s+1)).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">1<\/div>';
  click();
  for(var t=0; t<10; t++){abakus.document.getElementById(s+"p"+(Inhalt[s]+t)).innerHTML=calculus_t;}
  click("k");
  for(var t=0; t<10; t++){abakus.document.getElementById(s+"p"+(Inhalt[s]+t)).innerHTML=calculus_v;}
  click();
  Inhalt[s]+=10;  
}

function SolveMinus(){
  var zeiger='<img src="point.ico" border=0 alt="V" title="" width="32" height="32" >';
  var calculus_v='<img src="o.gif" border=0 alt="o" title="" width="15" height="15">';
  var calculus_t='<img src="o_t.gif" border=0 alt="o" title="" width="15" height="15">';
  if(solving==false){ // open() nur beim ersten Aufruf
    solving=true; 
    abakus= window.open("Subtraktion_am_Abakus.html", "Lösung", "width=800, height=450");
//    document.getElementById("SolveButton").innerHTML=''
    }
  if(abakus_opened==false){window.setTimeout("SolveMinus()",100); return;} // Warte auf Rückmeldung von geöffnetem Fenster
  Lsg=new Array();
  step=0; // Zähler
//
// Rechenfelder:
  var zeilen=6; var spalten=Math.max(opnd1["laenge"],opnd2["laenge"]);
  var tab= abakus.document.getElementById("rechenfelder")
  tab.innerHTML="";
  tab=tab.appendChild(abakus.document.createElement("table"));
  addAttributeAbak(tab, "cellspacing", 10);
  addAttributeAbak(tab, "cellpadding", 2);
  for (var i=0; i<zeilen; i++) {
    var tRow=tab.insertRow(i); //neue Zeile nach der letzten
    for (var k=0; k<=spalten; k++) {
      var tCell=tRow.insertCell(k); //neue Zelle
      switch(i){
      case 0:
        if(k==0){addAttributeAbak(tCell, "height", 40);}
        addAttributeAbak(tCell, "align", "center"); 
        addAttributeAbak(tCell, "id", "pointer"+(spalten-k)); // Zeiger-Stellen
      break;
      case 1:
        if(k==0){ // Spalte für's Rechenzeichen
          addAttributeAbak(tCell, "height", 70);
          addAttributeAbak(tCell, "width", 30);
          addAttributeAbak(tCell, "align", "right");
          }
        else{     // die Abakusfelder
          addAttributeAbak(tCell, "align", "center"); 
          addAttributeAbak(tCell, "id", "F"+(spalten-k)); // id= F0, F1, ...
          addAttributeAbak(tCell, "width", 90);
          addAttributeAbak(tCell, "bgcolor", "#00B600"); // grün
          }
        var ttab=tCell.appendChild(abakus.document.createElement("table")); // die Stellen der Calculi
        addAttributeAbak(ttab, "cellspacing", "2");
        addAttributeAbak(ttab, "cellpadding", "0");
        var j=0;
        for(var s=0; s<4; s++){
          var ttRow=ttab.insertRow(s)
          for(var t=0; t<5; t++){
            ttCell=ttRow.insertCell(t)
            addAttributeAbak(ttCell, "id", (spalten-k)+"p"+j); // id= 0p0, 0p1, ..., 0p19; 1p0, 1p1, ...
            j++;
            if(s==0){addAttributeAbak(ttCell, "width", 15);}
            if(t==0){addAttributeAbak(ttCell, "height", 15);}
            } }
      break;
      case 2:
        if(k!=0){addAttributeAbak(tCell, "id", "op1_"+(spalten-k));} // id= op1_0, op1_1, ...
      break;
      case 3:
        if(k==0){addAttributeAbak(tCell, "id", "rz");} // Rechenzeichen
        else{addAttributeAbak(tCell, "id", "op2_"+(spalten-k));} // id= op2_0, op2_1, ...
      break;
      case 4:
        if(k!=0){addAttributeAbak(tCell, "id", "carry"+(spalten-k));} // id= carry0, carry1, ...
      break;
      case 5:
        if(k!=0){addAttributeAbak(tCell, "id", "res"+(spalten-k));} // id= res0, res1, ...
      break;
      }}}
  click();
//
// Aufgabenstellung:
  for(var k=0; k<opnd1["laenge"]; k++){
    abakus.document.getElementById("op1_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+opnd1["ziffer"][k]+'<\/div>';
  }
  for(var k=0; k<opnd2["laenge"]; k++){
    abakus.document.getElementById("op2_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+opnd2["ziffer"][k]+'<\/div>';
  }
    abakus.document.getElementById("rz").innerHTML='<div align=center style="font-size:xx-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">-<\/div>';
// Summenstrich:
  abakus.document.getElementById("carry0").innerHTML='<div align=center style="font-size:xx-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">&nbsp;<\/div>';
  abakus.document.getElementById("res0").innerHTML='<div align=center style="font-size:xx-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">&nbsp;<\/div>';
  tRow=tab.insertRow(zeilen-1); // Zeile für Summenstrich
  addAttributeAbak(tRow, "align", "center"); // Inhalte zentrieren
  tCell=tRow.insertCell(0);
  addAttributeAbak(tCell, "colspan", spalten+1);
  addAttributeAbak(tCell, "height", 2);
  addAttributeAbak(tCell, "bgcolor", "black");
  click();
//
// Minuend:
  for(var k=0; k<opnd1["laenge"]; k++){
    abakus.document.getElementById("op1_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">>'+opnd1["ziffer"][k]+'<<\/div>';
    click();
    abakus.document.getElementById("pointer"+k).innerHTML=zeiger;
    click();
    for(var t=0; t<opnd1["ziffer"][k]; t++){abakus.document.getElementById(k+"p"+t).innerHTML=calculus_t;}
    if(opnd1["ziffer"][k]!=0){click("k");}
    for(var t=0; t<opnd1["ziffer"][k]; t++){abakus.document.getElementById(k+"p"+t).innerHTML=calculus_v;}
    click();
    Inhalt[k]=opnd1["ziffer"][k];
    // Pfeil und Markierung der Ziffer weg
    abakus.document.getElementById("pointer"+k).innerHTML='';
    abakus.document.getElementById("op1_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+opnd1["ziffer"][k]+'<\/div>';
  }
  click();
//
// Subtrahend:  
  for(var k=0; k<opnd2["laenge"]; k++){
    abakus.document.getElementById("op2_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">>'+opnd2["ziffer"][k]+'<<\/div>';
    click();
    abakus.document.getElementById("pointer"+k).innerHTML=innerHTML=zeiger;
    click();
    if(opnd2["ziffer"][k]>Inhalt[k]){
      //abakus.document.getElementById("pointer"+k).innerHTML=innerHTML=''; 
      resolve(k);}
    for(var t=0; t<opnd2["ziffer"][k]; t++){abakus.document.getElementById(k+"p"+t).innerHTML=calculus_t;}
    click("k");
    for(var t=0; t<opnd2["ziffer"][k]; t++){abakus.document.getElementById(k+"p"+t).innerHTML='';}
    click();
    // Pfeil und Markierung der Ziffer weg
    abakus.document.getElementById("pointer"+k).innerHTML='';
    abakus.document.getElementById("op2_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+opnd2["ziffer"][k]+'<\/div>';
    }
//
// Ergebnis:
  for(var k=0; k<result["laenge"]; k++){
    abakus.document.getElementById("pointer"+k).innerHTML=zeiger;
    click();
    abakus.document.getElementById("res"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+result["ziffer"][k]+'<\/div>';
    click();
    abakus.document.getElementById("pointer"+k).innerHTML='';
    if(k+1==result["laenge"]){click()}
  }
//
  abakus.document.getElementById("Nachricht").innerHTML="... los geht's:";
  setTimeout("abakus.document.getElementById('Nachricht').innerHTML='';", 1000);
  abakus.stop();
  setTimeout("abakus.play();", 1000);
}
//
function SolveHalb(){
  var zeiger='<img src="point.ico" border=0 alt="V" title="" width="32" height="32" >';
  var calculus_v='<img src="o.gif" border=0 alt="o" title="" width="15" height="15">';
  var calculus_t='<img src="o_t.gif" border=0 alt="o" title="" width="15" height="15">';
  if(solving==false){ // open() nur beim ersten Aufruf
    solving=true; 
    abakus= window.open("Addition_am_Abakus.html", "Lösung", "width=800, height=500");
//    document.getElementById("SolveButton").innerHTML=''
    }
  if(abakus_opened==false){window.setTimeout("SolveHalb()",100); return;} // Warte auf Rückmeldung von geöffnetem Fenster
  Lsg=new Array();
  step=0; // Zähler
//
// Rechenfelder:
  var zeilen=6; var spalten= result["laenge"]; //1+Math.max(opnd1["laenge"],opnd2["laenge"]);
  var tab= abakus.document.getElementById("rechenfelder")
  tab.innerHTML="";
  tab=tab.appendChild(abakus.document.createElement("table"));
  addAttributeAbak(tab, "cellspacing", 10);
  addAttributeAbak(tab, "cellpadding", 2);
  for (var i=0; i<zeilen; i++) {
    var tRow=tab.insertRow(i); //neue Zeile nach der letzten
    for (var k=0; k<=spalten; k++) {
      var tCell=tRow.insertCell(k); //neue Zelle
      switch(i){
      case 0:
        if(k==0){addAttributeAbak(tCell, "height", 40);}
        addAttributeAbak(tCell, "align", "center"); 
        addAttributeAbak(tCell, "id", "pointer"+(spalten-k)); // Zeiger-Stellen
      break;
      case 1:
        if(k==0){ // Spalte für's Rechenzeichen
          addAttributeAbak(tCell, "height", 110);
          addAttributeAbak(tCell, "width", 30);
          addAttributeAbak(tCell, "align", "right");
          }
        else{     // die Abakusfelder
          addAttributeAbak(tCell, "align", "center"); 
          addAttributeAbak(tCell, "id", "F"+(spalten-k)); // id= F0, F1, ...
          addAttributeAbak(tCell, "width", 90);
          addAttributeAbak(tCell, "bgcolor", "#00B600"); // grün
          }
        var ttab=tCell.appendChild(abakus.document.createElement("table")); // die Stellen der Calculi
        addAttributeAbak(ttab, "cellspacing", "2");
        addAttributeAbak(ttab, "cellpadding", "0");
        var j=0;
        for(var s=0; s<6; s++){
          var ttRow=ttab.insertRow(s)
          for(var t=0; t<5; t++){
            ttCell=ttRow.insertCell(t)
            addAttributeAbak(ttCell, "id", (spalten-k)+"p"+j); // id= 0p0, 0p1, ..., 0p19; 1p0, 1p1, ...
            j++;
            if(s==0){addAttributeAbak(ttCell, "width", 15);}
            if(t==0){addAttributeAbak(ttCell, "height", 15);}
            } }
      break;
      case 2:
        if(k!=0){addAttributeAbak(tCell, "id", "op1_"+(spalten-k));} // id= op1_0, op1_1, ...
      break;
      case 3:
        if(k==0){addAttributeAbak(tCell, "id", "rz");} // Rechenzeichen
        else{addAttributeAbak(tCell, "id", "op2_"+(spalten-k));} // id= op2_0, op2_1, ...
      break;
      case 4:
        if(k!=0){addAttributeAbak(tCell, "id", "carry"+(spalten-k));} // id= carry0, carry1, ...
      break;
      case 5:
        if(k!=0){addAttributeAbak(tCell, "id", "res"+(spalten-k));} // id= res0, res1, ...
      break;
      }}}
  click();
//
// Summanden:
  for(var k=0; k<opnd1["laenge"]; k++){abakus.document.getElementById("op1_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">&nbsp;<\/div>';}
  for(var k=0; k<opnd2["laenge"]; k++){abakus.document.getElementById("op2_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">&nbsp;<\/div>';}
  abakus.document.getElementById("rz").innerHTML='<div align=center style="font-size:xx-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">+<\/div>';
// Summenstrich:
  abakus.document.getElementById("carry0").innerHTML=''; //<div align=center style="font-size:xx-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">&nbsp;<\/div>
  abakus.document.getElementById("res0").innerHTML='<div align=center style="font-size:xx-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">&nbsp;<\/div>';
  tRow=tab.insertRow(zeilen-1); // Zeile für Summenstrich
  addAttributeAbak(tRow, "align", "center"); // Inhalte zentrieren
  tCell=tRow.insertCell(0);
  addAttributeAbak(tCell, "colspan", spalten+1);
  addAttributeAbak(tCell, "height", 2);
  addAttributeAbak(tCell, "bgcolor", "black");
  click();
//
// Ausgangszahl
  for(var k=0; k<result["laenge"]; k++){
    abakus.document.getElementById("res"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">>'+result["ziffer"][k]+'<<\/div>';
    click();
    abakus.document.getElementById("pointer"+k).innerHTML=zeiger;
    click();
    for(var t=0; t<result["ziffer"][k]; t++){abakus.document.getElementById(k+"p"+(10+t)).innerHTML=calculus_t;}
    if(result["ziffer"][k]!=0){click("k");}
    for(var t=0; t<result["ziffer"][k]; t++){abakus.document.getElementById(k+"p"+(10+t)).innerHTML=calculus_v;}
    click();
    abakus.document.getElementById("res"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+result["ziffer"][k]+'<\/div>';
    abakus.document.getElementById("pointer"+k).innerHTML='';
    click();
  }
// Halbieren
  var g=0;
  for(var k=result["laenge"]-1; k>=0; k--){
    abakus.document.getElementById("pointer"+k).innerHTML=zeiger;
    if(g==0){click();} // wenn g==1, ist Zeiger schon da
    g=(gerade(result["ziffer"][k]))? 0 : 1;
    for(var t=0; t<(result["ziffer"][k]-g); t++){abakus.document.getElementById(k+"p"+(10+t)).innerHTML=calculus_t;}
    if(result["ziffer"][k]>1){click("k");}
    for(var t=0; t<(result["ziffer"][k]-g); t++){abakus.document.getElementById(k+"p"+(10+t)).innerHTML='';}
    if(result["ziffer"][k]>1){click();}
    for(var t=0; t<(result["ziffer"][k]-g)/2; t++){
      abakus.document.getElementById(k+"p"+(0+t)).innerHTML=calculus_t;
      abakus.document.getElementById(k+"p"+(25+t)).innerHTML=calculus_t;}
    if(result["ziffer"][k]>1){click("k");}
    for(var t=0; t<(result["ziffer"][k]-g)/2; t++){
      abakus.document.getElementById(k+"p"+(0+t)).innerHTML=calculus_v;
      abakus.document.getElementById(k+"p"+(25+t)).innerHTML=calculus_v;}
    if(result["ziffer"][k]>1){click();}
    if (g==1){  // Entbündeln des Restes
      abakus.document.getElementById(k+"p"+(10+result["ziffer"][k]-1)).innerHTML=calculus_t;
      click("k");
      abakus.document.getElementById(k+"p"+(10+result["ziffer"][k]-1)).innerHTML='';
      click();
      abakus.document.getElementById("pointer"+k).innerHTML='';
      abakus.document.getElementById("pointer"+(k-1)).innerHTML=zeiger;
      click();
      for (var t=0; t<5; t++){
        abakus.document.getElementById((k-1)+"p"+(5+t)).innerHTML=calculus_t;
        abakus.document.getElementById((k-1)+"p"+(20+t)).innerHTML=calculus_t;}
      click("k");
      for (var t=0; t<5; t++){
        abakus.document.getElementById((k-1)+"p"+(5+t)).innerHTML=calculus_v;
        abakus.document.getElementById((k-1)+"p"+(20+t)).innerHTML=calculus_v;}
      click();
    }     
    abakus.document.getElementById("pointer"+k).innerHTML='';
    if(g==0){click();}
  }
// Ergebnis
  for(var k=0; k<opnd1["laenge"]; k++){
    abakus.document.getElementById("pointer"+k).innerHTML=zeiger;
    click();
    abakus.document.getElementById("op1_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+opnd1["ziffer"][k]+'<\/div>';
    abakus.document.getElementById("op2_"+k).innerHTML='<div align=center style="font-size:x-large; font-family:'+"'"+'Comic Sans MS'+"'"+'">'+opnd2["ziffer"][k]+'<\/div>';
    click();
    abakus.document.getElementById("pointer"+k).innerHTML='';
    click();
  }
//  click();
//
  abakus.document.getElementById("Nachricht").innerHTML="... los geht's:";
  setTimeout("abakus.document.getElementById('Nachricht').innerHTML='';", 1000);
  abakus.stop();
//  abakus.play();
  setTimeout("abakus.play();", 1000);
}


//
function ShowLsg(){
  if(abakus.closed==true){
    MoviePlaying=false;
    MovieIndex=0;
    MoviePause= false;
    return;}
  if(MoviePause==true){MovieTrigger=setTimeout("ShowLsg()", 200); return;}
  abakus.document.getElementById("rechenfelder").innerHTML=Lsg[MovieIndex];
  abakus.document.getElementById("BildNr").innerHTML=MovieIndex+" / "+(Lsg.length-1)
  var delay= (stopzeit[MovieIndex]=="k")? 250 : MovieSpeed;
  MovieIndex++;
  if(MovieIndex<Lsg.length){MovieTrigger=setTimeout("ShowLsg()", delay); MoviePlaying=true;}
  else{MoviePlaying=false; MovieIndex--;}
}

function TasteGedrueckt (Ereignis) {
  var entf=46;
  var del=8;
    if (!Ereignis)
      Ereignis = window.event;
    if (Ereignis.which) {
      Tastencode = Ereignis.which;
    } else if (Ereignis.keyCode) {
      Tastencode = Ereignis.keyCode;
    }
  if(tiktak>0){
    switch(Tastencode){
    case entf:
      var tab_id='xxx'
      for(var k=0; k<TabFolge.length; k++){if(TabFolge[k]==aktiveStelle){tab_id= TabFolge[k];}}
      if(tab_id=='xxx'){return false;}
      document.getElementById(tab_id).value="";
    break;
    case del:
      var tab_id='xxx'
      for(var k=0; k<TabFolge.length; k++){if(TabFolge[k]==aktiveStelle){tab_id= TabFolge[k];}}
      if(tab_id=='xxx'){return false;}
      document.getElementById(tab_id).value="";
      break;    
    case Enter:
      if(op=="plus"){addition_check(level)}
      if(op=="minus"){subtraktion_1_check(level)}
      if(op=="halb"){halb_check(level)}
      return false; // Damit sonst nichts ausgelöst wird, worauf gerade der Focus ist.
    break;
    case vorw: // <-
      var tab_id='xxx'
      if(aktiveStelle==TabFolge[TabFolge.length-1]){tab_id=TabFolge[0];}
      else {for(var k=0; k<TabFolge.length-1; k++){if(TabFolge[k]==aktiveStelle){tab_id= TabFolge[k+1];}}}
      if(tab_id=='xxx'){tab_id=TabFolge[0];}
      document.getElementById(tab_id).focus();
    break;
    case rueckw: // ->
      var tab_id='xxx'
      if(aktiveStelle==TabFolge[0]){var tab_id=TabFolge[TabFolge.length-1]}
      else{for(var k=0; k<TabFolge.length; k++){if(TabFolge[k]==aktiveStelle){var tab_id= TabFolge[k-1]}}}
      if(tab_id=='xxx'){tab_id=TabFolge[TabFolge.length-1];}
      document.getElementById(tab_id).focus();
    break; 
    case Tab:
      if(aktiveStelle==TabFolge[TabFolge.length-1]){
        addAttribute(document.getElementById("level"+(level+1)), "tabindex", ersterTab-1);
        document.getElementById("level"+(level+1)).focus();}
    break;}
  }
/*  else {
    switch(Tastencode){
    case Enter:
      enter2();
      return false;
    break;
    case PlusZ:
      plus();
      return false;
    break;
    case MinusZ:
      minus();
      return false;
    break;
    }
  }*/
}


function start(L){
  if(n==0){
      n=2;
      opnd1["wert"]=zahl1;
      opnd2["wert"]=zahl2;
//      if(opnd1["wert"]+opnd2["wert"]==0){alert("Wähle bessere Zahlen!"); location.reload(); return} 
    abakus= window.open("about:blank", "_blank", "width=1, height=1");
    abakus.close();
//    for (var k=100000; k>0; k--){}
    makeZfrTasten("tastatur");
    if(tiktak==0){
      document.getElementById("uhr").innerHTML='<img src="clock.gif" border=0 alt="Zeit:" width="23" height="39">  ';
      document.getElementById("dauer").innerHTML='<b>0&nbsp;:&nbsp;00<\/b>';}
    if (op=="plus"){
      if(opnd1["wert"]+opnd2["wert"]<=0){
        alert("Wähle bessere Zahlen!"); 
        location.reload(); 
        return;
        }
      addition(L);
      }
    if (op=="minus"){
      if(opnd1["wert"]<=opnd2["wert"]){
        alert("Wähle bessere Zahlen!"); 
        location.reload(); 
        return;      
      }
      subtraktion_1(L)
    }
    if (op=="halb"){halb(L);}
    aktiv=window.setTimeout("Zaehlen()", 1000);} // starte Uhr
}
//
    document.onkeydown = TasteGedrueckt;

