/**
 * PhotoArea.writeCalendar - write calendar page
 * @method
 * @param {XMLNode} xml - XML data
 */
PhotoArea.prototype.writeCalendar = function(xml)
{
	var calendar = xml.getElementsByTagName('calendar')[0];
	this.layout.lastYear = parseInt(calendar.getAttribute('year'));
	this.layout.lastMonth = parseInt(calendar.getAttribute('month'));
	this.layout.lastDay = parseInt(calendar.getAttribute('day'));
	if(this.layout.lastDay)
	{
		this.writeCalendarDay(xml)
	}
	else if(this.layout.lastMonth)
	{
		this.writeCalendarMonth(xml)
	}
	else if(this.layout.lastYear)
	{
		this.writeCalendarYear(xml)
	}
}

/**
 * PhotoArea.writeCalendarYear - write calendar month page
 * @method
 * @param {XMLNode} xml - XML data
 */
PhotoArea.prototype.writeCalendarYear = function(xml)
{
	this.photoBoxes = {};

	this.contents.removeChildren();
	this.contents.appendChild(new Pagespacer());
	var calendarTable = this.contents.appendChild(new Element('table'));
	calendarTable.className = 'calendar';
	var calendarTbody = calendarTable.appendChild(new Element('tbody'));
	this.contents.appendChild(new Pagespacer());

	var calendarRow;

	var calendar = xml.getElementsByTagName('calendar')[0];
	var year = parseInt(calendar.getAttribute('year'));
	months = calendar.getElementsByTagName('month');
	for(var i = 0, il = months.length; i < il; i++)
	{
		if(i % 4 == 0)
			calendarRow = calendarTbody.appendChild(new Element('tr'));

		var photos = parseInt(months[i].getAttribute('photos'));
		var month = parseInt(months[i].getAttribute('month'));
		var monthName = months[i].getAttribute('name');
		var monthLabel = new Element('div');
		if(photos)
		{
			var photo = months[i].getElementsByTagName('photo')[0];
			var monthCell = new Element('td');
			monthCell.className = 'month has_photo';
			monthCell.clickHandler = this.layout.loadData.bind(this.layout, {mode: 'calendar', year: year, month: month});
			monthCell.style.backgroundImage = 'url("' + settings.thumbs_directory + '/' + filename(photo.getAttribute('hash')) + '.' + photo.getAttribute('type') + '?rot=' + photo.getAttribute('orientation') + '")';
			monthCell.title = photos + ' ' + (photos != 1 ? language('photos') : language('photo')).toLowerCase();
			monthLabel.className = 'monthName';
			calendarRow.appendChild(monthCell);
		}
		else
		{
			var monthCell = new Element('td');
			monthCell.className = 'month';
			monthLabel.className = 'month';
			calendarRow.appendChild(monthCell);
		}
		monthLabel.appendChild($T(monthName));
		monthCell.appendChild(monthLabel);
	}
}
/**
 * PhotoArea.writeCalendarMonth - write calendar month page
 * @method
 * @param {XMLNode} xml - XML data
 */
PhotoArea.prototype.writeCalendarMonth = function(xml)
{
	this.contents.removeChildren();
	this.contents.appendChild(new Pagespacer());

	var calendar = xml.getElementsByTagName('calendar')[0];
	var year = parseInt(calendar.getAttribute('year'));
	var month = parseInt(calendar.getAttribute('month'));

	var yearBar = this.contents.appendChild(new Element('div'));
	yearBar.className = 'bar backto';
	var yearBarButton = yearBar.appendChild(new TextButton(this.layout.loadData.bind(this.layout, {mode: 'calendar', year: year}), language('back-to-year')));

	var calendarTable = this.contents.appendChild(new Element('table'));
	calendarTable.className = 'calendar';
	var calendarTbody = calendarTable.appendChild(new Element('tbody'));
	this.contents.appendChild(new Pagespacer());

	var calendarRow = calendarTbody.appendChild(new Element('tr'));

	days = calendar.getElementsByTagName('dayname');
	for(var i = 0; i< days.length; i++)
	{
		var dayHeader = new Element('th');
		dayHeader.innerHTML = getNodeValue(days[i]);
		calendarRow.appendChild(dayHeader);
	}

	calendarRow = calendarTbody.appendChild(new Element('tr'));

	days = calendar.getElementsByTagName('day');
	for(var i = 0, il = days.length; i < il; i++)
	{
		if(days[i].getAttribute('empty'))
		{
			for(var j = 0, jl = parseInt(days[i].getAttribute('empty')); j < jl; j++)
				calendarRow.appendChild(new Element('td'));
		}
		else
		{
			if(days[i].getAttribute('weekstart'))
				calendarRow = calendarTbody.appendChild(new Element('tr'));

			var day = parseInt(days[i].getAttribute('day'));
			var photos = parseInt(days[i].getAttribute('photos'));
			var future = days[i].getAttribute('future');
			if(photos)
			{
				var photo = days[i].getElementsByTagName('photo')[0];
				var dayCell = new Element('td');
				dayCell.className = 'day has_photo';
				dayCell.clickHandler = this.layout.loadData.bind(this.layout, {mode: 'calendar', year: year, month: month, day: day});
				dayCell.style.backgroundImage = 'url("' + settings.thumbs_directory + '/' + filename(photo.getAttribute('hash')) + '.' + photo.getAttribute('type') + '?rot=' + photo.getAttribute('orientation') + '")';
				dayCell.title = photos + ' ' + (photos != 1 ? language('photos') : language('photo')).toLowerCase();
				var dayLabel = new Element('div');
				dayLabel.className = 'dayNum';
				dayLabel.appendChild($T(day));
				dayCell.appendChild(dayLabel);
				calendarRow.appendChild(dayCell);
			}
			else
			{
				var dayCell = new Element('td', { className: 'day' });
				if(future)
					dayCell.addClassName('future');
				var dayLabel = new Element('div', { className: 'day' });
				dayLabel.innerHTML = day;
				dayCell.appendChild(dayLabel);
				calendarRow.appendChild(dayCell);
			}
		}
	}
}

