/*
	Hello there.
*/
	GJF.Class.create("GJF.Controls.Calendar", "GJF.Controls.Control", 
		function(config) {
			var thisContext = this;
			this.events = config.events;
			GJF.Controls.Control.call(this, config);
			$(document).ready(function(){
			    thisContext.initialize();
			});
		}, 
		{
			calendar: {},
			days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
			daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
			months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],

			
			getMonthLength: function(year, month) {
				if (month == 1) { // 
					if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
						// Leap year
						return 29;
					}
				} else {
					return this.daysInMonth[month];
				}
			},
			
			getEventDayHtml: function(date, seatsOpen) {
				var html = date;
				var pluralization = seatsOpen == 1 ? "" : "s";
				html += '<div class="SeatsOpen">';
				html +=	'<span class="Seats">' + seatsOpen + '</span>';
				html +=	' seat' + pluralization + ' left</div>';
				return html;
			},
			
			getHtml: function(year, month) {
				var html = '<div id="CalendarMonth">';
				html += '<div class="MonthName">' + this.months[month] + '</div>';
				html += '</div>';
				html += '<div id="MonthGrid">';
				html +=	this.getHtmlTable(year, month);
				html += '</div>';
				return html;
			},
			
			getHtmlTable: function(year, month) {
				var html = '<table width="100%" cellpadding="0" cellspacing="0" border="0">';
				html += this.getHtmlTableHead();
				html += this.getHtmlTableBody(year, month);
				html += '</table>';
				return html;
			},
			
			getHtmlTableBody: function(year, month) {
				var html = "";
				var d = day = 0;
				var monthLength = this.getMonthLength(year, month);
				for (i=0; i<6; i++) {
					html += "<tr>";
						for (j=0; j<7; j++) {	
							var tdClass = "";
							var tdId = "";
							if (d < this.calendar[year + "_" + month].startingDate || (d-this.calendar[year + "_" + month].startingDate) >= monthLength) {
								tdClass = "Dim";
								cornerText = "&nbsp;";
							} else {
								day++;
								tdId = " id='" + year + "_" + month + "_" + day + "'";
								cornerText = day;
							}
							html += "<td class='" + tdClass + "' " + tdId +">"
							html += this.getTodayClass(year, month, day, cornerText);
							html += "</td>";
							d++;
						}
					html += "</tr>";
				}
				return html;
			},
			
			getHtmlTableHead: function() {
				var html = '<thead>';
				html += '<tr>';
				html += '<th>S</th>';
				html += '<th>M</th>';
				html += '<th>T</th>';
				html += '<th>W</th>';
				html += '<th>T</th>';
				html += '<th>F</th>';
				html += '<th>S</th>';
				html += '</tr>';
				html += '</thead>';
				return html;
			},
			
			getParsedDate: function(date) {
				var dateArray = date.split(" ");
				return dateArray[1] + " " + dateArray[2] + " " + dateArray[5];
			},
			
			getTodayClass: function(year, month, day, text) {
				if (text != "&nbsp;") {
					var currentDate = new Date();
					var currentYear = currentDate.getFullYear();
					var currentMonth = currentDate.getMonth();
					var currentDay = currentDate.getDate();
					if (year == currentYear && month == currentMonth && day == currentDay) {
						return "<span class='Today'>" + text +"</span>";
					}
					return text;
				}
				return "&nbsp";
			},
			
			initialize: function() {
				var nextEventDate = new Date(this.getParsedDate(this.events[0]['time']));
				this.setCalendarDays(nextEventDate.getFullYear(), nextEventDate.getMonth());
				this.writeHtml(nextEventDate.getFullYear(), nextEventDate.getMonth());
			},

			setCalendarDays: function(year, month) {
				var firstDay = new Date(year, month, 1);
				this.calendar[year + "_" + month] = {
					startingDate: firstDay.getDay(),
				};
			},
			
			setEventDate: function(year, month, day, event) {
				var seatsOpen = event['rsvpable'] == "OPEN" ? event['rsvp_limit'] - event['rsvpcount'] : 0;
				$("#" + year + "_" + month + "_" + day).html(this.getEventDayHtml(day, seatsOpen));
				if (seatsOpen != 0) {
					$("#" + year + "_" + month + "_" + day).addClass("Vacancy");
					$("#" + year + "_" + month + "_" + day).click(function() {
						window.location = "http://www.meetup.com/Tel-Aviv-Nightowls";
					});
				}
			},
			
			setEventDates: function() {
				for (var i=0; i < this.events.length; i++) {
					var eventDate = new Date(this.getParsedDate(this.events[i]['time']));
					this.setEventDate(eventDate.getFullYear(), eventDate.getMonth(), eventDate.getDate(), this.events[i]);
				}
			},
			
			writeHtml: function(year, month) {
				$("#Calendar").html(this.getHtml(year, month));
				this.setEventDates();
			}
			
		}
	);

