1 2/* 3cssbody=[ttbdy] cssheader=[tthdr] offsety=[30] offsetx=[30] header=[This is the title bar] body=[Stuff in the box body.<br><br>you can put in some html stuff — and special characters. ]" 4*/ 5 6/* --- BoxOver --- 7/* --- v 2.1 17th June 2006 8By Oliver Bryant with help of Matthew Tagg 9http://boxover.swazz.org */ 10 11if (typeof document.attachEvent!='undefined') { 12 window.attachEvent('onload',init); 13 document.attachEvent('onmousemove',moveMouse); 14 document.attachEvent('onclick',checkMove); } 15else { 16 window.addEventListener('load',init,false); 17 document.addEventListener('mousemove',moveMouse,false); 18 document.addEventListener('click',checkMove,false); 19} 20 21var oDv=document.createElement("div"); 22var dvHdr=document.createElement("div"); 23var dvBdy=document.createElement("div"); 24var windowlock,boxMove,fixposx,fixposy,lockX,lockY,fixx,fixy,ox,oy,boxLeft,boxRight,boxTop,boxBottom,evt,mouseX,mouseY,boxOpen,totalScrollTop,totalScrollLeft; 25boxOpen=false; 26ox=10; 27oy=10; 28lockX=0; 29lockY=0; 30 31function init() { 32 oDv.appendChild(dvHdr); 33 oDv.appendChild(dvBdy); 34 oDv.style.position="absolute"; 35 oDv.style.visibility='hidden'; 36 document.body.appendChild(oDv); 37} 38 39function defHdrStyle() { 40 dvHdr.innerHTML='<img style="vertical-align:middle" src="info.gif"> '+dvHdr.innerHTML; 41 dvHdr.style.fontWeight='bold'; 42 dvHdr.style.width='150px'; 43 dvHdr.style.fontFamily='arial'; 44 dvHdr.style.border='1px solid #A5CFE9'; 45 dvHdr.style.padding='3'; 46 dvHdr.style.fontSize='11'; 47 dvHdr.style.color='#4B7A98'; 48 dvHdr.style.background='#D5EBF9'; 49 dvHdr.style.filter='alpha(opacity=85)'; // IE 50 dvHdr.style.opacity='0.85'; // FF 51} 52 53function defBdyStyle() { 54 dvBdy.style.borderBottom='1px solid #A5CFE9'; 55 dvBdy.style.borderLeft='1px solid #A5CFE9'; 56 dvBdy.style.borderRight='1px solid #A5CFE9'; 57 dvBdy.style.width='150px'; 58 dvBdy.style.fontFamily='arial'; 59 dvBdy.style.fontSize='11'; 60 dvBdy.style.padding='3'; 61 dvBdy.style.color='#1B4966'; 62 dvBdy.style.background='#FFFFFF'; 63 dvBdy.style.filter='alpha(opacity=85)'; // IE 64 dvBdy.style.opacity='0.85'; // FF 65} 66 67function checkElemBO(txt) { 68if (!txt || typeof(txt) != 'string') return false; 69if ((txt.indexOf('header')>-1)&&(txt.indexOf('body')>-1)&&(txt.indexOf('[')>-1)&&(txt.indexOf('[')>-1)) 70 return true; 71else 72 return false; 73} 74 75function scanBO(curNode) { 76 if (checkElemBO(curNode.title)) { 77 curNode.boHDR=getParam('header',curNode.title); 78 curNode.boBDY=getParam('body',curNode.title); 79 curNode.boCSSBDY=getParam('cssbody',curNode.title); 80 curNode.boCSSHDR=getParam('cssheader',curNode.title); 81 curNode.IEbugfix=(getParam('hideselects',curNode.title)=='on')?true:false; 82 curNode.fixX=parseInt(getParam('fixedrelx',curNode.title)); 83 curNode.fixY=parseInt(getParam('fixedrely',curNode.title)); 84 curNode.absX=parseInt(getParam('fixedabsx',curNode.title)); 85 curNode.absY=parseInt(getParam('fixedabsy',curNode.title)); 86 curNode.offY=(getParam('offsety',curNode.title)!='')?parseInt(getParam('offsety',curNode.title)):10; 87 curNode.offX=(getParam('offsetx',curNode.title)!='')?parseInt(getParam('offsetx',curNode.title)):10; 88 curNode.fade=(getParam('fade',curNode.title)=='on')?true:false; 89 curNode.fadespeed=(getParam('fadespeed',curNode.title)!='')?getParam('fadespeed',curNode.title):0.04; 90 curNode.delay=(getParam('delay',curNode.title)!='')?parseInt(getParam('delay',curNode.title)):0; 91 if (getParam('requireclick',curNode.title)=='on') { 92 curNode.requireclick=true; 93 document.all?curNode.attachEvent('onclick',showHideBox):curNode.addEventListener('click',showHideBox,false); 94 document.all?curNode.attachEvent('onmouseover',hideBox):curNode.addEventListener('mouseover',hideBox,false); 95 } 96 else {// Note : if requireclick is on the stop clicks are ignored 97 if (getParam('doubleclickstop',curNode.title)!='off') { 98 document.all?curNode.attachEvent('ondblclick',pauseBox):curNode.addEventListener('dblclick',pauseBox,false); 99 } 100 if (getParam('singleclickstop',curNode.title)=='on') { 101 document.all?curNode.attachEvent('onclick',pauseBox):curNode.addEventListener('click',pauseBox,false); 102 } 103 } 104 curNode.windowLock=getParam('windowlock',curNode.title).toLowerCase()=='off'?false:true; 105 curNode.title=''; 106 curNode.hasbox=1; 107 } 108 else 109 curNode.hasbox=2; 110} 111 112 113function getParam(param,list) { 114 var reg = new RegExp('([^a-zA-Z]' + param + '|^' + param + ')\\s*=\\s*\\[\\s*(((\\[\\[)|(\\]\\])|([^\\]\\[]))*)\\s*\\]'); 115 var res = reg.exec(list); 116 var returnvar; 117 if(res) 118 return res[2].replace('[[','[').replace(']]',']'); 119 else
120 return ''; 121} 122 123function Left(elem){ 124 var x=0; 125 if (elem.calcLeft) 126 return elem.calcLeft; 127 var oElem=elem; 128 while(elem){ 129 if ((elem.currentStyle)&& (!isNaN(parseInt(elem.currentStyle.borderLeftWidth)))&&(x!=0)) 130 x+=parseInt(elem.currentStyle.borderLeftWidth); 131 x+=elem.offsetLeft; 132 elem=elem.offsetParent; 133 } 134 oElem.calcLeft=x; 135 return x; 136 } 137 138function Top(elem){ 139 var x=0; 140 if (elem.calcTop) 141 return elem.calcTop; 142 var oElem=elem; 143 while(elem){ 144 if ((elem.currentStyle)&& (!isNaN(parseInt(elem.currentStyle.borderTopWidth)))&&(x!=0)) 145 x+=parseInt(elem.currentStyle.borderTopWidth); 146 x+=elem.offsetTop; 147 elem=elem.offsetParent; 148 } 149 oElem.calcTop=x; 150 return x; 151 152} 153 154var ah,ab; 155function applyStyles() { 156 if(ab) 157 oDv.removeChild(dvBdy); 158 if (ah) 159 oDv.removeChild(dvHdr); 160 dvHdr=document.createElement("div"); 161 dvBdy=document.createElement("div"); 162 CBE.boCSSBDY?dvBdy.className=CBE.boCSSBDY:defBdyStyle(); 163 CBE.boCSSHDR?dvHdr.className=CBE.boCSSHDR:defHdrStyle(); 164 dvHdr.innerHTML=CBE.boHDR; 165 dvBdy.innerHTML=CBE.boBDY; 166 ah=false; 167 ab=false; 168 if (CBE.boHDR!='') { 169 oDv.appendChild(dvHdr); 170 ah=true; 171 } 172 if (CBE.boBDY!=''){ 173 oDv.appendChild(dvBdy); 174 ab=true; 175 } 176} 177 178var CSE,iterElem,LSE,CBE,LBE, totalScrollLeft, totalScrollTop, width, height ; 179var ini=false; 180 181// Customised function for inner window dimension 182function SHW() { 183 if (document.body && (document.body.clientWidth !=0)) { 184 width=document.body.clientWidth; 185 height=document.body.clientHeight; 186 } 187 if (document.documentElement && (document.documentElement.clientWidth!=0) && (document.body.clientWidth + 20 >= document.documentElement.clientWidth)) { 188 width=document.documentElement.clientWidth; 189 height=document.documentElement.clientHeight; 190 } 191 return [width,height]; 192} 193 194 195var ID=null; 196function moveMouse(e) { 197 //boxMove=true; 198 e?evt=e:evt=event; 199 200 CSE=evt.target?evt.target:evt.srcElement; 201 202 if (!CSE.hasbox) { 203 // Note we need to scan up DOM here, some elements like TR don't get triggered as srcElement 204 iElem=CSE; 205 while ((iElem.parentNode) && (!iElem.hasbox)) { 206 scanBO(iElem); 207 iElem=iElem.parentNode; 208 } 209 } 210 211 if ((CSE!=LSE)&&(!isChild(CSE,dvHdr))&&(!isChild(CSE,dvBdy))){ 212 if (!CSE.boxItem) { 213 iterElem=CSE; 214 while ((iterElem.hasbox==2)&&(iterElem.parentNode)) 215 iterElem=iterElem.parentNode; 216 CSE.boxItem=iterElem; 217 } 218 iterElem=CSE.boxItem; 219 if (CSE.boxItem&&(CSE.boxItem.hasbox==1)) { 220 LBE=CBE; 221 CBE=iterElem; 222 if (CBE!=LBE) { 223 applyStyles(); 224 if (!CBE.requireclick) 225 if (CBE.fade) { 226 if (ID!=null) 227 clearTimeout(ID); 228 ID=setTimeout("fadeIn("+CBE.fadespeed+")",CBE.delay); 229 } 230 else { 231 if (ID!=null) 232 clearTimeout(ID); 233 COL=1; 234 ID=setTimeout("oDv.style.visibility='visible';ID=null;",CBE.delay); 235 } 236 if (CBE.IEbugfix) {hideSelects();} 237 fixposx=!isNaN(CBE.fixX)?Left(CBE)+CBE.fixX:CBE.absX; 238 fixposy=!isNaN(CBE.fixY)?Top(CBE)+CBE.fixY:CBE.absY; 239 lockX=0; 240 lockY=0; 241 boxMove=true; 242 ox=CBE.offX?CBE.offX:10; 243 oy=CBE.offY?CBE.offY:10; 244 } 245 } 246 else if (!isChild(CSE,dvHdr) && !isChild(CSE,dvBdy) && (boxMove)) { 247 // The conditional here fixes flickering between tables cells. 248 if ((!isChild(CBE,CSE)) || (CSE.tagName!='TABLE')) { 249 CBE=null; 250 if (ID!=null) 251 clearTimeout(ID); 252 fadeOut(); 253 showSelects(); 254 } 255 } 256 LSE=CSE; 257 } 258 else if (((isChild(CSE,dvHdr) || isChild(CSE,dvBdy))&&(boxMove))) { 259 totalScrollLeft=0; 260 totalScrollTop=0; 261 262 iterElem=CSE; 263 while(iterElem) { 264 if(!isNaN(parseInt(iterElem.scrollTop))) 265 totalScrollTop+=parseInt(iterElem.scrollTop); 266 if(!isNaN(parseInt(iterElem.scrollLeft))) 267 totalScrollLeft+=parseInt(iterElem.scrollLeft); 268 iterElem=iterElem.parentNode; 269 } 270 if (CBE!=null) { 271 boxLeft=Left(CBE)-totalScrollLeft; 272 boxRight=parseInt(Left(CBE)+CBE.offsetWidth)-totalScrollLeft; 273 boxTop=Top(CBE)-totalScrollTop; 274 boxBottom=parseInt(Top(CBE)+CBE.offsetHeight)-totalScrollTop; 275 doCheck(); 276 } 277 } 278 279 if (boxMove&&CBE) { 280 // This added to alleviate bug in IE6 w.r.t DOCTYPE 281 bodyScrollTop=document.documentElement&&document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop; 282 bodyScrollLet=document.documentElement&&document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft; 283 mouseX=evt.pageX?evt.pageX-bodyScrollLet:evt.clientX-document.body.clientLeft; 284 mouseY=evt.pageY?evt.pageY-bodyScrollTop:evt.clientY-document.body.clientTop; 285 if ((CBE)&&(CBE.windowLock)) { 286 mouseY < -oy?lockY=-mouseY-oy:lockY=0; 287 mouseX < -ox?lockX=-mouseX-ox:lockX=0; 288 mouseY > (SHW()[1]-oDv.offsetHeight-oy)?lockY=-mouseY+SHW()[1]-oDv.offsetHeight-oy:lockY=lockY; 289 mouseX > (SHW()[0]-dvBdy.offsetWidth-ox)?lockX=-mouseX-ox+SHW()[0]-dvBdy.offsetWidth:lockX=lockX; 290 } 291 oDv.style.left=((fixposx)||(fixposx==0))?fixposx:bodyScrollLet+mouseX+ox+lockX+"px"; 292 oDv.style.top=((fixposy)||(fixposy==0))?fixposy:bodyScrollTop+mouseY+oy+lockY+"px"; 293 294 } 295} 296 297function doCheck() { 298 if ( (mouseX < boxLeft) || (mouseX >boxRight) || (mouseY < boxTop) || (mouseY > boxBottom)) { 299 if (!CBE.requireclick) 300 fadeOut(); 301 if (CBE.IEbugfix) {showSelects();} 302 CBE=null; 303 } 304} 305 306function pauseBox(e) { 307 e?evt=e:evt=event; 308 boxMove=false; 309 evt.cancelBubble=true; 310} 311 312function showHideBox(e) { 313 oDv.style.visibility=(oDv.style.visibility!='visible')?'visible':'hidden'; 314} 315 316function hideBox(e) { 317 oDv.style.visibility='hidden'; 318} 319 320var COL=0; 321var stopfade=false; 322function fadeIn(fs) { 323 ID=null; 324 COL=0; 325 oDv.style.visibility='visible'; 326 fadeIn2(fs); 327} 328 329function fadeIn2(fs) { 330 COL=COL+fs; 331 COL=(COL>1)?1:COL; 332 oDv.style.filter='alpha(opacity='+parseInt(100*COL)+')'; 333 oDv.style.opacity=COL; 334 if (COL<1) 335 setTimeout("fadeIn2("+fs+")",20); 336} 337 338 339function fadeOut() { 340 oDv.style.visibility='hidden'; 341 342} 343 344function isChild(s,d) { 345 while(s) { 346 if (s==d) 347 return true; 348 s=s.parentNode; 349 } 350 return false; 351} 352 353var cSrc; 354function checkMove(e) { 355 e?evt=e:evt=event; 356 cSrc=evt.target?evt.target:evt.srcElement; 357 if ((!boxMove)&&(!isChild(cSrc,oDv))) { 358 fadeOut(); 359 if (CBE&&CBE.IEbugfix) {showSelects();} 360 boxMove=true; 361 CBE=null; 362 } 363} 364 365function showSelects(){ 366 var elements = document.getElementsByTagName("select"); 367 for (i=0;i< elements.length;i++){ 368 elements[i].style.visibility='visible'; 369 } 370} 371 372function hideSelects(){ 373 var elements = document.getElementsByTagName("select"); 374 for (i=0;i< elements.length;i++){ 375 elements[i].style.visibility='hidden'; 376 } 377} 378
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.