/**
 * PhotoArea.writeCalendarDay - write calendar day page
 * @method
 * @param {XMLNode} xml - XML data
 */
PhotoArea.prototype.writeCalendarDay = function(xml)
{
	var calendar = xml.getElementsByTagName('calendar')[0];
	var year = parseInt(calendar.getAttribute('year'));
	var month = parseInt(calendar.getAttribute('month'));

	var monthBar = new Element('div');
	monthBar.className = 'bar backto';
	var monthBarButton = monthBar.appendChild(new TextButton(this.layout.loadData.bind(this.layout, {mode: 'calendar', year: year, month: month}), language('back-to-month')));

	this.writePhotoList(xml, monthBar);
}

/**
 * PageList.writeDateList - write date list
 * @method
 * @param {XMLNode} xml - XML data
 */
PageList.prototype.writeDateList = function(xml)
{
	this.contents.removeChildren();

	var pageList = this.contents.appendChild(new Element('div'));
	pageList.className = 'pages';
	pageList.style.textAlign = 'center';

	var yearList = xml.getElementsByTagName('yearlist');
	if(yearList.length)
	{
		years = yearList[0].getElementsByTagName('year');
		for(var i = 0, il = years.length; i < il; i++)
		{
			var year = parseInt(years[i].getAttribute('year'));

			if(parseInt(years[i].getAttribute('selected')))
			{
				var yearButton = pageList.appendChild(new Span(year));
				yearButton.className = 'page_current';
				pageList.appendChild($T(' '));
			}
			else
			{
				var yearButton = pageList.appendChild(new TextButton(this.layout.loadData.bind(this.layout, {mode: 'calendar', year: year}), year));
				pageList.appendChild($T(' '));
			}
		}
	}
	var monthList = xml.getElementsByTagName('monthlist');
	if(monthList.length)
	{
		months = monthList[0].getElementsByTagName('month');
		for(var i = 0, il = months.length; i < il; i++)
		{
			var month = parseInt(months[i].getAttribute('month'));
			var year = parseInt(months[i].getAttribute('year'));

			if(parseInt(months[i].getAttribute('selected')))
			{
				var monthButton = pageList.appendChild(new Span(months[i].getAttribute('name')));
				monthButton.className = 'page_current';
				pageList.appendChild($T(' '));
			}
			else
			{
				var monthButton = pageList.appendChild(new TextButton(this.layout.loadData.bind(this.layout, {mode: 'calendar', year: year, month: month}), months[i].getAttribute('name')));
				pageList.appendChild($T(' '));
			}
		}
	}
	var dayList = xml.getElementsByTagName('daylist');
	if(dayList.length)
	{
		days = dayList[0].getElementsByTagName('day');
		for(var i = 0, il = days.length; i < il; i++)
		{
			if(parseInt(days[i].getAttribute('selected')))
			{
				var dayButton = pageList.appendChild(new Span(days[i].getAttribute('name')));
				dayButton.className = 'page_current';
				pageList.appendChild($T(' '));
			}
			else
			{
				var YMD = days[i].getAttribute('link').split(',');
				var dayButton = pageList.appendChild(new TextButton(this.layout.loadData.bind(this.layout, {mode: 'calendar', year: parseInt(YMD[0]), month: parseInt(YMD[1]), day: parseInt(YMD[2])}), days[i].getAttribute('name')));
				pageList.appendChild($T(' '));
			}
		}
	}
}