// s ist optionaler Parameter
// c ist Parameter mit Standardwert
function out(s?: any, count: number = 1): boolean {
 if (!s) return false;
 for (var i = 0; i < count; i++) {
  // Ausgabe mit jQuery
  $("#content").append(s + "<br>");
  // Ausgabe im Consolenfenster
  console.log(s);
 }
 return true;
}

function calc(art, x, y)  {
 out("calc:x=" + x + ",y=" + y);
 if (x === null || y === null) return "Fehler: null";
 if (x === undefined || y === undefined) return "Fehler: undefined";
 // Objekt für Rückgabe erstellen
 var e = { zeitpunkt: new Date(), wert: 0 };

 switch (art) {
  case 1:
   e.wert = x;
   break;
  case 2:
   e.wert = y;
   break;
  default:
   return 0;
 }

 for (var i = 1; i <= x; i++) {
  e.wert += y + x + 2*i;
  out("i: " + i);
 }
 var j = 0;
 while (j < x && e.wert < 10000) {
  e.wert += j++;
  out("j: " + j);
 }
 do {
  e.wert += j--;
  out("j: " + j);
 } while (j > -10)

 return e;

}


function JSFalsy() {
 var obj: any;

 // erlaubt in JS, nicht erlaubt in TS
 //if (1 == '1') out("1 == '1' --> true");
 //if (1 == [1]) out("1 == '1' --> true");
 //if (1 == '1') out("1 == '1' --> true");
 //if (!(1 === [1]) out("1 === '1' --> false");

 // Falsy
 if (!false) out("false ist false");
 if (!null) out("null ist false");
 if (!undefined) out("undefined ist false");
 if (!obj) out("Nicht-initialisiertes Objekt ist false");
 if (!0) out("0 ist false");
 if (!NaN) out("NaN ist false");
 if (!'') out("Leerstring ist false");
 if (!"") out("Leerstring ist false");

 // Truthy
 if (true) out("false ist true");
 if ({}) out("Leeres Objekt ist true");
 if ([]) out("Leeres Array ist true");
 if (function () { }) out("Leere Funktion ist true");
 if (42) out("42 ist true");
 if ("xy") out("Nicht-leere Zeichenkette ist true");
 if (-42) out("-42 ist true");
 if (Infinity) out("Infinity ist true");


}
