(function()
{
	try 
	{
		document.createEvent("TouchEvent");
	} 
	catch (e) 
	{
		return;
	}
	['touchstart', 'touchmove', 'touchend'].each(function(type)
	{
		Element.NativeEvents[type] = 2;
	});
	var mapping = 
	{
		'mousedown': 'touchstart',
		'mousemove': 'touchmove',
		'mouseup': 'touchend'
	};
	var condition = function(event)
	{
		var touch = event.event.changedTouches[0];
		win = win || window;
		doc = doc || document;
		var page = 
		{
			x: event.pageX || event.clientX + doc.scrollLeft,
			y: event.pageY || event.clientY + doc.scrollTop
		};
		var client = 
		{
			x: (event.pageX) ? event.pageX - win.pageXOffset : event.clientX,
			y: (event.pageY) ? event.pageY - win.pageYOffset : event.clientY
		};
		event.client = client;
		event.page = page;
		return true;
	};
	for (var e in mapping) 
	{
		Element.Events[e] = 
		{
			base: mapping[e],
			condition: condition
		};
	}
})();

