home *** CD-ROM | disk | FTP | other *** search
- /* --- BoxOver ---
- /* --- v 2.1 17th June 2006
- By Oliver Bryant with help of Matthew Tagg
- http://boxover.swazz.org */
-
- if (typeof document.attachEvent!='undefined') {
- window.attachEvent('onload',init);
- document.attachEvent('onmousemove',moveMouse);
- document.attachEvent('onclick',checkMove); }
- else {
- window.addEventListener('load',init,false);
- document.addEventListener('mousemove',moveMouse,false);
- document.addEventListener('click',checkMove,false);
- }
-
- var oDv=document.createElement("div");
- var dvHdr=document.createElement("div");
- var dvBdy=document.createElement("div");
- var ttOn = true;
- var windowlock,boxMove,fixposx,fixposy,lockX,lockY,fixx,fixy,ox,oy,boxLeft,boxRight,boxTop,boxBottom,evt,mouseX,mouseY,totalScrollTop,totalScrollLeft;
- ox=10;
- oy=-8;
- lockX=0;
- lockY=0;
- hdrTextColor = '#22dd22';
- hdrBackColor = '#003300';
- bdyTextColor = '#22dd22';
- bdyBackColor = '#003300';
-
- function init() {
- oDv.appendChild(dvHdr);
- oDv.appendChild(dvBdy);
- oDv.style.position="absolute";
- oDv.style.zIndex=30;
- oDv.style.visibility='hidden';
- document.body.appendChild(oDv);
- }
-
- function defHdrStyle() {
- dvHdr.innerHTML='<img style="vertical-align:middle" src=""> '+dvHdr.innerHTML;
- dvHdr.style.fontWeight='bold';
- dvHdr.style.width='150px';
- dvHdr.style.fontFamily='arial';
- dvHdr.style.borderLeft='1px solid #ffffff';
- dvHdr.style.borderRight='1px solid #ffffff';
- dvHdr.style.borderTop='1px solid #ffffff';
- dvHdr.style.padding='3';
- dvHdr.style.fontSize='11';
- dvHdr.style.color=hdrTextColor;
- dvHdr.style.background=hdrBackColor;
- if (ttOn)
- dvHdr.style.opacity='0.90';
- else
- dvHdr.style.opacity='0.0';
- }
-
- function themeToolTips(dark, light)
- {
- hdrTextColor = light;
- hdrBackColor = dark;
- bdyTextColor = dark;
- bdyBackColor = light;
- }
-
- function defBdyStyle() {
- dvBdy.style.borderBottom='1px solid #ffffff';
- dvBdy.style.borderLeft='1px solid #ffffff';
- dvBdy.style.borderRight='1px solid #ffffff';
- dvBdy.style.borderBottom='1px solid #ffffff';
- dvBdy.style.width='150px';
- dvBdy.style.fontFamily='arial';
- dvBdy.style.fontSize='11';
- dvBdy.style.padding='3';
- dvBdy.style.color=bdyTextColor;
- dvBdy.style.background=bdyBackColor;
- if (ttOn)
- dvBdy.style.opacity='0.90';
- else
- dvBdy.style.opacity='0.0';
- }
-
- function checkElemBO(txt) {
- if (!txt || typeof(txt) != 'string') return false;
- if ((txt.indexOf('header')>-1)&&(txt.indexOf('body')>-1)&&(txt.indexOf('[')>-1)&&(txt.indexOf('[')>-1))
- return true;
- else
- return false;
- }
-
- function scanBO(curNode) {
- if (checkElemBO(curNode.title)) {
- curNode.boHDR=getParam('header',curNode.title);
- curNode.boBDY=getParam('body',curNode.title);
- curNode.boCSSBDY=getParam('cssbody',curNode.title);
- curNode.boCSSHDR=getParam('cssheader',curNode.title);
- curNode.IEbugfix=(getParam('hideselects',curNode.title)=='on')?true:false;
- curNode.fixX=parseInt(getParam('fixedrelx',curNode.title));
- curNode.fixY=parseInt(getParam('fixedrely',curNode.title));
- curNode.absX=parseInt(getParam('fixedabsx',curNode.title));
- curNode.absY=parseInt(getParam('fixedabsy',curNode.title));
- curNode.offY=(getParam('offsety',curNode.title)!='')?parseInt(getParam('offsety',curNode.title)):-8;
- curNode.offX=(getParam('offsetx',curNode.title)!='')?parseInt(getParam('offsetx',curNode.title)):10;
- curNode.fade=(getParam('fade',curNode.title)=='on')?true:false;
- curNode.fadespeed=(getParam('fadespeed',curNode.title)!='')?getParam('fadespeed',curNode.title):0.04;
- curNode.delay=(getParam('delay',curNode.title)!='')?parseInt(getParam('delay',curNode.title)):0;
- if (getParam('requireclick',curNode.title)=='on') {
- curNode.requireclick=true;
- document.all?curNode.attachEvent('onclick',showHideBox):curNode.addEventListener('click',showHideBox,false);
- document.all?curNode.attachEvent('onmouseover',hideBox):curNode.addEventListener('mouseover',hideBox,false);
- }
- else {// Note : if requireclick is on the stop clicks are ignored
- if (getParam('doubleclickstop',curNode.title)!='off') {
- document.all?curNode.attachEvent('ondblclick',pauseBox):curNode.addEventListener('dblclick',pauseBox,false);
- }
- if (getParam('singleclickstop',curNode.title)=='on') {
- document.all?curNode.attachEvent('onclick',pauseBox):curNode.addEventListener('click',pauseBox,false);
- }
- }
- curNode.windowLock=getParam('windowlock',curNode.title).toLowerCase()=='off'?false:true;
- curNode.title='';
- curNode.hasbox=1;
- }
- else
- curNode.hasbox=2;
- }
-
-
- function getParam(param,list) {
- var reg = new RegExp('([^a-zA-Z]' + param + '|^' + param + ')\\s*=\\s*\\[\\s*(((\\[\\[)|(\\]\\])|([^\\]\\[]))*)\\s*\\]');
- var res = reg.exec(list);
- var returnvar;
- if(res)
- return res[2].replace('[[','[').replace(']]',']');
- else
- return '';
- }
-
- function Left(elem){
- var x=0;
- if (elem.calcLeft)
- return elem.calcLeft;
- var oElem=elem;
- while(elem){
- if ((elem.currentStyle)&& (!isNaN(parseInt(elem.currentStyle.borderLeftWidth)))&&(x!=0))
- x+=parseInt(elem.currentStyle.borderLeftWidth);
- x+=elem.offsetLeft;
- elem=elem.offsetParent;
- }
- oElem.calcLeft=x;
- return x;
- }
-
- function Top(elem){
- var x=0;
- if (elem.calcTop)
- return elem.calcTop;
- var oElem=elem;
- while(elem){
- if ((elem.currentStyle)&& (!isNaN(parseInt(elem.currentStyle.borderTopWidth)))&&(x!=0))
- x+=parseInt(elem.currentStyle.borderTopWidth);
- x+=elem.offsetTop;
- elem=elem.offsetParent;
- }
- oElem.calcTop=x;
- return x;
-
- }
-
- var ah,ab;
- function applyStyles() {
- if(ab)
- oDv.removeChild(dvBdy);
- if (ah)
- oDv.removeChild(dvHdr);
- dvHdr=document.createElement("div");
- dvBdy=document.createElement("div");
- CBE.boCSSBDY?dvBdy.className=CBE.boCSSBDY:defBdyStyle();
- CBE.boCSSHDR?dvHdr.className=CBE.boCSSHDR:defHdrStyle();
- dvHdr.innerHTML=CBE.boHDR;
- dvBdy.innerHTML=CBE.boBDY;
- ah=false;
- ab=false;
- if (CBE.boHDR!='') {
- oDv.appendChild(dvHdr);
- ah=true;
- }
- if (CBE.boBDY!=''){
- oDv.appendChild(dvBdy);
- ab=true;
- }
- }
-
- var CSE,iterElem,LSE,CBE,LBE, totalScrollLeft, totalScrollTop, width, height ;
- var ini=false;
-
- // Customised function for inner window dimension
- function SHW() {
- if (document.body && (document.body.clientWidth !=0)) {
- width=document.body.clientWidth;
- height=document.body.clientHeight;
- }
- if (document.documentElement && (document.documentElement.clientWidth!=0) && (document.body.clientWidth + 20 >= document.documentElement.clientWidth)) {
- width=document.documentElement.clientWidth;
- height=document.documentElement.clientHeight;
- }
- return [width,height];
- }
-
-
- var ID=null;
- function moveMouse(e) {
- //boxMove=true;
- e?evt=e:evt=event;
-
- CSE=evt.target?evt.target:evt.srcElement;
-
- if (!CSE.hasbox) {
- // Note we need to scan up DOM here, some elements like TR don't get triggered as srcElement
- iElem=CSE;
- while ((iElem.parentNode) && (!iElem.hasbox)) {
- scanBO(iElem);
- iElem=iElem.parentNode;
- }
- }
-
- if ((CSE!=LSE)&&(!isChild(CSE,dvHdr))&&(!isChild(CSE,dvBdy))){
- if (!CSE.boxItem) {
- iterElem=CSE;
- while ((iterElem.hasbox==2)&&(iterElem.parentNode))
- iterElem=iterElem.parentNode;
- CSE.boxItem=iterElem;
- }
- iterElem=CSE.boxItem;
- if (CSE.boxItem&&(CSE.boxItem.hasbox==1)) {
- LBE=CBE;
- CBE=iterElem;
- if (CBE!=LBE) {
- applyStyles();
- if (!CBE.requireclick)
- if (CBE.fade) {
- if (ID!=null)
- clearTimeout(ID);
- ID=setTimeout("fadeIn("+CBE.fadespeed+")",CBE.delay);
- }
- else {
- if (ID!=null)
- clearTimeout(ID);
- COL=1;
- ID=setTimeout("oDv.style.visibility='visible';ID=null;",CBE.delay);
- }
- if (CBE.IEbugfix) {hideSelects();}
- fixposx=!isNaN(CBE.fixX)?Left(CBE)+CBE.fixX:CBE.absX;
- fixposy=!isNaN(CBE.fixY)?Top(CBE)+CBE.fixY:CBE.absY;
- lockX=0;
- lockY=0;
- boxMove=true;
- ox=CBE.offX?CBE.offX:10;
- oy=CBE.offY?CBE.offY:-8;
- }
- }
- else if (!isChild(CSE,dvHdr) && !isChild(CSE,dvBdy) && (boxMove)) {
- // The conditional here fixes flickering between tables cells.
- if ((!isChild(CBE,CSE)) || (CSE.tagName!='TABLE')) {
- CBE=null;
- if (ID!=null)
- clearTimeout(ID);
- fadeOut();
- showSelects();
- }
- }
- LSE=CSE;
- }
- else if (((isChild(CSE,dvHdr) || isChild(CSE,dvBdy))&&(boxMove))) {
- totalScrollLeft=0;
- totalScrollTop=0;
-
- iterElem=CSE;
- while(iterElem) {
- if(!isNaN(parseInt(iterElem.scrollTop)))
- totalScrollTop+=parseInt(iterElem.scrollTop);
- if(!isNaN(parseInt(iterElem.scrollLeft)))
- totalScrollLeft+=parseInt(iterElem.scrollLeft);
- iterElem=iterElem.parentNode;
- }
- if (CBE!=null) {
- boxLeft=Left(CBE)-totalScrollLeft;
- boxRight=parseInt(Left(CBE)+CBE.offsetWidth)-totalScrollLeft;
- boxTop=Top(CBE)-totalScrollTop;
- boxBottom=parseInt(Top(CBE)+CBE.offsetHeight)-totalScrollTop;
- doCheck();
- }
- }
-
- if (boxMove&&CBE) {
- // This added to alleviate bug in IE6 w.r.t DOCTYPE
- bodyScrollTop=document.documentElement&&document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop;
- bodyScrollLet=document.documentElement&&document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft;
- mouseX=evt.pageX?evt.pageX-bodyScrollLet:evt.clientX-document.body.clientLeft;
- mouseY=evt.pageY?evt.pageY-bodyScrollTop:evt.clientY-document.body.clientTop;
- if ((CBE)&&(CBE.windowLock)) {
- mouseY < -oy?lockY=-mouseY-oy:lockY=0;
- mouseX < -ox?lockX=-mouseX-ox:lockX=0;
- mouseY > (SHW()[1]-oDv.offsetHeight-oy)?lockY=-mouseY+SHW()[1]-oDv.offsetHeight-oy:lockY=lockY;
- mouseX > (SHW()[0]-dvBdy.offsetWidth-ox)?lockX=-mouseX-ox+SHW()[0]-dvBdy.offsetWidth:lockX=lockX;
- }
- oDv.style.left=((fixposx)||(fixposx==0))?fixposx:bodyScrollLet+mouseX+ox+lockX+"px";
- oDv.style.top=((fixposy)||(fixposy==0))?fixposy:bodyScrollTop+mouseY+oy+lockY+"px";
-
- }
- }
-
- function doCheck() {
- if ( (mouseX < boxLeft) || (mouseX >boxRight) || (mouseY < boxTop) || (mouseY > boxBottom)) {
- if (!CBE.requireclick)
- fadeOut();
- if (CBE.IEbugfix) {showSelects();}
- CBE=null;
- }
- }
-
- function pauseBox(e) {
- e?evt=e:evt=event;
- boxMove=false;
- evt.cancelBubble=true;
- }
-
- function showHideBox(e) {
- oDv.style.visibility=(oDv.style.visibility!='visible')?'visible':'hidden';
- }
-
- function hideBox(e) {
- oDv.style.visibility='hidden';
- }
-
- var COL=0;
- var stopfade=false;
- function fadeIn(fs) {
- ID=null;
- COL=0;
- oDv.style.visibility='visible';
- fadeIn2(fs);
- }
-
- function fadeIn2(fs) {
- COL=COL+fs;
- COL=(COL>1)?1:COL;
- oDv.style.filter='alpha(opacity='+parseInt(100*COL)+')';
- oDv.style.opacity=COL;
- if (COL<1)
- setTimeout("fadeIn2("+fs+")",20);
- }
-
-
- function fadeOut() {
- oDv.style.visibility='hidden';
-
- }
-
- function isChild(s,d) {
- while(s) {
- if (s==d)
- return true;
- s=s.parentNode;
- }
- return false;
- }
-
- var cSrc;
- function checkMove(e) {
- e?evt=e:evt=event;
- cSrc=evt.target?evt.target:evt.srcElement;
- if ((!boxMove)&&(!isChild(cSrc,oDv))) {
- fadeOut();
- if (CBE&&CBE.IEbugfix) {showSelects();}
- boxMove=true;
- CBE=null;
- }
- }
-
- function showSelects(){
- var elements = document.getElementsByTagName("select");
- for (i=0;i< elements.length;i++){
- elements[i].style.visibility='visible';
- }
- }
-
- function hideSelects(){
- var elements = document.getElementsByTagName("select");
- for (i=0;i< elements.length;i++){
- elements[i].style.visibility='hidden';
- }
- }
-
- function tooltipsClicked()
- {
- ttOn = ttOn ? false : true;
- }