

Event.observe(document, "dom:loaded", function(){
	
	//Initialisiere Kalendar-Funktionalitaeten.
	// Als Funktion gekapselt, damit sie sich bei Bedarf selber aufrufen kann.
	(function initializeCalendar() {
		if ($('calendar')) {
			var cal = $('calendar');
			var tt = new Element("div");
			tt.id = 'event-tooltip';
			$(document.body).insert({"bottom": tt});
	
			// Termin-Links durchgehen und mit Funktionalitaet belegen		
			cal.select('td a').each(function(link) {
				link.writeAttribute("title","");
				link.observe("mouseover", function(event) {
					event.stop();
					
					// wenn der content schon gecached wurde, nimm aus cache
					if (link.retrieve('content')) {
						tt.update(link.retrieve('content'));
						repositionTooltip();
					} else {
						new Ajax.Updater(tt, this.href.replace(/veranstaltung.php|veranstaltungen.php/, "ajax/termine.php"), {
							onSuccess: function(response) {
								// content cachen
								link.store("content", response.responseText);
								repositionTooltip();
							}
						});
					}
	
					Effect.Queues.get('endfade').invoke("cancel");
					
					tt.appear({
						duration:0.2,
						delay:0.3,
						queue: {
							scope: "startfade",
							limit:1
						}
					});
					
					// setzt den tooltip unterhalb des gehoverten termins
					function repositionTooltip() {
						tt.setStyle({
							left: (link.cumulativeOffset().left - 300 ) + "px",
							top: (link.cumulativeOffset().top + 10 ) + "px",
							position: "absolute"
						});
						// sicher stellen, dass der tooltip nicht aus der seite ragt
						var dims = tt.getDimensions();
						var vport = document.viewport.getDimensions();
						while (parseInt(tt.getStyle("left"))+dims.width+2 > vport.width) {
							tt.setStyle({
								"left": (parseInt(tt.getStyle("left"))-2)+"px"
							});
						}
					}
					
				}.bindAsEventListener(link));
				
				// getriggert beim verlassen des Termin-Links
				link.observe("mouseout", function(event) {
					Effect.Queues.get('startfade').invoke("cancel");
					Effect.Queues.get('endfade').invoke("cancel");
					tt.fade({
						duration:0.2,
						delay: 0.2,
						queue: {
							scope: "endfade",
							limit:1
						}
					});
					
				}.bindAsEventListener(link));
			});
			
			// getriggert beim ueberfahren des tooltips
			tt.observe("mouseover", function(event) {
				Effect.Queues.get('endfade').invoke("cancel");
				tt.appear({
					duration:0.0,
					transition: Effect.Transitions.full,
					queue: {
						scope: "startfade",
						limit:1
					}
				});
			});
			
			// getriggert beim verlassen des tooltips
			tt.observe("mouseout", function(event) {
				Effect.Queues.get('endfade').invoke("cancel");
				tt.fade({
					duration:0.2,
					delay: 0.2,
					queue: {
						scope: "endfade",
						limit:1
					}
				});
			});
			
			
			// Monats-Paging per AJAX nachladen
			cal.select('.pager a').each(function(link) {
				link.observe("click", function(event) {
					event.stop();
					new Ajax.Updater(cal, this.href, {
						insertion: 'after',
						onComplete: function() {
							cal.select("a").invoke("stopObserving");
							cal.remove();
							initializeCalendar();
						}
					});
				}.bindAsEventListener(link));
			});
		}
	})();
});
