var oAgendaScroller = false;
var sActiveTab = 'pride-tab-all';
var sViewType = false;
var o_viewtype_cookie = false;

// ====== My Agenda ==============
var AddToMyAgenda = function(oLinkElement, iEventdateID, iEventID){
	new Request.JSON({
		'url': '/ajax/agenda/toggleevent/' + iEventdateID + '/',
		'method': 'get',
		'onComplete': function(oResponse){
			if ($type(oResponse) === false || oResponse.result != 'ok'){
				return;
			}
			oLinkElement.destroy();
			
			if ($('farright-' + iEventdateID + '-' + iEventID)){
				$('farright-' + iEventdateID + '-' + iEventID).getElement('div.mid').toggleClass('active');
			}

			if ($('farleft-' + iEventdateID + '-' + iEventID)){
				$('farleft-' + iEventdateID + '-' + iEventID).getElement('div.mid').toggleClass('active');
			}
			
			if ($('event-' + iEventdateID + '-' + iEventID)){
				$('event-' + iEventdateID + '-' + iEventID).getElement('div.mid').toggleClass('active');
			}
			
			if ($('listevent-' + iEventdateID + '-' + iEventID)){
				$('listevent-' + iEventdateID + '-' + iEventID).toggleClass('active');
			}
			$('ma-info').set('text', oResponse.data.itemcount);
		}
	}).send();
};

var ToggleMyAgenda = function(sTimeunitID){
	var i_eventdateid = sTimeunitID.replace(/^([\w]*)-([\d]*)-([\d]*)$/, '$2');
	var i_eventid = sTimeunitID.replace(/^([\w]*)-([\d]*)-([\d]*)$/, '$3');
	
	new Request.JSON({
		'url': '/ajax/agenda/toggleevent/' + i_eventdateid + '/',
		'method': 'get',
		'onComplete': function(oResponse){
			if ($type(oResponse) === false || oResponse.result != 'ok'){
				return;
			}
			
			if (sViewType == 'list'){
				$('listevent-' + i_eventdateid + '-' + i_eventid).toggleClass('active');
			} else {
				$('farright-' + i_eventdateid + '-' + i_eventid).getElement('div.mid').toggleClass('active');
				$('farleft-' + i_eventdateid + '-' + i_eventid).getElement('div.mid').toggleClass('active');
				$('event-' + i_eventdateid + '-' + i_eventid).getElement('div.mid').toggleClass('active');
			}
			
			$('ma-info').set('text', oResponse.data.itemcount);
			
			if (sActiveTab == 'pride-tab-my'){
				ShowTab(sActiveTab);
			}
		}
	}).send();
};

var SetMyAgendaItems = function(){
	var o_req = new Request.JSON({
		'url': '/ajax/agenda/getmyagenda/',
		'method': 'get',
		'onComplete': function(oResponse){
			if ($type(oResponse) === false || oResponse.result != 'ok' 
				|| $type(oResponse.data) === false)
			{
				return;
			}
			
			if (sViewType == 'list'){
				oResponse.data.each(function(a_event){
					if ($('listevent-' + a_event.eventdateid + '-' + a_event.eventid)){
						$('listevent-' + a_event.eventdateid + '-' + a_event.eventid).toggleClass('active');
					}
				});
			} else {
				oResponse.data.each(function(a_event){
					if ($('event-' + a_event.eventdateid + '-' + a_event.eventid)){
						$('event-' + a_event.eventdateid + '-' + a_event.eventid).getElement('div.mid').toggleClass('active');
						$('farright-' + a_event.eventdateid + '-' + a_event.eventid).getElement('div.mid').toggleClass('active');
						$('farleft-' + a_event.eventdateid + '-' + a_event.eventid).getElement('div.mid').toggleClass('active');
					}
				});
			}
			$('ma-info').set('text', oResponse.data.length);
		}
	}).send();
};

