


var fePos = null;


var feImgs = new Array();




var C_FE_ID = "fisheye";


var C_FE_POS_LEFT = 0; 
var C_FE_POS_TOP = 1; 


var C_FE_IMG_ID = 0; 
var C_FE_IMG_MAG = 1; 
var C_FE_IMG_WIDTH = 2; 
var C_FE_IMG_HEIGHT = 3; 
var C_FE_IMG_LEFT = 4; 
var C_FE_IMG_TOP = 5; 
var C_FE_IMG_RIGHT = 6; 
var C_FE_IMG_BOTTOM = 7; 
var C_FE_IMG_WIDTH_MIN = 8; 
var C_FE_IMG_HEIGHT_MIN = 9; 
var C_FE_IMG_LEFT_MIN = 10; 
var C_FE_IMG_TOP_MIN = 11; 
var C_FE_IMG_WIDTH_INC = 12; 
var C_FE_IMG_HEIGHT_INC = 13; 
var C_FE_IMG_LEFT_REL_FE = 14; 
var C_FE_IMG_TOP_REL_FE = 15; 
var C_FE_IMG_RIGHT_REL_FE = 16; 
var C_FE_IMG_BOTTOM_REL_FE = 17; 


function feInit(mag)
{
	
	initEventListeners();
	
	
	var fe = document.getElementById(C_FE_ID);
	
	
	fePos = findPos(fe);
	
	
	var feItems = fe.getElementsByTagName("div"); 
	for (var i = 0; i < feItems.length; i++)
	{
		
		var img = feItems[i].getElementsByTagName("img")[0]; 
		
		
		var imgAttrs = new Array(img.getAttribute("id")); 
		
		imgAttrs.push(mag); 
		
		
		
		var width = img.style.width;
		if (width != "")
		{
			width = width.substring(0, width.length - 2); 
			width = new Number(width);
		}
		else 
		{
			var oImg = new Image();
			oImg.src = img.getAttribute("src");
			width = oImg.width;
		}
		imgAttrs.push(width); 

		
		
		var height = img.style.height;
		if (height != "")
		{
			height = height.substring(0, height.length - 2); 
			height = new Number(height);
		}
		else 
		{
			var oImg = new Image();
			oImg.src = img.getAttribute("src");
			height = oImg.height;
		}
		imgAttrs.push(height); 
		
		
		var left = img.style.left;
		
		if (left)
		{
			left = left.substring(0, left.length - 2); 
			left = new Number(left);
		}
		else
		{
			left = 0;
		}
		imgAttrs.push(left); 

		
		var top  = img.style.top;
		
		if (top)
		{
			top = top.substring(0, top.length - 2); 
			top = new Number(top);
		}
		else
		{
			top = 0;
		}
		imgAttrs.push(top); 

		
		imgAttrs.push(left + width); 
		imgAttrs.push(top + height); 
		
		
		imgAttrs.push(mag * width); 
		imgAttrs.push(mag * height); 
		
		
		
		imgAttrs.push(left + width * (1 - mag) / 2); 
		imgAttrs.push(top + height * (1 - mag) / 2); 
		
		
		
		
		var denom = Math.max(width, height);
		imgAttrs.push(width / denom); 
		imgAttrs.push(height / denom); 
		
		
		var feItemLeft = feItems[i].style.left;
		feItemLeft = feItemLeft.substring(0, feItemLeft.length - 2); 
		feItemLeft = new Number(feItemLeft);
		imgAttrs.push(feItemLeft + left); 
		
		
		var feItemTop = feItems[i].style.top;
		feItemTop = feItemTop.substring(0, feItemTop.length - 2); 
		feItemTop = new Number(feItemTop);
		imgAttrs.push(feItemTop + top); 
		
		
		imgAttrs.push(feItemLeft + left + width); 
		imgAttrs.push(feItemTop + top + height); 
		
		
		feImgs.push(imgAttrs);
	}
	
	
	magnify(null, null);
}


function initEventListeners()
{
	
	var fisheye = document.getElementById(C_FE_ID);

	
	if (fisheye.addEventListener) 
	{
		fisheye.addEventListener("mousemove", feMagnify, false);
	}
	else if (fisheye.attachEvent) 
	{
		fisheye.attachEvent("onmousemove", feMagnify);
	}
}


function findPos(obj)
{
	var curleft = curtop = 0;
	if (obj.offsetParent)
	{
		do
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	
	return [curleft, curtop];
}


function feMagnify(event)
{
	
	

	
	
	
	
	html = document.getElementsByTagName("html")[0]; 
	
	var xmouse = event.clientX + html.scrollLeft - fePos[C_FE_POS_LEFT];
	var ymouse = event.clientY + html.scrollTop - fePos[C_FE_POS_TOP];
	
	
	magnify(xmouse, ymouse);
}


function magnify(xmouse, ymouse)
{
	
	
	if (!xmouse || !ymouse)
	{
		xmouse = ymouse = 9999;
	}
	
	var dx = null; 
	var dy = null; 
	
	for (var i = 0; i < feImgs.length; i++)
	{
		
		if (xmouse < feImgs[i][C_FE_IMG_LEFT_REL_FE])
		{
			dx = feImgs[i][C_FE_IMG_LEFT_REL_FE] - xmouse;
		}
		else if (xmouse > feImgs[i][C_FE_IMG_RIGHT_REL_FE])
		{
			dx = xmouse - feImgs[i][C_FE_IMG_RIGHT_REL_FE];
		}
		else 
		{
			dx = 0;
		}
		
		
		if (ymouse < feImgs[i][C_FE_IMG_TOP_REL_FE])
		{
			dy = feImgs[i][C_FE_IMG_TOP_REL_FE] - ymouse;
		}
		else if (ymouse > feImgs[i][C_FE_IMG_BOTTOM_REL_FE])
		{
			dy = ymouse - feImgs[i][C_FE_IMG_BOTTOM_REL_FE];
		}
		else 
		{
			dy = 0;
		}
		
		
		
		var delta = Math.max(dx, dy);
		
		
		var width = feImgs[i][C_FE_IMG_WIDTH] - delta * feImgs[i][C_FE_IMG_WIDTH_INC];
		width = Math.max(width, feImgs[i][C_FE_IMG_WIDTH_MIN]);

		
		var left = feImgs[i][C_FE_IMG_LEFT] + delta * feImgs[i][C_FE_IMG_WIDTH_INC] / 2;
		left = Math.min(left, feImgs[i][C_FE_IMG_LEFT_MIN]);
		
		
		var height = feImgs[i][C_FE_IMG_HEIGHT] - delta * feImgs[i][C_FE_IMG_HEIGHT_INC];
		height = Math.max(height, feImgs[i][C_FE_IMG_HEIGHT_MIN]);

		
		var top = feImgs[i][C_FE_IMG_TOP] + delta * feImgs[i][C_FE_IMG_HEIGHT_INC] / 2;
		top = Math.min(top, feImgs[i][C_FE_IMG_TOP_MIN]);
		
		
		
		var img = document.getElementById(feImgs[i][C_FE_IMG_ID]);
		img.style.width = width + "px";
		img.style.height = height + "px";
		img.style.left = left + "px";
		img.style.top = top + "px";
	}
}

