var erraten = 0;
var fehler = 0;

function fehlermeldung()
{
  fehlertext = "\n                                     Eingabefehler!\n\nMöglicherweise haben Sie das Symbol * für die Multiplikation vergessen.\n ";
  fehler = 1;
  document.FunktAbh.fehlerJS();
  alert(fehlertext);
}
window.onerror = fehlermeldung;

function funktionLaden()
{
   fehler = 0;
   document.FunktAbh.zuruecksetzen(); // Zählvariable im Applet zurücksetzen
   pixUebernehmen(1);
   pixUebernehmen(2);
   if (erraten==0) { funausdruck = document.fform1.funktionVisible.value; }
   else { funausdruck = document.fform1.funktionHidden.value; }
   pixelzahl = 761;
   einheitX = document.fform2.Pixel1.value;
   einheitY = document.fform2.Pixel2.value;

   /// alert(""+funausdruck); // Test

  if (einheitX <= 256 && einheitY <= 256 && einheitX >= 8 && einheitY >= 8) 
  {
    if (funausdruck == "" || funausdruck == " " || funausdruck == "  " || funausdruck == "   " 
        || funausdruck == "    " || funausdruck == "     " || funausdruck == "      " || funausdruck == "       "
        || funausdruck == "        "
    )
    { alert("Bitte einen Funktionsausdruck mit Variable x eingeben!"); }  
    else
    {
         funausdruck = parsen(funausdruck); // Symbolischer Funktionsausdruck wird geparst
         for(zaehl=1;zaehl<=pixelzahl;zaehl++) 
         {
            x = (2*zaehl-pixelzahl-1)/(2*einheitX); // Zusammengang zwischen zaehl = 1,2,...pixelzahl
                                                    // und x zwischen x_min = -(pixelzahl-1)/(2einheitX)
                                                    // und            x_max =  (pixelzahl-1)/(2einheitX)
            with(Math) uebergeben = round(eval("("+funausdruck+")*einheitY")); 
                    // uebergeben ist jetzt der zugehörige y-Wert, auf Pixel skaliert
            if (fehler == 0) { document.FunktAbh.funktionLaden(uebergeben); }
        }
     }
   }
}

function fLaden()
{
  if (document.fform1.funktionVisible.value.indexOf("?") == -1)
  {
    if (erraten==1) 
    {
       document.fform2.Pixel1.value = "64"; // x-Einheit zurüchsetzen
       document.fform2.Pixel2.value = "64"; // y-Einheit zurücksetzen
    }
    erraten = 0;
    document.fform1.chSelect.selectedIndex = 0;
    document.FunktAbh.neuerStartwert("0.5");
    document.FunktAbh.resetAlles();
    funktionLaden();
  }
  else { alert("Bitte geben Sie einen Funktionsausdruck mit Variable x ein!"); }
  return false;
}

function massstabUp(xory)
{
   pixWert = eval(eval("document.fform2.Pixel"+xory).value);
   pixWert = 2*pixWert;
   if (pixWert<=256)
   {
      eval("document.fform2.Pixel"+xory).value = pixWert;
      funktionLaden();
   }
   else { alert("Maximale Einheit: 256 Pixel!"); }
}

function massstabDown(xory)
{
   pixWert = eval(eval("document.fform2.Pixel"+xory).value);
   pixWert = Math.round(pixWert/2);
   if (pixWert>=8)
   {
      eval("document.fform2.Pixel"+xory).value = pixWert;
      funktionLaden();
   }
   else { alert("Minimale Einheit: 8 Pixel!"); }
}

function rst(xory)
{
  eval("document.fform2.Pixel"+xory).value = "64";
  funktionLaden();
}

function pixUebernehmen(xory)
{
  neueEinheit = eval("document.fform2.Pixel"+xory).value;
  if (neueEinheit > 256) { alert("Maximale Einheit: 256 Pixel!"); }
  else if (neueEinheit < 8) { alert("Minimale Einheit: 8 Pixel!"); }
  else if (xory == 1) document.FunktAbh.neueEinheitX(""+neueEinheit);
  else document.FunktAbh.neueEinheitY(""+neueEinheit);
}

