User:Shadou/monobook.js

var dw_event = { add: function(obj, etype, fp, cap) { cap = cap || false; if (obj.addEventListener) obj.addEventListener(etype, fp, cap); else if (obj.attachEvent) obj.attachEvent("on" + etype, fp); },

remove: function(obj, etype, fp, cap) { cap = cap || false; if (obj.removeEventListener) obj.removeEventListener(etype, fp, cap); else if (obj.detachEvent) obj.detachEvent("on" + etype, fp); },

DOMit: function(e) { e = e? e: window.event; e.tgt = e.srcElement? e.srcElement: e.target; if (!e.preventDefault) e.preventDefault = function { return false; } if (!e.stopPropagation) e.stopPropagation = function { if (window.event) window.event.cancelBubble = true; } return e; } }

var RollTip = { followMouse: true, offX: 12, offY: 12, // duration of clipping animation showAni: 300, hideAni: 200, ID:"rolltipDiv", ready:false, timer:null, tip:null, init:function { var opok=(!window.opera || window.opera && opera.buildNumber && opera.buildNumber > 3800) ? true : false; if(document.createElement && document.body && typeof document.body.appendChild != "undefined" && opok){ var el=document.createElement("DIV"); el.id=this.ID; document.body.appendChild(el); this.showMult=el.offsetWidth/this.showAni/this.showAni; this.hideMult=el.offsetWidth/this.hideAni/this.hideAni; el.style.clip="rect(0, 0, 0, 0)"; el.style.visibility="visible"; this.ready=true; }	},	reveal:function(msg,e){if(this.timer){clearTimeout(this.timer);this.timer=0;}if(!this.rtready)return;this.tip=document.getElementById(this.ID);this.writeTip("");this.writeTip(msg);viewport.getAll;this.w=this.tip.offsetWidth;this.h=this.tip.offsetHeight;this.startTime=(new Date).getTime;this.positionTip(e);if(this.followMouse)dw_event.add(document,"mousemove",this.trackMouse,true);this.timer=setInterval("RollTip.rollOut",10);},rollOut:function{var elapsed=(new Date).getTime-this.startTime;if(elapsed<this.showAni){var cv=this.w-Math.round(Math.pow(this.showAni-elapsed,2)*this.showMult);this.clipTo(0,cv,this.h,0);}else{this.clipTo(0,this.w,this.h,0);clearInterval(this.timer);this.timer=0;}},

conceal:function { if(this.timer){ clearTimeout(this.timer); this.timer=0; }	this.startTime=(new Date).getTime; if(this.followMouse) dw_event.remove(document,"mousemove",this.trackMouse,true); this.timer=setInterval("RollTip.rollUp",10); },	rollUp:function { var elapsed=(new Date).getTime-this.startTime; if(elapsed<this.hideAni){ var cv=Math.round(Math.pow(this.hideAni-elapsed,2)*this.hideMult); this.clipTo(0,cv,this.h,0); } else { this.clipTo(0,0,this.h,0); clearInterval(this.timer); this.timer=0;this.tip=null; }	},	writeTip:function(msg) { if(this.tip&&typeof this.tip.innerHTML!="undefined")this.tip.innerHTML=msg; },	clipTo:function(top,rt,btm,lft) { if(this.tip&&this.tip.style) this.tip.style.clip="rect("+top+"px, "+rt+"px, "+btm+"px, "+lft+"px)"; }	}; //end of VAR RollTip.positionTip=function(e) { var x=e.pageX?e.pageX:e.clientX+viewport.scrollX; var y=e.pageY?e.pageY:e.clientY+viewport.scrollY; if(x+this.tip.offsetWidth+this.offX>viewport.width+viewport.scrollX) { x=x-this.tip.offsetWidth-this.offX; } else x=x+this.offX; if(y+this.tip.offsetHeight+this.offY>viewport.height+viewport.scrollY) { y=y-this.tip.offsetHeight-this.offY; if(y<viewport.scrollY)y=viewport.height+viewport.scrollY-this.tip.offsetHeight; } else y=y+this.offY; this.tip.style.left=x+"px"; this.tip.style.top=y+"px"; };	RollTip.trackMouse=function(e) { e=dw_event.DOMit(e); RollTip.positionTip(e); }; var viewport = { getWinWidth: function { this.width = 0; if (window.innerWidth) this.width = window.innerWidth - 18; else if (document.documentElement && document.documentElement.clientWidth) this.width = document.documentElement.clientWidth; else if (document.body && document.body.clientWidth) this.width = document.body.clientWidth; }, getWinHeight: function  { this.height = 0; if (window.innerHeight) this.height = window.innerHeight - 18; else if (document.documentElement && document.documentElement.clientHeight) this.height = document.documentElement.clientHeight; else if (document.body && document.body.clientHeight) this.height = document.body.clientHeight; }, getScrollX: function  { this.scrollX = 0; if (typeof window.pageXOffset == "number") this.scrollX = window.pageXOffset; else if (document.documentElement && document.documentElement.scrollLeft) this.scrollX = document.documentElement.scrollLeft; else if (document.body && document.body.scrollLeft) this.scrollX = document.body.scrollLeft; else if (window.scrollX) this.scrollX = window.scrollX; }, getScrollY: function  { this.scrollY = 0; if (typeof window.pageYOffset == "number") this.scrollY = window.pageYOffset; else if (document.documentElement && document.documentElement.scrollTop) this.scrollY = document.documentElement.scrollTop; else if (document.body && document.body.scrollTop) this.scrollY = document.body.scrollTop; else if (window.scrollY) this.scrollY = window.scrollY; }, getAll: function  { this.getWinWidth; this.getWinHeight; this.getScrollX; this.getScrollY; } }

RollTip.rtready=true;