$(document).ready(function() {
	$(".nia-calendar").calendar();

	if ($(".contact").length) {

		var contactArrow = $("<div/>").attr("id", "contact-arrow").appendTo($(".contact-tooltip"));
		
		contactArrow.getSvg({
			svgPath: "M 0 0 L 61 0 L 61 61 Z",
			svgWidth: 61,
			svgHeight: 61,
			svgFill: "#7e033c"
		});

		$(".contact").mouseover(function() {
			if (! $(".contact-tooltip").is(":animated")) {
				$(".contact-tooltip").fadeIn(200);
			}
		}).mouseleave(function() {
			$(".contact-tooltip").fadeOut(200);
		});
	}

	if ($(".mainnav").find(".active").length) {
		var navAct = $(".mainnav").find(".active");
		var navArrow = $("<span/>").attr("id", "nav-arrow").appendTo(navAct);
		
		navArrow.getSvg({
			svgPath: "M 0 13 L 13 0 L 26 13 Z",
			svgWidth: 26,
			svgHeight: 13,
			svgFill: "#e7a614"
		});
	}
});

/**
 * Calendar
 */
(function($) {
	$.fn.calendar = function() {
		return this.each(function() {

			var $this = $(this);

			// Get nia dates as json
			var dates = new Array();
			$this.find("#nia-dates li").each(function(key, val) {
				dates[key] = $(this).data();	
			});

			var calNavWrapper = $this.find(".cal-nav-wrapper");

			var calNav = $("<ul/>").addClass("cal-nav").appendTo(calNavWrapper);
			var calListWrapper = $("<div/>").addClass("cal-list-wrapper").appendTo($this);
			var calList = $("<ul/>").addClass("cal-list").appendTo(calListWrapper);

			var daysLabels = ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'];

			var monthsLabels = ['Jan', 'Feb', 'Mar', 'Apr',
				'Mai', 'Jun', 'Jul', 'Aug', 'Sep',
				'Okt', 'Nov', 'Dez'];

			var timeMapping = ['06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23'];

			var datePos = new Object();
			datePos["0"] = "-15";
			datePos["5"] = "-13.2";
			datePos["10"] = "-11.6";
			datePos["15"] = "-10";
			datePos["20"] = "-8.4";
			datePos["25"] = "-6.6";
			datePos["30"] = "-5";
			datePos["35"] = "-3.4";
			datePos["40"] = "-1.6";
			datePos["45"] = "0";
			datePos["50"] = "1.6";
			datePos["55"] = "3.2";

			// Fill months nav
			var i = 0;
			while (i < monthsLabels.length) {
			
				var fillMonth = $("<li/>")
					.appendTo(calNav);

				$("<a/>")
					.attr("href", "#")
					.attr("data-month", i)
					.addClass("sel-month")
					.text(monthsLabels[i])
					.appendTo(fillMonth);

				i++;
			}

			var fillYear = $("<li/>").appendTo(calNav);

			var calYear = $('<a/>').attr("href", "#").addClass("cal-year").appendTo(fillYear);
		
			var calControls = $("<ul/>").addClass("cal-controls").appendTo(calNavWrapper);
			
			var prevLi = $("<li/>").addClass("cal-prev-list").appendTo(calControls);
			var calPrev = $("<a/>").attr("id", "cal-prev").attr("href", "#").appendTo(prevLi);

			calPrev.getSvg({
				svgPath: "M 0 7 L 8 0, M 0 7 L 8 14",
				svgWidth: 8,
				svgHeight: 14,
				svgStroke: "#ddd",
				svgStrokeWidth: 2
			});
			
			var resetLi = $("<li/>").addClass("cal-reset-list").appendTo(calControls);
			var calReset = $('<a/>').attr("href", "#").addClass("cal-reset").text("Heute").appendTo(resetLi);
	
			var nextLi = $("<li/>").addClass("cal-next-list").appendTo(calControls);
			var calNext = $("<a/>").attr("id", "cal-next").attr("href", "#").appendTo(nextLi);

			calNext.getSvg({
				svgPath: "M 0 0 L 8 7, M 8 7 L 0 14",
				svgWidth: 8,
				svgHeight: 14,
				svgStroke: "#ddd",
				svgStrokeWidth: 2
			});
			
			// Current date
			currentDate = new Date();
			var day = currentDate.getDate();
			var month = currentDate.getMonth();
			var year = currentDate.getFullYear();

			var currentDay = day;
			var currentMonth = month;
			var currentYear = year;

			// Days in month
			var getDaysInMonth = function(year, month) {
				var d = new Date(year, month + 1, 0);
				return d.getDate();
			}

			// Check for weekend
			var checkWeekend = function(month, year, day) {
				wd = new Date(year, month, day);
				return wd.getDay();
			}

			// Calendar loop
			var displayCal = function(year, month) {
		
				var calDays = "";
	
				// Months	
				for (i = 0; i <= 11; i++) {
	
					// Get days in month	
					var daysInMonth = getDaysInMonth(year, i);

					// Days
					for (j = 1; j <= daysInMonth; j++) {
						
						var weekDay = checkWeekend(i,year,j);
				
						var timeList = '<ul class="time-list">';

						// Time	
						for (k = 0; k < 18; k++) {
						
							// Dates
							var timeDispl = "";

							for (key in dates) {

								var nYear = dates[key]["fYear"].replace(/_/g, "");
								var nMonth = dates[key]["fMonth"].replace(/_/g, "");
								var nDay = dates[key]["fDay"].replace(/_/g, "");
								var nHour = dates[key]["fHour"].replace(/_/g, "");

								if (year == nYear && i == nMonth - 1 && j == nDay && timeMapping[k] == nHour) {

									var uuid = dates[key]["uuid"].replace(/_/g, "");
									var nMin = dates[key]["fMin"].replace(/_/g, "");
									var color = dates[key]["color"].replace(/_/g, "");

									var pointPos = Math.ceil(nMin / 5) * 5;

									if (pointPos > 55) {
										pointPos = "0";
									}

									pointPos = datePos[pointPos];		

									timeDispl += '<span class="n-date" data-uuid="' + uuid + '" style="background: ' + color + '; top: ' + pointPos + 'px;">' + nHour + '.' + nMin + '</span>';
								}
							}

							timeList += '<li class="' + (k == 17 ? 'last-time' : '') + (timeDispl != "" ? 'time-has-date' : '') +  '" data-time="' + timeMapping[k] + '">';
							timeList += timeDispl;
							timeList += '</li>';
						}
						
						timeList += '</ul>';
						
						var dayString = j + "";
						if (dayString.length < 2) {
							dayString = "0" + dayString;
						}
		
						calDays += '<li class="' + (weekDay == 0 || weekDay == 6 ? 'weekend ':'') + (j == 1 ? 'new-month ' : '') + (j == currentDay && i == currentMonth && year == currentYear ? 'today' : '') + '" data-month="' + i + '" data-year="' + year + '">'
							+ '<span class="day-text">' + daysLabels[weekDay] + '</span>'
							+ '<span class="day-number">' + dayString + '</span>';

						calDays += timeList;
						calDays += "</li>";
					}
				}

				calList.append(calDays);
			}

			// Initial, current month
			displayCal(year, month);
			calList.find('.new-month[data-month="' + month + '"]').addClass("active");

			var posLeft = calList.find('.new-month[data-month="' + month + '"]').position().left;
		
			calList.css("margin-left", -posLeft);	
			
			calNav.find('a[data-month="' + month + '"]').addClass("active-month");
			calYear.empty();
			calYear.append(year);

			var calOffset = 0;

			// Reset calendar
			calReset.click(function() {
				month = currentMonth;
				year = currentYear;
				
				calList.empty();

				displayCal(year, month);
				calList.find('.new-month[data-month="' + month + '"]').addClass("active");

				var posLeft = calList.find('.new-month[data-month="' + month + '"]').position().left;
			
				calList.css("margin-left", -posLeft);	
				
				calNav.find("a").removeClass("active-month");
				calNav.find('a[data-month="' + month + '"]').addClass("active-month");
				calYear.empty();
				calYear.append(year);
			});

			// Next month
			calNext.click(function() {

				if (! calList.is(":animated")) {
					
					hideDetail();

					var act = calList.find(".active");

					// Has next month
					if (act.nextAll(".new-month").length) {

						if (act.attr("data-month") == 11) {
							year += 1;
						}	

						var next = act.nextAll(".new-month");
					}
					// New year
					else {
						calList.empty();

						year += 1;
						displayCal(year, 0);
						
						calList.css("margin-left", "0px");
						var next = calList.find(".new-month:first");
					}

					act.removeClass("active");
					next.addClass("active");

					var posLeft = next.position().left;

					calList.animate({
						marginLeft: -posLeft
					});
					
					calNav.find("a").removeClass("active-month");
					calNav.find('a[data-month="' + next.attr("data-month") + '"]').addClass("active-month");
					calYear.empty();
					calYear.append(year);
				}
			});

			// Previous month
			calPrev.click(function() {
				
				if (! calList.is(":animated")) {
				
					hideDetail();
				
					var act = calList.find(".active");
					var prev = act.prevAll(".new-month:first");

					// Has prev month
					if (prev.length) {
						act.removeClass("active");
						prev.addClass("active");

						var posLeftDiff = act.position().left - prev.position().left + calOffset;
						var posLeft = "+=" + posLeftDiff;
						
						calList.animate({
							marginLeft: posLeft
						});
					}
					// Previous year
					else {
						calList.empty();

						year -= 1
						displayCal(year, 0);
					
						var prev = calList.find(".new-month:last");
	
						var lastDay = calList.find('li:last');
						var posLeft = lastDay.position().left - 960;
						calList.css("margin-left", "-" + posLeft + "px");

						act.removeClass("active");
						prev.addClass("active");
					}
				
					var dataMonth = parseInt(prev.attr("data-month"));
					calNav.find("a").removeClass("active-month");
					calNav.find('a[data-month="' +  dataMonth + '"]').addClass("active-month");
					calYear.empty();
					calYear.append(year);
				}
			});

			// Months navigation
			$this.find(".sel-month").click(function() {
				
				if (! calList.is(":animated")) {

					hideDetail();

					var dataMonth = $(this).attr("data-month");

					var act = calList.find('li.new-month[data-month="' + dataMonth + '"]');
					var posLeft = act.position().left;

					calList.animate({
						marginLeft: -posLeft
					});

					calList.find("li").removeClass("active");
					act.addClass("active");
					
					calNav.find("a").removeClass("active-month");
					$(this).addClass("active-month");
				}
			});

			// Single date
			$this.find(".n-date").live("click", function() {


				var nDate = $(this);
				var thisParent = $(this).parent();


				var hasDetail = false;

				if (thisParent.find(".nia-detail-wrapper").length) {
					hasDetail = true;
				}
			
				hideDetail();

				if (! hasDetail) {

					var hideInterval = setInterval(function() {
						if (! $this.find(".nia-detail-wrapper").is(":animated")) {

							clearInterval(hideInterval);
				
							thisParent.addClass("time-detail-active");

							var uuid = nDate.attr("data-uuid");

							var posTop = thisParent.position().top + 1;

							var dateDetailWrapper = $("<div/>")
								.addClass("nia-detail-wrapper")
								.attr("data-uuid", uuid)
								.appendTo(thisParent);

							dateDetailWrapper.css("top", -posTop);

							var req = {"uuid": uuid};

							dateDetailWrapper.load(ctx + "/nia-calendar-detail?uuid=" + uuid, function() {
								
								var posLeft = thisParent.position().left;
								var actPosLeft = $this.find(".new-month.active").position().left;

								posLeft = posLeft - actPosLeft;
								posLeft = 991 - posLeft - 31;

								if (posLeft < 415) {

									var dateMonth = thisParent.parent(".time-list").parent().attr("data-month");

									calOffset = 415 - posLeft;

									if (dateMonth < 11) {
										calOffset += 33;
									}

									calList.animate({
										marginLeft: "-=" + calOffset
									});
								}
							
								dateDetailWrapper.animate({
									width: 415
								}, 400);

								// Call form plugin
								var form = $(this).find("form");
								form.niaForm();

								// Close button
								var niaClose = $("<span/>").attr("id", "nia-close").appendTo($(this)).hide();
								niaClose.fadeIn(400);
								
								niaClose.getSvg({
									svgPath: "M 0 0 L 20 20, M 20 0 L 0 20",
									svgWidth: 20,
									svgHeight: 20,
									svgStroke: "#ddd",
									svgStrokeWidth: 2
								});

								niaClose.click(function() {
									hideDetail();
								}); 
							});
						}
					}, 1);
				}
			});

			// Hide detail
			var hideDetail = function() {
				
				$this.find("#nia-close").fadeOut(100);

				$this.find(".nia-detail-wrapper").animate({
					width: 0
				}, 400, function() {
					
					$this.find(".time-list li").removeClass("time-detail-active");
					$(this).remove();
				});

				if (calOffset > 0) {
					calList.animate({
						marginLeft: "+=" + calOffset
					});
				}

				calOffset = 0;
			}
		});
	}
})(jQuery);

