var tb = 'b'; // a calEventWindow elhelyezkedese: top vagy bottom (t vagy b)
var startYear = new Date(); startYear = startYear.getFullYear() - 2; // Guru idoszamitas kezdete: aktualis ev - 2
var endYear = new Date(); endYear = endYear.getFullYear() + 2; // Guru idoszamitas vege: aktualis ev + 2

/*
// atkerult az index-be mivel adatbazisbol generalom!
var dA = new Array(); var x = 0;
// az esemenyek idopont megadasanak szintaktikaja
// datumformatum: yyyymmdd, ha a yyyy = 0000, akkor az adott bejegyzes (mmdd) minden evben ismetlodik,
// de nem regisztralhato, ill. nem latogathato az archivumban -- ezek az unnepnapoknak fenntartott bejegyzesek (pl. Ujev, Karacsony, stb.)
// egy adott datumhoz csak egy bejegyzest tud megjeleniteni a calendar, ezert ha ha tobb esemeny tartozik egy naphoz, akkor konkatenalni kell
// ha tobb bejegyzes tartozik egy datumhoz, akkor az alacsonyabb index-szel rendelkezo listaelem fog megjelenni!

dA[x++] = "00000101 New Year";
dA[x++] = "00000214 Valentine's day";
dA[x++] = "00000709 Steve's Birthday";
dA[x++] = "00000919 Site Anniversary";
dA[x++] = "00001206 Mikulás napja";
dA[x++] = "20091110 Ez egy esemény itten";
dA[x++] = "20091125 Egy másik esemény|~|http://www.index.hu";
*/

var pageLoaded = 0; window.onload = function() {pageLoaded = 1;}

function loaded(i, f) {
  if (document.getElementById && document.getElementById(i) != null) f();
  else if (!pageLoaded) setTimeout('loaded(\'' + i + '\', ' + f + ')', 100);
}

function monthlength(month,year) {
  var dd = new Date(year, month, 0); return dd.getDate();
}

var moy = ['január', 'február', 'március', 'április', 'május', 'június', 'július', 'augusztus', 'szeptember', 'október', 'november', 'december'];
var today = new Date();
var selDate = today.getFullYear() + getmmdd(today.getMonth() + 1, today.getDate());

