console.clear();
// Console tonen door F12
console.log("Functies");

var date = new Date();
var dag = date.getDay();
var melding = "geen bestaande dag van de week";
switch (dag) {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
    melding = "een werkdag";
    break;
  case 0:
  case 6:
    melding = "weekend";
}
console.log(melding);


function telop(a, b) {
  a = a || 0; // als a niet gevuld is: 0
  b = b || 0; // als b niet gevuld is: 0
  return a + b;
}
console.log(telop(5, 6));
var som = telop(10, 20);
console.log(som);
var x = telop(2, 3);
var y = telop(5, 6);
var z = telop(x, y);
console.log(z);

console.log(telop(2));

var telop = function(a, b) {
  return a + b;
}
console.log(telop(3, 6));


var telop = function(a, b) {
  a = a || 0; // als a niet gevuld is: 0
  b = b || 0; // als b niet gevuld is: 0
  let som = a + b;
  let args = arguments; // alle argumenten
  for (let i = 2; i < args.length; i++) { // vanaf 3e positie
    som += args[i];
  }
  return som;
}
console.log(telop(3, 4, 5));


var telop = function(a, b, ...overige) {
  a = a || 0; // als a niet gevuld is: 0
  b = b || 0; // als b niet gevuld is: 0
  let som = a + b;
  let args = overige; // overige argumenten
  for (let i = 0; i < args.length; i++) { // vanaf 1e positie
    som += args[i];
  }
  return som;
}
console.log(telop(3, 4, 5, 6));



var telop = function(a, b, ...overige) {
  a = a || 0; // als a niet gevuld is: 0
  b = b || 0; // als b niet gevuld is: 0

  if (typeof a !== 'number' || typeof b !== 'number') {
    throw 'Foute invoer: een argument was niet numeriek';
  }

  var som = a + b;
  for (let waarde of overige) {
    waarde = waarde || 0;
    som += waarde;
  }
  return som;
}

function tryTelop(a, b, ...argumenten) {
  try {
    return telop(a, b, argumenten); // 3 puntjes voor arguments?
  } catch (fout) {
    console.error("Er ging iets fout: ", fout);
    return fout;
  }
}

console.log(tryTelop(2, "test", undefined, 5, 6));
console.log(tryTelop(5, 6));


function minMax(a, b) {
  let minWaarde = a < b ? a : b;
  let maxWaarde = a > b ? a : b;
  return {
    min: minWaarde,
    max: maxWaarde
  };
}
let test = minMax(3, 4);
console.log(test.min);
console.log(test.max);


var namen = ["Jan", "Pier", "Joris", "Corneel"];

function toonNaam(naam) {
  console.log(naam.toUpperCase());
}
namen.forEach(toonNaam);


var namen = ["Jan", "Pier", "Joris", "Corneel"];
namen.forEach(function(naam) {
  console.log(naam.toUpperCase());
});


var namen = ["Jan", "Pier", "Joris", "Corneel"];
namen.forEach(naam => console.log(naam.toUpperCase()));


let namen2 = ["truus", "ellen", "kim", "vianne"];
namen2.forEach(s => console.log(s.toUpperCase()))
namen2 = namen2.map(s => s.toUpperCase());
console.log(namen2);


var maal = function(a, b) {
  a = a || 0; // als a niet gevuld is: 0
  b = b || 1; // als b niet gevuld is: 1
  let vermenigvuldig = a * b;
  let args = arguments; // alle argumenten
  for (let i = 2; i < args.length; i++) { // vanaf 3e positie
    vermenigvuldig *= args[i];
  }
  return vermenigvuldig;
}
console.log(maal(3, 4, 5));


var getallen = [1, 3, 5, 7, 9];

function toonDubbel(getal) {
  console.log(getal * 2);
}
getallen.forEach(toonDubbel);

var getallen = [1, 3, 5, 7, 9];
getallen.forEach(function(getal) {
  console.log(getal * 3);
});

var getallen = [1, 3, 5, 7, 9];
getallen.forEach(getal => console.log(getal * 4));

console.log(getallen);
getallen = getallen.map(x => x * 2);
console.log(getallen);
getallen.forEach((x, i, a) => a[i] = x * 2);
console.log(getallen);


var maal = function(a, b, ...overige) {
  a = a || 0; // als a niet gevuld is: 0
  b = b || 1; // als b niet gevuld is: 1
  /*
    if (typeof a !== 'number' || typeof b !== 'number') {
      throw 'Foute invoer: een argument was niet numeriek';
    }
    
      if (typeof a === 'string' && typeof b === 'number') {
        return a.repeat(b);
      }
    
  */

  var vermenigvuldig = a * b;
  for (let waarde of overige) {

    if (typeof waarde !== 'number') {
      throw "Fout, niet numeriek"
    }

    waarde = waarde || 1;
    console.log(waarde);
    vermenigvuldig *= waarde;
  }
  return vermenigvuldig;
}

function tryMaal(a, b, ...argumenten) {
  try {
    return maal(a, b, ...argumenten);
  } catch (fout) {
    console.error("Er ging iets fout: ", fout);
    return fout;
  }
}

console.log(tryMaal(3, 4, 5, 6));
console.log(tryMaal(3, 4, "a"));
//console.log(tryMaal("test", 2));
//console.log(tryMaal("a", "b"));



var totaal = (function() {
  var som = 0;
  return function(getal) {
    return som += getal;
  };
})();
console.log(totaal(3));
console.log(totaal(1));
console.log(totaal(2));


