

// global
var firstLoad = true;
var itemEvents;
itemEvents = new Object();

function showEventsPerMonth(mo, yr, d) {

	mo = mo - 1;
	var selDate = new Date(yr, mo, d);

	mo = selDate.getMonth()+1;
	yr = selDate.getFullYear();
	d  = selDate.getDate();

	if (!itemEvents.hasOwnProperty(yr)) {
		itemEvents[yr] = new Object();
	}

	if (!itemEvents[yr].hasOwnProperty(mo) || firstLoad) {

		$.ajax({
			type	: 'POST',
			url		: calpath + "../json/?m=c",
			data	: firstLoad ? null: { month:mo, year:yr },
			cache	: false,
			async	: true,
			dataType: 'json',
			success	: function(data) {
				loadEvents(data, yr);

				showEvents(yr,mo,d);
				firstLoad = false;
			}
		});

	} else {
		var countEvents = showEvents(yr,mo,d);

		var preLoad = false;

		var now = new Date(yr, mo-1, d);

		var next = new Date(now.getFullYear(), now.getMonth()+1, 1);
		var nextYear  = next.getFullYear();
		var nextMonth = next.getMonth()+1;

		var prev = new Date(now.getFullYear(), now.getMonth()-1, 1);
		var prevYear  = prev.getFullYear();
		var prevMonth = prev.getMonth()+1;

		// prev
		if (!itemEvents.hasOwnProperty(prevYear)) {
			itemEvents[prevYear] = new Object();
			yr = prevYear;
		}
		if (!itemEvents[prevYear].hasOwnProperty(prevMonth)) {
			mo = prevMonth;
			preLoad = true;
		}

		// next
		if (!itemEvents.hasOwnProperty(nextYear)) {
			itemEvents[nextYear] = new Object();
			yr = nextYear;
		}
		if (!itemEvents[nextYear].hasOwnProperty(nextMonth)) {
			mo = nextMonth;
			preLoad = true;
		}

		if (preLoad) {
			$.ajax({
				type	: 'POST',
				url		: calpath + "../json/?m=c",
				data	: { month:mo, year:yr },
				cache	: false,
				async	: true,
				dataType: 'json',
				success	: function(data) {
					loadEvents(data, yr);

					if (countEvents < MAX_EVENTS) {
						showEvents(yr,mo-1, 1);
					}
				}
			});
		}
	}

}


function loadEvents(data, yr) {
	if (data.result) {
		$.each(data.calendar, function(key, val) {
			$.each(val, function(keyM, valVal) {
				itemEvents[yr][keyM] = new Object();

				$.each(valVal, function(keyDay, eventsIds) {
					if (typeof(eventsIds)=='object'&&(eventsIds instanceof Array)) {
						if (!itemEvents[yr][keyM].hasOwnProperty(keyDay)) {
							itemEvents[yr][keyM][keyDay] = new Object();
						}

						$.each(eventsIds, function(kk, eventId) {
							if (data.events[eventId]) {
								if (!itemEvents[yr][keyM][keyDay][eventId]) {
									itemEvents[yr][keyM][keyDay][eventId] = data.events[eventId];
								}
							}
						});
					}
				});
			});
		});
	}
}

var MAX_EVENTS = 3;

function showEvents(inputYear, inputMonth, inputDay) {

	$("#jqCalendarResults").empty();

	var eventCounter = 0;
	var dayCounter   = 0;

	while(eventCounter < MAX_EVENTS && dayCounter < 100) {
		var selDate = new Date(inputYear, inputMonth-1, inputDay);
		d = selDate.getDate();
		m = selDate.getMonth()+1;
		y = selDate.getFullYear();

		if (itemEvents[y] && itemEvents[y][m] && itemEvents[y][m][d]) {
			var html = '';
			var className = '';
			$.each(itemEvents[y][m][d], function(eventId, row) {
				eventCounter++;

				if (eventCounter > MAX_EVENTS) return;

				className = '';
				if (row.starred) {
					className = 'starred';
				}

				html = '<li class="'+className+'">'
						+ '<a class="date" href="'+row.calendar_uri+'?y='+y+'&amp;m='+m+'&amp;d='+d+'&amp;id='+row.id+'&amp;view=list"><span class="day">'+lzero(d)+'</span> <span class="month">'+Date.monthNames[m-1]+'</span> <span class="year">'+y+'</span></a>'
						+ '<p>'
							+ '<a href="'+row.calendar_uri+'?y='+y+'&amp;m='+m+'&amp;d='+d+'&amp;id='+row.id+'&amp;view=list"><strong>'+row.title+'</strong></a>'
							+ ''+row.introtext+"\n"
							+ '<p class="cln"><a class="button fr more" href="'+row.calendar_uri+'?y='+y+'&amp;m='+m+'&amp;d='+d+'&amp;id='+row.id+'&amp;view=list"><span>more info</span></a></p>'
						+ '</p>'
					+ '</li>';

				$("#jqCalendarResults").append(html);
			});
		}

		// goto next day
		inputDay = inputDay + 1;
		dayCounter++;
	}

	return eventCounter;
}






$(function() {
	Date.format = 'mm/dd/yyyy';
	Date.firstDayOfWeek = 0;

	//Init datePicker handler for Tiny Calendar
	$('#jqCalendar').datePicker({
		inline:true,
		showYearNavigation:false,
		renderCallback:function($td, thisDate, month, year) {
			if(typeof(ajaxevents)!='undefined') {
				var now = new Date();
				if(ajaxevents[thisDate.asString()]) {
					if($td.hasClass('current-month')) {
						$td.addClass('hasevents');
						$td.attr('title', 'Show events on '+thisDate.asString());
					}
				}
			}
		}
	})
	.bind('dpMonthChanged', function(e, month, year) {
		var mo = (month+1);
		if((mo+'').length == 1) mo='0'+mo;
		var yr = year+'';

		var d = 1;
		var now = new Date();

		if (now.getMonth() == month) {
			d = now.getDate();
		}

		showEventsPerMonth(mo, yr, d);
		updateICalLink(month+1, year);
	})
	.bind('dateSelected', function(e, selectedDate, $td) {
		var selDate = selectedDate.asString();
		var selMonth = selectedDate.getMonth()+1;
		var selYear = selectedDate.getFullYear();
		var selCity = $('#current_city').val();
		document.location.href=calpath+'?m='+selMonth+'&y='+selYear+'&city=' + selCity + '#cal';
	}).dpClose().dpDisplay();

	var date = new Date();
	var month = date.getMonth()+1;
	month = (month > 9 ? month : "0"+month);
	year = date.getFullYear();

	// first start
	if ($("#jqCalendarResults").length != 0) {
		showEventsPerMonth(month, year, date.getDate());
	}

});// /on page load



function printEvents() {
	$('body').toggleClass('print-events');
	window.print();
	$('body').toggleClass('print-events');
}
function printCalendar() {
	$('body').toggleClass('shedule');
	window.print();
	$('body').toggleClass('shedule');
}

function lzero(w) {
	w = w + '';
	return w.length == 1 ? '0'+''+w : w;
}

