1// x.js 2// X v3.10, Cross-Browser DHTML Library from Cross-Browser.com 3// Copyright (c) 2002,2003 Michael Foster ([email protected]) 4// This library is distributed under the terms of the LGPL (gnu.org) 5 6// Variables: 7var xVersion='3.10',xOp7=false,xOp5or6=false,xIE4Up=false,xNN4=false,xUA=navigator.userAgent.toLowerCase(); 8if(window.opera){ 9 xOp7=(xUA.indexOf('opera 7')!=-1 || xUA.indexOf('opera/7')!=-1); 10 if (!xOp7) xOp5or6=(xUA.indexOf('opera 5')!=-1 || xUA.indexOf('opera/5')!=-1 || xUA.indexOf('opera 6')!=-1 || xUA.indexOf('opera/6')!=-1); 11} 12else if(document.layers) xNN4=true; 13else {xIE4Up=document.all && xUA.indexOf('msie')!=-1 && parseInt(navigator.appVersion)>=4;} 14 15// Appearance: 16function xShow(e) { 17 if(!(e=xGetElementById(e))) return; 18 if(e.style && xDef(e.style.visibility)) e.style.visibility='inherit'; 19 else if(xDef(e.visibility)) e.visibility='show'; 20} 21function xHide(e) { 22 if(!(e=xGetElementById(e))) return; 23 if(e.style && xDef(e.style.visibility)) e.style.visibility='hidden'; 24 else if(xDef(e.visibility)) e.visibility='hide'; 25} 26function xZIndex(e,uZ) { 27 if(!(e=xGetElementById(e))) return 0; 28 if(e.style && xDef(e.style.zIndex)) { 29 if(arguments.length>1) e.style.zIndex=uZ; 30 else uZ=e.style.zIndex; 31 } 32 else if(xDef(e.zIndex)) { 33 if(arguments.length>1) e.zIndex=uZ; 34 else uZ=e.zIndex; 35 } 36 return uZ; 37} 38function xColor(e,sColor) { 39 if(!(e=xGetElementById(e))) return ""; 40 var c=""; 41 if(e.style && xDef(e.style.color)) { 42 if(arguments.length>1) e.style.color=sColor; 43 c=e.style.color; 44 } 45 return c; 46} 47function xBackground(e,sColor,sImage) { 48 if(!(e=xGetElementById(e))) return ""; 49 var bg=""; 50 if(e.style) { 51 if(arguments.length>1) e.style.backgroundColor=sColor; 52 if(arguments.length==3) e.style.backgroundImage=(sImage && sImage!="")? "url("+sImage+")" : null; 53 bg=e.style.backgroundColor; 54 } 55 else if(xDef(e.bgColor)) { 56 if(arguments.length>1) e.bgColor=sColor; 57 bg=e.bgColor; 58 if(arguments.length==3) e.background.src=sImage; 59 } 60 return bg; 61} 62 63// Position: 64function xMoveTo(e,iX,iY) { 65 xLeft(e,iX); 66 xTop(e,iY); 67} 68function xLeft(e,iX) { 69 if(!(e=xGetElementById(e))) return 0; 70 var css=xDef(e.style); 71 if (css && xDef(e.style.left) && typeof(e.style.left)=="string") { 72 if(arguments.length>1) e.style.left=iX+"px"; 73 else { 74 iX=parseInt(e.style.left); 75 if(isNaN(iX)) iX=0; 76 } 77 } 78 else if(css && xDef(e.style.pixelLeft)) { 79 if(arguments.length>1) e.style.pixelLeft=iX; 80 else iX=e.style.pixelLeft; 81 } 82 else if(xDef(e.left)) { 83 if(arguments.length>1) e.left=iX; 84 else iX=e.left; 85 } 86 return iX; 87} 88function xTop(e,iY) { 89 if(!(e=xGetElementById(e))) return 0; 90 var css=xDef(e.style); 91 if(css && xDef(e.style.top) && typeof(e.style.top)=="string") { 92 if(arguments.length>1) e.style.top=iY+"px"; 93 else { 94 iY=parseInt(e.style.top); 95 if(isNaN(iY)) iY=0; 96 } 97 } 98 else if(css && xDef(e.style.pixelTop)) { 99 if(arguments.length>1) e.style.pixelTop=iY; 100 else iY=e.style.pixelTop; 101 } 102 else if(xDef(e.top)) { 103 if(arguments.length>1) e.top=iY; 104 else iY=e.top; 105 } 106 return iY; 107} 108function xPageX(e) { 109 if (!(e=xGetElementById(e))) return 0; 110 if (xDef(e.pageX)) return e.pageX; 111 var x = 0; 112 while (e) { 113 if (xDef(e.offsetLeft)) x += e.offsetLeft; 114 e = xParent(e); 115 } 116 return x; 117} 118function xPageY(e) { 119 if (!(e=xGetElementById(e))) return 0; 120 if (xDef(e.pageY)) return e.pageY; 121 var y = 0; 122 while (e) { 123 if (xDef(e.offsetTop)) y += e.offsetTop; 124 e = xParent(e); 125 } 126 return y; 127} 128function xSlideTo(e,x,y,uTime) { 129 if (!(e=xGetElementById(e))) return; 130 if (!e.timeout) e.timeout = 25; 131 e.xTarget = x; e.yTarget = y; e.slideTime = uTime; e.stop = false; 132 e.yA = e.yTarget - xTop(e); e.xA = e.xTarget - xLeft(e); // A = distance 133 e.B = Math.PI / (2 * e.slideTime); // B = period 134 e.yD = xTop(e); e.xD = xLeft(e); // D = initial position 135 var d = new Date(); e.C = d.getTime(); 136 if (!e.moving) xSlide(e); 137} 138function xSlide(e) { 139 if (!(e=xGetElementById(e))) return; 140 var now, s, t, newY, newX; 141 now = new Date(); 142 t = now.getTime() - e.C; 143 if (e.stop) { e.moving = false; } 144 else if (t < e.slideTime) { 145 setTimeout("xSlide('"+e.id+"')", e.timeout); 146 s = Math.sin(e.B * t); 147 newX = Math.round(e.xA * s + e.xD); 148 newY = Math.round(e.yA * s + e.yD); 149 xMoveTo(e, newX, newY); 150 e.moving = true; 151 } 152 else { 153 xMoveTo(e, e.xTarget, e.yTarget); 154 e.moving = false; 155 } 156} 157 158// Size: 159function xResizeTo(e,uW,uH) { 160 xWidth(e,uW); 161 xHeight(e,uH); 162} 163function xWidth(e,uW) { 164 if(!(e=xGetElementById(e)) || (uW && uW<0)) return 0; 165 uW=Math.round(uW); 166 var css=xDef(e.style); 167 if(css && xDef(e.style.width,e.offsetWidth) && typeof(e.style.width)=="string") { 168 if(arguments.length>1) xSetCW(e, uW); 169 uW=e.offsetWidth; 170 } 171 else if(css && xDef(e.style.pixelWidth)) { 172 if(arguments.length>1) e.style.pixelWidth=uW; 173 uW=e.style.pixelWidth; 174 } 175 else if(xDef(e.clip) && xDef(e.clip.right)) { 176 if(arguments.length>1) e.clip.right=uW; 177 uW=e.clip.right; 178 } 179 return uW; 180} 181function xHeight(e,uH) { 182 if(!(e=xGetElementById(e)) || (uH && uH<0)) return 0; 183 uH=Math.round(uH); 184 var css=xDef(e.style); 185 if(css && xDef(e.style.height,e.offsetHeight) && typeof(e.style.height)=="str
185ing") { 186 if(arguments.length>1) xSetCH(e, uH); 187 uH=e.offsetHeight; 188 } 189 else if(css && xDef(e.style.pixelHeight)) { 190 if(arguments.length>1) e.style.pixelHeight=uH; 191 uH=e.style.pixelHeight; 192 } 193 else if(xDef(e.clip) && xDef(e.clip.bottom)) { 194 if(arguments.length>1) e.clip.bottom=uH; 195 uH=e.clip.bottom; 196 } 197 return uH; 198} 199// thank moz for the next 2000 bytes 200function xGetCS(ele,sP){return parseInt(document.defaultView.getComputedStyle(ele,"").getPropertyValue(sP));} 201function xSetCW(ele,uW){ 202 if(uW<0) return; 203 var pl=0,pr=0,bl=0,br=0; 204 if(xDef(document.defaultView) && xDef(document.defaultView.getComputedStyle)){ 205 pl=xGetCS(ele,"padding-left"); 206 pr=xGetCS(ele,"padding-right"); 207 bl=xGetCS(ele,"border-left-width"); 208 br=xGetCS(ele,"border-right-width"); 209 } 210 else if(xDef(ele.currentStyle,document.compatMode)){ 211 if(document.compatMode=="CSS1Compat"){ 212 pl=parseInt(ele.currentStyle.paddingLeft); 213 pr=parseInt(ele.currentStyle.paddingRight); 214 bl=parseInt(ele.currentStyle.borderLeftWidth); 215 br=parseInt(ele.currentStyle.borderRightWidth); 216 } 217 } 218 else if(xDef(ele.offsetWidth,ele.style.width)){ 219 ele.style.width=uW+"px"; 220 pl=ele.offsetWidth-uW; 221 } 222 if(isNaN(pl)) pl=0; if(isNaN(pr)) pr=0; if(isNaN(bl)) bl=0; if(isNaN(br)) br=0; 223 var cssW=uW-(pl+pr+bl+br); 224 if(isNaN(cssW)||cssW<0) return; 225 else ele.style.width=cssW+"px"; 226} 227function xSetCH(ele,uH){ 228 if(uH<0) return; 229 var pt=0,pb=0,bt=0,bb=0; 230 if(xDef(document.defaultView) && xDef(document.defaultView.getComputedStyle)){ 231 pt=xGetCS(ele,"padding-top"); 232 pb=xGetCS(ele,"padding-bottom"); 233 bt=xGetCS(ele,"border-top-width"); 234 bb=xGetCS(ele,"border-bottom-width"); 235 } 236 else if(xDef(ele.currentStyle,document.compatMode)){ 237 if(document.compatMode=="CSS1Compat"){ 238 pt=parseInt(ele.currentStyle.paddingTop); 239 pb=parseInt(ele.currentStyle.paddingBottom); 240 bt=parseInt(ele.currentStyle.borderTopWidth); 241 bb=parseInt(ele.currentStyle.borderBottomWidth); 242 } 243 } 244 else if(xDef(ele.offsetHeight,ele.style.height)){ 245 ele.style.height=uH+"px"; 246 pt=ele.offsetHeight-uH; 247 } 248 if(isNaN(pt)) pt=0; if(isNaN(pb)) pb=0; if(isNaN(bt)) bt=0; if(isNaN(bb)) bb=0; 249 var cssH=uH-(pt+pb+bt+bb); 250 if(isNaN(cssH)||cssH<0) return; 251 else ele.style.height=cssH+"px"; 252} 253function xClip(e,iTop,iRight,iBottom,iLeft) { 254 if(!(e=xGetElementById(e))) return; 255 if(e.style) { 256 if (arguments.length == 5) e.style.clip="rect("+iTop+"px "+iRight+"px "+iBottom+"px "+iLeft+"px)"; 257 else e.style.clip="rect(0 "+parseInt(e.style.width)+"px "+parseInt(e.style.height)+"px 0)"; 258 } 259 else if(e.clip) { 260 if (arguments.length == 5) { e.clip.top=iTop; e.clip.right=iRight; e.clip.bottom=iBottom; e.clip.left=iLeft; } 261 else { e.clip.top=0; e.clip.right=xWidth(e); e.clip.bottom=xHeight(e); e.clip.left=0; } 262 } 263} 264 265// Event: 266function xAddEventListener(e,eventType,eventListener,useCapture) { 267 if(!(e=xGetElementById(e))) return; 268 eventType=eventType.toLowerCase(); 269 if((!xIE4Up && !xOp7) && e==window) { 270 if(eventType=='resize') { window.xPCW=xClientWidth(); window.xPCH=xClientHeight(); window.xREL=eventListener; xResizeEvent(); return; } 271 if(eventType=='scroll') { window.xPSL=xScrollLeft(); window.xPST=xScrollTop(); window.xSEL=eventListener; xScrollEvent(); return; } 272 } 273 var eh="e.on"+eventType+"=eventListener"; 274 if(e.addEventListener) e.addEventListener(eventType,eventListener,useCapture); 275 else if(e.attachEvent) e.attachEvent("on"+eventType,eventListener); 276 else if(e.captureEvents) { 277 if(useCapture||(eventType.indexOf('mousemove')!=-1)) { e.captureEvents(eval("Event."+eventType.toUpperCase())); } 278 eval(eh); 279 } 280 else eval(eh); 281} 282function xRemoveEventListener(e,eventType,eventListener,useCapture) { 283 if(!(e=xGetElementById(e))) return; 284 eventType=eventType.toLowerCase(); 285 if((!xIE4Up && !xOp7) && e==window) { 286 if(eventType=='resize') { window.xREL=null; return; } 287 if(eventType=='scroll') { window.xSEL=null; return; } 288 } 289 var eh="e.on"+eventType+"=null"; 290 if(e.removeEventListener) e.removeEventListener(eventType,eventListener,useCapture); 291 else if(e.detachEvent) e.detachEvent("on"+eventType,eventListener); 292 else if(e.releaseEvents) { 293 if(useCapture||(eventType.indexOf('mousemove')!=-1)) { e.releaseEvents(eval("Event."+eventType.toUpperCase())); } 294 eval(eh); 295 } 296 else eval(eh); 297} 298function xEvent(evt) { // cross-browser event object prototype 299 this.type = ""; 300 this.target = null; 301 this.pageX = 0; 302 this.pageY = 0; 303 this.offsetX = 0; 304 this.offsetY = 0; 305 this.keyCode = 0; 306 var e = evt ? evt : window.event; 307 if(!e) return; 308 // type 309 if(e.type) this.type = e.type; 310 // target 311 if(xNN4) this.target = xLayerFromPoint(e.pageX, e.pageY); 312 else if(e.target) this.target = e.target; 313 else if(e.srcElement) this.target = e.srcElement; 314 // pageX, pageY 315 if(xOp5or6) { this.pageX = e.clientX; this.pageY = e.clientY; } 316 else if(xDef(e.pageX,e.pageY)) { this.pageX = e.pageX; this.pageY = e.pageY; } 317 else if(xDef(e.clientX,e.clientY)) { this.pageX = e.clientX + xScrollLeft(); this.pageY = e.clientY + xScrollTop(); } 318 // offsetX, offsetY 319 if(xDef(e.layerX,e.layerY)) { this.offsetX = e.layerX; this.offsetY = e.layerY; } 320 else if(xDef(e.offsetX,e.offsetY)) { this.offsetX = e.offsetX; this.offsetY = e.offsetY; }
321 else { this.offsetX = this.pageX - xPageX(this.target); this.offsetY = this.pageY - xPageY(this.target); } 322 // keycode 323 if (xDef(e.keyCode)) { this.keyCode = e.keyCode; } 324 else if (xDef(e.which)) { this.keyCode = e.which; } 325} 326function xResizeEvent() { // window resize event simulation 327 if (window.xREL) setTimeout("xResizeEvent()", 250); 328 var cw = xClientWidth(), ch = xClientHeight(); 329 if (window.xPCW != cw || window.xPCH != ch) { window.xPCW = cw; window.xPCH = ch; if (window.xREL) window.xREL(); } 330} 331function xScrollEvent() { // window scroll event simulation 332 if (window.xSEL) setTimeout("xScrollEvent()", 250); 333 var sl = xScrollLeft(), st = xScrollTop(); 334 if (window.xPSL != sl || window.xPST != st) { window.xPSL = sl; window.xPST = st; if (window.xSEL) window.xSEL(); } 335} 336 337// Object: 338function xGetElementById(e) { 339 if(typeof(e)!="string") return e; 340 if(document.getElementById) e=document.getElementById(e); 341 else if(document.all) e=document.all[e]; 342 else if(document.layers) e=xLayer(e); 343 else e=null; 344 return e; 345} 346function xLayer(id,root) { // only for nn4 347 var i,layer,found=null; 348 if (!root) root=window; 349 for(i=0; i<root.document.layers.length; i++) { 350 layer=root.document.layers[i]; 351 if(layer.id==id) return layer; 352 if(layer.document.layers.length) found=xLayer(id,layer); 353 if(found) return found; 354 } 355 return null; 356} 357function xLayerFromPoint(x,y,root) { // only for nn4 358 var i, hn=null, hz=-1, cn; 359 if (!root) root = window; 360 for (i=0; i < root.document.layers.length; ++i) { 361 cn = root.document.layers[i]; 362 if (cn.visibility != "hide" && x >= cn.pageX && x <= cn.pageX + cn.clip.right && y >= cn.pageY && y <= cn.pageY + cn.clip.bottom ) { 363 if (cn.zIndex > hz) { hz = cn.zIndex; hn = cn; } 364 } 365 } 366 if (hn) { 367 cn = xLayerFromPoint(x,y,hn); 368 if (cn) hn = cn; 369 } 370 return hn; 371} 372function xParent(e){ 373 if (!(e=xGetElementById(e))) return null; 374 var p=null; 375 if (e.parentLayer){if (e.parentLayer!=window) p=e.parentLayer;} 376 else{ 377 if (e.offsetParent) p=e.offsetParent; 378 else if (e.parentNode) p=e.parentNode; 379 else if (e.parentElement) p=e.parentElement; 380 } 381 return p; 382} 383function xDef() { 384 for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=="" || typeof(arguments[i])=="undefined") return false;} 385 return true; 386} 387 388// Window: 389function xScrollLeft() { 390 var offset=0; 391 if(xDef(window.pageXOffset)) offset=window.pageXOffset; 392 else if(document.documentElement && document.documentElement.scrollLeft) offset=document.documentElement.scrollLeft; 393 else if(document.body && xDef(document.body.scrollLeft)) offset=document.body.scrollLeft; 394 return offset; 395} 396function xScrollTop() { 397 var offset=0; 398 if(xDef(window.pageYOffset)) offset=window.pageYOffset; 399 else if(document.documentElement && document.documentElement.scrollTop) offset=document.documentElement.scrollTop; 400 else if(document.body && xDef(document.body.scrollTop)) offset=document.body.scrollTop; 401 return offset; 402} 403function xClientWidth() { 404 var w=0; 405 if(xOp5or6) w=window.innerWidth; 406 else if(xIE4Up && document.documentElement && document.documentElement.clientWidth) 407 w=document.documentElement.clientWidth; 408 else if(document.body && document.body.clientWidth) 409 w=document.body.clientWidth; 410 else if(xDef(window.innerWidth,window.innerHeight,document.height)) { 411 w=window.innerWidth; 412 if(document.height>window.innerHeight) w-=16; 413 } 414 return w; 415} 416function xClientHeight() { 417 var h=0; 418 if(xOp5or6) h=window.innerHeight; 419 else if(xIE4Up && document.documentElement && document.documentElement.clientHeight) 420 h=document.documentElement.clientHeight; 421 else if(document.body && document.body.clientHeight) 422 h=document.body.clientHeight; 423 else if(xDef(window.innerWidth,window.innerHeight,document.width)) { 424 h=window.innerHeight; 425 if(document.width>window.innerWidth) h-=16; 426 } 427 return h; 428} 429 430// end x.js
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.