﻿var EventCalendarContentLoader = Class.create({
	initialize: function(params)
	{
		this.isEmployee = params.isEmployee;
		this.tag = params.tag;
	
		this.dayLoaded = false;
		this.weekLoaded = false;
		this.monthLoaded = false;
		this.twoweekLoaded = false;
		this.currentWeekStart = null;
		this.currentTwoWeekStart = null;
		this.currentDayStart = null;
		this.currentMonthStart = null;
		this.eventCal = null;
		
	},
	resetStatus: function()
	{
		this.dayLoaded = false;
		this.weekLoaded = false;
		this.monthLoaded = false;
		this.twoweekLoaded = false;
	},
	loadDayContent: function(startDate)
	{
		//if (!this.dayLoaded && this.currentDayStart != startDate)
		//{
			this.getEvents({ 
				day: DateHelper.formatForQuery(startDate),
				container: 'day-events',
				view: 'day'
			});
			this.dayLoaded = true;
			this.currentDayStart = startDate;
		//}
	},
	loadWeekContent: function(startDate)
	{
		//if (!this.weekLoaded && this.currentWeekStart != startDate)
		//{
			this.getEvents({ 
				day: DateHelper.formatForQuery(startDate),
				container: 'week-events',
				view: 'week'
			});
			this.weekLoaded = true;
			this.currentWeekStart = startDate;
		//}
	},
	loadTwoWeekContent: function(startDate)
	{
		//if (!this.twoweekLoaded && this.currentTwoWeekStart != startDate)
		//{
			this.getEvents({ 
				day: DateHelper.formatForQuery(startDate),
				container: 'twoweek-events',
				view: 'twoweek'
			});
			this.twoweekLoaded = true;
			this.currentTwoWeekStart = startDate;
		//}
	},
	loadMonthContent: function(startDate)
	{
		//if (!this.monthLoaded && this.currentMonthStart != startDate.getMonth())
		//{
		if (this.getPublicChecked() || this.getInternalChecked())
		{
			this.currentMonthStart = startDate.getMonth();
			if (this.eventCal == null)
			{
				this.initSCal(startDate);	
			}
			else
			{
				this.eventCal.setCurrentDate(startDate);
			}
			
			
			var base = this;
			new Ajax.Request('/assets/ajax/handlers/events.aspx', {
				method: 'get',
				parameters: 
				{
					view: 'month-counts',
					year: startDate.getFullYear(),
					month: (startDate.getMonth() + 1),
					tag: this.tag,
					'public': this.getPublicChecked(),
					'internal': this.getInternalChecked(),
					'category': this.getCategory()
				},
				onSuccess: function(transport)
				{				
					base.loadEventCounts(eval(transport.responseText), startDate);
				},
				onFailure: function(transport)
				{
					debug(transport.responseText);
				}
			});
			
			this.monthLoaded = true;
		}
	},
	initSCal: function(startDate)
	{
		this.eventCal = new scal('event_calendar', updatemonth,
		{
			titleformat: 'mmmm yyyy',
			closebutton: 'X',
			dayheadlength: 2,
			weekdaystart: 0,
			oncalchange: updatemonth,
			year: startDate.getFullYear(),
			month: startDate.getMonth() + 1,
			day: startDate.getDate()
		});
	},
	loadEventCounts: function(counts, startDate)
	{
		var day = new Date();
		var calEl;
		var eventAnc;
		var base = this;
		
		counts.each(function(cnt)
		{
			if (cnt.count > 0)
			{
				day = new Date(startDate.getFullYear(), startDate.getMonth(), cnt.day);
				calEl = new CalendarEventDetail(base.eventCal.getElementByDate(day), cnt.count, day);
			}
		});
	},
	getCategory: function()
	{
		var category = '';
		if ($('ddlCategory'))
		{
			category = $F('ddlCategory');
		}
		return category;
	},
	getPublicChecked: function()
	{
		if (!this.isEmployee)
		{
			return true;
		}
		else if ($('cbPublic'))
		{
			return $('cbPublic').checked;
		}
		else
		{
			return true;
		}
	},
	getInternalChecked: function()
	{
		if (!this.isEmployee)
		{
			return false;
		}
		else if ($('cbInternal'))
		{
			return $('cbInternal').checked;
		}
		else
		{
			return true;
		}
	},
	getEvents: function(params)
	{
		if (this.getPublicChecked() || this.getInternalChecked())
		{
				
			params = Object.extend(params, 
			{
				'tag': this.tag,
				'public': this.getPublicChecked(),
				'internal': this.getInternalChecked(),
				'category': this.getCategory()
			});
			
			$(params.container).hide();
			new Effect.Appear('calloading', {duration: .4});
			//$('calloading').show();
			
			new Ajax.Updater(params.container, '/assets/ajax/handlers/events.aspx', 
			{
				method: 'get',
				parameters: params,
				onComplete: function(transport)
				{ 	
					new Effect.Fade('calloading', {duration: .2});
					//new Effect.Appear($(params.container), {duration: .4});
					//$('calloading').hide();
					$(params.container).show();
					$(params.container).select('dt').each(function(dt)
					{
						new EventDetail(dt);
						
						
					});
					base.manageTags(params.container);
					
					
				},
				onFailure: function(transport)
				{ 	
					debug(transport.responseText);
				}
			});
		}
	},
	manageTags: function(container)
	{
		var currentTag = this.tag;
		$(container).select('ul.tag-chain li').each(function(tag)
		{
			if (currentTag == tag.select('a span')[0].innerHTML)
			{
				tag.addClassName('highlight');
			}			
			Event.observe(tag.select('a')[0], 'click', function(ev)
			{
				Event.stop(ev);
				bogusCal.setNewTag(this.firstChild.innerHTML); 
			});
			
		});
	}
});