function chooseSelect()
{
  if (document.fform1.chSelect.selectedIndex != 0)
  {
    selFun = document.fform1.chSelect[document.fform1.chSelect.selectedIndex].value;
    document.fform1.funktionVisible.value = selFun;
    // einige Ausnahmen für die Einheiten berücksichtigen:
    if (selFun == "x^3" || selFun == "gamma(x)")
    { document.fform2.Pixel1.value = "32"; document.fform2.Pixel2.value = "32"; }
    else if (selFun == "1/(1 + x^2)" || selFun == "sqrt(1 - x^2)")
    { document.fform2.Pixel1.value = "128"; document.fform2.Pixel2.value = "128"; }
    else if (selFun == "exp(x)" || selFun == "(x^2 - 1)^2")
    { document.fform2.Pixel1.value = "128"; document.fform2.Pixel2.value = "32"; }
    else if (selFun == "sin(x)")
    { document.fform2.Pixel1.value = "32"; document.fform2.Pixel2.value = "256"; }
    else if (selFun == "sin(x)/x")
    { document.fform2.Pixel1.value = "8"; document.fform2.Pixel2.value = "256"; }
    else if (selFun == "sin(1/x)" || selFun == "x*sin(1/x)")
    { document.fform2.Pixel1.value = "256"; document.fform2.Pixel2.value = "256"; }
    else if (selFun == "tan(x)" || selFun == "atan(x)")
    { document.fform2.Pixel1.value = "16"; document.fform2.Pixel2.value = "64"; }
    else // default
    { document.fform2.Pixel1.value = "64"; document.fform2.Pixel2.value = "64"; }
    erraten = 0;
    document.FunktAbh.neuerStartwert("0.5");
    document.FunktAbh.resetAlles();
    funktionLaden();
  }
}

function funktionErraten(typ)
{
  erraten = 1;
  document.fform1.chSelect.selectedIndex = 0;
  document.fform1.funktionVisible.value = "  ?";
  anzahlFunktionen = eval("funktionenVorrat"+typ).length;
  Zufallszahl=Math.floor(anzahlFunktionen*Math.random());  // zwischen 0 und anzahlFunktionen - 1
  document.fform1.funktionHidden.value = eval("funktionenVorrat"+typ)[Zufallszahl][0]; // Funktionsausdruck
  document.fform2.Pixel1.value = eval("funktionenVorrat"+typ)[Zufallszahl][1]; // x-Einheit
  document.fform2.Pixel2.value = eval("funktionenVorrat"+typ)[Zufallszahl][2]; // y-Einheit
  document.FunktAbh.neuerStartwert(eval("funktionenVorrat"+typ)[Zufallszahl][3]); // x-Startwert
  document.FunktAbh.resetAlles();
  funktionLaden();
}

function loesungAnzeigen()
{
  if (erraten==1) { document.fform1.funktionVisible.value = document.fform1.funktionHidden.value; }
}

function rel()
{
  window.location.reload(true); 
}

