/*
 * SWFmiddleClickAndScrollFix v1.0
 * http://t2net.com/swfmiddlefix
 * (c) 2008 Alan Truly and released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Code based on these two projects:
 *
 * SWFMacMouseWheel v2.0: Mac Mouse Wheel functionality in flash 
 * http://blog.pixelbreaker.com/
 *
 * Javascript code for identifying mouse buttons (and preventing propagation)
 * http://unixpapa.com/js/mouse.html
 *
 * SWFMacMouseWheel is (c) 2007 Gabriel Bucknall and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 *
 * Dependencies:
 * 
 * SWFObject v2.0 rc1 <http://code.google.com/p/swfobject/>
 * Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis
 * This software is released under the MIT License 
 * <http://www.opensource.org/licenses/mit-license.php>
 *
 * Note that you must set wmode to opaque or transparent for Windows to
 * send mousewheel input to External Interface. I don't know why.
 */
var swfmiddlefix = function()
{
	if( !swfobject ) return null;

	var regObjArr = [];
	
	/* This section checks for a mousedown event, identifies which mouse button
	   is pressed and sends this info to the Flash player via an External Interface call.
	*/
	var buttonalert = function(event)
	{
		var button;
		if (window.event) event = window.event;
		if (event.which)
		{
			button= (event.which < 2) ? 1 :
			((event.which == 2) ? 2 : 3);
		}
		else
		{
			button= (event.button < 2) ? 1 :
			((event.button == 4) ? 2 : 3);
		}
		if (button == 2) {
			dont(event);
			var obj;
			for(var i=0; i<regObjArr.length; i++ )
			{
			 obj = swfobject.getObjectById(regObjArr[i]);
			 if( typeof( obj.externalMouseClick ) == 'function' ) obj.externalMouseClick( button );
			}
		}
		return false;
	}
	var dont = function(event)
	{
		if (event.preventDefault)
			event.preventDefault();
		else
			event.returnValue= false;
		return false;
	}
	
	if (window.addEventListener)
	{
		window.addEventListener('mousedown', buttonalert, false);
	}
	else
	{
		window.onmousedown = buttonalert;
		document.onmousedown = buttonalert;
	}
		
	var deltaFilter = function(event)
	{
		var delta = 0;
		if (event.wheelDelta) {
			delta = event.wheelDelta/120;
			if (window.opera) delta = -delta;
		} else if (event.detail) {
			delta = -event.detail;
		}
		if (event.preventDefault)
			event.preventDefault();
		else
			event.returnValue= false;
		return delta;
	}
	
	var deltaDispatcher = function(event)
	{
		if (window.event) event = window.event;
		var delta = deltaFilter(event);
		var obj;
		for(var i=0; i<regObjArr.length; i++ )
		{
			obj = swfobject.getObjectById(regObjArr[i]);
			if( typeof( obj.externalMouseEvent ) == 'function' )
			{
			obj.externalMouseEvent( delta );
			}
		}
	}
	
	
	return {
		/*
		Public APIs
		*/
		registerObject: function(objectIdStr)
		{
			regObjArr[regObjArr.length] = objectIdStr;
		},
		initScroll: function()
		{
			if (window.addEventListener)
			{
				window.addEventListener('DOMMouseScroll', deltaDispatcher, false);
			}
			if (window.onmousewheel)
			{
				window.onmousewheel = deltaDispatcher;
			}
			else
			{
				document.onmousewheel = deltaDispatcher;
			}
		}
	};
}();