// preload
(function() {
	var imgs = [];
	for(var i = 1; i<=8; i++) {
    	imgs[i] = new Image;
    	imgs[i].src = '/img/insectography/insect-0'+i+'-on.png';
	}
})();


$(function() {
	var $insectography = $('#insectography'),
		$insectoscope = $('#insectoscope'),
		$mask = $('#insectoscope-mask'),
		axis = document.getElementById('hand-axis'),
		currentInsectId = 1,
		switchDelay = false,
		wheelSensitivity = 0,
		wheelReactivity = 80,
		wheelActive = true,
		
		switchTo = function(insectClass, direct) {
			insectClass = 'insect-0'+(currentInsectId = insectClass);
			if(!$insectography.hasClass(insectClass)) {
				$insectography.removeClass().addClass(insectClass);
			}
			if(switchDelay) {
				clearTimeout(switchDelay);
			}
			if(direct) {
				switchInsectoscope();
			} else {
				switchDelay = setTimeout(switchInsectoscope, 300);
			}
		},
		
		switchInsectoscope = function() {
			var currentClass = $insectography.attr('class');
			if(!$insectoscope.hasClass(currentClass)) {
				$mask.show().stop(true, true).animate({opacity: 1}, 300, function() {
					$insectoscope.removeClass().addClass(currentClass);
					$mask.animate({opacity: 0}, 300, function() {
						$mask.hide();
					});
				});
			}
		},
		
		testAngle = function(angle, steps, decal) {
			for(var i in steps) {
				if(angle < steps[i]) {
					return switchTo(parseInt(i, 10)+parseInt(decal), true);
				}
			}
			return switchTo(parseInt(++i, 10)+parseInt(decal), true);
		},

		waitBeforeNextWheel = function() {
			wheelActive = false;
			setTimeout(function() {
				wheelActive = true;
			}, wheelReactivity);
		},

		onScrollWheel = function(event) {
			var delta = 0;
	        if(!event) /* For IE. */
				event = window.event;
	        if(event.wheelDelta) { /* IE/Opera. */
				delta = event.wheelDelta/120;
				/** In Opera 9, delta differs in sign as compared to IE. */
				if(window.opera)
					delta = -delta;
	        } else if(event.detail) { /** Mozilla case. */
				/** In Mozilla, sign of delta is different than in IE.
				 * Also, delta is multiple of 3.
				 */
				delta = -event.detail/3;
	        }
	//        $('footer li').html(delta);
			if(wheelActive && Math.abs(delta) > wheelSensitivity) {
				if(delta > 0 && currentInsectId > 1) {
					waitBeforeNextWheel();
					switchTo(--currentInsectId);
				} else if(delta < 0 && currentInsectId < 8) {
					waitBeforeNextWheel();
					switchTo(++currentInsectId);
				}
			}
			event.preventDefault();
		};
	
	if(axis.addEventListener) {
        /** DOMMouseScroll is for mozilla. */
        axis.addEventListener('DOMMouseScroll', onScrollWheel, false);
	}
	/** IE/Opera. */
	axis.onmousewheel = onScrollWheel;
	
	$(axis).click(function(e) {
		var trigoX = (e.offsetX || e.layerX)-222,
			trigoY = (e.offsetY || e.layerY)-232,
			dist = Math.sqrt(trigoX*trigoX + trigoY*trigoY),
			angle = Math.acos(trigoX/dist)*180/Math.PI;
		
		if(trigoY < 0) {
			testAngle(angle, [112, 135, 157, 180], 1);
		} else {
			testAngle(360-angle, [202, 224, 246], 5);
		}
	});
});