function dispCal(yy, mm) {
  if (mm < 0 || mm > 12) {
    //alert('A hónap értéke nem eshet kívül az 1 és 12 közötti tartományon');
    return false;
  }
  if (yy != 0 && (yy < startYear || yy > endYear)) {
    //alert('A Gurulógus időszámítás a ' + startYear + ' eleje és ' + endYear + ' vége közötti időszakot öleli fel...');
    return false;
  }
  var dow = ['H', 'K', 'Sze', 'Cs', 'P', 'Szo', 'V'];
  var calendar = new Date();
  var today = calendar.getDate();
  calendar.setDate(1);
  if (yy > 1900) calendar.setFullYear(yy);
  if (mm > 0) calendar.setMonth(mm - 1);
  var yy = year = calendar.getFullYear();
  var month = calendar.getMonth(); calendar.setDate(today);
  var weekday = calendar.getDay();
  var daysInMonth = monthlength(month + 1, year);
  var hilite_start = '<td id="calToday" width="30" align="center"><b>';
  var td_start = '<td width="30" align="center">';
  var cal = '<div id="cal">'
  + '<div id="calBody">'
  + '<table border="0" cellspacing="0" cellpadding="1" align="center">'
  + '  <tr>'
  + '    <td id="calHead" colspan="7" align="center">'
  + '      <b>' + year  + ' ' + moy[month] + '<\/b>'
  + '    <\/td>'
  + '  <\/tr>'
  + '  <tr id="calDaysBar">';
  // a napok kezdobetuinek megjelenitese
  for (dex = 0; dex < 7; dex++) {cal += td_start + dow[dex] + '</td>'}
  cal += '<\/tr><tr>';

  var day2 = today;
  for (dex = today; dex > 6; dex -= 7) day2 = dex; weekday -= day2;
  while (weekday < 0) weekday += 7;
  
  // az elso hetnek az elozo honap vegerol maradt "ures" napjai
  for (dex = 0; dex < weekday; dex++) cal += td_start + '<\/td>';
  for (dex = 1; dex <= daysInMonth; dex++) {
    if (weekday == 7) {cal += '</tr><tr>'; weekday = 0;}
    // aktualis nap
    if (selDate == year + getmmdd(month + 1, dex)) cal += hilite_start + '<span ' + clickDate(dex, month, year) + '>'+ dex + '<\/span><\/b><\/td>';
    // minden tobbi nap
    else cal += td_start + '<span ' + clickDate(dex, month, year) + '>' + dex + '<\/span><\/td>'; weekday += 1;
  }
  for (dex = weekday; dex < 7; dex++) cal += td_start + '<\/td>'; cal += '<\/tr><\/table><\/div>';
  if (document.getElementById) {
    var mmb = month;  mm = month + 1;
    var yya = yyb = yy;
    if (mmb < 1) {mmb += 12; yyb--;}
    var mma = month + 2;
    if (mma > 12) {mma -= 12; yya++;}
    var yb = yy -1;
    var ya = yy +1;
    cal += '<div id="calNavBar">'
    + '<table border="0" cellspacing="0" cellpadding="1" align="center">'
    + '  <tr>'
    + '    <td>'
    + '      <table border="0" cellspacing="0" cellpadding="0" width="120" height="15" align="center">'
    + '        <tr>'
    // egy evet vissza
    + '          <td><a href="#" title="Egy évet vissza" onclick="getCurDate(); if (cala = dispCal(' + yb + ',' + mm + ')) {document.getElementById(\'cal\').innerHTML = cala; return false;}"><img src="images/cal_left_da.gif" width="25" height="9" border="0"></a></td>'
    // egy honapot vissza
    + '          <td><a href="#" title="Egy hónapot vissza" onclick="getCurDate(); if (cala = dispCal(' + yyb + ',' + mmb + ')) {document.getElementById(\'cal\').innerHTML = cala; return false;}"><img src="images/cal_left_sa.gif" width="25" height="9" border="0"></a></td>'
    // egy honapot elore
    + '          <td align="right"><a href="#" title="Egy hónapot előre" onclick="getCurDate(); if (cala = dispCal(' + yya + ',' + mma + ')) {document.getElementById(\'cal\').innerHTML = cala; return false;}"><img src="images/cal_right_sa.gif" width="25" height="9" border="0"></a></td>'
    // egy evet elore
    + '          <td align="right"><a href="#" title="Egy évet előre" onclick="getCurDate(); if (cala = dispCal(' + ya + ',' + mm + ')) {document.getElementById(\'cal\').innerHTML = cala; return false;}"><img src="images/cal_right_da.gif" width="25" height="9" border="0"></a></td>'
    + '        </tr>'
    + '      </table>'
    + '    </td>'
    + '  </tr>'
    + '</table>'
    + '</div>';
  } else {
    cal += '<div> </div>';
  }
  cal += '</div>'; return cal;
}

// event detail window
function start() {
  var x = '<div id="calEventWindow"><div id="calEventTxt"><\/div><\/div>';
  var y = '';
  var startYear = 0;
  var startMonth = 0;
  if (readCookie('cYear') && readCookie('cMonth')) {
    startYear = readCookie('cYear');
    startMonth = readCookie('cMonth');
  }
  //if (tb == 't') y = x + dispCal(0, 0);
  //else y = dispCal(0, 0) + x; document.getElementById('calendar').innerHTML = y; getCurDate();    
  if (tb == 't') y = x + dispCal(startYear, startMonth);
  else y = dispCal(startYear, startMonth) + x; document.getElementById('calendar').innerHTML = y; getCurDate();
}

loaded('calendar', start);


function zeroPad(num, count) {
  var numZeropad = num + '';
  while(numZeropad.length < count) {
    numZeropad = "0" + numZeropad;
  }
  return numZeropad;
}

/*function firstUpperCase(str) {
  str = str.substr(0, 1).toUpperCase() + str.substr(1);
  return str;
}*/