// Funktionen zum Erraten
// Syntax: Funktionsausdruck, x-EinheitX, y-Einheit, x-Startwert
// lineare:
funktionenVorrat1 = new Array(
new Array("x","64","64","0.5")
,new Array("2*x","64","64","0.5")
,new Array("2*x + 1","64","64","0.5")
,new Array("2*x - 1","64","64","0.5")
,new Array("2*x + 2","64","64","0.5")
,new Array("2*x - 2","64","64","0.5")
,new Array("2*x + 3","64","32","0.5")
,new Array("2*x - 3","64","32","0.5")
,new Array("3*x","32","32","0.5")
,new Array("3*x + 1","32","32","0.5")
,new Array("3*x - 1","32","32","0.5")
,new Array("3*x + 2","32","32","0.5")
,new Array("3*x - 2","32","32","0.5")
,new Array("3*x + 3","32","16","0.5")
,new Array("3*x - 3","32","16","0.5")
,new Array("-x","64","64","0.5")
,new Array("-2*x","64","64","0.5")
,new Array("-2*x + 1","64","64","0.5")
,new Array("-2*x - 1","64","64","0.5")
,new Array("-2*x + 2","64","64","0.5")
,new Array("-2*x - 2","64","64","0.5")
,new Array("-2*x + 3","64","32","0.5")
,new Array("-2*x - 3","64","32","0.5")
,new Array("-3*x","32","32","0.5")
,new Array("-3*x + 1","32","32","0.5")
,new Array("-3*x - 1","32","32","0.5")
,new Array("-3*x + 2","32","32","0.5")
,new Array("-3*x - 2","32","32","0.5")
);
// mit höheren Potenzen:
funktionenVorrat2 = new Array(
new Array("x^2","32","32","0.5")
,new Array("x^2 + 1","32","32","0.5")
,new Array("x^2 - 1","32","32","0.5")
,new Array("x^2 + 4","32","32","0.5")
,new Array("x^2 - 4","32","32","0.5")
,new Array("2*x^2","32","32","0.5")
,new Array("2*x^2 + 1","32","32","0.5")
,new Array("2*x^2 - 1","32","32","0.5")
,new Array("2*x^2 + 2","32","32","0.5")
,new Array("2*x^2 - 2","32","32","0.5")
,new Array("3*x^2","32","32","0.5")
,new Array("3*x^2 + 1","32","32","0.5")
,new Array("3*x^2 - 1","32","32","0.5")
,new Array("x^3","32","32","0.5")
,new Array("x^3 + 1","32","32","0.5")
,new Array("x^3 - 1","32","32","0.5")
,new Array("x^3 + 3","32","32","0.5")
,new Array("x^3 - 3","32","32","0.5")
,new Array("x^4","32","32","0.5")
,new Array("-x^2","32","32","0.5")
,new Array("-x^2 + 1","32","32","0.5")
,new Array("-x^2 - 1","32","32","0.5")
,new Array("-x^2 + 4","32","32","0.5")
,new Array("-x^2 - 4","32","32","0.5")
,new Array("-2*x^2","32","32","0.5")
,new Array("-2*x^2 + 1","32","32","0.5")
,new Array("-2*x^2 - 1","32","32","0.5")
,new Array("-2*x^2 + 2","32","32","0.5")
,new Array("-2*x^2 - 2","32","32","0.5")
,new Array("-3*x^2","32","32","0.5")
,new Array("-3*x^2 + 1","32","32","0.5")
,new Array("-3*x^2 - 1","32","32","0.5")
,new Array("-x^3","32","32","0.5")
,new Array("-x^3 + 8","32","32","0.5")
,new Array("-x^3 - 1","32","32","0.5")
,new Array("-x^4","32","32","0.5")
,new Array("x*(x + 2)","64","64","0.5")
,new Array("x*(x - 2)","64","64","0.5")
);
// rationale:
funktionenVorrat3 = new Array(
new Array("1/x","64","64","0.5")
,new Array("-1/x","64","64","0.5")
,new Array("2/x","64","64","0.9")
,new Array("-2/x","64","64","0.9")
,new Array("1 + 1/x","64","64","0.5")
,new Array("1 - 1/x","64","64","0.5")
,new Array("-1 + 1/x","64","64","0.5")
,new Array("-1 - 1/x","64","64","0.5")
,new Array("1/(x + 1)","64","64","0.5")
,new Array("1/(x - 1)","64","64","0.5")
,new Array("1/(1 - x)","64","64","0.5")
,new Array("-1/(x + 1)","64","64","0.5")
,new Array("1/(x + 2)","64","64","0.5")
,new Array("1/(x - 2)","64","64","0.5")
,new Array("1/(2 - x)","64","64","0.5")
,new Array("-1/(x + 2)","64","64","0.5")
,new Array("x/(x + 1)","64","64","0.5")
,new Array("x/(1 - x)","64","64","0.5")
,new Array("(x + 1)/(x - 2)","64","64","0.5")
,new Array("(x - 2)/(x + 1)","64","64","0.5")
,new Array("(x - 2)/(x - 1)","64","64","0.25")
,new Array("1/x^2","64","64","0.5")
,new Array("-1/x^2","64","64","0.5")
,new Array("1/(1 + x^2)","64","64","0.5")
,new Array("1 + 1/x^2","64","64","0.9")
,new Array("1 - 1/x^2","64","64","0.5")
,new Array("2 + 1/x^2","64","64","0.9")
,new Array("2 - 1/x^2","64","64","0.5")
);
// sonstige:
funktionenVorrat4 = new Array(
new Array("exp(x)","64","64","0.5")
,new Array("sqrt(x)","64","64","0.5")
,new Array("sqrt(x*(1-x))","256","256","0.5")
,new Array("log(x)","64","64","0.5")
,new Array("sin(x)","16","256","0.5")
,new Array("cos(x)","16","256","0.5")
,new Array("tan(x)","32","32","0.5")
);
