1 // INTEGRATE ME INTO BROWSER.JS
  2 
  3 function CompareObjPos(nodes, touch) {
  4    var samePos = 0,
  5        j= 0,
  6        top = touch.pageY;
  7    
  8    for (var i=0; i < nodes.length; i++) {
  9       samePos = j++;
 10       var position = findPos(nodes[i]);
 11       if(position.top > top) {
 12          break;
 13       }
 14    }
 15    return samePos;
 16 }
 17 
 18 function checkAvatarPosition(first) {
 19       var leftPane = document.getElementById("tracksAvail"),
 20           rigthPane = document.getElementById("container");
 21      
 22        if (first.pageX < (leftPane.offsetLeft + leftPane.offsetWidth)) 
 23         {
 24          return leftPane;
 25          }
 26       else {
 27         return rigthPane;
 28         }
 29 }  
 30 
 31 var startX;
 32 
 33 function removeTouchEvents() {
 34 
 35 startX = null;
 36 
 37 }
 38 
 39 
 40 function touchSimulated(event)
 41 {
 42     if(event.touches.length <= 1) {
 43    
 44         var touches = event.changedTouches,
 45             first = touches[0],
 46             type1 = "",
 47             type2 = "mouseover",
 48             objAvatar = document.getElementsByClassName("dojoDndAvatar"),
 49             obj = {},
 50             pane = checkAvatarPosition(first),
 51             nodes = pane.getElementsByClassName("dojoDndItem"),
 52             element = {},  
 53             simulatedEvent_1 = document.createEvent("MouseEvent"),
 54             simulatedEvent_2 = document.createEvent("MouseEvent");
 55             
 56 
 57                switch (event.type) {
 58             
 59                 case "touchstart": 
 60                     startX = first.pageX;
 61                     type1 = "mousedown";
 62                     break;
 63         
 64                 case "touchmove": 
 65                     event.preventDefault();
 66                     type1 = "mousemove";
 67                     break;
 68             
 69                 default:
 70                 return;
 71               }
 72             
 73 
 74             
 75             
 76         
 77     
 78     simulatedEvent_1.initMouseEvent(type1, true, true, window, 1, first.pageX, first.pageY, first.clientX,              first.clientY,
 79                                   false, false, false, false, 0, null);
 80                                                                             
 81 
 82 simulatedEvent_2.initMouseEvent(type2, true, true, window, 1, first.pageX, first.pageY, first.clientX, first.clientY,
 83                                false, false, false, false, 0, null);
 84      
 85                         
 86                      
 87     
 88     switch (event.type) {
 89             
 90                 case "touchstart": 
 91                     first.target.dispatchEvent(simulatedEvent_1);
 92                     first.target.dispatchEvent(simulatedEvent_2);
 93                     initialPane = pane;
 94                     break;
 95                 case "touchmove": 
 96                     
 97                     if(objAvatar.length > 0) {
 98                         if (nodes.length > 0) {
 99                             element = CompareObjPos(nodes,first);
100                             obj = nodes[element];
101                         }
102      
103                         try {
104                             
105                             if (initialPane != pane) {
106                                 var simulatedEvent_3 = document.createEvent("MouseEvent");
107                                 var type3 = "mouseout";
108                                 simulatedEvent_3.initMouseEvent(type3, true, true, window, 1, 
109                                 first.pageX, first.pageY, first.clientX, first.clientY,
110                                 false, false, false, false, 0, null);
111                                 initialPane.dispatchEvent(simulatedEvent_3);
112                             }
113                            obj.dispatchEvent(simulatedEvent_2);
114                              obj.dispatchEvent(simulatedEvent_1);
115                         
116                         }
117                         catch(err) 
118                         {
119                             //No Elements in the pane
120                             pane.dispatchEvent(simulatedEvent_2);
121                             pane.dispatchEvent(simulatedEvent_1);
122                         }
123                     }
124                     break;
125                             
126                 default:
127                 return;
128             }
129        
130   }
131   else {
132    removeTouchEvents();
133    } 
134 }
135 
136 function touchEnd(event) {
137          
138         
139          
140         var touches = event.changedTouches,
141             first = touches[0],
142             type1 = "mouseup",
143             type2 = "mouseover",
144             objAvatar = document.getElementsByClassName("dojoDndAvatar"),
145             obj = {},
146             pane = checkAvatarPosition(first),
147             nodes = pane.getElementsByClassName("dojoDndItem"),
148             element = {},  
149             simulatedEvent_1 = document.createEvent("MouseEvent"),
150             simulatedEvent_2 = document.createEvent("MouseEvent");
151             
152             
153              if (startX !==  first.pageX) {
154              //slide ocurrs
155              event.preventDefault();
156              }
157             
158             var test = findPos(first.target);
159             
160 simulatedEvent_1.initMouseEvent(type1, true, true, window, 1, first.pageX, first.pageY, first.clientX,              first.clientY,
161                                   false, false, false, false, 0, null);
162                                                                             
163 
164 simulatedEvent_2.initMouseEvent(type2, true, true, window, 1, first.pageX, first.pageY, first.clientX, first.clientY,
165                                false, false, false, false, 0, null);
166 
167 
168 
169 
170                     if(objAvatar.length > 0) {   
171                         if (nodes.length > 0) {
172                            element = CompareObjPos(nodes,first);
173                             obj = nodes[element];
174                          }
175                                                                                    
176                         try {
177                             obj.dispatchEvent(simulatedEvent_2);
178                             obj.dispatchEvent(simulatedEvent_1);
179                             }
180                         catch(error) 
181                             {
182                             first.target.dispatchEvent(simulatedEvent_2);
183                             pane.dispatchEvent(simulatedEvent_2);
184                             }    
185                         }
186                     else {
187                             first.target.dispatchEvent(simulatedEvent_1);
188                             first.target.dispatchEvent(simulatedEvent_2);
189                         }
190 
191 
192 
193    removeTouchEvents();
194 }
195 
196 function touchHandle(event)
197 {
198  
199     dojo.query(".dojoDndItemAnchor").connect("touchstart", touchSimulated);
200     dojo.query(".dojoDndItemAnchor").connect("touchmove", touchSimulated);
201     dojo.query(".dojoDndItemAnchor").connect("touchend", touchEnd); 
202     dojo.query(".dojoDndItemAnchor").connect("click" , function(){void(0);});
203    
204      if(event.touches.length <= 1) {
205    
206      
207 		 var touches = event.changedTouches,
208 		 first = touches[0],
209 		 type = "";
210 		 
211 		 
212 		 
213 		 switch(event.type)
214 		 {
215 			 case "touchstart": 
216 				 startX = first.pageX;
217 				 type = "mousedown";
218 				 break;
219 				 
220 			 case "touchmove": 
221 				 event.preventDefault();
222 				 type = "mousemove";
223 				 break;
224 				 
225 			 case "touchend": 
226 				 if (startX !==  first.pageX) {
227 					 //slide ocurrs
228 					 event.preventDefault();
229 				 }
230 				 type = "mouseup";
231 				 break;
232 				 
233 				 
234 			 default:
235 				 return;
236 		 }
237 		 
238 		 
239 		 var simulatedEvent = document.createEvent("MouseEvent");
240 		 
241 		 simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY,
242 									   false, false, false, false, 0/*left*/, null);
243 		 
244 		 first.target.dispatchEvent(simulatedEvent);
245 		 
246 	 }
247 	 else {
248    removeTouchEvents();
249    }
250 }
251 
252 
253 
254 
255 function touchinit() 
256 {
257     dojo.query(".dojoDndItem").connect("touchstart", touchSimulated);
258     dojo.query(".dojoDndItem").connect("touchmove", touchSimulated);
259     dojo.query(".dojoDndItem").connect("touchend", touchEnd);
260     
261     dojo.query(".locationThumb").connect("touchstart", touchHandle);
262     dojo.query(".locationThumb").connect("touchmove", touchHandle);
263     dojo.query(".locationThumb").connect("touchend", touchHandle);
264     
265     dojo.query(".dojoDndItem").connect("click" , function(){void(0);});
266     
267     dojo.query(".dojoDndTarget").connect("touchstart", touchHandle);
268     dojo.query(".dojoDndTarget").connect("touchmove", touchHandle);
269     dojo.query(".dojoDndTarget").connect("touchend", touchHandle);
270     
271     dojo.query(".dijitSplitter").connect("touchstart", touchHandle);
272     dojo.query(".dijitSplitter").connect("touchmove", touchHandle);
273     dojo.query(".dijitSplitter").connect("touchend", touchHandle);
274     
275  }
276 
277 
278 function loadTouch()
279 {
280   
281     touchinit();
282     document.documentElement.style.webkitTouchCallout = "none";
283 }
284 
285 function findPos(obj) {
286     var curtop = 0,
287         objP = {};
288 	
289     if (obj.offsetParent) {
290 	do {
291 			curtop += obj.offsetTop;
292         } while ((obj = obj.offsetParent));
293 }
294 
295 objP.top = curtop;
296 
297 return objP;
298 }
299