$(document).ready(function() {

	if ($('#dynitems').length) 
	{
		init_blocks();
		resize_blocks(grid_item_sizes);
		arrange_blocks();
	}
	
	if ($('li.job').length)
	{
		$('.cat_check').change(filter_jobs);
		filter_jobs();
	}
	
	// infobox
	$('.zoom').fancybox({
		'overlayOpacity'	: 0.6,
		'overlayColor'		: '#000000',
		'height'            : 'auto'
	});
	
	if ($('#contact_form2').length) init_contact();
	if ($('.talent_form').length) init_talent();
	if ($('#agenda_holder, #schedule_items').length) init_agenda();

	// align twitter en facebook containers
	$('#twitter_container').height($('#facebook_container').height());
	
	init_autoclear();	
});

/* ------------------------------------ SHARE */

function share(platform, share_url)
{
	switch(platform)
	{
		case 'twitter':
			window.open('http://twitter.com/home?status='+encodeURIComponent(share_url),'twitter');		
			break;

		case 'facebook':
			window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(share_url),'facebook');		
			break;

		case 'linkedin':
			window.open('http://www.linkedin.com/shareArticle?mini=true&url='+encodeURIComponent(share_url)+'&title=&summary=&source=','linkedin');
			break;
	}
}

/* ------------------------------------ FORMS */

function validateEmail(email) { 
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
} 

function init_autoclear()
{
	$('.autoclear').each(function(){
		$(this).data('contents',$(this).val());
	}).focus(function(){
		if ($(this).val() == $(this).data('contents')) $(this).val('');
		$('input, textarea').removeClass('error');
	}).blur(function(){
		if ($(this).val() == '') $(this).val($(this).data('contents'));
	});
}

function init_contact()
{
	$('#contact_form2').submit(function() {
	
		$('input, textarea').removeClass('error');
	
		var name = $('input[name=name]').val();
		var email = $('input[name=email]').val();
		var company = $('input[name=company]').val();
		var message = $('textarea[name=message]').val();
		
		if (!name || name=='Name') $('input[name=name]').addClass('error');
		if (!validateEmail(email)) $('input[name=email]').addClass('error');
		if (!company || company=='Company') $('input[name=company]').addClass('error');
		if (!message || message=='Message') $('textarea[name=message]').addClass('error');
		
		if ($('.error').length) return false;
	
		return true;
		
	});
}

/* ------------------------------------ TALENT TOOLBOX */

function init_agenda()
{
	$('.agenda_item, .schedule_item').css('cursor','pointer').click(function(){
		document.location = $(this).find('p a').attr('href');
	});
}

/* ------------------------------------ TALENT TOOLBOX */

function init_talent()
{
	$('.talent_form').submit(function() {
	
		$('input, textarea').removeClass('error');
	
		var name = $('input[name=name]').val();
		var email = $('input[name=email]').val();
		var message = $('textarea[name=message]').val();
		
		if (!name || name=='Name') $('input[name=name]').addClass('error');
		if (!validateEmail(email)) $('input[name=email]').addClass('error');
		if (!message || message=='Questions') $('textarea[name=message]').addClass('error');
		
		if ($('.error').length) return false;
	
		return true;
		
	});
}

/* ------------------------------------ JOBS */

function filter_jobs()
{
	$('li.job').hide();
	var cats_selected = 0;
	$('.cat_check').each(function(){
		if ($(this).attr('checked'))
		{
			cats_selected++;
			$('li.job.cat_'+$(this).attr('id').substring(4)).show();		
		}
	});
	
	if (!cats_selected)
		$('li.job').show();
	
	// update nr_jobs
	var nr_jobs = $('li.job:visible').length;
	$('#nr_job').html(nr_jobs+' job'+(nr_jobs==1?'':'s'));
	
}

/* ------------------------------------ PROJECTS */

var project_nr = 0;
var project_total = 0;

function scroll_project_image(dir)
{
	project_total = $('#foundation_pagination ul li a').length-2;
	
	project_nr += dir;
	if (project_nr>project_total-1) project_nr = 0;
	if (project_nr<0) project_nr = project_total-1;
	
	show_project_image(project_nr);
	return false;
}

