if (typeof piszko == 'undefined')
{
	var piszko = {}
}

piszko.portfolio = {};
piszko.portfolio.animating = 0;
piszko.portfolio.next = null;

piszko.portfolio.animationStarted = function ()
{
	piszko.portfolio.animating++;
}

piszko.portfolio.animationEnded = function ()
{
	piszko.portfolio.animating--;
	if (piszko.portfolio.animating == 0)
	{
		//piszko.portfolio.doNext();
	}
}

piszko.portfolio.doNext = function ()
{
	if (piszko.portfolio.next == null)
	{
		return;
	}
	var which = piszko.portfolio.next[0];
	var id = piszko.portfolio.next[1];
	piszko.portfolio.next = null;
	// mild race condition here
	switch (which)
	{
		case 'area':
			piszko.portfolio.showArea(id);
			break;
		case 'project':
			piszko.portfolio.showProject(id);
			break;
	}
};

piszko.portfolio.moveArea = function (area)
{
	var area_name = area.attr('id');
	$('div.menu', area).hide().
		removeClass('menu').
		addClass('menu-'+area_name).
		appendTo(piszko.portfolio.menu);
	$('div.projects', area).hide().
		addClass('projects-'+area_name).
		appendTo(piszko.portfolio.panel).
		children('div.project').hide();
};

piszko.portfolio.showArea = function (id)
{
	if (piszko.portfolio.animating > 0)
	{
		piszko.portfolio.next = ['area', id];
		return;
	}
	var area_name = id.substr(1);
	if (piszko.portfolio.panel.find('div.projects-'+area_name+':visible').length)
	{
		// already visible
		return;
	}
	var cur_menu = piszko.portfolio.menu.find('ul.main-menu a.active');
	var direction = 'up';
	if (cur_menu.length == 0 ||
		cur_menu.parent().prevAll().find("a[href='"+id+"']").length)
	{
		// new selection is before current selection
		direction = 'down';
	}
	var current = piszko.portfolio.panel.find('div.projects:visible');
	if (current.length)
	{
		// hide current area
		piszko.portfolio.animationStarted();
		current.animate({top:direction == 'down' ? '410px' : '-410px'}, 'slow', function ()
			{
				current.css({top:'-410px',display:'none'});
				piszko.portfolio.animationEnded();
			});
	}
	var area_div = $(id);
	if (!area_div.get(0).has_moved)
	{
		piszko.portfolio.moveArea(area_div);
		area_div.get(0).has_moved = true;
	}
	
	var projects = piszko.portfolio.panel.find('div.projects-'+area_name);
	var menu = piszko.portfolio.menu.find('div.menu-'+area_name);
	// make first project visible before animating
	projects.find('div.project').hide();
	var first_id = menu.find('ul li:first a').attr('href');
	piszko.portfolio.showProject(first_id, true);
	
	// start animating the menu
	var visible = piszko.portfolio.menu.find('div.area-menu:visible');
	piszko.portfolio.animationStarted();
	if (visible.length)
	{
		visible.fadeOut('normal',
			function ()
			{
				menu.fadeIn('normal');
				piszko.portfolio.animationEnded();
			});
	}
	else
	{
		menu.fadeIn('slow',
			function ()
			{
				piszko.portfolio.animationEnded();
			});
	}
	
	// start animating the projects
	piszko.portfolio.animationStarted();
	projects.css({display:'block',top:direction == 'down' ? '-410px' : '410px'});
	projects.animate({top:'0px'}, 'slow', function ()
		{
			piszko.portfolio.animationEnded();
			var thumb = $(first_id).find('img');
			if (thumb.attr('lazysrc'))
			{
				$('<img>').
					bind('load', function ()
					{
						thumb.hide().attr('src', thumb.attr('lazysrc')).fadeIn('normal').removeAttr('lazysrc');
					}).attr('src', thumb.attr('lazysrc'));
			}
		});
	
	// highlight active link
	$("ul.main-menu li a", piszko.portfolio.menu).removeClass('active');
	$("ul.main-menu li a[href='"+id+"']", piszko.portfolio.menu).addClass('active');
	return true;
};