function clickDate(day, month, year) {
  var ct = nextDate(year + getmmdd(month + 1, day));
  selDate = getCurDate('no');
  var actDate = year + zeroPad((month + 1), 2) + zeroPad(day, 2);
  var eventHeader;
  var spanStyle;
  var dTxt = '';
  var cFest = '';
  // luniszolaris egyhazi unnepek
  if (actDate == churchFest(Number(actDate.substring(0, 4)), 'easter', 'first')) cFest += "<font class='ttfest'>Húsvét</font><br>";
  if (actDate == churchFest(Number(actDate.substring(0, 4)), 'easter', 'second')) cFest += "<font class='ttfest'>Húsvét</font><br>";
  if (actDate == churchFest(Number(actDate.substring(0, 4)), 'whitsun', 'first')) cFest += "<font class='ttfest'>Pünkösd</font><br>";
  if (actDate == churchFest(Number(actDate.substring(0, 4)), 'whitsun', 'second')) cFest += "<font class='ttfest'>Pünkösd</font><br>";
  if (ct == '') ct = nextDate('0000' + getmmdd(month + 1, day));
  if (ct == '') {
    if (cFest) {
      eventHeader = year + ' ' + moy[month] + ' ' + day + '.';
      return 'class="calSpanFest" onClick="createCookie(' + "'cYear'" + ', ' + year + ', 60); createCookie(' + "'cMonth'" + ', ' + (month + 1) + ', 60); selDate = ' + year + getmmdd(month + 1, day) + '; return false;" title = "singleclickstop=[on] cssbody=[ttbdy] cssheader=[tthdr] header=[' + eventHeader +'] body=[' + cFest + dTxt + ']"';
    } else {
      return 'class="calSpanText"';
    }
  } else {
    eventHeader = year + ' ' + moy[month] + ' ' + day + '.';
    ct = ct.replace(/^\s+/, "");
    var ctArr = ct.split('<br>');
    if (ctArr.length > 1) {
      var aItem;
      while (ctArr.length > 0) {
        aItem = ctArr.shift();
        dTxt += aItem.substr(4) + '<br>';
      }
    } else {
      dTxt += ct.substr(4) + '<br>';
    }
    // style class beallitasok
    if (ct.substr(0, 3) == '003') {
      // ismetlodo unnepnapok
      spanStyle = 'calSpanFest';
      // olyan unnepnapok, amelyeken mas esemeny is szerepel
      if (ct.indexOf('001') > 1 || ct.indexOf('002') > 1) spanStyle = 'calSpanLinkFest';
    } else {
      // esemenyek
      if (cFest.indexOf('Húsvét') > 1 || cFest.indexOf('Pünkösd') > 1) spanStyle = 'calSpanLinkFest';
      else spanStyle = 'calSpanLink';
    }
    return 'class="' + spanStyle + '" onClick="createCookie(' + "'cYear'" + ', ' + year + ', 60); createCookie(' + "'cMonth'" + ', ' + (month + 1) + ', 60); selDate = ' + year + getmmdd(month + 1, day) + '; return false;" title = "singleclickstop=[on] cssbody=[ttbdy] cssheader=[tthdr] header=[' + eventHeader +'] body=[' + cFest + dTxt + ']"';
  }
}

function churchFest(Y, fest, whichDay) {
  var attachDay = (whichDay == 'first') ? 49 : 50;
  var C = Math.floor(Y/100);
  var N = Y - 19 * Math.floor(Y / 19);
  var K = Math.floor((C - 17) / 25);
  var I = C - Math.floor(C / 4) - Math.floor((C - K) / 3) + 19 * N + 15;
  I = I - 30 * Math.floor((I / 30));
  I = I - Math.floor(I / 28) * (1 - Math.floor(I / 28) * Math.floor(29 / (I + 1)) * Math.floor((21 - N) / 11));
  var J = Y + Math.floor(Y / 4) + I + 2 - C + Math.floor(C / 4);
  J = J - 7 * Math.floor(J / 7);
  var L = I - J;
  var M = 3 + Math.floor((L + 40) / 44);
  var D = L + 28 - 31 * Math.floor(M / 4);

  if (fest == 'easter') {
    var dES = new Date(M + '/' + D + '/' + Y);
    dES.setDate(dES.getDate() + (attachDay - 49));
    return dES.getFullYear() + zeroPad((dES.getMonth() + 1), 2) + zeroPad(dES.getDate(), 2);
  } else {
    var dWS = new Date(M + '/' + D + '/' + Y);
    dWS.setDate(dWS.getDate() + attachDay);
    return dWS.getFullYear() + zeroPad((dWS.getMonth() + 1), 2) + zeroPad(dWS.getDate(), 2);
  }
}

function getCurDate(noDisplay) {
  var curDate;
  with (new Date) {curDate = String((getFullYear() * 100 + getMonth() + 1) * 100 + getDate())}
  if (! noDisplay) document.getElementById('calEventTxt').innerHTML = "<a href=\"javascript: eraseCookie('cYear'); eraseCookie('cMonth'); loaded('calendar', start);\">A mai dátum: " + curDate.substr(0, 4) + '.' + curDate.substr(4, 2) + '.' + curDate.substr(6) + '.</a>';
  return curDate;
}

function nextDate(yymmdd) {
  var x = dA.length;
  for (var i = 0; i < x; i++) {
    if (dA[i].substr(0, 8) == yymmdd) return dA[i].substr(8);
  }
  return '';
}

function getmmdd(mm, dd) {
  return (mm > 9 ? '' + mm : '0' + mm) + (dd > 9 ? dd : '0' + dd);
}
