$(function()
{
	var navPointer = $('<div id="nav-pointer"></div>'),
		nav = $('#site-header>nav'),
		subnavHolder = nav.find('nav').parent(),
		subnavLink = subnavHolder.find('>a'),
		isInSubnav,
		revertArrowPosition = true,
		subnavOffset = subnavHolder.index(),
		navPositions = [],
		navHoverInitialised = false,
		activePosition,
		navSubmenu = $('#site-header nav.approach-icons'),
		originalSubmenuHeight = navSubmenu.height(),
		navRolloutTimeout,
		mouseHasMoved = false,
		resizeThrottle;
	nav.after(navPointer);
	navSubmenu.css(
		{
			height: '0',
			display: 'block'
		}
	);

	$(window).bind(
		'resize',
		function()
		{
			if (resizeThrottle) {
				clearTimeout(resizeThrottle);
			}
			resizeThrottle = setTimeout(
				function()
				{
					navPositions = [];
					nav.find('>ul>li>a').each(
						function(i)
						{
							var item = $(this);
							navPositions[i] = Math.round(item.position().left + item.width() / 2);
							if (item.is('.active')) {
								activePosition = i;
								showNavPosition(i, false);
							}
							if (!navHoverInitialised) {
								item.hover(
									function()
									{
										revertArrowPosition = false;
										showNavPosition(i, true);
									},
									function()
									{
										revertArrowPosition = true;
										showNavPosition(isInSubnav ? subnavOffset : activePosition, true);
									}
								);
							}
						}
					);
					navHoverInitialised = true;
					resizeThrottle = false;
				},
				200
			);
		}
	).trigger('resize');

	// Not sure why it was initially getting the position wrong? But correct a few milisecs later...
	setTimeout(
		function()
		{
			$('body').one(
				'mousemove',
				function()
				{
					mouseHasMoved = true;
				}
			);
			$(window).trigger('resize');
		},
		500
	);

	subnavHolder.hover(
		function()
		{
			if (!mouseHasMoved) {
				return;
			}
			if (navRolloutTimeout) {
				clearInterval(navRolloutTimeout);
			}
			isInSubnav = true;
			subnavLink.addClass('js-active');
			navSubmenu.stop().animate(
				{
					height: originalSubmenuHeight + 'px'
				},
				{
					delay: 50,
					duration: 400
				}
			);
		},
		function()
		{
			if (navRolloutTimeout) {
				clearInterval(navRolloutTimeout);
			}
			navRolloutTimeout = setTimeout(
				function()
				{
					navSubmenu.stop().animate(
						{
							height: 0
						},
						{
							duration: 200,
							complete: function()
							{
								isInSubnav = false;
								subnavLink.removeClass('js-active');
								if (revertArrowPosition) {
									showNavPosition(activePosition, true);
								}
							}
						}
					);
				},
				200
			);
		}
	);

	function showNavPosition(i, animate)
	{
		var destX = 1750 - navPositions[i],
			backgroundPosition = '-' + destX + 'px 0';
		if (animate) {
			navPointer.stop().animate(
				{
					backgroundPosition: backgroundPosition
				},
				{
					duration: 600
				}
			);
		} else {
			navPointer.css('backgroundPosition', backgroundPosition);
		}
	}
});