function show_project_image(nr)
{
	project_nr = nr;
	
	$('#foundation_pagination ul li a').removeClass('on');
	
	var url = $('#foundation_pagination ul li:eq('+(project_nr+1)+') a').addClass('on').attr('href');
	$('.foundation_image img').attr('src',url);

	return false;
}

/* ------------------------------------ BLOCKS */

var grid = [];
var grid_size = 8;

/*
if (!grid_item_sizes) var grid_item_sizes = [15,19,25,30];
var grid_item_sizes_zoom = [40];
var grid_indents = [0,2,4,6,8];
*/

if (!grid_item_sizes) var grid_item_sizes = [15,19];
var grid_item_sizes_zoom = [40];
var grid_indents = [0,2,4];


var is_zoomed = false;
var first_view = true;
var start_big = false;
var z_index = 1000;
var align_rollovers = false;

function init_blocks()
{
	align_rollovers = $('#dynitems').hasClass('align_rollovers');
	
	$('#dynitems .item').hover(function(){
	
		$(this).css('z-index',++z_index);
		$(this).find('a').show();
	
		if (align_rollovers)
		{
			var l = -Math.floor((315-$(this).width())/2);
			$(this).find('a').css('left',l);
		}
		
	},function(){
	
		$(this).find('a').hide();
	
	}).click(function(){
	
		// zoom?
		if ($(this).hasClass('zoom')) return;
		
		document.location.href = $(this).attr('href');
		
	});
}

function resize_blocks(sizes)
{
	$('.item').each(function(index){
	
		var w = $(this).width();
		var h = $(this).height();

		// store or get original size
		if (!$(this).data('original_w'))
		{
			$(this).data('original_w', w).data('original_h', h);
		}
		else
		{
			w = parseInt($(this).data('original_w'));
			h = parseInt($(this).data('original_h'));
		}
				
		// new random size
		if (w>h) {
			var new_w = sizes[Math.floor(Math.random()*sizes.length)];
			var new_h = Math.round((h*new_w)/w);
		} else {
			var new_h = sizes[Math.floor(Math.random()*sizes.length)];
			var new_w = Math.round((w*new_h)/h);		
		}
	
		// first block = big
		if (index==0 && first_view && $('.first_block_big').length)
		{
			if (w>h) {
				var new_w = grid_item_sizes_zoom;
				var new_h = Math.round((h*new_w)/w);
			} else {
				var new_h = grid_item_sizes_zoom;
				var new_w = Math.round((w*new_h)/h);		
			}			
			first_view = false;
		}
	
		// store size
		$(this).data('w', new_w).data('h', new_h);

		// resize
		new_w *= grid_size;
		new_h *= grid_size;
		$(this).css('width',new_w+'px').css('height',new_h+'px');
		$(this).find('img.image').css('width',new_w+'px').css('height',new_h+'px');	
		$(this).find('a').css('top',(Math.round(new_h/2)-15)+'px').css('left',-(320-new_w)/2);	
		
	});
}

function arrange_blocks()
{
	var grid_total_width = Math.floor($('#dynitems').width()/grid_size) - 1;
		
	var grid = [];
	for(c=0;c<grid_total_width;c++)
		grid.push(0);
		
	var index = 0;
	
	$('.item').each(function(){
		
		var w = parseInt($(this).data('w'));
		var h = parseInt($(this).data('h'));

		if (index+w > grid_total_width)
			index = grid[0]==0 ? 0 : grid_indents[Math.floor(Math.random()*grid_indents.length)];
		
		// find highest point
		var high = grid[index];
		for(c=index; c<=index+w; c++)
			if (grid[c] > high)
				high = grid[c];
				
		// update position
		$(this).css('position','absolute');
		$(this).css('left',(index*grid_size)+'px');
		$(this).css('top',(high*grid_size)+'px');

		// update rollover position
		$(this).find('a').css('left',-(index*grid_size)+'px');	
		
		// update grid
		var new_high = high + h + 1;
		for(c=index; c<=index+w; c++)
			grid[c] = new_high;
		
		// step index
		index += (w + 1);	

	});

	// find highest point
	var high = 0;
	for(c=0; c<=grid_total_width; c++)
		if (grid[c] > high)
			high = grid[c];
	
	high++;
	high *= grid_size;
				
	// resize container
	$('#dynitems').css('height',high+'px');
		
}

