1 /** mouse handler
  2 * Not instanciable. 
  3 *@constructor
  4 */
  5 var YMouse = {
  6 	position: function(evt){
  7 		var posi = [];
  8 		if ( browserIsIe ){
  9 			posi[0]=evt.clientX + ((document.body)?document.body.scrollLeft:0);
 10 			posi[1]=evt.clientY + ((document.body)?document.body.scrollTop:0);
 11 		}else{
 12 			posi[0]=evt.pageX;
 13 			posi[1]=evt.pageY;
 14 		}return posi;
 15 	},
 16 	/**	track mouse position
 17 	* @param {domElement/string} domTarget.
 18 	* @param {function} onMouseMove invoked when mouse moves. of type onMouseMove(Float[] position, Mixed datas);
 19 	* @param {mixed} [datas] returned to <b>onMouseMove</b>.
 20 	*/
 21 	onMove : function(domTarget,onMouseMove,datas){
 22 		var tgt = YDom.get(domTarget);
 23 		if(tgt){
 24 			var sobj = {onMouseMove:onMouseMove,datas:datas};
 25 			YEvt.add(tgt,"mousemove",function(evt,datas){
 26 				datas.onMouseMove(	YMouse.position(evt) , datas.datas);
 27 			},sobj);
 28 		}
 29 	},
 30 	onOutSince : function(domTarget,timeout,onMouseOut,datas){
 31 		var obj = {omos:onMouseOut,timeout:timeout,datas:datas,tgt:YDom.get(domTarget)};
 32 		YMouse.onEvent(domTarget,function(cmd,obj){
 33 			if((cmd=="out"||cmd=="over")&&obj.timer){
 34 				window.clearTimeout(obj.timer);
 35 				obj.timer=null;
 36 			}
 37 			if(cmd=="out"){
 38 				obj.timer = YTimer.timeout(obj.datas.timeout,function(obj){obj.datas.omos(obj.datas.datas);},obj);
 39 			}
 40 		},obj);
 41 	},
 42 	/**	track mouse position when down
 43 	* @param {domElement/string} domTarget.
 44 	* @param {function} onMouseMove invoked when mouse moves whith button clicked down. of type onMouseMove(Float[] position,Float[] ofset, Mixed datas);
 45 	* @param {mixed} [datas] returned to <b>onMouseMove</b>.
 46 	*/
 47 	onMoveDown : function(domTrigger,onMouseMove,datas){
 48 		YMouse.onEvent(domTrigger,function(cmd,obj){
 49 			if(cmd=="movedown"){obj.onMouseMove(obj.pos,obj.ofset,obj.datas);}
 50 		},{onMouseMove:onMouseMove,dat:datas});
 51 	},
 52 	/**	track mouse events
 53 	* @param {domElement/string} domTarget.
 54 	* @param {function} onMouseEvt invoked when mouse event occurs.<br/>
 55 	of type onMouseEvt(String eventDesc,Object obj, Mixed datas);<br/>
 56 	eventDesc can be : "over" "out" "down" "up" "move" "movedown" "moveup" "wheel"<br/>
 57 	obj is { evt , datas , pos , ofset , isdown , isover , wheel , wheelData}
 58 	* @param {mixed} [datas] returned to <b>onMouseEvt</b>.
 59 	*/
 60 	onEvent : function(domtrigger,onMouseEvt,datas){
 61 		var domTrigger = YDom.get(domtrigger);
 62 		if(domTrigger){
 63 			var sobj = {_onMouseEvt:onMouseEvt,isdown:false,startFrom:[0,0],datas:datas,move:[0,0],pos:[0,0],ofset:[0,0],wheel:0,wheelDelta:0,isover:false};
 64    
 65 			
 66 			YEvt.add(domTrigger,"mousewheel",function(evt,obj){
 67 				//alert(evt.detail+" _ "+typeof(evt.detail)+evt.wheelDelta);
 68 				obj.evt = evt;
 69 				obj.wheelDelta = typeof(evt.detail)=="number" ? evt.detail/10 : evt.wheelDelta/-300;
 70 				obj.wheel+= obj.wheelDelta;	obj._onMouseEvt("wheel", obj, obj.datas);
 71 			},sobj);
 72 			YEvt.add(domTrigger,"mouseover",function(evt,obj){
 73 				obj.evt = evt;
 74 				obj.isover = true;	obj._onMouseEvt("over", obj, obj.datas);	},sobj);
 75 			YEvt.add(domTrigger,"mouseout",function(evt,obj){
 76 				obj.evt = evt;
 77 				obj.isover = false;	obj._onMouseEvt("out", obj, obj.datas);	},sobj);
 78 			YEvt.add(domTrigger,"mousedown",function(evt,obj){
 79 				obj.evt = evt;
 80 				obj.isdown = true; 	obj.startFrom = [obj.pos[0],obj.pos[1]];	obj._onMouseEvt("down" , obj, obj.datas);	},sobj);
 81 			YEvt.add(domTrigger,"mouseup",function(evt,obj){
 82 				obj.evt = evt;
 83 				obj.isdown = false; 	obj._onMouseEvt("up" , obj, obj.datas); 	},sobj);
 84 			YEvt.add(domTrigger,"mousemove",function(evt,obj){
 85 				obj.evt = evt;
 86 				var pos = YMouse.position(evt);
 87 				obj.move = [ pos[0]-obj.pos[0] , pos[1]-obj.pos[1]];
 88 				obj.pos = pos;
 89 				if(obj.isdown){
 90 					obj.ofset = [obj.pos[0]-obj.startFrom[0],obj.pos[1]-obj.startFrom[1]];
 91 					obj._onMouseEvt(	"movedown" , obj, obj.datas);
 92 				}else obj._onMouseEvt(	"moveup" , obj, obj.datas);
 93 				obj._onMouseEvt(	"move" , obj, obj.datas);
 94 			},sobj);
 95 			return sobj;
 96 		}
 97 	}
 98 };
 99 /** current global mouse posistion*/
100 var mouseXY = [0,0];
101 YMouse.onMove(document,function(posi,datas){ mouseXY = posi;	/*document.title = "x:"+posi[0]+" y:"+posi[1]+" |"+YKeys;*/	});
102 /** current global mouse buttons L,centre,R,?,?(some more)*/
103 var mouseButtons=[false,false,false,false,false];
104 YEvt.add(document,"mousedown",function(evt,obj){mouseButtons[evt.which-1]=true;	},null);
105 YEvt.add(document,"mouseup",function(evt,obj){	mouseButtons[evt.which-1]=false;	},null);
106