/******** Change Log ***************
Date: 3-Jun-2011
Author: Jedediah Holller
Notes:
Added in check to determine whether jQuery is already loaded.
Previously, it would load a copy of jQuery whether it had already been loaded or not,
which would cause errors. Now, if jQuery has already been loaded, then it will skip loading
***********************************/

var SiteFlow = {
	extend: function(obj1, obj2) {
		var obj3 = {};
		for(var attr in obj1) {
			obj3[attr] = obj1[attr];
		}
		for(var attr in obj2) {
			obj3[attr] = obj2[attr];
		}
		return obj3;
	}
};

SiteFlow.events = {
	settings: {
		enable_calendar: true,
		show_calendar: true,
		layout: 'default',
		enable_featured: false,
		enable_facebook: false,
		enable_twitter: false,
		cal_event_color: "#3366cc",
		cal_event_border_color: "#3366cc",
		cal_event_text_color: "#fff",
		cal_today_color: "#ffffcc",
		cal_border_color: "#ccc",
		jsonFeed: "",		//REQUIRED
		full_calendar_js_path: "js/fullcalendar.min.js"
	},
	data: "",
	toggleCalendar: function() {
		$("#calendar").toggle();
	},
	init: function(params) {
		this.settings = SiteFlow.extend(this.settings, params);
		$("#events-container").text("There are currently no events listed");
		
		$("input[name=hide-cal]").css("display", "none");
		this.render();
	},
	loadJquery: function() {
		if(window.$ === undefined) {
			var e = document.createElement('script');
			e.type = "text/javascript";
			e.src = "../jquerycdn/jquery-1.6.1.min.js";
			e.onload = e.onreadystatechange = function() {
				if(!this.readyState == "loaded") {
					return;
				} else {
					SiteFlow.events.loadJqueryTmpl();
				}
			};
			document.getElementsByTagName('head')[0].appendChild(e);
		} else {
			SiteFlow.events.loadJqueryTmpl();
		}
	},
	loadJqueryTmpl: function() {
		var e = document.createElement('script');
		e.type = "text/javascript";
		e.src = "../jquerycdn/jquery.tmpl.min.js";
		e.onload = e.onreadystatechange = function() {
			if(!this.readyState == "loaded") {
				return;
			} else {
				SiteFlow.events.loadFullCalendar();
			}
		};
		document.getElementsByTagName('head')[0].appendChild(e);
	},
	loadFullCalendar: function() {
		var e = document.createElement('script');
		e.type = "text/javascript";
		e.src = SiteFlow.events.settings.full_calendar_js_path;
		e.onload = e.onreadystatechange = function() {
			if(!this.readyState == "loaded") {
				return;
			} else {
				SiteFlow.events.render();
			}
		};
		document.getElementsByTagName('head')[0].appendChild(e);
	},
	render: function() {


					
		var animationAnchor = document.createElement('div');
		animationAnchor.id = "animation-anchor";
		document.getElementById('events-container').appendChild(animationAnchor);
		$("#animation-anchor").css("margin-top", "50px");
		if(SiteFlow.events.settings.layout == "singleColumn") {
			var container_width = $("#events-container").width();
			var adjusted_width = container_width - 20;
			$("#right-col").css("display", "none");
			$("#left-col").css("width", adjusted_width);
		}
		

		
		//TODO:
		//Move all this out of the $.getJSON function
		//it's in here because otherwise the json data isn't available in the global scope
		$.getJSON(SiteFlow.events.settings.json_feed, function(data) {
			$(".events").empty();
			$("input[name=hide-cal]").fadeIn(10);
			//Make a local copy of the settings
			var s = SiteFlow.events.settings;
			//Render the first event
			data[0].fromCalendar = false;
			$("#events-template").tmpl(data[0]).appendTo("#events-container");
			
			

			//Render the calendar, if it's enabled
			if(1==1) {


			
				$("input[name=hide-cal]").click(function() {
					$("#calendar").toggle("slow");
				});
				$("#calendar").fullCalendar({
					editable: false,
					events: data,
					eventClick: function(event) {
						event.fromCalendar = true;
						$("#events-container").empty();
						$("#events-template").tmpl(event).appendTo("#events-container");
						$("html, body").animate({
							scrollTop: $("#events-container").offset().top
						}, "slow");
						$("#events").css("display", "none");
						$("#events").fadeIn(3);
					}
				});
				
						
				$("#calendar").css("margin-bottom", "25px");
				//Change the event colors
				$(".fc-event-skin").css({
					"background-color" : s.cal_event_color,
					"color" : s.cal_event_text_color,
					"border-color" : s.cal_event_border_color
				});
				//Change the calendar colors
				$(".fc-widget-header, .fc-widget-content").css({
					"border-color" : s.cal_border_color
				});
				$(".fc-state-hilight").css("background-color", s.cal_today_color);
				
				//Now, hide the calendar, if the settings require
				if(s.hide_calendar) {
					$("#calendar").css("display", "none");
				}
			} else {
				$("input[name=hide-cal]").css("display", "none");
			}
		});
	}
};

var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var dayNames = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
var dayNames2 = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

function printDay(date, source) {
	var d = new Date(date);
	if(isNaN(d) || d == null || d == undefined) return date;
	if(source) {
		return dayNames2[d.getDay()];
	} else {
		return dayNames[d.getDay()];
	}
}

function printDate(date, source) {
	var d = new Date(date);
	if(isNaN(d) || d === null || d === undefined) {
		return "";
	}
	if(source) {
		return d.getDate();
	} else {
		return d.getDate() + 1;
	}
}

function printMonth(date, source) {
	var d = new Date(date);
	if(isNaN(d) || d == null || d == undefined) return "";
	var m = d.getMonth();
	return monthNames[m];
}
