Browser.Engines.trident = function(){
	return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? ((Browser.Features.query) ? 6 : 5) : 4);
}

window.addEvent('domready',function()
{
	prepareCalendar();	
});

function prepareCalendar()
{
	var ie = Browser.Engines.trident();
		
	if (ie && ie < 6)
	{
		fixCalendarHeight();
		window.addEvent('resize',fixCalendarHeight)
	}
	
	var events = $$('.calendar .event');
	events.each(function(ev){
		ev.addEvents(
		{
			'mouseover' : function(e)
			{
				events.tween('opacity',0.1);
				ev.get('class').match(/\bevent-[0-9]+\b/).each(function(cl)
				{
					$$('.'+cl+' .details').setStyles({'display':'block'});
					$$('.'+cl).tween('opacity',2);					
				});
			},
			'mouseout'	: function(e)
			{
				$$('.event .details').setStyles({'display':'none'});
				var sel = [];
				
				$$('#catergory-filters input').each(function(el)
				{
					if (el.checked)
						sel.include('.'+(el.get('id').replace('filter-','')));
				});
				$$(sel).tween('opacity',1);
			}
		});
	});
	var foo = $$('.calendar .filters div');
	if (foo)
	{
		foo.addEvents(
		{
			'click': function(event)
			{
				if (event) event.stop();
				var target = $(event.target);
				filterCats(target);
			}
		});
		var sel = [], barr = foo.getElements('input').shift();
		barr = barr ? barr : [];
		barr.each(function(el)
		{
			if (!el.checked)
				sel.include('.'+(el.get('id').replace('filter-','')));
		});
		$$(sel).tween('opacity',0.2);
	}
	
	var xhrCal = function ()
	{
		var xcalendar = $$('.calendar').shift();
		if (xcalendar)
		{
			var loader;
			var next = $$('.monthCtrl.next', '.monthCtrl.previous');
			
			xcalendar.getParent().setStyle('position','relative');
			next.each(function(a)
			{
				var rqst = new Request({
					url:'/inc/modules/events/xhrRequest.php',
					method: 'get',
					link: 'ignore',
					onSuccess: function (text)
					{
						var cal = $$('.calendar').shift();
						var ht  = new Element('div', {html: text});
						cal.empty();
						cal.adopt(ht.getChildren());
						loader.destroy();
						prepareCalendar();
					}
				});
				var data = a.get('href').substr(a.get('href').indexOf('?')+1);
				
				a.addEvent('click',function(e)
				{
					e.stop();
					loader = new Element('div', {id: 'xhr-loading'}).setStyle('opacity',0.5).inject(xcalendar, 'after');
					rqst.send('tpl=ct&'+data);
				});
			});
		}
	}
	xhrCal();
}

function filterCats(target)
{
	if (target.hasClass('filter'))
	{
		var cat    = target.get('tag') == 'label' ? target.get('for') : target.get('id'), el = $(cat);
		var events = $$('.'+(cat.replace('filter-','')));
		switch (el.checked)
		{
			case true:
				el.checked = false;
				events.tween('opacity',0.2);
				break;
			case false:
				el.checked = true;
				events.tween('opacity',1);
				break;
		}
	}
}

fixCalendarHeight = function ()
{
	$$('.calendar').each(function(el){
		var ch = el.getChildren(), h = 0, d;
		ch.each(function(c)
		{
			var s = c.getSize();
			if (!c.hasClass('dates'))
				h += s.y;
			else
				d = c;
		});
		var s = el.getSize();
		d.setStyle('height',s.y-h);
	});
}
