var jMouse = {
	Version: '0.15',
	nightly: '20090122',
	onMove:function(f){
		var useCapture=arguments[1]||true;
		Event.observe(window,"load",f,useCapture);
		Event.observe(document,"mousemove",f,useCapture);
	},
	onWheel:function(f){
		var e=arguments[1]||document;
		var useCapture=arguments[2]||true;
		Event.observe(e,"mousewheel",f,useCapture);
		Event.observe(e,"DOMMouseScroll",f,useCapture); // Firefox
	},
	x:-1,
	y:-1,
	getCoords:function(e){
		jMouse.x=Event.pointerX(e);
		jMouse.y=Event.pointerY(e);
	},
	fromElement:function(e){
		if (!e) var e = window.event;
		var relTarg = e.relatedTarget || e.fromElement;
		return relTarg;
	},
	toElement:function(e){
		if (!e) var e = window.event;
		var relTarg = e.relatedTarget || e.toElement;
		return relTarg;
	}
};

jMouse.onMove(jMouse.getCoords);

var jTooltip = {
	show:function(){
		var t=$("jTooltip");
		if(t){
			jTooltip.move();
			if(arguments.length>0){
				t.innerHTML=arguments[0];
			}
			t.show();
		}
	},
	hide:function(){
			var t=$("jTooltip");
			if(t){
				t.hide();
			}
	},
	move:function(){
		
		                        var opt=arguments[0]||{};
		if(!is.Object(opt))     var opt={};
		                            opt.coords=[jMouse.x,jMouse.y];
		if(!is.Defined(opt.pos))    opt.pos="rm";
		var t=$("jTooltip");
		
		if(t){if(t.visible()){
			var xy = opt.coords ;
			var wh = $AA(t.getDimensions());
			var WH = $AA(window.getDimensions());
			
			var x = parseInt(xy[0]);
			var y = parseInt(xy[1]);
			var w = parseInt(wh[0]);
			var h = parseInt(wh[1]);
			var W = parseInt(WH[0]);
			var H = parseInt(WH[1]);
			
			var pos=String(opt.pos);
			var left = pos.charAt(0);
			var top  = pos.charAt(1);
			var margin = 6  ;
			var cursor = 16 ;
			
			switch(left){
				case"l":			x=x-w-margin;		break;
				case"c":			x=x-w/2;			break;
				case"r":default:	x=x+cursor+margin;	break;
			}
			switch(top){
				case"t":			y=y-h-margin;		break;
				case"b":			y=y+cursor+margin;	break;
				case"m":default:	y=y-h/2;			break;
			}
			
			var scrollAmount=window.getScroll();
			
			if(x<0)x=0;
			else if(x+w-scrollAmount[0]>W)x=W-w;
			if(y<0)y=0;
			else if(y+h-scrollAmount[1]>H)y=H-h;
			
			Position.set(t,[x,y]);
			
		}}
	},
	observe:function(e,txt){
		var align=arguments[2]||"rm";
		Event.observe(e,is.IE?'mouseenter':'mouseover',function(ev){
			jTooltip.show(txt);
		});
		Event.observe(e,is.IE?'mouseleave':'mouseout',function(ev){
			jTooltip.hide();
		});
		Event.observe(e,'mousemove',function(ev){
			jTooltip.move({pos:align});
		});
	},
	create:function(){
		if(!document.getElementById("jTooltip")){
			var body=$$("body")[0];
			var div=ce("div");
			div.id="jTooltip";
			div.style.display="none";
			div.style.position="absolute";
			ac(div,body);
			jTooltip.observe(div);
		}
	}
}

Event.observe(window,'load',jTooltip.create);

Object.extend(Event, {
	wheel:function (event){
		var delta = 0;
		if (!event) event = window.event;
		if (event.wheelDelta) {
			delta = event.wheelDelta/120; 
			if (window.opera) delta = -delta;
		} else if (event.detail) { delta = -event.detail/3;	}
		if(event.preventDefault)event.preventDefault();
		return Math.round(delta); //Safari Round
	}
});

Element.addMethods({
	onWheel:function(element,f){
		jMouse.onWheel(f,element);
	},
	tooltip:function(element,txt){
		var align=arguments[2]||"rm";
		jTooltip.observe(element,txt,align);
	}
});

Object.extend(is,{
	leftClick:function(e){
		return Event.isLeftClick(e);
	},
	middleClick:function(e){
		var middleclick;
		if (!e) var e = window.event;
		if (e.which) middleclick = (e.which == 2);
		else if (e.button) middleclick = (e.button == 4);
		return 	middleclick;
	},
	rightClick:function(e){
		var rightclick;
		if (!e) var e = window.event;
		if (e.which) rightclick = (e.which == 3);
		else if (e.button) rightclick = (e.button == 2);
		return 	rightclick;
	}
});