/**
 * Nia course form
 */ 
(function($) {
	$.fn.niaForm = function() {
		
		return this.each(function() {
			
			var $this = $(this);

			$this.submit(function() {

				var valid = true;
				
				$this.find('.notempty').each(function() {
					if ($.trim($(this).val()) == '') {
						$(this).addClass('error');
						valid = false;
					}
					else {
						$(this).removeClass('error');
					}
				});
				
				$this.find('.email').each(function() {
					if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test($(this).val())) {
						$(this).removeClass('error');
					}
					else {
						$(this).addClass('error');
						valid = false;
					}
				});

				$this.find(".checkbox input").each(function() {
					if (! $(this).is(":checked")) {
						$(this).parent().find("label").addClass('error');
						valid = false;
					}
					else {
						$(this).parent().find("label").removeClass('error');
					}
				});
				
				if (valid) {

					var formLoading = $("<div/>").addClass("form-loading").insertBefore($this);

					var formdata = $this.serialize();
					
					$.post(ctx + '/nia-send-form', formdata, function(data) {

						formLoading.remove();

						if (data["status"] == "send") {
							var msgTitle = data["sTitle"];
							var msgText = data["sText"];
						
							var msgElem = $("<div/>").addClass("nia-form-message");
							msgElem.append("<h4>" + msgTitle + "</h4>");
							msgElem.append(msgText);

							msgElem.insertAfter($this).hide();

							$this.fadeOut();
							msgElem.fadeIn();
						}
					});
				}
					
				return false;	
			});
		});
	}
})(jQuery);

