﻿if (document.getElementById && document.getElementsByTagName) {
if (window.addEventListener) window.addEventListener('load', init, false);
else if (window.attachEvent) window.attachEvent('onload', init);
}

function init() {
		var sizeOffset = 50;		
		var animElements = document.getElementById("fisheye_menu").getElementsByTagName("img");
		for(var i=0; i<animElements.length; i++) {
			animElements[i].proportion = animElements[i].height/animElements[i].width;
			animElements[i].startWidth = animElements[i].width - sizeOffset;
			animElements[i].startHeight = animElements[i].height - ((animElements[i].height/animElements[i].width) * sizeOffset);
			animElements[i].endWidth = animElements[i].width;
			animElements[i].endHeight = animElements[i].height;
			animElements[i].style.width = animElements[i].startWidth + 'px';
			animElements[i].style.height = animElements[i].startHeight + 'px';
			animElements[i].onmouseover = changeSize;
			animElements[i].onmouseout = restoreSize;
		}

		function changeSize() {
			if (!this.currentWidth) this.currentWidth = this.startWidth;
			resizeAnimation(this,this.startWidth,this.endWidth,15,10,0.333);			
		}

		function restoreSize() {
			if (!this.currentWidth) return;
			resizeAnimation(this,this.endWidth,this.startWidth,15,10,0.5);
		}
	}

function resizeAnimation(elem,startWidth,endWidth,steps,intervals,powr) {
	if (elem.widthChangeMemInt) window.clearInterval(elem.widthChangeMemInt);
	var actStep = 0;
	elem.widthChangeMemInt = window.setInterval(
		function() {
			elem.currentWidth = easeInOut(startWidth,endWidth,steps,actStep,powr);
			elem.style.width = elem.currentWidth + "px";
			elem.style.height = (elem.proportion * elem.currentWidth) + "px";
			actStep++;
			if (actStep > steps) window.clearInterval(elem.widthChangeMemInt);
		}
		,intervals)
}

function easeInOut(minValue,maxValue,totalSteps,actualStep,powr) {
//Generic Animation Step Value Generator By www.hesido.com
	var delta = maxValue - minValue;
	var stepp = minValue+(Math.pow(((1 / totalSteps)*actualStep),powr)*delta);
	return Math.ceil(stepp)
}

