//	REFERENCIA:
//	http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=2&postId=13086
//	http://www.switchonthecode.com/tutorials/javascript-tutorial-the-scroll-wheel

//	desde el swf se va a setear este flag

var flashMouseWheelHasFocus = false;

function getFlashMouseWheelHasFocus() {
	return flashMouseWheelHasFocus;
}

function setFlashMouseWheelHasFocus(value) {
	flashMouseWheelHasFocus = value;
}

function hookEvent(element, eventName, callback) {

	if(typeof(element) == "string") {
		element = document.getElementById(element);
	}
	if(element == null) {
		return;
	}
	if(element.addEventListener) {
		if(eventName == 'mousewheel') {
			element.addEventListener('DOMMouseScroll', callback, false);  
		}
		element.addEventListener(eventName, callback, false);
	} else if(element.attachEvent) {
		element.attachEvent("on" + eventName, callback);
	}
}

function unhookEvent(element, eventName, callback) {

	if(typeof(element) == "string") {
		element = document.getElementById(element);
	}
	if(element == null) {
		return;
	} 
	if(element.removeEventListener) {
		if(eventName == 'mousewheel') {
			element.removeEventListener('DOMMouseScroll', callback, false);  
		}
		element.removeEventListener(eventName, callback, false);
	} else if(element.detachEvent) {
		element.detachEvent("on" + eventName, callback);
	}
}

/*
Si se usa wmode, el plugin (no ActiveX) no detecta el mouseWheel
Además, tanto IE como FF reaccionan ante el mouseWheel scroleando la página (si hay espacio para scroll)

El objetivo de esta función es solucionar estos 2 problemas, usando la siguiente lógica:
	El swf va a setear una variable (flashMouseWheelHasFocus) para indicar si quiere manejar -- en forma exclusiva -- el mouseWheel
		En caso de que sea así, se va a forwardear el evento al swf y además se va a cancelar su propagación 
		para que el browser no haga scroll (tanto en FF como en IE) 
		
		En caso de que sea false, no se forwardea ni se cancela el evento.
			En IE, el swf aún así va a recibir el mouseWheel; pero debería chequear el mismo flag que está seteando (flashMouseWheelHasFocus)
			para decidir si lo usa (no debería porque en este caso flashMouseWheelHasFocus va a ser false).
*/
function handleMouseWheel(event) {
	
	event = event ? event : window.event;
	var delta = event.detail ? event.detail : -event.wheelDelta / 40;
	
	var app = window.document["applicationContainer"];
	
	
	
	if (app && flashMouseWheelHasFocus) {
	
		var mouseData = {x: event.screenX, y: event.screenY, 
			delta: delta,
			ctrlKey: event.ctrlKey, altKey: event.altKey, 
			shiftKey: event.shiftKey};
				
		//	forwardear el mouseWheel y cancelar la propagación de este evento para evitar el scroll del browser
		if(!(document.attachEvent)) {
			app.handleWheel(mouseData);			
			// FF usa la api de MouseEvent para cancelar el evento, no el valor de retorno
			return cancelEvent(event);	
		} else {
			app.handleWheel(mouseData);
			//	IE toma este valor de retorno para cancelar el scroll de la página
			return false;
		}

		
		/*
		var s = "";
		for(var i in mouseData) {
			s += i + " : " + mouseData[i] + "\n";
		}
		alert(s);		
		*/
	}	
	
	//	no cancelar por defecto
	return true;	

}


function cancelEvent(e) {
	e = e ? e : window.event;
	if(e.stopPropagation) {
		e.stopPropagation();
	}
	if(e.preventDefault) {
		e.preventDefault();
	}
	e.cancelBubble = true;
	e.cancel = true;
	e.returnValue = false;
	return false;
}


window.onload = function() {
	hookEvent(document, 'mousewheel', handleMouseWheel);
	
}




