var extMouseWheel = function()
{
	var keepDeltaAtPlusMinusThree = true;
	var f = [];
	var thisMovie = function(movieName)
	{
		if (navigator.appName.indexOf("Microsoft") != -1) {
			return window[movieName];
		} else {
			return document[movieName];
		}
	}
	var findPosX = function(obj)
	{
		var curleft = 0;
		if(obj.offsetParent)
			while(1) 
			{
			  curleft += obj.offsetLeft;
			  if(!obj.offsetParent)
				break;
			  obj = obj.offsetParent;
			}
		else if(obj.x)
			curleft += obj.x;
		return curleft;
	}
	var findPosY = function(obj)
	{
		var curtop = 0;
		if(obj.offsetParent)
			while(1)
			{
			  curtop += obj.offsetTop;
			  if(!obj.offsetParent)
				break;
			  obj = obj.offsetParent;
			}
		else if(obj.y)
			curtop += obj.y;
		return curtop;
	}
	var uaContains = function(str)
	{
		return (navigator.userAgent.indexOf(str) != -1);
	}
	var onWheelHandler = function(event)
	{
		var delta = 0;
		if (!event) event = window.event;
		if (event.wheelDelta)
		{

			// Safari
			delta = event.wheelDelta/120;
			if (window.opera) delta = -delta;
		}
		else if (event.detail) // Firefox
			delta = -event.detail*3;
		
		if (keepDeltaAtPlusMinusThree)
		{
			if (delta > 0) delta = 3;
			else if (delta == 0) delta = 0;
			else delta = -3;
		}
		
		if (delta)
		{
			
			var thisFlashMovieId = null;
			for (var j in f)
				if (f[j] != null && f[j] == event.currentTarget) thisFlashMovieId = j;
			
			var thisMouse;
			
			if (uaContains("Camino"))
				thisMouse = {x:event.layerX, y:event.layerY};
			else if (uaContains('Firefox'))
				thisMouse = {x:(event.layerX - findPosX(event.currentTarget)), y:(event.layerY - findPosY(event.currentTarget))};
			else
				thisMouse = {x:event.offsetX, y:event.offsetY};
			
			thisMouse.ctrlKey = (uaContains('Mac')) ? (event.metaKey || event.ctrlKey) : event.ctrlKey;
			thisMouse.altKey = event.altKey;
			thisMouse.shiftKey = event.shiftKey;
			thisMouse.buttonDown = false;
			
			if (thisMovie(thisFlashMovieId).dispatchExternalMouseWheelEvent){
				
				thisMovie(thisFlashMovieId).dispatchExternalMouseWheelEvent(delta, thisMouse.x, thisMouse.y,
																			thisMouse.ctrlKey, thisMouse.altKey,
																			thisMouse.shiftKey, thisMouse.buttonDown);
			}
		};
		
		// Prevent default actions caused by mouse wheel
		if (event.preventDefault) event.preventDefault();
		event.returnValue = false;
		
	}
	
	return {
		// initialize mouse wheel capturing by setting the listener
		// (this is called from within the Flash app):
		initCaptureFor: function(aFlashObjectId)
		{
			if (uaContains('Mac') || uaContains('Safari'))
			{
				// find flash object's div container
				//alert("wheel: "+aFlashObjectId);
				
				//var fObj=document.getElementById(aFlashObjectId);
				var fObj=document[aFlashObjectId];
				//alert("wheel: "+fObj);
				
				var parentdiv = fObj.parentNode;
				
				
				while(parentdiv != null && parentdiv.nodeName != "DIV")
					parentdiv = parentdiv.parentNode;
				
				if (parentdiv != undefined && parentdiv != null)
				{
					f[aFlashObjectId] = parentdiv;
					
					if (parentdiv.addEventListener) parentdiv.addEventListener('DOMMouseScroll', onWheelHandler, false); // Firefox
					parentdiv.onmousewheel = onWheelHandler; // Safari
					
					return true;
				}
				else
					return false;
			}
			else
				return false;
		}
	};
	
}();