piszko.portfolio.showProject = function (id, quick)
{
	var project = $(id);
	if (!project.length)
	{
		return;
	}
	var highlight = function (id)
	{
		// highlight active link
		$("div.area-menu li a", piszko.portfolio.menu).removeClass('active');
		if ($("div.area-menu li a[href='"+id+"']", piszko.portfolio.menu).length == 0)
		{
			return;
		}
		$("div.area-menu li a[href='"+id+"']", piszko.portfolio.menu).addClass('active');
	};
	if (quick)
	{
		project.show().css({'right':'0px','display':'block'});
		highlight(id);
		return true;
	}
	if (piszko.portfolio.animating > 0)
	{
		piszko.portfolio.next = ['project', id];
		return;
	}
	
	var thumb = project.find('img');
	var lazy_thumb = false;
	if (thumb.attr('lazysrc'))
	{
		lazy_thumb = true;
	}
	if (project.css('display') == 'block')
	{
		// already visible
		return;
	}
	var cur_menu = piszko.portfolio.menu.find('div.area-menu a.active');
	var direction = 'left';
	if (cur_menu.parent().prevAll().find("a[href='"+id+"']").length ||
		(cur_menu.parents('div.p2').length && cur_menu.parents('div.area-menu').find("div.p1 a[href='"+id+"']").length))
	{
		// new selection is before current selection
		direction = 'right';
	}
	
	var current = piszko.portfolio.panel.find('div.project:visible');
	if (current.length)
	{
		// hide current project
		piszko.portfolio.animationStarted();
		current.animate({right:direction == 'left' ? '650px' : '-650px'}, 'slow', function ()
			{
				current.css({right:'-650px',display:'none'});
				piszko.portfolio.animationEnded();
			});
	}
	
	// animate the project
	piszko.portfolio.animationStarted();
	project.css({display:'block',right:direction == 'left' ? '-650px' : '650px'});
	project.animate({right:'0px'}, 'slow', function ()
		{
			piszko.portfolio.animationEnded();
			highlight(id);
			// make sure the thumbnail gets loaded
			if (lazy_thumb)
			{
				$('<img>').
					bind('load', function ()
					{
						thumb.hide().attr('src', thumb.attr('lazysrc')).fadeIn('normal').removeAttr('lazysrc');
					}).attr('src', thumb.attr('lazysrc'));
				//thumb.attr('src', thumb.attr('lazysrc'));
				//thumb.removeAttr('lazysrc');
			}
		});
	return true;
};

$(document).ready(function ()
{
	$('div.project img').each(function ()
	{
		if ($(this).height())
		{
			return;
		}
		$(this).attr('lazysrc', $(this).attr('src'));
		$(this).attr('src', '/new-styles/_space.gif');
		$(this).css('display', 'none');
	});
	
	piszko.portfolio.menu = $('div.main .menu');
	$('div.main').append('<div class="panel" style="display:none;"></div>');
	piszko.portfolio.panel = $('div.main div.panel');
	
	$('li a', piszko.portfolio.menu).click(function (e)
	{
		e.preventDefault();
		$(this).blur();
		var area_id = $(this).attr('href');
		piszko.portfolio.showArea(area_id);
	});
	// split long lists
	$('div.area-menu ul').each(function ()
	{
		var items = $(this).find('li');
		if (items.length > 15)
		{
			// split up
			$(this).wrap('<div class="page p1"></div>');
			var p_num = 2;
			var new_page = $('<div class="page p-notfirst p'+p_num+'"><ul></ul></div>');
			var new_ul = new_page.find('ul');
			var this_page = 0;
			for (var i = 13; i < items.length; i++)
			{
			    this_page++;
				items.slice(i,i+1).remove().appendTo(new_ul);
				if (this_page == 13)
				{
		            new_page.append('<div class="link back"><a href="#back">&lt; Back</a></div>');
                    new_page.append('<div class="link forward"><a href="#next">More &gt;</a></div>');
		            $(this).closest('div.area-menu').append(new_page);
				    // make another page
		            p_num++;
		            new_page = $('<div class="page p-notfirst p'+p_num+'"><ul></ul></div>');
		            new_ul = new_page.find('ul');
		            this_page = 0;
				}
			}
            new_page.append('<div class="link back"><a href="#back">&lt; Back</a></div>');
            $(this).closest('div.area-menu').append(new_page);
            $(this).closest('div.p1').append('<div class="link forward"><a href="#next">More &gt;</a></div>');
		}
	});
	$('div.area-menu li a').click(function (e)
	{
		e.preventDefault();
		$(this).blur();
		var project_id = $(this).attr('href');
		piszko.portfolio.showProject(project_id);
	});
	// actions for area menu .link
	$('div.area-menu div.link a').click(function (e)
	{
		e.preventDefault();
		$(this).blur();
		var curpage = $(this).closest('div.page');
		var otherpage;
		if ($(this).closest('div.link').hasClass('forward'))
		{
		    otherpage = curpage.next();
		}
		else
		{
		    otherpage = curpage.prev();
		}
		curpage.slideUp(function() { otherpage.slideDown(); });
	});
	piszko.portfolio.panel.show();
	piszko.portfolio.showArea('#web');
	
	// do the fancy zoom crap
	setupZoom();
	
	// do the email address
	// be coy in case address harvesters read (but don't execute) javascript:
	var addy = ['om', 'pau', 'piszk', 'ilt', 'a'];
	var divider_0 = 29;
	var divider_1 = 32;
	var divider_2 = 23;
	var mt = 'm'+addy[4]+addy[3]+'o'+String.fromCharCode(divider_0*2);
	var addy = addy[1]+'l'+String.fromCharCode(divider_1*2)+addy[2]+'o'+String.fromCharCode(divider_2*2)+'c'+addy[0];
	$('p.shout').html('<a href="'+mt+addy+'">'+addy+'</a>');
});