// ====== Tabs ==============
var LoadingTab = function(){
	if ($('waiting').hasClass('hidden') == false){
		var fxOverlay = new Fx.Tween($('waiting'), {property: "opacity", duration: 500});
		fxOverlay.set(0.8).start(0).chain(function(){
			$('agendacontainer').set({'style':'height:auto'});
			$('agendabody').removeClass('hidden');
			$('waiting').addClass('hidden');
		});
	} else {
		var fxOverlay = new Fx.Tween($('waiting'), {property: "opacity", duration: 500});
		fxOverlay.set(0).start(0.8);
		$('waiting').removeClass('hidden');
		$('agendacontainer').set({'style':'height:400px'});
		$('agendabody').addClass('hidden');
	}
};

var ShowTab = function(sTabID){
//	if (sTabID != 'pride-tab-all'){
//		sViewType = 'agenda';
//		o_viewtype_cookie.write('agenda');
//	}

	LoadingTab();
	// close detail view
	CloseDetails();
	
	var sID = sTabID.replace(/pride-tab-/, '');
	var o_req = new Request.HTML({
		'url': '/ajax/agenda/getoptions/' + sID + '/',
		'method': 'get',
		'update': $('agenda-filter'),
		'onComplete': function(){
			if (sID == 'all'){
				InitFilterOptions();
			}
		}
	}).send();

	new Request.HTML({
		'url': '/ajax/agenda/getevents/' + sID + '/' + sViewType + '/',
		'method': 'get',
		'update': $('agendaViewBody'),
		'onComplete': function(){
			InitEvents();
			
			if (sViewType == 'agenda'){
				if ($type(oAgendaScroller) !== false){
					oAgendaScroller.reInit();
				} else {
					oAgendaScroller = new AgendaScroller();
				}
			}
			
			if (sID == 'all' || sID == 'my'){
				SetMyAgendaItems();
			}
			
			(function(){ LoadingTab(); }).delay(1000);
		}
	}).send();
};

// ====== Details ==============
var ToggleDetails = function(){
	if ($('loading-details').hasClass('hidden')){
 		var fxOverlay = new Fx.Tween('loading-details', {
			property: 'opacity',
			duration: 500
		});
		fxOverlay.set(0).start(1);
		$('loading-details').removeClass('hidden');
	} else {
		var fxOverlay = new Fx.Tween('loading-details', {
			property: 'opacity',
			duration: 500
		});
		$('event-details').removeClass('hidden');
		$('loading-details').addClass('hidden');
		if ($('address-location')){
			(function(){
				MapInit($('address-location').get('text').clean());
			}).delay(500);
		}
	}
};

var GetDetails = function(iEventID, iEventdateID){
	if (sViewType == 'list'){
		new Request.HTML({
			'url': '/ajax/event/getlistdetails/' + iEventdateID + '/',
			'method': 'get',
			'update': $('agenda-list-details'),
			'onComplete': function(){
				if ($('address-location')){
					(function(){
						MapInit($('address-location').get('text').clean());
					}).delay(500);
				}
			}
		}).send();
	} else {	
		new Request.HTML({
			'url': '/ajax/event/getdetails/' + iEventdateID + '/',
			'method': 'get',
			'update': $('event-details'),
			'onComplete': function(){
				(function(){ 
					ToggleDetails();
				}).delay(1000);
			}
		}).send();
	}
};

var CloseDetails = function(){
	if ($('event-details')){
		$('event-details').addClass('hidden');
	}
};

