$.fn.image = function(src, f, e) {
	var i = new Image();
	var t = $(this);
	$(i).load(function(){t.append($(this));f();}).error(e).attr('src', src);
}

$(function() {

	// Menu init

	function showMenu()
	{
		var parent = $(this).closest('li');

		activeMenu = parent.find('ul.submenu:hidden');

		if ( activeMenu )
		{
			activeMenu.closest('ul.menu').find('ul.submenu:visible').fadeOut('fast');
			activeMenu.slideDown('fast', function() {
				$(this).find('input[type=text]:first').focus();
			});
		}
	}

	$('ul.menu > li:not(:has(input[type=text])) > a').mouseenter(showMenu);
	$('ul.menu > li:has(form) > a').click(showMenu);

	$('ul.menu > li:not(:has(input[type=text]))').bind('mouseleave', function () { $(this).find('ul.submenu').fadeOut('fast'); } );

	$('div.menu_vertical dl dd.closed').find('ul').hide();
	$('div.menu_vertical dt').live('click', function() {
		var target = $(this).next('dd').find('ul');

		if ( target.is(':hidden') )
		{
			$(this).closest('dl').find('ul').slideUp();
			target.slideDown();
		}
	});

	// Form submit links

	$('form a.submit').click(function(){
		$(this).closest('form').submit();
		return false;
	});

	// Project squares: "hide" rollover

	$('div.square:has(.hide)').mouseenter(function(){
		$(this).find('div.focus:hidden').fadeIn(300);
	});

	$('div.square:has(.hide)').mouseleave(function(){
		$(this).find('div.focus:visible').fadeOut(300);
	});

	// Project squares: "filter" rollover

	$('div.square:has(.filter-out)').mouseenter(function(){
		$(this).find('div.nofocus').stop().animate({opacity:1.0}, 300);
	});

	$('div.square:has(.filter-out)').mouseleave(function(){
		$(this).find('div.nofocus').stop().animate({opacity:0.5}, 300);
	});

	// Tooltips

	function tooltipMove(event)
	{
		var offset = $(event.target).offset();
		offset.top = event.pageY + 16;
		offset.left = event.pageX - 14;

		$('div#tooltip').css(offset);
	}

	// Tooltips: Projects

	if ( !$('body.home').length )
	{
		$('div.square_stack').mouseenter(function(event){
			var metadata = $(this).parent().metadata();

			var content = '<strong>'+metadata.title1+'</strong>';

			if ( metadata.title2 ) content += '<span>'+metadata.title2+'</span>';
			if ( metadata.category && !$(this).hasClass('filter-in') ) content += '<em>Category: '+metadata.category+'</em>';

			$('div#tooltip').hide().find('div.tooltip-content').html(content);

			tooltipMove(event);

			$('div#tooltip').show();
		});
		$('div.square_stack').mousemove(tooltipMove);
		$('div.square_stack').mouseleave(function(){ $('div#tooltip').hide(); });

		$('li.project a').mouseenter(function(event){
			var metadata = $(this).closest('li.project').metadata();

			var content = '<img src="/media/projects/'+metadata.uri_slug+'/thumb/1.jpg" width="59" height="42" />';

			$('div#tooltip').addClass('thumb').hide().find('div.tooltip-content').html(content);

			tooltipMove(event);

			$('div#tooltip').show();
		});
		$('li.project a').mousemove(tooltipMove);
		$('li.project a').mouseleave(function(){ $('div#tooltip').hide().removeClass('thumb'); });
	}

	// Tooltips: Services

	$('ul.services li a').mouseenter(function(event){
		var metadata = $(this).parent().metadata();

		var content = '<strong>'+metadata.title1+'</strong>';

		if ( metadata.title2 ) content += '<span>'+metadata.title2+'</span>';

		$('div#tooltip').hide().find('div.tooltip-content').html(content);

		tooltipMove(event);

		$('div#tooltip').show();
	});
	$('ul.services li a').mousemove(tooltipMove);
	$('ul.services li a').mouseleave(function(){ $('div#tooltip').hide().removeClass('thumb'); });

	// Project thumbnail menu

	$('div.scrollable').scrollable({size:4});

	$('div.scrollable a.graphic').click(function(){
		if ( !$(this).closest('div').hasClass('active') )
		{
			scroll(0,0);

			var file = $('#graphic img:first').attr('src').replace(new RegExp("(.*)/.*$"),"$1") + '/' + 
						$(this).find('img:first').attr('src').replace(new RegExp("^.*/(.*)$"),"$1");

			$('#graphic_content').image(file, function(){
				var content = $('#graphic_content');

				var imgWidth = content.find('img:last').width();

				content.fadeOut('normal', function() {
					$(this).width(imgWidth && imgWidth < 796 ? imgWidth : 796).find('img:first').remove().end().fadeIn();
				});
			});
		}
	});

	// Popup links

	$('a.popup').click(function (){
		window.open( $(this).attr('href'), 'centerbrook', 'width=640,height=700,scrollbars=yes,toolbar=no,location=no,status=no,menubar=no,resizable=no' );
		return false;
	});

});
