﻿var WpcCalendar;
(function() {
	WpcCalendar = function() {
		var loadTimer = null;

		var initDatePicker = function() {
			$(".wpc-calendar-selector").addClass("hide-controls");
			$(".wpc-calendar-selector").after("<div id='WPC-Datepicker'/>");
			
			var jsonUrl = document.location.href + "?EnabledDates=True";
			$.ajax({
				type: "GET",
				url: jsonUrl,
				contentType: "application/json; charset=utf-8",
				dataType: "json",
				success: loadSuccess,
				error: loadError
			});
 		};
		
		var loadSuccess = function(data) {
			var elementsString = getElementsString();
			var formElements = toJSON(elementsString);
			var opts = {
				formElements: formElements,
				staticPos:true,
				positioned:"WPC-Datepicker",
				enabledDates: data,
				finalOpacity:20,
				callbackFunctions: {
					"dateset":[getDate]
				}
			};
			datePickerController.createDatePicker(opts);
		};
		
		var getElementsString = function() {
			var yearId = $(".datepicker-year").attr("id");
			var monthId = $(".datepicker-month").attr("id");
			var dayId = $(".datepicker-day").attr("id");
			if (yearId == null || monthId == null || dayId == null) {
				loadError();
				return;
			}
			return '{"' + yearId + '" : "y", "' + monthId + '" : "m", "' + dayId + '" : "j"}';
		};
		
		var loadError = function(xhr, textStatus, errorThrown) {
			$(".wpc-calendar-selector").removeClass("hide-controls");
			$("#WPC-Datepicker").remove();
		};
		
		var getDate = function(info) {
			if (info.yyyy == null || info.mm == null || info.dd == null) return;
			$(".events-container").fadeOut(300);
			clearTimeout(loadTimer);
			loadTimer = setTimeout(function() {
				var eventsUrl = document.location.href + "?EventsFor=" + info.yyyy + "-" + info.mm + "-" + info.dd;
				$.get(eventsUrl, getDateSuccess);
			}, 300);
		};
		
		var getDateSuccess = function(data) {
			$(".events-container").html($(data).find(".events-container").html());
			$(".events-container").fadeIn(300);
		};
		
		var toJSON = function(jsonString) {
			if (typeof JSON === "object" && JSON.parse) {
				return JSON.parse(jsonString);
			} else {
				return (new Function("return " + jsonString))();
			}
		};
		
		return {
			initDatePicker: initDatePicker
		};
	}();
})();
$(document).ready(WpcCalendar.initDatePicker);
