/*
* jQuery Mobile Framework : support tests
* Copyright (c) jQuery Project
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
* Note: Slimmed copy focusing on just the utilities we need.
*/var fakeBody=$("<body>").prependTo("html"),webos=window.palmGetResource||window.PalmServiceBridge;$.extend($.support,{orientation:"orientation"in window,touch:"ontouchend"in document,scrollTop:("pageXOffset"in window||"scrollTop"in document.documentElement||"scrollTop"in fakeBody[0])&&!webos,eventCapture:"addEventListener"in document}),fakeBody.remove(),function(a,b,c,d){function O(b){var c=b.substr(1);return{setup:function(d,f){var g=a(this);M(g)||g.data(e,{});var h=g.data(e);h[b]=!0,i[b]=(i[b]||0)+1,i[b]===1&&t.bind(c,H),g.bind(c,N),s&&(i.touchstart=(i.touchstart||0)+1,i.touchstart===1&&t.bind("touchstart",I))},teardown:function(d,f){--i[b],i[b]||t.unbind(c,H),s&&(--i.touchstart,i.touchstart||t.unbind("touchstart",I));var g=a(this),h=g.data(e);h[b]=!1,g.unbind(c,N),M(g)||g.removeData(e)}}}function N(){}function M(a){var b=a.data(e),c;if(b)for(c in b)if(b[c])return!0;return!1}function L(a){B();var b=y(a.target);G("vmouseup",a,b);if(!o&&G("vclick",a,b)){var c=w(a).changedTouches[0];p.push({touchID:v,x:c.clientX,y:c.clientY}),q=!0}G("vmouseout",a,b),o=!1,E()}function K(c){var d=w(c).touches[0],e=o,f=a.vmouse.moveDistanceThreshold;o=o||r&&(m!==b.pageXOffset||n!==b.pageYOffset)||Math.abs(d.pageX-k)>f||Math.abs(d.pageY-l)>f;var g=y(c.target);o&&!e&&G("vmousecancel",c,g),G("vmousemove",c,g),E()}function J(a){o||G("vmousecancel",a,y(a.target)),o=!0,E()}function I(c){var d=w(c).touches;if(d&&d.length===1){var e=c.target,g=y(e);if(g.hasVirtualBinding){v=u++,a(e).data(f,v),F(),D(),o=!1;var h=w(c).touches[0];k=h.pageX,l=h.pageY,r&&(m=b.pageXOffset,n=b.pageYOffset),G("vmouseover",c,g),G("vmousedown",c,g)}}}function H(b){var c=a(b.target).data(f);!q&&(!v||v!==c)&&G("v"+b.type,b)}function G(b,c,d){var e=!1;if(d&&d[b]||!d&&z(c.target,b)){var f=x(c,b);a(c.target).trigger(f),e=f.isDefaultPrevented()}return e}function F(){j&&(clearTimeout(j),j=0)}function E(){F(),j=setTimeout(function(){j=0,C()},a.vmouse.resetTimerDuration)}function D(){A()}function C(){v=0,p.length=0,q=!1,B()}function B(){i.touchbindings&&(t.unbind("touchmove",K).unbind("touchend",L).unbind("scroll",J),i.touchbindings=0)}function A(){i.touchbindings||(t.bind("touchend",L).bind("touchmove",K).bind("scroll",J),i.touchbindings=1)}function z(b,c){var d=a(b);while(d&&d.length){var f=d.data(e);if(f&&(!c||f[c]))return d;d=d.parent()}return null}function y(b){var c={},d=a(b);while(d&&d.length){var f=d.data(e);for(var g in f)f[g]&&(c[g]=c.hasVirtualBinding=!0);d=d.parent()}return c}function x(b,c){var e=b.type;b=a.Event(b),b.type=c;var f=b.originalEvent,g=a.event.props;if(f)for(var i=g.length,j;i;)j=g[--i],b[j]=f[j];if(e.search(/^touch/)!==-1){var k=w(f),e=k.touches,l=k.changedTouches,m=e&&e.length?e[0]:l&&l.length?l[0]:d;if(m)for(var i=0,n=h.length;i<n;i++){var j=h[i];b[j]=m[j]}}return b}function w(a){while(a&&typeof a.originalEvent!="undefined")a=a.originalEvent;return a}var e="virtualMouseBindings",f="virtualTouchID",g="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),h="clientX clientY pageX pageY screenX screenY".split(" "),i={},j=0,k=0,l=0,m=0,n=0,o=!1,p=[],q=!1,r=a.support.scrollTop,s=a.support.eventCapture,t=a(c),u=1,v=0;a.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(var P=0;P<g.length;P++)a.event.special[g[P]]=O(g[P]);s&&c.addEventListener("click",function(b){var c=p.length,d=b.target;if(c){var e=b.clientX,g=b.clientY,h=a.vmouse.clickDistanceThreshold,i=d;while(i){for(var j=0;j<c;j++){var k=p[j],l=0;if(i===d&&Math.abs(k.x-e)<h&&Math.abs(k.y-g)<h||a(i).data(f)===k.touchID){b.preventDefault(),b.stopPropagation();return}}i=i.parentNode}}},!0)}(jQuery,window,document),function(a,b){function h(b,c,d){var e=d.type;d.type=c,a.event.handle.call(b,d),d.type=e}a.each("touchstart touchmove touchend orientationchange tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(b,c){a.fn[c]=function(a){return a?this.bind(c,a):this.trigger(c)},a.attrFn[c]=!0});var c=a.support.touch,d="touchmove scroll",e=c?"touchstart":"mousedown",f=c?"touchend":"mouseup",g=c?"touchmove":"mousemove";a.event.special.scrollstart={enabled:!0,setup:function(){function g(a,c){e=c,h(b,e?"scrollstart":"scrollstop",a)}var b=this,c=a(b),e,f;c.bind(d,function(b){!a.event.special.scrollstart.enabled||(e||g(b,!0),clearTimeout(f),f=setTimeout(function(){g(b,!1)},50))})}},a.event.special.tap={setup:function(){var b=this,c=a(b);c.bind("vmousedown",function(a){function j(a){i(),e==a.target&&h(b,"tap",a)}function i(){d=!1,clearTimeout(g),c.unbind("vclick",j).unbind("vmousecancel",i)}if(a.which&&a.which!==1)return!1;var d=!0,e=a.target,f=a.originalEvent,g;c.bind("vmousecancel",i).bind("vclick",j),g=setTimeout(function(){d&&h(b,"taphold",a)},750)})}},a.event.special.swipe={setup:function(){var c=this,d=a(c);d.bind(e,function(c){function j(a){if(!!h){var b=a.originalEvent.touches?a.originalEvent.touches[0]:a;i={time:(new Date).getTime(),coords:[b.pageX,b.pageY]},Math.abs(h.coords[0]-i.coords[0])>10&&a.preventDefault()}}var e=c.originalEvent.touches?c.originalEvent.touches[0]:c,h={time:(new Date).getTime(),coords:[e.pageX,e.pageY],origin:a(c.target)},i;d.bind(g,j).one(f,function(a){d.unbind(g,j),h&&i&&i.time-h.time<1e3&&Math.abs(h.coords[0]-i.coords[0])>55&&Math.abs(h.coords[1]-i.coords[1])<30&&h.origin.trigger("swipe").trigger(h.coords[0]>i.coords[0]?"swipeleft":"swiperight"),h=i=b})})}},function(a){function f(){var a=d();a!==e&&(e=a,b.trigger("orientationchange"))}var b=a(window),c,d,e;a.event.special.orientationchange=c={setup:function(){if(a.support.orientation)return!1;e=d(),b.bind("resize",f)},teardown:function(){if(a.support.orientation)return!1;b.unbind("resize",f)},add:function(a){var b=a.handler;a.handler=function(a){a.orientation=d();return b.apply(this,arguments)}}},c.orientation=d=function(){var a=document.documentElement;return a&&a.clientWidth/a.clientHeight<1.1?"portrait":"landscape"}}(jQuery),a.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe",swiperight:"swipe"},function(b,c){a.event.special[b]={setup:function(){a(this).bind(c,a.noop)}}})}(jQuery)