var artikel = {
  naam: "pen",
  prijs: 1.5,
  totaal: function(aantal) {
    return this.prijs * aantal;
  },
  type: {
    punt: "fijn",
    kleur: "zwart"
  }
}
//console.log(artikel.type.kleur); 


function getWaarde(ding, eigenschap) {
  return ding[eigenschap];
}
//console.log(getWaarde(artikel, "prijs")); // 1.5
for (let prop in artikel) {
  console.log(artikel[prop]);
}


function Artikel(naam, prijs) {
  this.naam = naam;
  this.prijs = prijs;
}
var a = new Artikel("pen", 1.5);
console.log(a.naam, a.prijs);

Artikel.prototype.totaal = function(aantal) {
  return this.prijs * aantal;
}

let b = new Artikel("potlood", 0.5);
console.log(b.totaal(3));
console.log(b.naam, b.prijs);
console.log(a.totaal(3));


Artikel.prototype.totaal = function(aantal) {
  return this.prijs * aantal;
};
var c = new Artikel("gum", 0.8);
console.log(c.totaal(2));



class Artikel2 {
  constructor(naam, prijs) { // geen keyword function
    this.naam = naam;
    this.prijs = prijs;
  }
  totaal(aantal) { // geen keyword function
    return this.prijs * aantal;
  }
}
var c = new Artikel2("gum", 0.9);
console.log(c.totaal(6));


var tekst = "Dit;is;een;voorbeeld.";
console.log(tekst.split(";"));



var fruit = ["appels", "peren", "mandarijnen", "bessen"];

fruit.splice(1, 0, "bananen", "aardbeien");
fruit.forEach(x => console.log(x));
console.log(fruit.slice(1, -1));
console.log(fruit.slice(1));

var gezond = fruit.slice(); // Er wordt een kopie gemaakt
fruit[1] = fruit[1].toUpperCase();
//console.log(gezond[1]);

console.log(fruit);
console.log(gezond);

console.log(fruit.indexOf("kersen")); // -1 = komt niet voor

/*
fruit.push("bananen"); // voegt toe aan het eind
fruit.unshift("kersen"); // voegt toe aan het begin
let laatste = fruit.pop(); // verwijdert laatste
let eerste = fruit.shift(); // verwijdert eerste
fruit.splice(2,1); // verwijdert element op 3e positie
fruit.splice(1,0,"aardbeien"); //voegt op 2e positie toe
fruit.splice(1,1,"perziken"); //vervangt op 2e positie
console.log(fruit.slice(1,-1)); // 2e tot voorlaatste
var copy = fruit.slice(); // geen argumenten:
// copy van hele array
console.log(fruit.indexOf("perziken")); // 1
*/


let fruit3 = "appels,peren, bananen  ,   bessen";
let sep = / *, */;
fruit3 = fruit3.split(sep);
console.log(fruit3);




var auto = {
  merk: "Opel",
  prijs: 2000.95,
  totaal: function(aantal) {
    return this.prijs * aantal;
  },
  type: {
    versnelling: "automaat",
    kleur: "blauw"
  },
  values: [],
  add: function(...val){
    this.values.splice(this.values.length,0,...val);
  },
  show: function(){
    this.values.forEach(x => console.log(x));
  }
}
console.log(auto.type.versnelling);
console.log(auto.totaal(3));
console.log(auto.merk);

auto.merk = "Ford";
auto.type.kleur = "groen";
console.log(auto.merk);
console.log(auto.type.kleur);

auto.add(2,3,4,5,6);
auto.show();


var naam2 = ["Kees", "Truus", "Karel", "Monique"];
console.log(naam2);
var eerste = naam2.shift();
naam2.splice(1, 0, eerste);
console.log(naam2);
naam2.splice(2, 1, "Manuela");
console.log(naam2);
var stringetje = naam2.toString();
console.log(stringetje);



class Boek {
  constructor(auteur, titel) { // geen keyword function
    this.auteur = auteur;
    this.titel = titel;
  }
  printBoek() { // geen keyword function
    return this.auteur + " " + this.titel;
  }
  //toString(){
  //  return this.auteur + ": " + this.titel;
  //}
}

var c = new Boek("MH", "Dagboek");
console.log(c.auteur, c.titel);
console.log(c.printBoek());


//var boekie[];
//boekie.push(new Boek("Piet","Het leven van Piet"));


var boekjes = ["Boek 4","Boek 2","Boek 1","Boek 3"];
boekjes.forEach(x => console.log(x));
console.log(boekjes.sort()); 
console.log(boekjes.sort((a,b) => a-b)); 

var zoekBoek3 = boekjes.filter(n => n=="Boek 3");
zoekBoek3.forEach(naam => console.log(naam));

console.table(boekjes);

var paragraph = 'The quick brown fox jumps over the lazy dog. It barked.';
var regex = /[A-Z]/g;
var found = paragraph.match(regex);
console.log(found);
found.forEach(q => console.log(q));



var nu = new Date();
console.log(nu);
console.log(nu.getFullYear());
console.log(nu.getMonth() + 1); // 0-based : 2 = Maart
console.log(nu.getDate());
console.log(nu.getHours());
console.log(nu.getMinutes()); 

Date.prototype.maanden = Date.prototype.maanden || ["Jan","Feb","Maa","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"];
console.log(Date.prototype.maanden[5]);

//var dag = new Datum(28,3,2019);
//console.log(dag.toString());
/*
Date.prototype.formatDate(){
  jaar  = this.getFullYear(),
  maand = this.getMonth
  //this.maanden
}
*/