var MapInit = function(sAddress){
	var geocoder = new google.maps.Geocoder();
	var latlng = new google.maps.LatLng(52.3738007,4.8909347);
	var myOptions = {
		zoom: 8,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	var map = new google.maps.Map($('event-map'), myOptions);
	
	geocoder.geocode({
		'address': sAddress
	}, function(results, status){
		if (status == google.maps.GeocoderStatus.OK){
			map.setCenter(results[0].geometry.location);
			map.setZoom(14);
			var marker = new google.maps.Marker({
				map: map, 
				position: results[0].geometry.location
			});
		} else {
			alert('Kan het adres niet vinden');
		}
	});
};

// ====== Filter ==============
var LoadingFilter = function(){
	if ($('loading-details').hasClass('hidden')){
 		var fxOverlay = new Fx.Tween('loading-details', {
			property: 'opacity',
			duration: 500
		});
		fxOverlay.set(0).start(1);
		$('loading-details').removeClass('hidden');
	} else {
		var fxOverlay = new Fx.Tween('loading-details', {
			property: 'opacity',
			duration: 500
		});
		$('loading-details').addClass('hidden');
	}
};

var SetFilter = function(sAction, aData){
	new Request.JSON({
		'url': '/ajax/agenda/' + sAction  +'/',
		'method': 'post',
		'data': aData,
		'onComplete': function(oResponse){
			if ($type(oResponse) === false || oResponse.result != 'ok'){
				return;
			}
			GetFilteredEvents();
		}
	}).send();
};

var ToggleFilter = function(sID){
	// close detail view
	CloseDetails();
	
	var s_type = sID.replace(/^(.*)_(.*)$/, '$1');
	var s_value = sID.replace(/^(.*)_(.*)$/, '$2');

	if ($(sID).hasClass('active')){
		// all is already active, so don't do shit
		if (s_value == 'all'){
			return;
		}
				
		$(sID).removeClass('active');
		LoadingFilter();
		(function(){ 
			SetFilter('delfilter', $H({'type': s_type, 
				'value': s_value}).toQueryString());
		}).delay(750);

		// no filters -> set all
		if (s_type == 'type'){
			if ($(sID).getParent().getParent().getElements('div.active').length == 0){
				$('type_all').addClass('active');
			}
		} else {
			if ($(sID).getSiblings('div.active').length == 0){
				$(s_type + '_all').addClass('active');
			}
		}
	} else {
		if (s_value == 'all'){
			if (s_type == 'type'){
				$(sID).getParent().getElements('div.option').removeClass('active');
			} else {
				$(sID).getSiblings('div.option').removeClass('active');
			}
			$(sID).addClass('active');
			
			LoadingFilter();
			(function(){ 
				SetFilter('clearfilter', $H({'type': s_type}).toQueryString());
			}).delay(750);
		} else {
			$(s_type + '_all').removeClass('active');
			
			$(sID).addClass('active');
			LoadingFilter();
			(function(){ 
				SetFilter('addfilter', $H({'type': s_type, 
					'value': s_value}).toQueryString());
			}).delay(750);
		}
	}
};

var GetFilteredEvents = function(){
	new Request.HTML({
		'url': '/ajax/agenda/getevents/all/' + sViewType + '/',
		'method': 'get',
		'update': $('agendaViewBody'),
		'onComplete': function(){
			InitEvents();
			
			if ($type(oAgendaScroller) !== false){
				oAgendaScroller.reInit();
			} else {
				oAgendaScroller = new AgendaScroller();
			}
			SetMyAgendaItems();
		//	LoadingFilter();
		}
	}).send();
};

// ====== Initialize ==============
var InitEvents = function(){
	// global events
	$$('div.tab').addEvent('click', function(){
		// don't get agenda if tab is already active
		if (!this.hasClass('active')){
			sActiveTab = this.id;
			ShowTab(this.id);
		}
		$$('div.tab').removeClass('active');
		this.addClass('active');
	});
	
	if ($('my_agenda_email_input')){
		$('my_agenda_email_input').addEvent('focus', function(){
			$('my_agenda_email_input').set('value', '');
			$('my_agenda_email_input').removeEvents('focus');
		});
		
		if ($('mail_my_agenda')){
			$('mail_my_agenda').addEvent('click', function(){
				// check e-mail input
				var s_email = $('my_agenda_email_input').get('value');

				if (s_email.trim().length === 0
					|| s_email.trim().test(/^[a-z0-9._\-]+@[a-z0-9\-.]+\.[a-z.]{2,5}$/i)
					 	=== false)
				{
					alert($('email-error').get('text'));
					return false;
				}
				
				// send mail
				new Request.JSON({
					'url': '/ajax/agenda/mail/',
					'method': 'post',
					'data': $H({'email': s_email}),
					'onComplete': function(oResponse){
						if ($type(oResponse) === false || oResponse.result != 'ok'){
							alert($('mail-error').get('text'));
							return false;
						}
						alert($('mail-succes').get('text'));
					}
				}).send();
				return false;
			});
		}
	}
	
	// list view type events
	if (sViewType == 'list'){
		if (sActiveTab == 'pride-tab-all' || sActiveTab == 'pride-tab-my'){
			$$('div.list-eventitem').getElement('div.tick').each(function(oEl){
				oEl.addEvent('click', function(oEvent){
					ToggleMyAgenda(oEl.getParent().id);
					oEvent.stop();
				});
			});
		}
		
		$$('div.list-eventitem').each(function(oEvent){
			oEvent.addEvent('click', function(){
				var i_eventdateid = oEvent.id.replace(/^listevent-([\d]*)-([\d]*)$/, '$1');
				var i_eventid = oEvent.id.replace(/^listevent-([\d]*)-([\d]*)$/, '$2');
			
				//ToggleDetails();
				GetDetails(i_eventid, i_eventdateid);
			});
		});
		
	} else {
	// agenda view type events
		if (sActiveTab == 'pride-tab-all' || sActiveTab == 'pride-tab-my'){
			$$('div.timeUnit').getElement('div.tick').each(function(oEl){
				oEl.addEvent('click', function(oEvent){
					ToggleMyAgenda(oEl.getParent().getParent().id);
					oEvent.stop();
				});
			});
		}

		$$('div.timeUnit.event').each(function(oEvent){
			oEvent.getChildren().each(function(oEl){
				oEl.addEvent('click', function(){
					//alert(oEl);
					var i_eventdateid = oEl.getParent().id.replace(/^event-([\d]*)-([\d]*)$/, '$1');
					var i_eventid = oEl.getParent().id.replace(/^event-([\d]*)-([\d]*)$/, '$2');
				
					ToggleDetails();
					GetDetails(i_eventid, i_eventdateid);
				});
			});
		});
	}
};
	
var InitFilterOptions = function(){
	$$('div.option').addEvent('click', function(){
		ToggleFilter(this.id);
	});
	
	new Request.JSON({
		'url': '/ajax/agenda/getfilters/',
		'method': 'get',
		'onComplete': function(oResponse){
			if ($type(oResponse) === false || oResponse.result != 'ok'){
				return;
			}
			
			$H(oResponse.data).each(function(aValue, sKey){
				if (aValue !== false){
					$(sKey + '_all').removeClass('active');
					aValue.each(function(sValue){
						$(sKey + '_' + sValue).addClass('active');
					});
				}
			});
		}
	}).send();
};

//======== view type ===============
var InitViewType = function(){
	o_viewtype_cookie = new Cookie('viewtype', {'path':'/'});
	//alert(o_viewtype_cookie.read());
	if (o_viewtype_cookie.read() !== null){
		sViewType = o_viewtype_cookie.read();
	} else {
		sViewType = 'list';
		o_viewtype_cookie.write('list');
	}
};

var ChangeView = function(sNewViewType){
	if (sNewViewType == 'agenda' || sNewViewType == 'list'){
		sViewType = sNewViewType;
		o_viewtype_cookie.write(sNewViewType);
	} else {
		sViewType = 'agenda';
		o_viewtype_cookie.write('agenda');
	}
	ShowTab(sActiveTab);
};

// ====== ondomready ==============
window.addEvent('domready', function(){
	InitViewType();
	oAgendaScroller = new AgendaScroller();
	InitEvents();
	InitFilterOptions();
	SetMyAgendaItems();
	
	if ($('load-event') && $('load-eventdate')){
		if (sViewType == 'agenda'){
			ToggleDetails();
		}
		
		GetDetails($('load-event').get('text'),
			$('load-eventdate').get('text'));
	}
	
});
