function setCookie(nomo, valoro, tagoj) {
  var curCookie = nomo + "=" + escape(valoro);
  if (tagoj) {
    var expires = new Date();
    expires.setTime(expires.getTime() + (tagoj * 24 * 60 * 60 * 1000));
    curCookie += "; expires=" + expires.toGMTString();
  }
  document.cookie = curCookie;
}

function getCookie(nomo) {
  var dc = document.cookie;
  var prefix = nomo + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else begin += 2;
  var end = dc.indexOf(";", begin);
  if (end == -1) end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

var taalkoekje = "mdTaal", testTaal = false;
var machinetaal = (navigator.language ? navigator.language : navigator.userLanguage).substring(0, 2).toLowerCase();
function leesTaal() {
  var taalwaarde = [], hier, gelijk, getal;
  var lijst = getCookie(taalkoekje) + "@", i, j;
  for (i = 0, j = 1; j >= 0; i = j + 1) {
    j = lijst.indexOf("@", i);
    if (j > i) {
      hier = lijst.substring(i, j);
      gelijk = (hier ? hier.indexOf("*") : 0);
      if (gelijk > 0) {
        getal = hier.substring(gelijk + 1) * 1;
        if (getal > 0) taalwaarde[hier.substring(0, gelijk)] = getal;
      }
    }
  }
  return taalwaarde;
}
function schrijfTaal(taalwaarde) {
  var dagen = 500, precisie = 1e5;
  var talen = [], t;
  for (t in taalwaarde) {
    taalwaarde[t] = Math.round(taalwaarde[t] * precisie) / precisie;
    talen.push(t);
  }
  talen.sort(function (x, y) {
    if (taalwaarde[x] < taalwaarde[y]) return 1;
    if (taalwaarde[x] > taalwaarde[y]) return -1;
    return 0;
  });
  var lijst = "";
  for (var i = 0; i < talen.length; i ++) {
    t = talen[i];
    if (lijst != "") lijst += "@";
    lijst += t + "*" + taalwaarde[t];
  }
  if (lijst) setCookie(taalkoekje, lijst, dagen);
  else setCookie(taalkoekje, "", -1);
  return talen;
}
function kiesTaal(lijst) {
  if (testTaal) return lijst[Math.floor(Math.random() * lijst.length)];
  var taalwaarde = leesTaal();
  schrijfTaal(taalwaarde);
  var gekozen = lijst[0], bereikt = 0, i, t;
  for (i = 0; i < lijst.length; i ++) {
    t = lijst[i]
    if (taalwaarde[t] > bereikt) {
      bereikt = taalwaarde[t];
      gekozen = t;
    } else if (bereikt == 0 && t == machinetaal) gekozen = t;
  }
  return gekozen;
}
function bewaarTaal() {
  var taallijst = [document.body.lang], dezeTaal, keuzetaal = [], taalwaarde = leesTaal(), hier;
  var talen = schrijfTaal(taalwaarde);
  var stap = 1;
  var som = 0, kwadraatsom = 0;
  for (var i = 0; i < talen.length; i ++) {
    var j = taalwaarde[talen[i]];
    som += j;
    kwadraatsom += j * j;
  }
  var doelwaarde = 100 * (som * som + talen.length + 1) / (kwadraatsom + 1);
  for (var i = 0; i < arguments.length; i ++) taallijst.push(arguments[i]);
  if (taallijst[0] == "xx") {
    var voorkeur = ["ar", "de", "eo", "en", "fr", "ia", "nl", "ru", "tr", "vo"];
    var minste = talen[0] ? taalwaarde[talen[0]] : 1;
    dezeTaal = talen[talen.length - 1];
    for (var j = 0; j < voorkeur.length; j ++) {
      t = voorkeur[j];
      if (! taalwaarde[t]) {
        taalwaarde[t] = 99 + 1 / 2 + Math.random();
        minste = 0;
      } else if (taalwaarde[t] < minste) {
        minste = taalwaarde[t];
        dezeTaal = t;
      }
    }
    if (minste == 0) {
      schrijfTaal(taalwaarde);
      return;
    }
    taallijst[0] = dezeTaal;
    stap = taalwaarde[talen[0]] - taalwaarde[dezeTaal];
    stap = Math.max(1, talen.length * stap / (talen.length + stap));
    stap = doelwaarde * (1 - Math.pow((doelwaarde - 1) / doelwaarde, stap));
    for (var i = 0; i < talen.length; i  ++) keuzetaal[talen[i]] = true;
  } else {
    dezeTaal = kiesTaal(taallijst);
    for (var i = 0; i < taallijst.length; i ++) if (taallijst[i] == machinetaal) {
      dezeTaal = machinetaal;
      break;
    }
  }
  var menu = document.getElementById("taalkeuze");
  keuzetaal[dezeTaal] = true;
  if (menu) {
    for (var i = 0; i < menu.childNodes.length; i ++) {
      hier = menu.childNodes[i];
      if (hier.nodeName.toUpperCase() == "LI" && hier.firstChild.nodeName.toUpperCase() == "A") {
        keuzetaal[hier.firstChild.lang] = true;
      }
    }
  }
  var factor = (doelwaarde - stap) / doelwaarde;
  if (isNaN(taalwaarde[dezeTaal])) taalwaarde[dezeTaal] = 0;
  var methode = [];
  methode.push(function(waarde) {
    var ref = taalwaarde[dezeTaal], groter = [dezeTaal];
    for (var t in taalwaarde) {
      if (!(keuzetaal[t]) && taalwaarde[t] > ref) groter.push(t);
    }
    for (var t in waarde) waarde[t] *= factor;
    var bij = stap / groter.length;
    for (var i = 0; i < groter.length; i ++) waarde[groter[i]] += bij;
    return 4;
  });
  methode.push(function(waarde) {
    var totaal = 0, taal1, keuzeHier = [];
    for (var i in keuzetaal) keuzeHier[i] = true;
    if (taalwaarde[dezeTaal] > 0) {
      for (var i = 0; i < taallijst.length; i ++) {
        taal1 = taallijst[i];
        if (taalwaarde[taal1]) {
          totaal += taalwaarde[taal1];
          keuzeHier[taal1] = true;
        }
      }
    }
    for (var t in keuzeHier) waarde[t] *= factor;
    if (taalwaarde[dezeTaal] > 0) {
      for (var i = 0; i < taallijst.length; i ++) {
        taal1 = taallijst[i];
        if (taalwaarde[taal1]) waarde[taal1] += stap * taalwaarde[taal1] / totaal;
      }
    } else waarde[dezeTaal] += stap;
    return 1;
  });
  var gewicht = [], waarde = [], noemer = 0;
  for (var i in methode) {
    waarde[i] = [];
    for (var t in taalwaarde) waarde[i][t] = taalwaarde[t];
    gewicht[i] = methode[i](waarde[i]);
    noemer += gewicht[i];
  }
  for (var t in taalwaarde) {
    var teller = 0;
    for (var i in methode) teller += waarde[i][t] * gewicht[i];
    taalwaarde[t] = teller / noemer;
  }
  schrijfTaal(taalwaarde);
}

function kiesVlag(koekje, minder, keuze, nadruk) {
  var dagen = 100, houVlag = 500, beperkTot = 1 / 5;
  var oudeVlag = [];
  var lijst = getCookie(koekje), i, j, n;
  var nieuweNaam = [], oudeNaam = [], vlagnaam;
//  nieuweNaam["atoom"] = "atm";
  if (lijst) lijst += "@"; else lijst = "";
  for (i = 0, j = 1; j >= 0; i = j + 1) {
    j = lijst.indexOf("@", i);
    if (j > i) {
      vlagnaam = lijst.substring(i, j);
      if (nieuweNaam[vlagnaam]) vlagnaam = nieuweNaam[vlagnaam];
      oudeVlag.push(vlagnaam);
    }
  }
  var lijsten = [];
  for (i = 1; i < arguments.length; i ++) lijsten.push(arguments[i]);
  function kiesVlag1(lijsten, aard, mogelijk) {
    var teDoen = [], groepen = [];
    for (var i = 0; i < lijsten.length; i ++) {
      teDoen[i] = [];
      var lijst = lijsten[i];
      for (var j = 0; j < lijst.length; j ++) {
        var nu = lijst[j];
        if (typeof(nu) == "object") {
          if (nu.length > 1) {
            var groepsnaam = nu[0];
            if (! groepen[groepsnaam]) {
              var groep = [];
              groepen[groepsnaam] = groep;
            }
            groep = groepen[groepsnaam];
            for (var k = i; k >= 0 && ! groep[k]; k --) groep[k] = [];
            for (var k = 1; k < nu.length; k ++) {
              groep[i].push(nu[k]);
            }
          }
        }
        else {
          if (nieuweNaam[nu]) {
            oudeNaam[nieuweNaam[nu]] = nu;
            nu = nieuweNaam[nu];
          }
          teDoen[i].push(nu);
        }
      }
    }
    var konOok = [], groep , hoeDoen, konNu, watDoen;
    for (var groepsnaam in groepen) {
      groep = groepen[groepsnaam];
      hoeDoen = [];
      konNu = [];
      watDoen = kiesVlag1(groep, hoeDoen, konNu);
      teDoen[hoeDoen[0]].push(watDoen);
      for (var a in konNu) konOok[a] = true;
    }
    var hadNadruk = [], lijst, nu;
    for (var i = 0; i < teDoen.length; i ++) {
      lijst = teDoen[i];
      hadNadruk[i] = [];
      for (var j = 0; j < lijst.length; j ++) {
        nu = lijst[j];
        mogelijk[nu] = true;
        hadNadruk[i][nu] = true;
      }
    }
    var teBekijken = [];
    for (var i = 0; i < oudeVlag.length; i ++) {
      nu = oudeVlag[i];
      if (mogelijk[nu]) teBekijken.push(nu);
    }
    var lengte = [], faktor = [], belang = [], noemer = [], aantal = 0;
    for (var i = teDoen.length - 1; i >= 0; i --) {
      lengte[i] = teDoen[i].length;
      aantal += lengte[i];
      noemer[i] = aantal;
    }
    var totaal = 0, f = 0;
    for (var i = 0; i < teDoen.length; i ++) {
      f *= 2;
      if (noemer[i]) f += 1 + totaal / noemer[i];
      faktor[i] = f;
      belang[i] = lengte[i] * f;
      totaal += belang[i];
    }
    var teller = 0;
    for (var a in mogelijk) teller ++;
    var doen = (totaal > 0), gekozen = "", verworpen = 0;
    var bekijk = Math.min(teller - 1, teBekijken.length);
    while (doen) {
      var n = Math.random() * totaal;
      for (var i = 0; i < teDoen.length; i ++) {
        if (n < belang[i]) {
          gekozen = teDoen[i][Math.floor(n / faktor[i])];
          break;
        } else n -= belang[i];
      }
      doen = false;
      for (var i = Math.min(teller, bekijk) - 1; i >= 0 ; i --) {
        if (teBekijken[i] == gekozen) {
          if (verworpen >= teller) {
            gekozen = teBekijken[verworpen];
            break;
          }
          if (i > verworpen) verworpen = i;
          teller = Math.floor(teller * (9 + Math.random()) / 10);
          doen = (teller > 0);
          break;
        }
      }
    }
    aard[0] = 0;
    for (var i = 0; i < hadNadruk.length; i ++) if (hadNadruk[i][gekozen]) aard[0] = i;
    for (a in konOok) mogelijk[a] = true;
    return gekozen;
  }
  var aard = [], mogelijk = [];
  var gekozen = kiesVlag1(lijsten, aard, mogelijk);
  var gevonden = [];
  gevonden [gekozen] = true;
  var lijst = gekozen, t = 0;
  for (var i = 0; i < oudeVlag.length; i ++) {
    var nu = oudeVlag[i];
    if (gevonden[nu]) ;
    else {
      t = mogelijk[nu] ? t * beperkTot : t + 1;
      if (mogelijk[nu] || i < oudeVlag.length - 1 ||
        Math.random() * houVlag > Math.random() * t) {
          if (lijst) lijst += "@" + nu;
          else lijst = nu;
      }
      gevonden[nu] = true;
    }
  }
  if (lijst) setCookie(koekje, lijst, dagen);
  else setCookie(koekje, "", -1);
  if (oudeNaam[gekozen]) gekozen = oudeNaam[gekozen];
  return gekozen;
}

function tijdstip(jaar, maand, dag, uur, minuut, seconde) {
  return new Date(jaar, maand ? maand - 1 : 0, dag ? dag : 1, uur ? uur : 0,
    minuut ? minuut : 0, seconde ? seconde : 0);
}

function recent(nu, begin, duur) {
  var voorbij = (nu.getTime() - begin.getTime()) / 86400000;
  return (voorbij < (voorbij + 2 * duur) * (1 - Math.sqrt(1 - Math.random())));
}

function binnenkort(nu, einde, duur) {
  if (nu > einde) return false;
  else if (duur) {
    var teKomen =  (einde.getTime() - nu.getTime()) / 86400000;
    return (Math.exp(- teKomen / duur) > Math.random());
  }
  else return true;
}

function wigAf(nu, begin, duur) {
  var voorbij = (nu.getTime() - begin.getTime()) / 86400000;
  return (voorbij < duur * Math.random());
}

function wigOp(nu, einde, duur) {
  var nog = (einde.getTime() - nu.getTime()) / 86400000;
  return (nog > 0 && nog < duur * Math.random());
}

function schuifAf(nu, begin, duur) {
  var voorbij = (nu.getTime() - begin.getTime()) / 86400000;
  return (voorbij < duur * (1 - Math.sqrt(1 - Math.random())));
}

function tussentijd(begin, einde) {
  var nulpunt = begin.getTime();
  var duur = einde.getTime() - nulpunt;
  return new Date(nulpunt + Math.random() * duur);
}

function begintijd(begin, einde) {
  var nulpunt = begin.getTime();
  var duur = einde.getTime() - nulpunt;
  return new Date(nulpunt + (1 - Math.sqrt(1 - Math.random())) * duur);
}

function beginnul(getal, cijfers) {
  var wordt = "" + getal;
  while (wordt.length < cijfers) wordt = "0" + wordt;
  return wordt;
}

function naPasen(nu, orthodox) {
  var jaar = nu.getFullYear();
  var schrikkeldag = jaar % 4 ? 0 : (jaar % 100 ? 1 : (jaar % 400 ? 0 : 1));
  function dagVanJaar(maand, dag) {
    switch (maand) {
      case 1:
        return dag;
        break;
      case 2:
        return 31 + dag;
        break;
      default:
        return Math.floor((306 * maand + 10 * schrikkeldag - 323) / 10) + dag;
        break;
    }
  }
  var referentie = dagVanJaar(nu.getMonth() + 1, nu.getDate());
  var a, b, c, d, e, f, g, h, i, k, l, m, maand, dag;
  if (orthodox) {
    referentie -= Math.floor((jaar - 1) / 100);
    referentie += Math.floor((jaar - 1) / 400) + 2;
    while (referentie < 1) {
      jaar --;
      referentie += 365 + (jaar % 4 ? 0 : 1);
    }
    schrikkeldag = jaar % 4 ? 0 : 1;
    a = jaar % 19;
    b = (19 * a + 15) % 30;
    c = (jaar + Math.floor(jaar / 4) + b) % 7;
    d = b - c;
    maand = 3 + Math.floor((d + 40) / 44);
    dag = d + 28 - 31 * (Math.floor(maand / 4));
  } else {
    a = jaar % 19;
    b = Math.floor(jaar / 100);
    c = jaar % 100;
    d = Math.floor(b / 4);
    e = b % 4;
    f = Math.floor((b + 8) / 25);
    g = Math.floor((b - f + 1) / 3);
    h = (19 * a + b - d - g + 15) % 30;
    i = Math.floor(c / 4);
    k = c % 4;
    l = (32 + 2 * e + 2 * i - h - k) % 7;
    m = Math.floor((a + 11 * h + 22 * l) / 451);
    maand = Math.floor((h + l - 7 * m + 114) / 31);
    dag = (h + l - 7 * m + 114) % 31 + 1;
  }
  return referentie - dagVanJaar(maand, dag);
}

function beeldRechts(beeld, referentie, alternatief, titel, taal, kleur) {
  function td(tekst) {
    var hoogte = Math.round(100 * Math.sqrt(1 + 100 / (tekst + " ").length));
    var tekst1 = "<td " + tekstTaal + "style='font-size: " + hoogte + "%;" + tekstKleur + "' >";
    tekst1 += (referentie ? "<a href='" + referentie +"' >" + tekst + "</a>" : tekst) + "</td>";
    return tekst1;
  }
  var tekst;
  if (beeld == "tabel") {
    var tekstTaal = (taal ? "lang='" + taal + "' " : "") + "align='center' ";
    var tekstKleur = (kleur ? " background-color: " + kleur + ";" : "");
    var mogelijk = (window.innerWidth ? window.innerWidth : (screen.width ? screen.width : 1));
    var doel = Math.min(300, mogelijk / 4) + 2 * (alternatief + "" + titel).length;
    var grens = Math.max(1, mogelijk);
    var breedte = Math.round(doel * grens / (doel + grens));
    tekst = "<table align='right' class='kleurtd' width='" + breedte + "' >";
    if (alternatief) tekst += "<tr>" + td(alternatief) + "</tr>";
    tekst += "<tr>" + td(titel) + "</tr></table>";
  } else {
    tekst = '<img align="right" class="vlag" src="' + beeld + '" ';
    tekst += alternatief ? 'alt="' + alternatief + '" ' : '';
    tekst += titel ? 'title="' + titel + '" ' : '';
    tekst += ">";
    if (referentie) tekst = '<a href="' + referentie +'" >' + tekst + '</a>';
  }
  document.write(tekst);
}

