(function($)
{
	
	var programFilter = {
		init : function()
		{
			$('select#filterUserGroup').change(programFilter.onChange);
			$('select#filterProgramArea').change(programFilter.onChange);
			$('select#filterCategory').change(programFilter.onChange);
			programFilter.ul = $('ul#programList');
			
			if (programFilter.ul.length == 0)
				programFilter.ul = $('ul#programListLong');
			
			programFilter.onChange({});
		},
		
		onChange : function(event)
		{
			programFilter.toggleProgramList();
			/*programFilter.toggleOption(programFilter.users, $('select#filterUserGroup option'));
			programFilter.toggleOption(programFilter.areas, $('select#filterProgramArea option'));
			programFilter.toggleOption(programFilter.cats, $('select#filterCategory option'));*/
		},
		
		toggleOption : function(showValueList, options)
		{
			options.each(function()
			{
				if (this.value == '') return;
				
				for(var i = 0; i < showValueList.length; ++i)
				{
					if (this.value == showValueList[i])
					{
						$(this).show();
						return;
					}
				}
				
				$(this).hide();
			});
		},
		
		toggleProgramList : function()
		{
			var user = $('select#filterUserGroup').val();
			var area = $('select#filterProgramArea').val();
			var cat = $('select#filterCategory').val();
			
			if (area == undefined) area = '';
			
			programFilter.users = [];
			programFilter.areas = [];
			programFilter.cats = [];
			var programCount = 0;
			
			for(var programId in programs)
			{
				var program = programs[programId];
				var visible = true;
				
				if (user != '')
				{
					found = false;
					for (var i=0; i < program.userGroups.length; ++i)
					{
						var group = program.userGroups[i].id;
						
						if (group == user)
						{
							found = true;
							break;
						}
					}
					
					if (!found) visible = false;
				}
				
				if (area != '' && program.area.id != area) visible = false;
				
				if (cat != '' && program.category.id != cat) visible = false;
				
				if (visible)
				{
					programFilter.showProgram(programId);
					
					for (var i=0; i < program.userGroups.length; ++i)
					{
						programFilter.users.push(program.userGroups[i].id);
					}
					
					programFilter.areas.push(program.area.id);
					programFilter.cats.push(program.category.id);
					
					++programCount;
					
				}
				else
				{
					programFilter.hideProgram(programId);
				}
			}
			
			var programText = programCount <= 1 ? ' program' : ' programs';
			
			if (programCount == 0)
				$('#programCount').text('No programs match your filter criteria. Please try again.');
			else
				$('#programCount').text(programCount.toString() + programText);
		},
		
		showProgram : function(id)
		{
			programFilter.ul.find('li#program-' + id).show();
		},
		
		hideProgram : function(id)
		{
			programFilter.ul.find('li#program-' + id).hide();
		}
	}
	
	$(document).ready(programFilter.init);
}
)(jQuery);
