var months = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];
	

function handleValidationErrors(errors) {
	for (var i = 0; i < errors.length; i++) {
		for (var key in errors[i]) {
			$('input[name="'+ key +'"]').parent().addClass("ui-state-error");
		}
	}
};

var plan = {
	d: new Date(),
	
	prev: function() {
		this.d.setMonth(this.d.getMonth()-1);
		this.load();
		return false;
	},
	
	next: function() {
		this.d.setMonth(this.d.getMonth()+1);
		this.load();
		return false;
	},
	
	load: function() {		
		$('#calendar').hide();
		$('#spinner').show();
		$.post(url, {year: this.d.getFullYear(), month: this.d.getMonth()+1}, this.onSuccess);
	},
	
	onSuccess: function(data) {
		$('#dateName').text(months[plan.d.getMonth()] + " " + plan.d.getFullYear());
		$('#calTable').html(plan.buildCalendar(plan.d.getFullYear(), plan.d.getMonth()));
			
		var today = new Date();
		if (plan.d.getFullYear() == today.getFullYear() && plan.d.getMonth() == today.getMonth()) {
			$('#d_' + today.getDate()).addClass('today');
		}
	
		$('#calendar tbody td').hover(plan.showData, plan.hideData);
	
		for (var i = 0; i < data.length; i++) {
			var begin = new Date(data[i].begin);
			var node = $('#d_' + begin.getDate());
			node.addClass(data[i].kategorie);
			
			if (node.data("termine") == null) {
				node.data("termine", [data[i]]);
			} else {
				node.data("termine").push(data[i]);
			}
		}
		
		$('#calendar').show();
		$('#spinner').hide();
	},
	
	showData: function() {
		var t = $(this).data("termine");
		var out = [];
		
		if (t != null) {
			out.push('<ul>');
			for (var i = 0; i < t.length; i++) {
				out.push('<li>' + t[i].titel + '</li>');
			}
			out.push('</ul>');
			$('#calDetails').html(out.join(""));
		}	
	},
	
	hideData: function() {
		$('#calDetails').html("");
	},
	
	daysInMonth: function(year, month) {
		var d = new Date(year, month+1, 0);
		return d.getDate();
	},

	buildCalendar: function(year, month) {
		var out = [];
		out.push('<table><thead><tr><td>Mo</td><td>Di</td><td>Mi</td><td>Do</td><td>Fr</td><td>Sa</td><td>So</td></tr><tr></thead><tbody><tr>');
		
		var max = this.daysInMonth(year, month);
		
		var day = new Date(year, month, 1);
		var skip = day.getDay() - 1; if (skip == -1) skip = 6;
		var dow = 0;
		
		for (var i = 0; i < skip; i++) {
			out.push('<td>-</td>');
			dow++;
		}
		
		for(var i = 1; i <= max; i++) {
			
			out.push('<td id="d_' + i + '">' + i + '</td>');
			dow++;
			
			if (dow % 7 == 0 && i < max) {
				out.push('</tr><tr>')
			}
		}
		
		while (dow % 7 != 0) {
			out.push('<td>-</td>');
			dow++;
		}
		
		out.push('</tr></tbody></table>');
		
		return out.join("");	
	}
};


var m = {
    	edit: function() {
	    	$('#details span').hide('');
			$('#details input').show('');
			$('#edit').hide();
			$('#save').show();
			$('#cancel').show();
			$('#spinner').hide();
	    },
	    
	    cancel: function() {
			$('#details span').show();
			$('#edit').show();
			$('#details input:text').hide();
			$('#save').hide();
			$('#cancel').hide();
			$('#spinner').hide();
			this.clearValidation();
			
		},
		
		save: function() {
			$('#spinner').show();
			$('#save').hide();
			$('#cancel').hide();
			this.clearValidation();
			$.post(url, $('#mitgliedForm').serialize(), this.onSuccess);
		},
		
		onSuccess: function(data) {
			$('#spinner').hide();
			
			if (data.errors != null) {
				m.edit();
				handleValidationErrors(data.errors);
			}
			else if (data.id != null) {
				m.updateData(data);
			}
		},
		
		updateData: function(data) {
			var node = $('#m_' + data.id).children().first();
			node.html(data.email == '' ? "" : '<a href="mailto:' + data.email + '"><span class="ui-icon ui-icon-mail-closed"></span></a>');
			node = node.next();
			node.text(data.nachname).next().text(data.vorname).next().text(data.mobil).next().text(data.festnetz).next().text(data.dienstlich).next().children().first().data('details', data);
		
			$('#details').dialog('close');
		},
		
		formatDate: function(date) {
			var d = new Date(date);
			
			return d.getDate() + "." + (d.getMonth()+1) + "." + d.getFullYear();
		},
		
		showDetails: function(node) {
			
			d = $(node).data('details');
			this.data = d;
			
			$('#details span').text('');
			$('#details input:text').val('');
		
			for(var key in d) {
				if (key == "geburtstag") {
					$('#s_' + key).text(this.formatDate(d[key]));
					$('#' + key).val(this.formatDate(d[key]));
				} else {
					$('#s_' + key).text(d[key]);
					$('#' + key).val(d[key]);
				}
			}
			
			this.cancel();
		
			$('#details').dialog('option', 'title', d.vorname + " " + d.nachname);
			$('#details').dialog('open');
		},
		
		clearValidation: function() {
			$('#details p').removeClass('ui-state-error');
		}
	};
