

var jProjectFilterChecks, projectFilterTypes = [], projects = [], activeThreadId = 0;


function typesAllowed(types)
{
	var allowed = false;
	
	for (var i = 0; i < projectFilterTypes.length; i++)
	{
		if (jQuery.inArray(projectFilterTypes[i], types) != -1)
		{
			allowed = true;
			break;
		}
	}

	return allowed;
}

function showNextProject(projectIndex, threadId)
{
	if (projectIndex < projects.length)
	{
		var p = projects[projectIndex];
		
		if (typesAllowed(p.types))
		{
			if (p.loaded)
			{
				p.jLI.removeClass('hidden');
				
				showNextProject(++projectIndex, threadId);
			}
			else
			{
				if (p.src)
				{
					p.jIMG.load
					(
						jQuery.callback
						(
							function (projectIndex, threadId)
							{
								if (threadId != activeThreadId) return;
								
								
								var p = projects[projectIndex];
								
	
								p.loaded = true;
								
								p.jLI.removeClass('hidden');
								
								showNextProject(++projectIndex, threadId);
							},
							[projectIndex, threadId],
							true
						)
					);
					
					p.jIMG.attr('src', p.src);
				}
				else
				{
					p.loaded = true;
					
					p.jLI.removeClass('hidden');
					
					showNextProject(++projectIndex, threadId);
				}
			}
		}
		else
		{
			showNextProject(++projectIndex, threadId);
		}
	}
}

function onFilterChange()
{
	// Re-scan filter checks

	var types = [];

	jQuery.each
	(
		jProjectFilterChecks,
		function(index, el)
		{
			var checked = el.checked;
			var projectType = el.projectType;
			
			if (checked) types.push(projectType);
		}
	);

	projectFilterTypes = types;

	
	// Hide all
	
	jQuery.each
	(
		projects,
		function(index, p)
		{
			p.jLI.addClass('hidden');
		}
	);
	
	
	// Start thread
	
	activeThreadId++;
	
	showNextProject(0, activeThreadId);
}

function addProject(p)
{
	p.loaded = false;
	
	projects.push(p);
}

$(
	function()
	{
		// Set filter project types
		
		jProjectFilterChecks = $('form.portfolio-choice input[type=checkbox]');

		jQuery.each
		(
			jProjectFilterChecks,
			function(index, el)
			{
				el.projectType = el.id.replace(/pt(.*)/, '$1').toLowerCase();
			}
		);
		
		
		// Attach filter change handler
		jProjectFilterChecks.click
		(
			function ()
			{
				onFilterChange();
				
				
				// Save filter in cookies
				$.cookie('projectFilterTypes', projectFilterTypes, {expires: 31});
			}
		);
		
		
		// Prepare projects
		
		jQuery.each
		(
			projects,
			function(index, p)
			{
				p.jLI = $('#project' + p.id);
				p.jIMG = p.jLI.find('img');
				var a = 0;
			}
		);
		
		
		// Initial run
		onFilterChange();
	}
);
