	var fEvent = {
		get: function(e) {return e = e || window.event;},

		fixTouch: function(e) {
			e.preventDefault();
			return {
				pageX:e.changedTouches[0].pageX,
				pageY:e.changedTouches[0].pageY,
				type:e.type
			};
		},

		fix: function(e) {
			e = fEvent.get(e);
			if (e.type == 'touchstart' || e.type == 'touchend' || e.type == 'touchmove') return fEvent.fixTouch(e);

			if (e.pageX == null && e.clientX != null) {
				var html = document.documentElement;
				var body = document.body;
				e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
				e.pageY = e.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);
			}

			if (!e.which && e.button) {
				e.which = e.button & 1 ? 1 : ( e.button & 2 ? 3 : ( e.button & 4 ? 2 : 0 ) );
			}

			return e;
		},

		stopPropagation: function(e) {
			e = fEvent.get(e);
			if (event.stopPropagation) event.stopPropagation();
			else event.cancelBubble = true;
		}
	}
