
function calendar(calitems) {
    curDate = new Date();
    days = fillEvents(curDate.getFullYear(),curDate.getMonth()+1,calitems);
    
    $('#calendar').datepicker({
	beforeShowDay: function(pickerdate) {
	    var retAr = new Array();
	    var cc = pickerdate.getDate();
	    if (days[cc].length>0) {
		retAr[0] = true;
		retAr[1] = 'eventday';
		retAr[2] = getTooltip(days[cc]);
	    } else {
		retAr[0] = false;
		retAr[1] = '';
		retAr[2] = '';
	    }
	    return retAr;
	},
	onSelect: function(dateText,td) {
	    var day;
	    if (dateText.substr(0,1) == '0') {
		day = dateText.substr(1,1);
	    }
	    else {
		day = dateText.substr(0,2);
	    }
	    var daytext = formatDays(days[day]);
	    /*if ( !$('#calendartip').length ) {
		$('<div />').attr('id','calendartip').appendTo(document.body);
	    }*/
	    $('#cal_events').html(daytext);
	    //nastavenie pozicie
	    var pos = getPosition($(td),$('#calendartip'),'top','center')
	    $('#calendartip').css({top: pos.top, left: pos.left, display:'block'});
	},
	onChangeMonthYear: function(year, month) {
	    $('#calendartip').css('display', 'none');
	    days = getCalendarItems(year,month);
	}
    });
}

function getCalendarItems(year,month)
{
    var calitems;
    if (month<10) {
	month = '0' + month;
    }
    $.ajax({
	url: '/calendar/index/' + year + '/' + month,
	type: 'GET',
	async: false,
	success: function(data) {
	    calitems = data;
	}
    });
    if (calitems !== undefined) {
	return fillEvents(year,month,calitems);
    } else {
	return null;
    }
}

function fillEvents(year,month,calitems)
{
    var days = new Array();
    for(var j=1; j<=31; j++)
    {
	days[j] = new Array();
	counter = 0;
	var curDay = new Date(year,month-1,j);
	for(var i=0;i<calitems.length;i++) {
	    var start = parseDate(calitems[i].Calitem.start_day);
	    var end = parseDate(calitems[i].Calitem.end_day);

	    if (start<=curDay && end>=curDay)
	    {
		days[j][counter] = calitems[i];
		counter++;
	    }
	    if (end<=curDay) {
		calitems.splice(i,1);
		i--;
	    }
	}
    }
    return days;
}

function parseDate(datum)
{
    var datum_split = datum.split('-',3);
    return new Date(datum_split[0],datum_split[1]-1,datum_split[2]);
}

function formatDatum(datum)
{
    var datum_split = datum.split('-',3);
    return datum;
}

/* calculate tip position relative to the trigger */
function getPosition(trigger, tip, horizontal, vertical) {


    // get origin top/left position
    var top = trigger.offset().top, left = trigger.offset().left;

    top  -= tip.outerHeight(); // - conf.offset[0];
    left += trigger.outerWidth(); // + conf.offset[1];

    // adjust Y
    var height = tip.outerHeight() + trigger.outerHeight();
    if (horizontal == 'center') {
	top += height / 2;
    }
    if (horizontal == 'bottom') {
	top += height;
    }

    // adjust X
    var width = tip.outerWidth() + trigger.outerWidth();
    if (vertical == 'center') {
	left -= width / 2;
    }
    if (vertical == 'left') {
	left -= width;
    }

    return {top: top, left: left};
}

function formatDays(eventsInDay)
{
    var text = '';
    for(var i = 0; i < eventsInDay.length; i++)
    {
	text += '<h3><a href="/calendar/view/' + eventsInDay[i].Calitem.id + '">' + eventsInDay[i].Calitem.subject + '</a></h3>';
	text += '<p>' + formatDatum(eventsInDay[i].Calitem.start_day) + ' ';

	if (eventsInDay[i].Calitem.start_time != null) {text += eventsInDay[i].Calitem.start_time + ' ';}

	if (eventsInDay[i].Calitem.end_day != null) {text += '- ' + eventsInDay[i].Calitem.end_day + ' ';}

	if (eventsInDay[i].Calitem.end_time != null) {
	    if (eventsInDay[i].Calitem.end_day == null) text += '- ';
	    text += eventsInDay[i].Calitem.end_time;
	}

	if (eventsInDay[i].Calitem.place != null) text += '<br />Miesto konania: <b>' + eventsInDay[i].Calitem.place + '</b>';
	text += '</p>';
    }
    return text;
}

function getTooltip(eventsInDay)
{
    var tooltip = '';
    for(var i = 0; i < eventsInDay.length; i++)
    {
        tooltip += eventsInDay[i].Calitem.subject + '\n';
    }
    return tooltip;
}
