var members = {
	$filter: null,
	$loading: null,
	init: function(){
		members.$filter = $('#filter');
		members.$loading = $('#filter .loading');
		
		members.initFilter();
		members.fetchResults();
	},
	initFilter: function(){
		members.$filter.find('.sport, .continent').click(members.filterOption.click);
	},
	filterOption: {
		click: function(){
			var $this = $(this);
			$this.toggleClass('selected');
			
			members.fetchResults();
			
			return false;
		}
	},
	fetchResults: function(){
		members.$loading.show();
	
		if (members.mostRecentRequest && members.mostRecentRequest.readyState < 4)
			members.mostRecentRequest.abort();

		var params = {
			continents: members.selections.continents(),
			sports: 	members.selections.sports()
		}
		
		members.mostRecentRequest = $.post(globalServer + 'ajax/members', params, members.resultFetched, 'json');
	},
	selections: {
		continents: function(){
			var selection = [];
			members.$filter.find('.continent.selected').each(function(){
				selection.push($(this).html());
			});
			return selection;
		},
		sports: function(){
			var selection = [];
			members.$filter.find('.sport.selected').each(function(){
				selection.push($(this).attr('title'));
			});
			return selection;
		}
	},
	resultFetched: function(response){
		if (response == null) return;
		
		var $result = $('#result');
		$result.find('.item').remove();
		
		var $template = $result.find('.template');

		for (var i = 0; i < response.length; i++)
		{
            var membersCount = parseInt(response[i].members);

            if (membersCount.toString() == 'NaN')
            {
                membersCount = 0;
            }

			var $item = $template.clone().removeClass('template').addClass('item');
			$item.find('.country').html(response[i].country + ', ' + response[i].continent);
			$item.find('.name').html(response[i].abbreviation + ' ' + response[i].organisation);
			$item.find('.phone').html(response[i].phone);
			$item.find('.address').html(response[i].address);
			$item.find('.postal_code').html(response[i].postal_code);
			$item.find('.contact').html(response[i].contact);
			$item.find('.city').html(response[i].city);
			if (membersCount>0) $item.find('.member-id').html('Number of members: ' + membersCount);
			var sports = response[i].sports;
			var sportString = '';
			if (sports!=false)
			{
				for (var u = 0; u < sports.length; u++)
				{
					sportString += '<div class="activity" ><img src="' + globalUrl + 'image/activities/' + sports[u] + '.gif" border="0" /></div>';
				}
			}
			$item.find('.activities').html(sportString);
			
			var url = response[i].websites;
			if (!/^http/.test(url))
			{
				url = 'http://' + url;
			}
			
			$item.find('.websites').html('<a href="' + url + '" target="_blank">' + response[i].websites + '</a>');
			
			if (response[i].fax != '')
			{
				$item.find('.fax').html(response[i].fax);
			}
			else
			{
				$item.find('.fax').parent().hide();
			}
			
			var emails 		= response[i].email.split(/[,;]/);
			var emailHTML 	= [];
			
			for (var n = 1; n <= emails.length; n++)
			{
				var email = $.trim(emails[(n-1)]);
				emailHTML.push('<a href="mailto:' + email + '">' + email + '</a>');
			}
			
			$item.find('.email').append(emailHTML.join(', '));
			
			$result.append($item);
		}
		
		members.$loading.hide();
	}
}

$(document).ready(members.init);
