var EVENTCALENDAR =
{
  events    : [],
  event_url : null,
  calendar  : null,
  tipTds    : new Array(),

  init: function()
  {
    var dates     = '';
    var separator = '';

    for (var i = 0; i < EVENTCALENDAR.events.length; i++)
    {
      dates += separator + EVENTCALENDAR.events[i].date;
      separator = ',';
    }

    EVENTCALENDAR.calendar = new YAHOO.widget.Calendar("calendar", "eventCalContainer");

    EVENTCALENDAR.calendar.cfg.setProperty("selected", dates, false);
    EVENTCALENDAR.calendar.cfg.setProperty("multi_select", true);
    EVENTCALENDAR.calendar.cfg.setProperty("start_weekday", '1');
    EVENTCALENDAR.calendar.cfg.setProperty("navigator", false);

    EVENTCALENDAR.calendar.cfg.setProperty('DATE_FIELD_DELIMITER', '.');

    EVENTCALENDAR.calendar.cfg.setProperty('MDY_DAY_POSITION', 1);
    EVENTCALENDAR.calendar.cfg.setProperty('MDY_MONTH_POSITION', 2);
    EVENTCALENDAR.calendar.cfg.setProperty('MDY_YEAR_POSITION', 3);

    EVENTCALENDAR.calendar.cfg.setProperty('MD_DAY_POSITION', 1);
    EVENTCALENDAR.calendar.cfg.setProperty('MD_MONTH_POSITION', 2);

    EVENTCALENDAR.calendar.cfg.setProperty('MY_LABEL_YEAR_POSITION', 1);
    EVENTCALENDAR.calendar.cfg.setProperty('MY_LABEL_YEAR_SUFFIX', '. ');
    EVENTCALENDAR.calendar.cfg.setProperty('MY_LABEL_MONTH_SUFFIX', '');

    EVENTCALENDAR.calendar.cfg.setProperty('MONTHS_SHORT',   ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', 'Júl', 'Aug', 'Sze', 'Okt', 'Nov', 'Dec']);
    EVENTCALENDAR.calendar.cfg.setProperty('MONTHS_LONG',    ['január', 'február', 'március', 'április', 'május', 'június', 'július', 'augusztus', 'szeptember', 'október', 'november', 'december']);
    EVENTCALENDAR.calendar.cfg.setProperty('WEEKDAYS_1CHAR', ['V', 'H', 'K', 'S', 'C', 'P', 'S']);
    EVENTCALENDAR.calendar.cfg.setProperty('WEEKDAYS_SHORT', ['Va', 'Hé', 'Ke', 'Sz', 'Cs', 'Pé', 'Sz']);
    EVENTCALENDAR.calendar.cfg.setProperty('WEEKDAYS_MEDIUM',['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo']);
    EVENTCALENDAR.calendar.cfg.setProperty('WEEKDAYS_LONG',  ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat']);

    EVENTCALENDAR.calendar.renderEvent.subscribe(EVENTCALENDAR.addListeners);
    EVENTCALENDAR.calendar.renderEvent.subscribe(EVENTCALENDAR.addNavEvent);
    EVENTCALENDAR.calendar.render();
  },

  addNavEvent: function()
  {
    var nav = YAHOO.util.Selector.query('#calendar span.month_link');
    YAHOO.util.Event.on(nav, "click", EVENTCALENDAR.redirect);
  },

  redirect: function(event)
  {
    YAHOO.util.Event.stopEvent(event);

    var hunMonth  = {'január': 1, 'február': 2, 'március': 3, 'április': 4, 'május': 5, 'június': 6, 'július': 7, 'augusztus': 8, 'szeptember': 9, 'október': 10, 'november': 11, 'december': 12}
    var year      = event.target.innerHTML.match('^[0-9]{4}');
    var month     = event.target.innerHTML.match('[a-zéáőöüóúűí]*$');
    var month_num = hunMonth[month];
    
    location.href = EVENTCALENDAR.event_url.replace('date', 'month') + year + '-' + (month_num < 10 ? '0' : '') + month_num;
  },

  addListeners: function()
  {
    var tds = EVENTCALENDAR.calendar.cells;
    var tipTds = [];

    for (var i = 0; i < tds.length; i++)
    {
      var year  = EVENTCALENDAR.calendar.cellDates[i][0];
      var month = EVENTCALENDAR.calendar.cellDates[i][1];
      var day   = EVENTCALENDAR.calendar.cellDates[i][2];

      var date = year + '-' + month + '-' + day;

      if (YAHOO.util.Dom.hasClass(tds[i], 'selected'))
      {
        YAHOO.util.Dom.addClass(tds[i], 'eventclass');

        var tmp = new Date();
        tmp.setFullYear(year,month-1,day);

        tds[i].title = EVENTCALENDAR.calendar._buildMonthLabel(tmp) +' '+ day + '.' + '<br />' + EVENTCALENDAR.getDayEvents(new Date(month+'/'+day+'/'+year));
        
        tds[i].getElementsByTagName('a')[0].href = EVENTCALENDAR.event_url + date;
        YAHOO.util.Event.on(tds[i], "click", EVENTCALENDAR.click);

        EVENTCALENDAR.tipTds.push(tds[i].id);
      }
    }

    EVENTCALENDAR.initToolTip();
  },

  getDayEvents: function(date)
  {
    var str = '<ul>';

    for (var i = 0; i < EVENTCALENDAR.events.length; i++) {
      var intervall = EVENTCALENDAR.events[i].date.split('-');
      var start = new Date(intervall[0]);
      var end   = new Date(intervall[1]);

      if (intervall[0] != undefined && intervall[1] != undefined) {
        if (date >= start && date <= end) {
          str += '<li>' + EVENTCALENDAR.events[i].title + '</li>';
        }
      } else {
        if (date.toGMTString() == start.toGMTString()) {
          str += '<li>' + EVENTCALENDAR.events[i].title + '</li>';
        }
      }
    }

    str += '</ul>';

    return str;
  },

  click: function(event)
  {
    location.href = event.target.href;
  },

  initToolTip: function()
  {
    new YAHOO.widget.Tooltip('cal_tooltip', {
                                  context   : EVENTCALENDAR.tipTds,
                                  showDelay : 500
    });
  }
}

YAHOO.util.Event.onDOMReady(EVENTCALENDAR.init);