var months = ['LEDEN','ÚNOR','BŘEZEN','DUBEN','KVĚTEN','ČERVEN','ČERVENEC','SRPEN','ZÁŘÍ','ŘÍJEN','LISTOPAD','PROSINEC'];
var loading_text = "Nahrávám...";
var premiere = "PREMIÉRA: ";

var TACalendar = {
	remoteUrl: 'http://www.tanecniaktuality.cz',
	month : 0,
	year : 0,
	pageId : 0,
	performances : [],
	prehled : '',
	init : function() {
		$('#monthSelector').click(function() {
			$('#monthdrop').toggle();
		});
		TACalendar.prehled = $('#prehled').attr('href');
	},
	load: function(month, year) {
    $('#right-top').mask(loading_text);
		var request = $.ajax({
				url : TACalendar.remoteUrl,
				data : { eID : 'calendar', year : year, month : month+1, id : TACalendar.pageId },
				success : function(xml) {
					var perfs = [];
					$('numIndex',xml).each(function() {
						var el = $(this);
						var day = $('day',el).text()*1;
						if (!perfs[day]) {
							perfs[day] = [];
						}
						perfs[day].push(el);
					});
					TACalendar.drawCalendar(month,year,perfs);
					var today = new Date();
					if (today.getMonth() == month) {
						TACalendar.showPreview(perfs[today.getDate()],today.getDate());
					}
					$('#prehled').attr('href',TACalendar.prehled.replace('MM',month).replace('RR',year));
					$('#right-top').unmask();
				}
		});
	},
	moveBy : function(i) {
		this.month += i;
		if (this.month < 0) {
			this.month = 11;
			this.year--;
		}
		if (this.month > 11) {
			this.month = 0;
			this.year++;
		}
		this.load(this.month, this.year);
	},
	drawCalendar : function(month, year, perfs) {
		this.month = month;
		this.year = year;
		var begin = new Date();
		begin.setFullYear(year, month, 1);
		begin.setHours(12);
		
		var end = new Date();
		end.setFullYear(year, month+1, 1);
		end = this.addToDate(end,-1);
		
		var matrix = [ [],[],[],[],[],[] ];

		var i=1;
		var minus = begin;
		var beginDay = begin.getDay();
		if (beginDay == 0) {
      beginDay = 7;
    }
		for (;i<beginDay;i++) {
      var minusDay = minus.getDay();
      if (minusDay == 0) {
        minusDay = 7;
      }
			minus = this.addToDate(minus, -1*(minusDay-i));
			matrix[0][i-1] = -minus.getDate();
		}
		for (var j=0;j<6;j++) {
			for (;i<8;i++) {
				matrix[j][i-1] = begin.getMonth()!=month?-begin.getDate():begin.getDate();
				begin = this.addToDate(begin,1);
			}
			i=1;
		}
		
		for (var i=0;i<6;i++) {
			var row = $('<tr>');
			
			if (i==5 && matrix[i][0] < 10) { // last row is whole in next month, don't display
				$('#calendar tr:eq('+(i+2)+')').html('');
				continue;
			}
			
			for (var j=0;j<7;j++) {
				var className = '';
				var rel = '';
				if (perfs && perfs[matrix[i][j]]) {
					className = 'hasData';
					rel = 'd'+matrix[i][j];
				}
				if (matrix[i][j]<0) {
					className = 'anotherMonth';
				}
				var toAppend = $('<td>', { 'class' : className, rel : rel, html : Math.abs(matrix[i][j]) });
				if (perfs && perfs[matrix[i][j]]) {
					toAppend.bind('click',{ perfs : perfs[matrix[i][j]], day : matrix[i][j] }, function(event) {
						TACalendar.showPreview(event.data.perfs, event.data.day);
					});
				}
				row.append(toAppend);
			}
			var rowToReplace = $('#calendar tr:eq('+(i+2)+')');
			if (rowToReplace.length == 0) {
				$('#calendar tr:eq('+(i+1)+')').after(row);
			} else {
				rowToReplace.replaceWith(row);
			}
		}
		this.updateSelector();
	},
	showPreview : function(perfs,day) {
    $('td.active').removeClass('active');
    $('td[rel="d'+day+'"]').addClass('active');
    $ul = $('#todayon ul');
		$ul.html('');
		if (!perfs) return;
		for (var i=0;i<perfs.length;i++) {
			$per = $(perfs[i]);
			var isPrem = $('premiere',$per).text() == '1';
			$li = $('<li>',{
				html : $('<a>',{
					href : $('link',$per).text(),
					html : $('time',$per).text()+' '+(isPrem?premiere:'')+$('performance_name',$per).text()
				})
			});
			$li.append($('<br>'));
			$li.append($('<span>',{
				html : $('theatre_name',$per).text()
			}));
			$ul.append($li);
		}
	},
	addToDate : function(date,day) {
		var utcms = date.getTime();
		utcms += day * 24 * 60 * 60 * 1000;
		return new Date(utcms);
	},
	updateSelector : function() {
		$('#monthSelector').html(this.getLabel(this.month,this.year));
	},
	populateSelector : function(month, year) {
		$('#monthdrop').html('');
		for (var i=month;i<month+12;i++) {
			var label = this.getLabel(i>11?i-12:i, i>11?year+1:year);
			var eventData = { month : i>11?i-12:i, year : i>11?year+1:year };
			var li = $('<li>',{
				html : label
			});
			li.bind('click',eventData,function(event) { TACalendar.load(event.data.month, event.data.year); $('#monthdrop').toggle(); });
			$('#monthdrop').append(li);
		}
	},
	getLabel : function(month,year) {
		return months[month]+' '+year;
	}
};