/**
 * Returns raphael svg
 */
(function($) {
	$.fn.getSvg = function(options) {
		return this.each(function() {
			
			var $this = $(this);
			var opts = options;

			var svgPath = opts.svgPath;
			var svgFill = opts.svgFill;
			var svgWidth = opts.svgWidth;
			var svgHeight = opts.svgHeight;
			var svgScale = opts.svgScale;

			var svgStroke = opts.svgStroke;
			var svgStrokeWidth = opts.svgStrokeWidth;

			if (! svgStroke) {
				svgStroke = "none";
			}

			if (! svgStrokeWidth) {
				svgStrokeWidth = "0";
			}

			var id = $this.attr("id");
							
			var svg = Raphael(id, svgWidth, svgHeight);
			
			svg.path(svgPath).attr({
				fill: svgFill, 
				stroke: svgStroke,
				"stroke-width": svgStrokeWidth,
				scale: svgScale
			});
		});
	}
})(jQuery);

/**
 * Slideshow
 */
(function($) {
	$.fn.slideshow = function(options) {
		return this.each(function() {
			
			var $this = $(this);
			var opts = options;

			var showFb = opts.showFb;

			if (! showFb) {
				var slNav = $("<ul/>").addClass("sl-nav").appendTo($this);
			}

			var slInterval = setInterval("slAutoplay()", 4000);
			
			var slider = $this.find(".slider");
			var imgs = slider.find("img");
			
			slider.find("img:first").addClass("act");

			var maxWidth = imgs.length * 991;

			// DMS image slider
			slAutoplay = function() {

			
				var left = parseInt(slider.css('margin-left')) * -1;

				if (left == (maxWidth - 991)) {
					left = 0;
				}
				else {
					left = "-=" + 991;
				}
				
				slider.animate({
					marginLeft: left
				});

				var act = slider.find(".act");
				
				if (act.next().length) {
					var next = act.next();
				}
				else {
					var next = slider.find("img:first");
				}

				act.removeClass("act");
				next.addClass("act");
			
				if (! showFb) {
					slNav.find("li").removeClass("act");
					
					var idx = imgs.index(next);

					slNav.find('li[data-item="' + idx + '"]').addClass("act");
				}
			}

			// Initialize facebook
			if (showFb) {
				var slFb = $("<div/>").addClass("facebook").appendTo($this);
				slFb.append('<div class="fb-message-wrapper"></div>');
				slFb.append('<div class="fb-footer"><img src="' + ctx + '/docroot/nia/images/facebook.png" alt="facebook"/></div>');
				slFb.facebook({
					//page: "chucksiehtalles"
					page: "220088521342351",
					linkToPage: "http://www.facebook.com/pages/cecilebewegtch/220088521342351"
				});
			}
			// Show navigation
			else {
				imgs.each(function(key, val) {
					var navItem = $("<li/>")
						.attr("data-item", key)
						.text(key)
						.click(function() {
						
							clearInterval(slInterval);

							posLeft = key * 991;

							slider.animate({
								marginLeft: -posLeft
							});

							slNav.find("li").removeClass("act");
							$(this).addClass("act");			

						})
						.appendTo(slNav);
				});

				slNav.find("li:first").addClass("act");
			}
		});
	}
})(jQuery);