// Homepage animation
var logoAnimation = function() {
	var state1 = [
		{"x":-2,"y":-2,"f":"#6E6E6E"},{"x":-2,"y":-2,"f":"#FCC24E"},{"x":2,"y":-2,"f":"#6E6E6E"},{"x":3,"y":-3,"f":"#FCC24E"},{"x":-2,"y":2,"f":"#6E6E6E"},{"x":-1,"y":1,"f":"#FCC24E"},
		{"x":3,"y":-3,"f":"#FCC24E"},{"x":-3,"y":-3,"f":"#6E6E6E"},{"x":1,"y":-1,"f":"#FCC24E"},{"x":3,"y":3,"f":"#6E6E6E"},{"x":-2,"y":2,"f":"#FCC24E"},{"x":3,"y":-3,"f":"#6E6E6E"},
		{"x":-3,"y":-3,"f":"#6E6E6E"},{"x":-1,"y":-1,"f":"#FCC24E"},{"x":-1,"y":-1,"f":"#6E6E6E"},{"x":-1,"y":1,"f":"#FCC24E"},{"x":-3,"y":3,"f":"#6E6E6E"},{"x":1,"y":-1,"f":"#FCC24E"},
		{"x":-1,"y":1,"f":"#FCC24E"},{"x":-2,"y":2,"f":"#6E6E6E"},{"x":-1,"y":-1,"f":"#FCC24E"},{"x":-3,"y":3,"f":"#6E6E6E"},{"x":1,"y":1,"f":"#FCC24E"},{"x":2,"y":2,"f":"#6E6E6E"},
		{"x":-2,"y":2,"f":"#6E6E6E"},{"x":-2,"y":-2,"f":"#FCC24E"},{"x":1,"y":1,"f":"#6E6E6E"},{"x":-3,"y":3,"f":"#FCC24E"},{"x":2,"y":2,"f":"#6E6E6E"},{"x":3,"y":3,"f":"#FCC24E"},
		{"x":-1,"y":-3,"f":"#FCC24E"},{"x":-3,"y":-3,"f":"#6E6E6E"},{"x":-1,"y":1,"f":"#FCC24E"},{"x":2,"y":2,"f":"#6E6E6E"},{"x":-2,"y":2,"f":"#FCC24E"},{"x":1,"y":1,"f":"#6E6E6E"}
	];
	var state2 = [
		{"x":-2,"y":-2,"f":"#6E6E6E"},{"x":-2,"y":-2,"f":"#FCC24E"},{"x":2,"y":-2,"f":"#6E6E6E"},{"x":3,"y":-3,"f":"#FCC24E"},{"x":-2,"y":2,"f":"#6E6E6E"},{"x":-1,"y":1,"f":"#FCC24E"},
		{"x":3,"y":-3,"f":"#FCC24E"},{"x":-3,"y":-3,"f":"#6E6E6E"},{"x":1,"y":-1,"f":"#FCC24E"},{"x":3,"y":3,"f":"#6E6E6E"},{"x":-2,"y":2,"f":"#FCC24E"},{"x":3,"y":-3,"f":"#6E6E6E"},
		{"x":-3,"y":-3,"f":"#6E6E6E"},{"x":-1,"y":-1,"f":"#FCC24E"},{"x":-1,"y":-1,"f":"#6E6E6E"},{"x":-1,"y":1,"f":"#FCC24E"},{"x":-3,"y":3,"f":"#6E6E6E"},{"x":1,"y":-1,"f":"#FCC24E"},
		{"x":-1,"y":1,"f":"#FCC24E"},{"x":-2,"y":2,"f":"#6E6E6E"},{"x":-1,"y":-1,"f":"#FCC24E"},{"x":-3,"y":3,"f":"#6E6E6E"},{"x":1,"y":1,"f":"#FCC24E"},{"x":2,"y":2,"f":"#6E6E6E"},
		{"x":-2,"y":2,"f":"#6E6E6E"},{"x":-2,"y":-2,"f":"#FCC24E"},{"x":1,"y":1,"f":"#6E6E6E"},{"x":-3,"y":3,"f":"#FCC24E"},{"x":2,"y":2,"f":"#6E6E6E"},{"x":3,"y":3,"f":"#FCC24E"},
		{"x":-1,"y":-2,"f":"#FCC24E"},{"x":-3,"y":-3,"f":"#6E6E6E"},{"x":-1,"y":1,"f":"#FCC24E"},{"x":2,"y":2,"f":"#6E6E6E"},{"x":-2,"y":2,"f":"#FCC24E"},{"x":1,"y":1,"f":"#6E6E6E"}
	];
	var state3 = [
		{"x":-2,"y":-2,"f":"#6E6E6E"},{"x":-2,"y":-2,"f":"#FCC24E"},{"x":2,"y":-2,"f":"#6E6E6E"},{"x":3,"y":-3,"f":"#FCC24E"},{"x":-2,"y":2,"f":"#6E6E6E"},{"x":-1,"y":1,"f":"#FCC24E"},
		{"x":3,"y":-3,"f":"#FCC24E"},{"x":-3,"y":-3,"f":"#6E6E6E"},{"x":1,"y":-1,"f":"#FCC24E"},{"x":3,"y":3,"f":"#6E6E6E"},{"x":-2,"y":2,"f":"#FCC24E"},{"x":3,"y":-3,"f":"#6E6E6E"},
		{"x":-3,"y":-3,"f":"#6E6E6E"},{"x":-1,"y":-1,"f":"#FCC24E"},{"x":-1,"y":-1,"f":"#6E6E6E"},{"x":-1,"y":1,"f":"#FCC24E"},{"x":-3,"y":3,"f":"#6E6E6E"},{"x":1,"y":-1,"f":"#FCC24E"},
		{"x":-1,"y":1,"f":"#FCC24E"},{"x":-2,"y":2,"f":"#6E6E6E"},{"x":-1,"y":-1,"f":"#FCC24E"},{"x":-3,"y":3,"f":"#6E6E6E"},{"x":1,"y":1,"f":"#FCC24E"},{"x":2,"y":2,"f":"#6E6E6E"},
		{"x":-2,"y":2,"f":"#6E6E6E"},{"x":-2,"y":-2,"f":"#FCC24E"},{"x":1,"y":1,"f":"#6E6E6E"},{"x":-3,"y":3,"f":"#FCC24E"},{"x":2,"y":2,"f":"#6E6E6E"},{"x":3,"y":3,"f":"#FCC24E"},
		{"x":-1,"y":-1,"f":"#FCC24E"},{"x":-3,"y":-3,"f":"#6E6E6E"},{"x":-1,"y":1,"f":"#FCC24E"},{"x":2,"y":2,"f":"#6E6E6E"},{"x":-2,"y":2,"f":"#FCC24E"},{"x":1,"y":1,"f":"#6E6E6E"}
	];
	var state4 = [
		{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},
		{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},
		{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"}
	];
//	var state5 = [
//		{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},
//		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},
//		{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
//		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},
//		{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
//		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"}
//	];
	var state5 = [
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"}
	];
	var state6 = [
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},
		{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"}
	];
	
	// var originState = [{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"},{"x":0,"y":0,"f":"#FCC24E"},{"x":0,"y":0,"f":"#6E6E6E"}];
	
	var DURATION = 1000;
	var diamonds = [];
	var timeouts = [];
	
	function createLogo() {
		var w = 300,
			h = 300,
			paper = Raphael('logo-animation', w, h);
		
		// Draw outline of paper
		// paper.rect(0, 0, paper.width, paper.height);
		
		// Start the positioning off at the center
		var currentX = (15 * 5) + ((w - (30 * 6)) / 2);
		var currentY = (0) + ((h - (30 * 6)) / 2);
		
		// Create diamonds
		for (var i = 0; i < 6; i++) {
			for (var j = 0; j < 6; j++) {
				var diamond = paper.rect(0, 0, 20, 20);
				originFill = ((j + i % 2) % 2 == 1) ? '#FCC24E' : '#6E6E6E';
				diamond.attr({stroke: "none", fill: originFill, rotation: 45});
				diamonds.push({shape: diamond, originX: currentX, originY: currentY, originFill: originFill});
				currentX += 15;
				currentY += 15;
			}
			currentX -= 7 * 15;
			currentY -= 5 * 15;
		}
		moveToState(state1);
		// generateOriginState();
		// generateItermediateState();
	}
	
	function generateOriginState() {
		// Create diamonds and generate their origin positions
		var generatedOriginState = [];
		for (var i=0; i < diamonds.length; i++) {
			var diamond = diamonds[i];
			generatedOriginState.push({x:0, y:0, f:diamond.originFill});
		}
		moveToState(generatedOriginState);
	}
	
	function generateItermediateState() {	
		// Generate position and color arrays for intermediate stage
		var generatedIntermediateState = [];
		for (var i=0; i < diamonds.length; i++) {
			var diamond = diamonds[i];
			
			// Tweak the values on the line below to change distance of blocks from the center
			var distanceMultiplier = Math.floor(Math.random() * 3 + 1);
			
			var directionChoice = Math.floor(Math.random() * 2);
			var directionHeading;
			var offsetX = 0;
			var offsetY = 0;
			
			if (i % 6 < 3) {
				if (i < 16) {
					// top
					offsetX = directionChoice ? distanceMultiplier : -distanceMultiplier;
					offsetY = directionChoice ? -distanceMultiplier : -distanceMultiplier;
				} else {
					// left
					offsetX = directionChoice ? -distanceMultiplier : -distanceMultiplier;
					offsetY = directionChoice ? -distanceMultiplier : distanceMultiplier;
				}
			} else {
				if (i < 18) {
					//right
					offsetX = directionChoice ? distanceMultiplier : -distanceMultiplier;
					offsetY = directionChoice ? -distanceMultiplier : distanceMultiplier;
				} else {
					// bottom
					offsetX = directionChoice ? -distanceMultiplier : distanceMultiplier;
					offsetY = directionChoice ? distanceMultiplier : distanceMultiplier;
				}
			}
			
			generatedIntermediateState.push({x:offsetX, y:offsetY, f:diamond.originFill});
		}
		moveToState(generatedIntermediateState);
	}
	
	function animateToState(state) {
		clearAnimationTimeouts();
		for (var i=0; i < diamonds.length; i++) {
			var diamond = diamonds[i];
			diamond.shape.stop();
			
			// diamond.shape.animate({
				// x:diamond.originX + state[i].x * 15,
				// y:diamond.originY + state[i].y * 15,
				// fill: state[i].f},
				// DURATION);
				
			// Delayed version
			var delay = Math.round((Math.random() * 4000) / 500) * 1000;
			timeouts[i] = setTimeout(
				(function(o) {
					return function()
					{
						anim(o);
					}
				})([
					i,
					{
						x:diamond.originX + state[i].x * 15,
						y:diamond.originY + state[i].y * 15,
						fill: state[i].f
					}
					]), delay
			);
		}
	}
	
	function animateToStateByReduction(state, reduction) {
		clearAnimationTimeouts();
		
		for (var i=0; i < diamonds.length; i++) {
			var diamond = diamonds[i];
			diamond.shape.stop();
			
			var offsetX = 0;
			if (state[i].x >= 0) {
				offsetX = Math.max(0, state[i].x - reduction);
			} else {
				offsetX = Math.min(0, state[i].x + reduction);
			}
			
			var offsetY = 0;
			if (state[i].y >= 0) {
				offsetY = Math.max(0, state[i].y - reduction);
			} else {
				offsetY = Math.min(0, state[i].y + reduction);
			}
			
			// diamond.shape.animate({
				// x:diamond.originX + offsetX * 15,
				// y:diamond.originY + offsetY * 15,
				// fill: state[i].f},
				// DURATION);
			
			// Delayed version
			var delay = Math.round((Math.random() * 4000) / 500) * 1000;
			timeouts[i] = setTimeout(
				(function(o) {
					return function()
					{
						anim(o);
					}
				})([
					i,
					{
						x:diamond.originX + offsetX * 15,
						y:diamond.originY + offsetY * 15,
						fill: state[i].f
					}
					]), delay
			);
		}
	}
	
	function clearAnimationTimeouts() {
		for (var j=0; j < timeouts.length; j++) {
			clearTimeout(timeouts[j]);
		}
	}
	
	function anim(o) {
		diamonds[o[0]].shape.animate({
			x: o[1].x,
			y: o[1].y,
			fill: o[1].fill},
			DURATION);
	}
	
	function moveToState(state) {
		for (var i=0; i < diamonds.length; i++) {
			var diamond = diamonds[i];
			diamond.shape.attr({
				x:diamond.originX + state[i].x * 15,
				y:diamond.originY + state[i].y * 15,
				fill: state[i].f
			});
		}
	}
	
	return {
		createLogo: createLogo,
		gotoState: function(i) {
			switch (i) {
				case 1:
					moveToState(state1);
					animateToStateByReduction(state1, 1);
					break;
				case 2:
					animateToStateByReduction(state2, 2);
					break;
				case 3:
					animateToStateByReduction(state3, 3);
					break;
				case 4:
					animateToState(state4);
					break;
				case 5:
					animateToState(state5);
					break;
				case 6:
					animateToState(state6);
					break;
			}
		}
	};
	
}();

$(function()
{
	$('#home #slideshow').each(
		function()
		{
			var container = $(this),
				items = container
							.find('>li')
							.css('opacity', 0),
				numItems = items.length,
				currentPage,
				currentItem,
				switchPageTimeout,
				arrowBack = $('<a id="arrow-back" class="arrow" href="#">Previous slide</a>'),
				arrowForward = $('<a id="arrow-forward" class="arrow" href="#">Next slide</a>'),
				navDiamonds = $('<ul/>'),
				logoAnimationDiv = $('#logo-animation'),
				i
				;

			logoAnimation.createLogo();

			function gotoPage(n, skipAnimation)
			{
				if (switchPageTimeout) {
					clearTimeout(switchPageTimeout);
					switchPageTimeout = undefined;
				}
				if (currentItem != undefined) {
					items.eq(currentItem-1).stop().fadeTo(300, 0);
					navDiamonds.eq(currentPage-1).removeClass('active');
				}
				currentPage = n;

				if (currentPage == 1) {
					if (!$.browser.msie) {
						logoAnimationDiv.css('opacity', 0).fadeTo(1000, 1);
					}
				}

				currentItem = n;
				if (skipAnimation) {
					items.eq(currentItem-1).stop().css('opacity', 1);
				} else {
					items.eq(currentItem-1).stop().fadeTo(1500, 1);
				}
				arrowBack[currentPage == 1 ? 'addClass' : 'removeClass']('disabled');
				arrowForward[currentPage == numItems ? 'addClass' : 'removeClass']('disabled');
				navDiamonds.eq(n-1).addClass('active');
				
				logoAnimation.gotoState(n);

				switchPageTimeout = setTimeout(
					nextPage,
					currentPage == numItems ? 15000 : 10000
				);
			}
			
			function nextPage()
			{
				switchPageTimeout = undefined;
				if (currentPage == numItems) {
					gotoPage(1);
				} else {
					gotoPage(currentPage + 1);
				}
			}

			arrowBack.bind(
				'click',
				function()
				{
					if (currentPage > 1) {
						gotoPage(currentPage - 1);
					}
					return false;
				}
			);
			arrowForward.bind(
				'click',
				function()
				{
					if (currentPage < numItems) {
						gotoPage(currentPage + 1);
					}
					return false;
				}
			);
			for (i=0; i<numItems; i++) {
				navDiamonds.append(
					$('<li/>').append(
						$('<a href="#">' + (i + 1) + '</a>').bind(
							'click',
							function(index)
							{
								return function()
								{
									gotoPage(index);
									return false;
								}
							} (i+1)
						)
					)
				);
			}
			
			container
					.before(arrowBack)
					.after(
						arrowForward,
						$('<nav/>').append(navDiamonds)
					);

			navDiamonds = navDiamonds.find('a');

			items.eq(0).show();

			gotoPage(1, true);
		}
	)
});


/**
 * Background position animation...
 * @author Alexander Farkas
 * v. 1.22
 */
(function($) {
	if(!document.defaultView || !document.defaultView.getComputedStyle){ // IE6-IE8
		var oldCurCSS = $.curCSS;
		$.curCSS = function(elem, name, force){
			if(name === 'background-position'){
				name = 'backgroundPosition';
			}
			if(name !== 'backgroundPosition' || !elem.currentStyle || elem.currentStyle[ name ]){
				return oldCurCSS.apply(this, arguments);
			}
			var style = elem.style;
			if ( !force && style && style[ name ] ){
				return style[ name ];
			}
			return oldCurCSS(elem, 'backgroundPositionX', force) +' '+ oldCurCSS(elem, 'backgroundPositionY', force);
		};
	}

	var oldAnim = $.fn.animate;
	$.fn.animate = function(prop){
		if('background-position' in prop){
			prop.backgroundPosition = prop['background-position'];
			delete prop['background-position'];
		}
		if('backgroundPosition' in prop){
			prop.backgroundPosition = '('+ prop.backgroundPosition;
		}
		return oldAnim.apply(this, arguments);
	};

	function toArray(strg){
		strg = strg.replace(/left|top/g,'0px');
		strg = strg.replace(/right|bottom/g,'100%');
		strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");
		var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
		return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];
	}

	$.fx.step. backgroundPosition = function(fx) {
		if (!fx.bgPosReady) {
			var start = $.curCSS(fx.elem,'backgroundPosition');
			if(!start){//FF2 no inline-style fallback
				start = '0px 0px';
			}

			start = toArray(start);
			fx.start = [start[0],start[2]];
			var end = toArray(fx.end);
			fx.end = [end[0],end[2]];

			fx.unit = [end[1],end[3]];
			fx.bgPosReady = true;
		}
		//return;
		var nowPosX = [];
		nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
		nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];
		fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1];

	};
})(jQuery);
