function buildCalendar(events,year) {
  var now = new Date(), ye = now.getFullYear(), mn = now.getMonth(), da = now.getDate()
    , MN = ['Január','Február','Március','Április','Május','Június','Július','Augusztus','Szeptember','Október','November','December']
    , DA = [31, ye&3 ? 28 : 29,31,30,31,30,31,31,30,31,30,31]
    , DW = ['Hétfő','Kedd','Szerda','Csütörtök','Péntek','Szombat','Vasárnap']
    , cal = "" , col = "" , ex = 0, em = events[ex++] - 1, ed = events[ex++], ec = 0, tC = 0;
  if(year != ye) mn = -1; // archív
  for(var m = 0; m < 12; m++) {
    var mi = - (new Date(year, m, 1).getDay() - 1), ma = DA[m], td, st;
    if(m == 0 && mi > -3) {
      tC++; // páratlan hét
    }
    if(mi > 0) mi = -6; //Vasárnap
    if(!(m%3)) cal += "<tr>";
    cal += "<td><table class=cal><thead><tr><th colspan=7>" + year + ". " + MN[m]
         + "<tr><th>H<th>K<th>S<th>C<th>P<th class=s>S<th class=s>V<tbody>";
    for(var i = 0; i < 6; i++) {
      cal += "<tr";
      if(tC & 1) cal += " class=o";
      cal += ">";
      for(var j = 0; j < 7; j++) {
        st = j < 5 ? 0 : "s";
        if(mi++ < 0 || mi > ma) td = '&nbsp;';
        else {
          if(m == mn && mi == da) st += " a";
          if(em == m && ed == mi) {
            var eC = events[ex],t1 = MN[m].toLowerCase() + " " + ed + ".";
            if(eC == 1) st += " fF"; else if(!ec) st += " fS"; else if(ec + 1 < eC) st += " fM"; else st += " fE";
            var eS = events[ex + 2], eSp = eS.indexOf('|');
            if(eSp > 0) eS = eS.substring(0, eSp);
            st += " t" + events[ex + 1] + "' title='" + t1 + " " + eS + " - " + events[ex + 3] + " - " + eC + " nap";
            if(++ec < eC)
              if(ed == ma) {em++; ed = 1;} // köv hó
              else ed++;
            else
              do {
                ex += 4; em = events[ex++] - 1; ed = events[ex++]; ec = 0;
                if(em < m) {ec = DA[em] - ed + 1; em = m; ed = 1;}
                while(em == m && ed <= mi) {ed++; ec++;}
              } while(ec >= events[ex])
          }
          td = mi;
          if(j == 6) tC++;
        }
        cal += "<td"; if(st) cal += " class='" + st + "'"; cal += ">" + td;
      }
      if(mi >= ma) break;
    }
    cal += "</table>";
  }
  ex = 0, ec = 0;
  while(ex < events.length) {
    em = events[ex++] - 1; ed = events[ex++];
    if(em > 11) break;
    col += "<tr class='" + (++ec&1 ? "odd" : "even");
    if(em < mn || (em == mn && ed < da)) col += " o";
    var eC = events[ex++], j = new Date(year, em, ed).getDay() - 1; if(j < 0) j = 6;
    ex++;
    col += "'><td>" + ec + ".<td>" + MN[em].toLowerCase() + " " + ed + ".<td>" + DW[j].toLowerCase();
    if(eC > 1) col += "-" + DW[(j + eC - 1)%7].toLowerCase();
    var eS = events[ex++], eSp = eS.indexOf('|');
    if(eSp > 0) eS = "<a href='" + eS.substring(eSp + 1) + "'>" + eS.substring(0, eSp) + "</a>";
    col += "<td>" + eS + "<td>" + events[ex++];
  }
  document.write("<table class=cxl><td>"
    + "<table class=cxl>" + cal + "</table>"
    + "<td>"
    + "<table class=col>" + col + "</table>"
    + "</table>"
  );
}
