var mickeyCounter = 0;

function updateCoordinates(e, eyes) {
	if (mickeyCounter++ < 1) {
		return;
	}
	mickeyCounter = 0;

	var mouseX = 0;
	var mouseY = 0;

	if (e) {
		mouseX = YAHOO.util.Event.getPageX(e);
		mouseY = YAHOO.util.Event.getPageY(e);
	}

	// Cache the XY coords, or else everthing slows down insanely in case of more than one eye.
	var eyeCache = {};
	
	for (eye=0; eye < eyes.length; eye++) {
		var properties = eyes[eye];

		if (eyeCache[properties['face']] == null) {
			eyeCache[properties['face']] = {
				'x' : YAHOO.util.Dom.getX(properties['face']),
				'y' : YAHOO.util.Dom.getY(properties['face'])
			};
		}

		var eyeCenterX = eyeCache[properties['face']]['x'] + properties['baseX'];
		var eyeCenterY = eyeCache[properties['face']]['y'] + properties['baseY'];
		var eyeOffsetX = YAHOO.util.Dom.get(properties['eye']).offsetWidth/2;
		var eyeOffsetY = YAHOO.util.Dom.get(properties['eye']).offsetHeight/2;
	
		var dX = mouseX - eyeCenterX;
		var dY = mouseY - eyeCenterY;
		var distance = Math.sqrt(dX*dX + dY*dY);
	
		var cosAlpha = dX / distance;
		var sinAlpha = dY / distance;
	
		var boundX = Math.round(cosAlpha*(properties['rX'] - eyeOffsetX) + eyeCenterX);
		var boundY = Math.round(sinAlpha*(properties['rY'] - eyeOffsetY) + eyeCenterY);
	
		if ((mouseX > eyeCenterX && mouseX > boundX) || (mouseX < eyeCenterX && mouseX < boundX)) {
			newX = boundX;
		} 
		else {
			newX = mouseX;
		}

		if ((mouseY > eyeCenterY && mouseY > boundY) || (mouseY < eyeCenterY && mouseY < boundY)) {
			newY = boundY;
		} 
		else {
			newY = mouseY;
		}

		// Update image location.
		YAHOO.util.Dom.setXY(properties['eye'], [
			Math.round(newX - eyeOffsetX),
			Math.round(newY - eyeOffsetY)
		]);
	}

}

