/* Author: 
	* Charles X. Morrissey
	* version: 090811
*/

(function($) {
	
	var $container, $parts, $windowHeight, $documentHeight;
	var DISTANCE = 1800, IE = (!$.browser.msie || $.browser.version > 7);
    
	function init() {
		$container = $('#parts');
		$parts = $container.find('img').not('#item-01');
		$windowHeight = $(window).height();
		
		$('#page-top').css('height', $windowHeight - 200);
		$('#end').css('height', 0 + 'px');
				
		$documentHeight = $('body').height();
		
		var threshold = $container.offset().top - $windowHeight / 3;
		var count = $parts.length;
		
		$parts.each(function(i) {
			var me = $(this),
			posLeft = (parseInt(me.css('marginLeft')) + me.width() / 2) / $container.width(),
			posTop = (parseInt(me.css('marginTop')) + me.height() / 2) / $container.height();
			
			$(this).data('coords', {
				top: DISTANCE * posTop,
				left: DISTANCE * (posLeft - 0.5) * 4,
				origLeft: posLeft,
				origTop: posTop,
				angle: (posLeft > 0.5 ? -1 : 1) * Math.round(parseInt(me.css('marginTop')) / $container.height() * 60 + 0),
				threshold: threshold + parseInt(me.css('marginTop'))
			});
			
		});
		
		$parts.each(function() {
			var part = $(this), origLeft, origTop;
			part.draggable({
				start: function() {
					part.data('moved', true);
				},
				scroll: true,
				stop: function() {
					part.css({});
				}
			});
		});       
	};
	
	function ease(value, max) {
		return Math.sin((value / max - 1) * Math.PI / 2) * max + max;
	};
	
	var locked = false;
	
	function position() {
		var scrollTop = $(window).scrollTop();
		
		if (scrollTop >= $documentHeight - $windowHeight - 10) {
			locked = true;
		}
		else if (scrollTop < 10 && locked) {
			locked = false;
			$parts.each(function(i) {
				var coords = $(this).data('coords');
				$(this).stop().animate({
					top: coords.top + 'px',
					left: coords.left + 'px'
					}, 1000);
				});
			}
			
			if (locked) {
				$parts.css({
					top: 0,
					left: 0,
					'-webkit-transform': 'rotate(0)',
					'-moz-transform': 'rotate(0)'
				});
			}
			else {      
				$parts.each(function(i) {
					var coords = $(this).data('coords'),
					factor = Math.max(0, coords.threshold - scrollTop) / coords.threshold,
					easedFactor = ease(factor, 1),
					deg = Math.round(coords.angle * easedFactor),
					rotate = 'rotate(' + deg + 'deg)';
					
					if ($(this).data('moved')) {
						var func = 'css';
						$(this).data('moved', false);
					}
					else {
						var func = 'css';
					}
					$(this).stop()[func]({
						top: coords.top * easedFactor + 'px',
						left: coords.left * easedFactor + 'px',
						'-webkit-transform': rotate,
						'-moz-transform': rotate
					});
				});
			}
		};
		
		$(function() {
			// $('#page-top .loading').show();
			
			$('#end').css({
				height: $('#end').height() + 'px'
 			});
			
			init();
			
			$(window).resize(function() {
				init();
				if (IE) {
					position();
				}
			});
			
			if (IE) {
				$(window).scroll(position);
				position();
			}			
			$container.find('img').tooltip({
				effect: 'slide',
				position: ['center', 'right']
				//offset:[100, 100]
			});
			
			$container.find('img').click(function(){
				var url = $(this).attr('data-link');
				window.location.href = url;
			});
			
		});
		
		$(window).load(function() {
			$('#page-top .loading').fadeOut(300, function() {
				if ($(window).scrollTop() < 50) {
					$('#parts').css({
						top: ($(window).scrollTop() + 100) + 'px',
						opacity: 1
					}).animate({
						top: 0
						}, 300);
				}
				else {
					$('#parts').animate({
						opacity: 1
						}, 300);
				}
				$('#page-top .content').fadeIn(300);
			});
		});
  
})(jQuery);

