window.addEvent('domready', function()
{
	Cufon.replace('#menu span, h1, h2, h3, h4, .item_handler .center');
	setPortfolioEvents();
	
	window.addEvent('resize', function() {initScroll();});
});

function initScroll()
{
	redirectPage();
	setLogoEvents();
	setMenuEvents();
	setNavigationEvents();
	setItemEvents();
}

function redirectPage()
{
	var viewport_node	= $('viewport')
	var table_node		= viewport_node ? viewport_node.getElement('table') : null;
	var hash			= window.location.hash.replace('#', '');
	
	if (table_node && hash)
	{
		var page_id		= hash.replace(/-/g, '_');
		var page_node	= $(page_id);
		
		if (page_node)
		{
			var offset = -page_node.getPosition(table_node).x;
			
			table_node.setStyle('margin-left', offset);
			setMenuActive(page_id);
		}
	}
}

function setLogoEvents()
{
	var logo_node	= $('logo');
	var logo_a_node	= logo_node ? logo_node.getElement('a') : null;
	
	if (logo_a_node)
	{
		logo_a_node.addEvent('click', function()
		{
			setMenuActive();
			scrollPage();
			
			return false;
		});
	}
}

function setMenuEvents()
{
	var menu_node = $('menu');
	
	if (menu_node)
	{
		var menu_a_nodes = menu_node.getElements('a');
		
		if (menu_a_nodes.length)
		{
			menu_a_nodes.addEvent('click', function()
			{
				var id		= this.get('id');
				var page_id	= id.replace('menu_', '');
				
				setMenuActive(page_id);
				scrollPage(page_id);
				
				return false;
			});
		}
	}
}

function setMenuActive(page_id, sibling)
{
	var menu_node = $('menu');
	
	if (menu_node)
	{
		var menu_active_node	= menu_node.getElement('.active');
		var menu_a_node			= null;
		
		if (menu_active_node) menu_active_node.removeClass('active');
		
		if (page_id)
		{
			menu_a_node = $('menu_'+page_id);
		}
		else if (sibling)
		{
			if (menu_active_node)
			{
				var menu_active_li_node = menu_active_node.getParent('li');
				
				if (menu_active_li_node)
				{
					var menu_li_node = null;
					
					switch (sibling)
					{
						case 'prev':
							menu_li_node = menu_active_li_node.getPrevious('li');
						break;
						case 'next':
							menu_li_node = menu_active_li_node.getNext('li');
						break;
					}
					
					if (menu_li_node) menu_a_node = menu_li_node.getElement('a');
				}
			}
			else
			{
				menu_a_node = menu_node.getElement('a');
			}
		}
		
		if (menu_a_node) menu_a_node.addClass('active');
		
		Cufon.replace('#menu span');
	}
}

function setNavigationEvents()
{
	var viewport_node		= $('viewport')
	var navigation_nodes	= viewport_node ? viewport_node.getElements('.navigation') : new Array();
	
	if (navigation_nodes.length)
	{
		for (i=0; i<navigation_nodes.length; i++)
		{
			var navigation_node	= navigation_nodes[i];
			var prev_node		= navigation_node.getElement('.previous');
			var next_node		= navigation_node.getElement('.next');
			
			if (prev_node)
			{
				prev_node.addEvent('click', function()
				{
					setMenuActive(null, 'prev');
					scrollPage(null, 'prev');
				});
			}
			
			if (next_node)
			{
				next_node.addEvent('click', function()
				{
					setMenuActive(null, 'next');
					scrollPage(null, 'next');
				});
			}
		}
	}
}

function scrollPage(page_id, sibling)
{
	var viewport_node	= $('viewport')
	var table_node		= viewport_node ? viewport_node.getElement('table') : null;
	var blocker_node	= $('blocker');
	var offset			= 0;
	
	if (table_node)
	{
		if (page_id)
		{
			var page_node = page_id ? $(page_id) : null;
			
			if (page_node) offset = -page_node.getPosition(table_node).x;
		}
		else if (sibling)
		{
			var table_td_node	= table_node.getElement('td');
			var table_td_width	= table_td_node ? table_td_node.getSize().x : 0;
			var table_left		= table_node.getPosition(viewport_node).x;
			
			switch (sibling)
			{
				case 'prev':
					offset = table_left+table_td_width;
				break;
				case 'next':
					offset = table_left-table_td_width;
				break;
			}
		}
		
		if (blocker_node) blocker_node.setStyle('display', 'block');
		
		new Fx.Morph(table_node,
		{
			duration	: '1000',
			transition	: Fx.Transitions.Quad.easeOut,
			onComplete	: function()
			{
				if (blocker_node) blocker_node.setStyle('display', 'none');
			}
		})
		.start({'margin-left': offset});
	}
}

function setItemEvents()
{
	var viewport_node	= $('viewport');
	var items_nodes		= viewport_node ? viewport_node.getElements('.items') : new Array();
	
	if (items_nodes.length)
	{
		for (i=0; i<items_nodes.length; i++)
		{
			var items_node			= items_nodes[i];
			var item_handler_nodes	= items_node.getElements('.item_handler');
			
			if (item_handler_nodes.length)
			{
				var first_item_handler_node	= item_handler_nodes[0];
				var first_item_node			= first_item_handler_node.getParent('.item');
				
				if (first_item_node) first_item_node.addClass('active');
				
				item_handler_nodes.addEvent('click', function()
				{
					var items_node			= this.getParent('.items');
					var item_node			= this.getParent('.item');
					var item_active_node	= items_node ? items_node.getElement('.active') : null;

					if (item_active_node) item_active_node.removeClass('active');

					if (item_node) item_node.addClass('active');
				});
			}
		}
	}
}

function setPortfolioEvents()
{
	var portfolio_node	= $('portfolio');
	var image_nodes		= portfolio_node ? portfolio_node.getElements('.project_image') : new Array();
	
	if (image_nodes.length)
	{
		image_nodes.addEvent('click', function()
		{
			var url_node	= this.getElement('.project_url');
			var url			= url_node ? url_node.get('text') : null;
			
			if (url) showPopup(url);
		});
	}
}

function showPopup(url)
{
	var blocker_node	= $('portfolio_blocker');
	var popup_node		= $('portfolio_popup');
	var content_node	= $('popup_content');
	
	if (url && blocker_node && popup_node && content_node)
	{
		var close_node = popup_node.getElement('.popup_close');
		
		if (close_node)
		{
			close_node.addEvent('click', function()
			{
				blocker_node.addClass('hide');
				popup_node.addClass('hide');
			});
		}
		
		new Request(
		{
			url			: url,
			onComplete	: function(html)
			{
				content_node.set('html', html);
				
				var gallery_node = content_node.getElement('.mb_gallery_carousel');
				
				if (gallery_node)
				{
					var gallery_id	= gallery_node.get('id');
					var mb_gallery	= new GalleryCarousel(gallery_id, 1, 4000);
					
					mb_gallery.start();
				}
				
				blocker_node.removeClass('hide');
				popup_node.removeClass('hide');
				Cufon.replace('h2');
			}
		})
		.get();
	}
}
