/*
	REQUIRES prototype.js!
	Use the following to set up this code:
	var name_your_varialbe = new tbFishEye({obj:image_container,thumbwidth:width_of_thumb,thumbheight:height_of_thumb});
	Event.observe(document,'mousemove', name_your_variable.tbFishEyeMouseMove);
*/

function tbFishEye(inob)
{
	// Private variables, all fixed by 'inob' input.
	var containerobj = Object.isElement(inob.obj) ? inob.obj : null;
	var maxDist = Object.isNumber(inob.maxdist) ? inob.maxdist : 0;
	var thumbWidth = Object.isNumber(inob.thumbwidth) ? inob.thumbwidth : 50;
	var thumbHeight = Object.isNumber(inob.thumbheight) ? inob.thumbheight : 50;
	// scrollTracker gets updated on scrolling events
	var scrollTracker;
	if(Prototype.Browser.Opera)
	{
		scrollTracker = {left:0,top:0};
	}
	else
	{
		scrollTracker = document.viewport.getScrollOffsets();
		Event.observe(window,'scroll', scrollChange);
	}
	
	// Registered to catch all mouse movements.
	this.mouseMove = function(ev) {
		if(containerobj == null) return;
		var pX = Event.pointerX(ev) - scrollTracker.left;
		var	pY = Event.pointerY(ev) - scrollTracker.top;
		var imgs = containerobj.immediateDescendants();
		for (var i = 0; i < imgs.length; i++) {
			var distFromMouse = calcDistFromMouse(pX, pY, imgs[i]);
			if (distFromMouse < 45) {
				var newHeight = parseInt(distFromMouse * (-0.4) + (thumbHeight + 20));
				var newWidth = parseInt(newHeight*thumbWidth/thumbHeight);
				imgs[i].setStyle({ width: newWidth + 'px', height: newHeight + 'px'});
			} else {
				imgs[i].setStyle({ height: thumbHeight + 'px', width: thumbWidth + 'px'});
			}
		}
	}

	// Registered to catch all window scrolling movements	
	function scrollChange(ev)
	{
		scrollTracker = document.viewport.getScrollOffsets();
	}
	
	function resetScaling () {
		var imgs = obj.immediateDescendants();
		for (var i = 0; i < imgs.length; i++) {
			var newWidth = thumbWidth;
			var newHeight = thumbHeight;
			imgs[i].setStyle({ width: newWidth, height: newHeight});
		}
	}
	
	function calcDistFromMouse(mX, mY, elem) {
		var elemCenterX = parseInt(Position.page(elem)[0]) + (parseInt(elem.getStyle('width')) / 2);
		var elemCenterY = parseInt(Position.page(elem)[1]) + (parseInt(elem.getStyle('height')) / 2);
		var distance = parseInt(Math.sqrt((elemCenterX - mX) * (elemCenterX - mX) + (elemCenterY - mY) * (elemCenterY - mY)));
		return distance;
	}
	
	function checkMousePos(pX, pY, eX, eY, eWidth ){
		if (pY - eY > 200)
			return false;
		if (pX > eX) {
			if (pX - (eX + eWidth) > 200)
				return false;
		} else {
			if (eX - pX > 200)
				return false;
		}
		return true;
	}
	
}

