/*--------------------------------------------------------
 * Copyright © 2009 – 2010* France Telecom
 * This software is distributed under the "Simplified BSD license",
 * the text of which is available at http://www.winktoolkit.org/licence.txt
 * or see the "license.txt" file for more details.
 *--------------------------------------------------------*/

/**
 * event features detection.
 * 
 * @features:
 * 	--> touchstart
 *  --> touchmove
 *  --> touchend
 *  --> touch
 *  --> gesturestart
 *  --> gesturechange
 *  --> gestureend
 *  --> gesture
 *  --> transitionend
 * 	--> TODO hashchange
 * 
 * @compatibility:
 * 	--> Iphone OS2, Iphone OS3, Iphone OS4, Android 1.1, Android 1.5, Android 2.1, Android 2.2, Android 2.3, BlackBerry 6, Bada 1.0
 * 
 * @author:
 * 	--> Sylvain LALANDE
 */

(function(winkhas) {
	var inquireMap = winkhas.inquireMap,
		setProp = winkhas.setProp,
		deferProp = winkhas.deferProp,
		w = window,
		d = w.document,
		de = d.documentElement,
		events = {
			ts: "touchstart",
			tm: "touchmove",
			te: "touchend",
			gs: "gesturestart",
			gc: "gesturechange",
			ge: "gestureend",
			tre: "transitionend"
		};

	function hasEvent(name) {
		return (('on' + events[name]) in de);
	}
	
	deferProp(events.ts, events.ts);
	deferProp(events.tm, events.tm);
	deferProp(events.te, events.te);
	deferProp(events.tre, events.tre);
	
	inquireMap({
		"touchstart": function() {
			var ts = hasEvent("ts");
			setProp(events.ts, ts ? events.ts : 'mousedown');
			return ts;
		},
		"touchmove": function() {
			var ts = hasEvent("tm");
			setProp(events.tm, ts ? events.tm : 'mousemove');
			return ts;
		},
		"touchend": function() {
			var ts = hasEvent("te");
			setProp(events.te, ts ? events.te : 'mouseup');
			return ts;
		},
		"touch": function() {
			return winkhas(events.ts) && winkhas(events.tm) && winkhas(events.te);
		},
		"gesturestart": function() {
			return hasEvent("gs");
		},
		"gesturechange": function() {
			return hasEvent("gc");
		},
		"gestureend": function() {
			return hasEvent("ge");
		},
		"gesture": function() {
			return winkhas(events.gs) && winkhas(events.gc) && winkhas(events.ge);
		},
		"transitionend": function() {
			if (winkhas("css-transition")) {
				var prefix = winkhas.prefix;
				var val = events.tre;
				if (prefix == "-webkit-") {
					val = "webkitTransitionEnd";
				} else if (prefix == "-o-") {
					val = "oTransitionEnd";
				}
				setProp(events.tre, val);
				return true;
			}
			return false;
		}
	});
})(wink.has);
