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