/**
 * Facebook stream
 */
(function($) {
	$.fn.facebook = function(options) {
		return this.each(function() {
			
			var $this = $(this);
			var opts = options;

			var fbPage = opts.page;
			var fbLinkToPage = opts.linkToPage;

			var fbUrl = "https://graph.facebook.com/" + fbPage + "/posts?access_token=127951660617356|697f18fbc707a323d0e73563.1-1188231146|akCWBpecpT5ChfB_9QlSFTNHxJE&callback=?";

			var fbFooter = $this.find(".fb-footer");
			var fbMsgWrapper = $this.find(".fb-message-wrapper");
			var fbDateWrapper = $("<div/>").addClass("fb-date-wrapper").appendTo(fbFooter);
			var fbNav = $("<div/>").addClass("fb-nav").appendTo(fbFooter);

			var fbArrow = $("<div/>").attr("id", "fb-arrow").appendTo($this);
			
			fbArrow.getSvg({
				svgPath: "M 0 0 L 61 0 L 0 61 Z",
				svgWidth: 61,
				svgHeight: 61,
				svgFill: "#e7a614"
			});

			$.getJSON(fbUrl, { 
			format: "json" },
			function(data) {

				$.each(data, function(key, value){

					if (key == "data") {
						$.each(data[key], function(key, value){

							if (value["message"]) {
								var message = value["message"];
							}
							else if (value["name"]) {
								var message = value["name"];
							}
							else {
								var message = value["from"]["name"];
							}

							var preview = message.substring(0, 124);
							preview = '"' + preview + '..."';
							preview = $("<a/>")
								.attr("href", fbLinkToPage)
								.attr("target", "_blank")
								.text(preview);

							var postDate = value["created_time"].substring(0, 19);

							var fbMsg = $("<div/>")
								.addClass("fb-message")
								.html(preview)
								.attr("data-msg-nr", key + 1)
								.appendTo(fbMsgWrapper);
			
							var fbDate = $("<div/>")
								.addClass("fb-date")
								.attr("data-date", postDate)
								.appendTo(fbMsg)
								.hide()
								.prettyDate();

							var fbNavItem = $("<span/>")
								.addClass("fb-nav-item")
								.text(key + 1)
								.attr("data-nav-nr", key + 1)
								.click(function() {

									clearInterval(interval);

									fbMsgWrapper.find(".fb-message").fadeOut(200);
									fbMsgWrapper.find(".fb-message").removeClass("act");
									
									fbNav.find(".fb-nav-item").removeClass("act");
									
									var itemNr = $(this).attr("data-nav-nr");
									var nextMsg = fbMsgWrapper.find('.fb-message[data-msg-nr="' + itemNr + '"]');
									
									nextMsg.addClass("act");
									nextMsg.fadeIn(200);

									fbDateWrapper.empty();
									nextMsg.find(".fb-date").clone().appendTo(fbDateWrapper).show();

									$(this).addClass("act");
								})
								.appendTo(fbNav)
								

							if (key == 4) {
								return false;
							}
						});
					}
				});
				
				var firstMsg = fbMsgWrapper.find(".fb-message:first").show();
				firstMsg.addClass("act");
				firstMsg.find(".fb-date").clone().appendTo(fbDateWrapper).show();

				fbNav.find(".fb-nav-item:first").addClass("act");

				// Call autoplay function
				var interval = setInterval("fbAutoplay()", 6000);
			});

			fbAutoplay = function() {
				var actMsg = fbMsgWrapper.find(".act");

				actMsg.fadeOut(200);
				actMsg.removeClass("act");

				if (actMsg.next().length) {
					var nextMsg = actMsg.next();
				}
				else {
					var nextMsg = fbMsgWrapper.find(".fb-message:first");
				}

				nextMsg.fadeIn(200);
				nextMsg.addClass("act");
				
				fbDateWrapper.empty();
				nextMsg.find(".fb-date").clone().appendTo(fbDateWrapper).show();

				var itemNr = nextMsg.attr("data-msg-nr");

				fbNav.find(".fb-nav-item").removeClass("act");
				fbNav.find('.fb-nav-item[data-nav-nr="' + itemNr + '"]').addClass("act");
			}
		});
	}
})(jQuery);

