--- /dev/null
+// -*- Java -*-
+//
+// Overlay.js, adapted from Floating image II on dynamicdrive.com
+/* Usage:
+<html>
+<head>
+<script LANGUAGE="JavaScript1.2" src="overlay.js"></script>
+...rest of head...
+</head>
+<body onload="overlaySetup(corner)">
+<div id="overlayDiv" STYLE="position:absolute;visibility:visible;">
+...body of overlay...
+</div>
+...rest of page...
+*/
+
+var overlayNS4 = document.layers ? 1 : 0;
+var overlayIE = document.all ? 1 : 0;
+var overlayNS6 = document.getElementById && !document.all ? 1 : 0;
+
+var overlayPadX = 15;
+var overlayPadY = 15;
+var overlayDelay = 60;
+
+var overlayCorner = 'ur'; // ul, ll, ur, lr, uc, lc, cl, cr
+
+function overlayRefresh() {
+ var overlayLx = 0;
+ var overlayLy = 0;
+
+ var overlayX = 0;
+ var overlayY = 0;
+ var overlayW = 0;
+ var overlayH = 0;
+ var contentH = 0;
+
+ var body = xbGetElementsByName('BODY')[0];
+
+ if (overlayIE) {
+ overlayLx = document.body.clientWidth;
+ overlayLy = document.body.clientHeight;
+
+ if (document.body.parentElement) {
+ // For IE6
+ overlayLx = document.body.parentElement.clientWidth;
+ overlayLy = document.body.parentElement.clientHeight;
+ }
+
+ overlayH = overlayDiv.offsetHeight;
+ overlayW = body.offsetWidth; // overlayDiv.offsetWidth;
+ contentH = body.offsetHeight;
+ } else if (overlayNS4) {
+ overlayLy = window.innerHeight;
+ overlayLx = window.innerWidth;
+ overlayH = document.overlayDiv.clip.height;
+ overlayW = body.clip.width; // document.overlayDiv.clip.width;
+ contentH = body.clip.height;
+ } else if (overlayNS6) {
+ var odiv = document.getElementById('overlayDiv');
+
+ overlayLy = window.innerHeight;
+ overlayLx = window.innerWidth;
+ overlayH = odiv.offsetHeight;
+ overlayW = body.offsetWidth; // odiv.offsetWidth;
+ contentH = body.offsetHeight;
+ }
+
+ if (overlayCorner == 'ul') {
+ overlayX = overlayPadX;
+ overlayY = overlayPadY;
+ } else if (overlayCorner == 'cl') {
+ overlayX = overlayPadX;
+ overlayY = (overlayLy - overlayH) / 2;
+ } else if (overlayCorner == 'll') {
+ overlayX = overlayPadX;
+ overlayY = (overlayLy - overlayH) - overlayPadY;
+ } else if (overlayCorner == 'ur') {
+ overlayX = (overlayLx - overlayW) - overlayPadX;
+ overlayY = overlayPadY;
+ } else if (overlayCorner == 'cr') {
+ overlayX = (overlayLx - overlayW) - overlayPadX;
+ overlayY = (overlayLy - overlayH) / 2;
+ } else if (overlayCorner == 'lr') {
+ overlayX = (overlayLx - overlayW) - overlayPadX;
+ overlayY = (overlayLy - overlayH) - overlayPadY;
+ } else if (overlayCorner == 'uc') {
+ overlayX = (overlayLx - overlayW) / 2;
+ overlayY = overlayPadY;
+ } else { // overlayCorner == 'lc'
+ overlayX = (overlayLx - overlayW) / 2;
+ overlayY = (overlayLy - overlayH) - overlayPadY;
+ }
+
+ if (overlayIE) {
+ overlayDiv.style.left=overlayX;
+ overlayDiv.style.top=overlayY+document.body.scrollTop;
+
+ if (contentH > overlayLy) {
+ overlayDiv.style.visibility = "hidden";
+ }
+ } else if (overlayNS4) {
+ document.overlayDiv.pageX=overlayX;
+ document.overlayDiv.pageY=overlayY+window.pageYOffset;
+ document.overlayDiv.visibility="visible";
+
+ if (contentH > overlayLy) {
+ document.overlayDiv.style.visibility = "hidden";
+ }
+ } else if (overlayNS6) {
+ var div = document.getElementById("overlayDiv");
+ var leftpx = overlayX;
+ var toppx = overlayY+window.pageYOffset;
+ var widthpx = overlayW;
+
+ div.style.left = leftpx + "px";
+ div.style.top = toppx + "px";
+ div.style.width = widthpx + "px";
+
+ if (contentH > overlayLy) {
+ div.style.visibility = "hidden";
+ }
+ }
+}
+
+function onad() {
+ loopfunc();
+}
+
+function loopfunc() {
+ overlayRefresh();
+ setTimeout('loopfunc()',overlayDelay);
+}
+
+function overlaySetup(corner) {
+ overlayCorner = corner;
+
+ if (overlayIE || overlayNS4 || overlayNS6) {
+ onad();
+ }
+}
--- /dev/null
+@import url('slides.css');
+
+.toclink { font-size: 10pt;
+ font-weight: normal;
+ }
+
+.toclink a { color: blue; }
+.toclink a:link { color: blue; }
+.toclink a:visited { color: blue; }
--- /dev/null
+@import url('slides.css');
+
+.toc-body { margin-left: 2px;
+ margin-right: 2px;
+ }
+
+.foil-body { margin-left: 2px;
+ margin-right: 2px;
+ }
+
+h1.title { margin-top: 0px;
+ padding-top: 0px;
+ }
+
+.navhead { display: visible;
+ }
+
+.navfoot { display: visible;
+ }
+
+/* ====================================================================== */
+
+.navfoot { border-top: 1px solid black;
+ margin-top: 10px;
+ padding-top: 4px;
+ }
+/* ====================================================================== */
+
+.toc { font-weight: bold;
+ font-size: 10pt;
+ }
+
+.toc a { text-decoration: none; }
+.toc a:link { color: blue; }
+.toc a:visited { color: blue; }
+
+.toc .toc-foilgroup a { color: red; }
+.toc .toc-foilgroup a:link { color: red; }
+.toc .toc-foilgroup a:visited { color: red; }
+
+.toc .toc-titlefoil a { color: black; }
+.toc .toc-titlefoil a:link { color: black; }
+.toc .toc-titlefoil a:visited { color: black; }
+
+.toc .toc-foil a { color: blue; }
+.toc .toc-foil a:link { color: blue; }
+.toc .toc-foil a:visited { color: blue; }
+
+.toc-slidesinfo { font-family: sans-serif;
+ font-weight: bold;
+ text-align: center;
+ }
+
+.toc-titlefoil { font-family: sans-serif;
+ font-weight: bold;
+ text-align: center;
+ }
+
+.toc-foilgroup { font-family: sans-serif;
+ margin-left: 0.25in;
+ text-indent: -0.25in;
+ font-weight: bold;
+ color: red;
+ }
+
+.toc-foil { font-family: sans-serif;
+ font-size: 10pt;
+ margin-left: 0.25in;
+ text-indent: -0.4in;
+ font-weight: bold;
+ color: blue;
+ }
+
--- /dev/null
+@import url('slides.css');
--- /dev/null
+@import url('slides.css');
+
+.toc-body { margin-left: 2px;
+ margin-right: 2px;
+ }
+
+.foil-body { margin-left: 2px;
+ margin-right: 2px;
+ }
+
+.foilgroup-body { margin-left: 2px;
+ margin-right: 2px;
+ }
+
+h1.title {
+ margin-top: 0px;
+ padding-top: 0px;
+ }
+
+/* ToC Stuff */
+
+.ttoc {
+ font-size: 10pt;
+ color: white;
+ }
+
+.ttoc a { text-decoration: none; }
+.ttoc a:link { color: white }
+.ttoc a:visited { color: white }
+
+.ttoc-title {
+ font-size: 10pt;
+ }
+
+.ttoc-foilset {
+ font-size: 10pt;
+ }
+
+.ttoc-foil {
+ font-size: 10pt;
+ }
--- /dev/null
+@import url('slides.css');
--- /dev/null
+/* General formatting */
+
+body { font-family: sans-serif;
+ font-weight: bold;
+ }
+
+.copyright { color: #7F7F7F;
+ }
+
+/* Title page formatting */
+
+.slidesinfo { text-align: center; }
+
+.slidesinfo h1.title { color: blue;
+ }
+
+.slidesinfo h1.author { color: green;
+ }
+
+.slidesinfo .copyright { color: black;
+ }
+
+
+/* ToC page formatting */
+
+.tocpage h1.title { color: blue;
+ text-align: center;
+ }
+
+.tocpage a { text-decoration: none; }
+.tocpage a:link { color: blue; }
+.tocpage a:visited { color: blue; }
+
+.toc-body { margin-left: 0.5in;
+ margin-right: 0.5in;
+ }
+
+/* Foil page formatting */
+
+.foil { font-size: 16pt;
+ }
+.foil h1.title { text-align: center;
+ color: blue;
+ padding-top: 0pt;
+ margin-top: 0pt;
+ }
+.foil h2.subtitle { text-align: center;
+ color: blue;
+ padding-top: 0pt;
+ margin-top: 0pt;
+ }
+
+.foil pre { font-size: 18pt;
+ }
+
+.foil-body { margin-left: 0.5in;
+ margin-right: 0.5in;
+ }
+
+/* Foilgroup page formatting */
+
+.foilgroup { font-size: 16pt;
+ }
+.foilgroup h1.title { text-align: center;
+ color: red;
+ padding-top: 0pt;
+ margin-top: 0pt;
+ }
+.foilgroup h2.subtitle { text-align: center;
+ color: blue;
+ padding-top: 0pt;
+ margin-top: 0pt;
+ }
+
+.foilgroup-body { margin-left: 0.5in;
+ margin-right: 0.5in;
+ }
+
+/* Navigation header formatting */
+
+.navhead { border-bottom: 1px solid black;
+ margin-bottom: 10px;
+ padding-bottom: 4px;
+ }
+
+.navhead hr.top-nav-sep { display: none; }
+
+.navhead .slidestitle { font-weight: normal;
+ font-size: 10pt;
+ font-style: italic;
+ }
+
+/* Navigation footer formatting */
+
+.navfoot { border-top: 1px solid black;
+ margin-top: 10px;
+ padding-top: 4px;
+ }
+
+.navfoot hr.bottom-nav-sep { display: none; }
+
+/* General navigation formatting */
+
+.link-text { font-weight: bold
+ font-size: 10pt;
+ }
+
+
+.link-text a { text-decoration: none; }
+.link-text a:link { color: blue; }
+.link-text a:visited { color: blue; }
+
+.no-link-text { color: #7F7F7F; }
+
+/* EOF */
--- /dev/null
+// -*- Java -*-
+//
+// $Id$
+//
+// Copyright (C) 2002 Norman Walsh
+//
+// You are free to use, modify and distribute this software without limitation.
+// This software is provided "AS IS," without a warranty of any kind.
+//
+// This script assumes that the Netscape 'ua.js' module has also been loaded.
+
+function newPage(filename, overlay) {
+ divs = xbGetElementsByName("DIV");
+
+ if (divs) {
+ var xdiv = divs[0];
+
+ if (xdiv) {
+ var xid = xdiv.getAttribute("id");
+
+ var mytoc = window.top.frames[0];
+ if (mytoc.lastUnderlined) {
+ mytoc.lastUnderlined.style.textDecoration = "none";
+ }
+
+ var tdiv = xbGetElementById(xid, mytoc);
+
+ if (tdiv) {
+ var ta = tdiv.getElementsByTagName("a").item(0);
+ ta.style.textDecoration = "underline";
+ mytoc.lastUnderlined = ta;
+ }
+ }
+ }
+
+ if (overlay != 0) {
+ overlaySetup('lc');
+ }
+}
+
+
+function navigate (evt) {
+ var kc = -1;
+
+ if (navigator.org == 'microsoft') {
+ kc = window.event.keyCode;
+ } else {
+ kc = evt.which;
+ }
+
+ var forward = (kc==32) || (kc==13) || (kc==110) || (kc==78);
+ var backward = (kc==80) || (kc==112);
+
+ var links = xbGetElementsByName("LINK");
+ var count = 0;
+ var target = "";
+
+ for (count = 0; count < links.length; count++) {
+ if (forward && (links[count].getAttribute("rel") == 'next')) {
+ target = links[count].getAttribute("href");
+ }
+ if (backward && (links[count].getAttribute("rel") == 'previous')) {
+ target = links[count].getAttribute("href");
+ }
+ }
+
+ if (target != "") {
+ window.location = target;
+ }
+}
+
+function toggletoc (img, width, hidegraphic, showgraphic) {
+ var fsc = xbGetElementsByName('FRAMESET',top);
+ if (fsc) {
+ var fs = fsc[0];
+ if (fs) {
+ if (fs.cols == "0,*") {
+ fs.cols = width + ",*";
+ img.src = hidegraphic;
+ } else {
+ fs.cols = "0,*";
+ img.src = showgraphic;
+ }
+ }
+ }
+}
+
--- /dev/null
+/*
+ua.js revision 0.200 2001-12-03
+
+Contributor(s): Bob Clary, Netscape Communications, Copyright 2001
+
+Netscape grants you a royalty free license to use, modify and
+distribute this software provided that this copyright notice
+appears on all copies. This software is provided "AS IS,"
+without a warranty of any kind.
+*/
+
+function xbDetectBrowser()
+{
+ var oldOnError = window.onerror;
+ var element = null;
+
+ window.onerror = null;
+
+ // work around bug in xpcdom Mozilla 0.9.1
+ window.saveNavigator = window.navigator;
+
+ navigator.OS = '';
+ navigator.version = parseFloat(navigator.appVersion);
+ navigator.org = '';
+ navigator.family = '';
+
+ var platform;
+ if (typeof(window.navigator.platform) != 'undefined')
+ {
+ platform = window.navigator.platform.toLowerCase();
+ if (platform.indexOf('win') != -1)
+ navigator.OS = 'win';
+ else if (platform.indexOf('mac') != -1)
+ navigator.OS = 'mac';
+ else if (platform.indexOf('unix') != -1 || platform.indexOf('linux') != -1 || platform.indexOf('sun') != -1)
+ navigator.OS = 'nix';
+ }
+
+ var i = 0;
+ var ua = window.navigator.userAgent.toLowerCase();
+
+ if (ua.indexOf('opera') != -1)
+ {
+ i = ua.indexOf('opera');
+ navigator.family = 'opera';
+ navigator.org = 'opera';
+ navigator.version = parseFloat('0' + ua.substr(i+6), 10);
+ }
+ else if ((i = ua.indexOf('msie')) != -1)
+ {
+ navigator.org = 'microsoft';
+ navigator.version = parseFloat('0' + ua.substr(i+5), 10);
+
+ if (navigator.version < 4)
+ navigator.family = 'ie3';
+ else
+ navigator.family = 'ie4'
+ }
+ else if (ua.indexOf('gecko') != -1)
+ {
+ navigator.family = 'gecko';
+ var rvStart = navigator.userAgent.indexOf('rv:') + 3;
+ var rvEnd = navigator.userAgent.indexOf(')', rvStart);
+ var rv = navigator.userAgent.substring(rvStart, rvEnd);
+ var decIndex = rv.indexOf('.');
+ if (decIndex != -1)
+ {
+ rv = rv.replace(/\./g, '')
+ rv = rv.substring(0, decIndex-1) + '.' + rv.substr(decIndex)
+ }
+ navigator.version = parseFloat(rv);
+
+ if (ua.indexOf('netscape') != -1)
+ navigator.org = 'netscape';
+ else if (ua.indexOf('compuserve') != -1)
+ navigator.org = 'compuserve';
+ else
+ navigator.org = 'mozilla';
+ }
+ else if ((ua.indexOf('mozilla') !=-1) && (ua.indexOf('spoofer')==-1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera')==-1)&& (ua.indexOf('webtv')==-1) && (ua.indexOf('hotjava')==-1))
+ {
+ var is_major = parseFloat(navigator.appVersion);
+
+ if (is_major < 4)
+ navigator.version = is_major;
+ else
+ {
+ i = ua.lastIndexOf('/')
+ navigator.version = parseFloat('0' + ua.substr(i+1), 10);
+ }
+ navigator.org = 'netscape';
+ navigator.family = 'nn' + parseInt(navigator.appVersion);
+ }
+ else if ((i = ua.indexOf('aol')) != -1 )
+ {
+ // aol
+ navigator.family = 'aol';
+ navigator.org = 'aol';
+ navigator.version = parseFloat('0' + ua.substr(i+4), 10);
+ }
+ else if ((i = ua.indexOf('hotjava')) != -1 )
+ {
+ // hotjava
+ navigator.family = 'hotjava';
+ navigator.org = 'sun';
+ navigator.version = parseFloat(navigator.appVersion);
+ }
+
+ window.onerror = oldOnError;
+}
+
+xbDetectBrowser();
+
--- /dev/null
+/*
+xbCollapsibleLists.js 2001-02-26
+
+Contributor(s): Michael Bostock, Netscape Communications, Copyright 1997
+ Bob Clary, Netscape Communications, Copyright 2001
+ Seth Dillingham, Macrobyte Resources, Copyright 2001
+ Mark Filanowicz, Amdahl IT Services, Copyright 2002
+
+Netscape grants you a royalty free license to use, modify or
+distribute this software provided that this copyright notice
+appears on all copies. This software is provided "AS IS,"
+without a warranty of any kind.
+
+See xbCollapsibleLists.js.changelog.html for details of changes.
+*/
+
+
+var xbcl__id = 0;
+var xbcl_item_id = 0;
+var xbcl_mLists = new Array();
+var xbcl_parentElement = null;
+
+document.lists = xbcl_mLists;
+
+function List(visible, width, height, bgColor, collapsedImageURL, expandedImageURL)
+{
+ this.lists = new Array(); // sublists
+ this.items = new Array(); // layers
+ this.types = new Array(); // type
+ this.strs = new Array(); // content
+ this.visible = visible;
+ this.id = xbcl__id;
+ this.width = width || 350;
+ this.height = height || 22;
+
+ this.collapsedImageURL = collapsedImageURL || 'false.gif';
+ this.expandedImageURL = expandedImageURL || 'true.gif';
+
+ if (bgColor)
+ this.bgColor = bgColor;
+
+ xbcl_mLists[xbcl__id++] = this;
+}
+
+function xbcl_SetFont(i,j)
+{
+ this.fontIntro = i;
+ this.fontOutro = j;
+}
+
+function xbcl_GetFont()
+{
+ return [this.fontIntro, this.fontOutro];
+}
+
+function xbcl_setIndent(indent)
+{
+ this.i = indent;
+ if (this.i < 0)
+ {
+ this.i = 0;
+ this.space = false;
+ }
+ else
+ this.space = true;
+}
+
+function xbcl_getIndent(indent)
+{
+ return this.i;
+}
+
+function xbcl_writeItemDOMHTML( obj, s, flList, listObj )
+{
+ var styleObj;
+ var outerDiv, innerLeft, innerRight;
+ var str;
+ var leftEdge = 0;
+
+ styleObj = new xbStyle(obj);
+ styleObj.setVisibility('hidden');
+ outerDiv = document.createElement( "DIV" );
+ outerDiv.id = "DIV_" + obj.id;
+ styleObj = new xbStyle( outerDiv );
+ styleObj.setWidth( this.width );
+
+ if ( flList )
+ {
+ innerLeft = document.createElement( "DIV" );
+ innerLeft.style.position = "absolute";
+ innerLeft.style.valign = "middle";
+ leftEdge = 15;
+
+ styleObj = new xbStyle( innerLeft );
+ styleObj.setWidth( 15 );
+ styleObj.setBackgroundColor( "transparent" );
+
+ if ( listObj.visible )
+ str = '<A TARGET="_self" HREF="javascript:xbcl_expand(' + listObj.id + ');"><IMG BORDER="0" SRC="' + this.expandedImageURL + '" ID="_img' + listObj.id + '" NAME="_img' + listObj.id + '"></A>';
+ else
+ str = '<A TARGET="_self" HREF="javascript:xbcl_expand(' + listObj.id + ');"><IMG BORDER="0" SRC="' + this.collapsedImageURL + '" ID="_img' + listObj.id + '" NAME="_img' + listObj.id + '"></A>';
+
+ innerLeft.innerHTML = str;
+ outerDiv.appendChild( innerLeft );
+ }
+ else if ( this.space )
+ leftEdge = 15;
+
+ innerRight = document.createElement( "DIV" );
+ innerRight.noWrap = true;
+ innerRight.style.position = "absolute";
+
+ styleObj = new xbStyle( innerRight );
+ styleObj.setLeft( leftEdge + ( this.l * this.i ) );
+ styleObj.setWidth( this.width - 15 - this.l * this.i );
+ styleObj.setBackgroundColor( "transparent" );
+
+ // start of change by Mark Filanowicz 02-22-2002
+ if ( flList )
+ {
+ s = this.fontIntro + '<A TARGET="_self" STYLE="text-decoration: none;" HREF="javascript:xbcl_expand(' + listObj.id + ');">' + s + this.fontOutro;
+ }
+ else
+ {
+ s = this.fontIntro + s + this.fontOutro;
+ }
+ // end of change by Mark Filanowicz 02-22-2002
+
+
+ innerRight.innerHTML = s;
+ outerDiv.appendChild( innerRight );
+
+ obj.appendChild( outerDiv );
+
+ return;
+}
+
+function xbcl_writeItem( obj, s, flList, listObj )
+{
+ var cellStyle = '';
+ var str = '';
+ var styleObj = new xbStyle( obj );
+
+ styleObj.setVisibility( 'hidden' );
+
+ if ( document.body && document.body.style )
+ cellStyle = ' style="background-color: transparent;"';
+
+ str += '<TABLE WIDTH='+this.width+' NOWRAP BORDER="0" CELLPADDING="0" CELLSPACING="0"><TR>';
+
+ if ( flList )
+ {
+ str += '<TD WIDTH="15" NOWRAP VALIGN="MIDDLE"' + cellStyle + '>';
+ str += '<A TARGET="_self" HREF="javascript:xbcl_expand(' + listObj.id + ');">';
+
+ if ( listObj.visible )
+ str += '<IMG BORDER="0" SRC="' + this.expandedImageURL + '" ID="_img' + listObj.id + '" NAME="_img' + listObj.id + '">';
+ else
+ str += '<IMG BORDER="0" SRC="' + this.collapsedImageURL + '" ID="_img' + listObj.id + '" NAME="_img' + listObj.id + '">';
+
+ str += '</A></TD>';
+ }
+ else if (this.space)
+ str += '<TD WIDTH="15" NOWRAP' + cellStyle + '> </TD>';
+
+ if (this.l>0 && this.i>0)
+ str += '<TD WIDTH="' + this.l*this.i+ '" NOWRAP' + cellStyle + '> </TD>';
+
+ str += '<TD HEIGHT="' + ( this.height - 3) + '" WIDTH="' + ( this.width - 15 - this.l * this.i ) + '" VALIGN="MIDDLE" ALIGN="LEFT"' + cellStyle + '>';
+
+ // start of change by Mark Filanowicz 02-22-2002
+ if ( flList )
+ {
+ str += this.fontIntro + '<A TARGET="_self" STYLE="text-decoration: none;" HREF="javascript:xbcl_expand(' + listObj.id + ');">' + s + this.fontOutro;
+ }
+ else
+ {
+ str += this.fontIntro + s + this.fontOutro;
+ }
+ // end of change by Mark Filanowicz 02-22-2002
+
+ str += '</TD></TR></TABLE>';
+
+ styleObj.setInnerHTML( str );
+
+ return;
+}
+
+function xbcl_writeList()
+{
+ var item;
+ var i;
+ var flList;
+
+ for ( i = 0; i < this.types.length; i++ )
+ {
+ item = this.items[ i ];
+ flList = ( this.types[ i ] == 'list' );
+
+ this._writeItem( item, this.strs[ i ], flList, this.lists[ i ] );
+
+ if ( flList && this.lists[ i ].visible )
+ this.lists[ i ]._writeList();
+ }
+
+ this.built = true;
+ this.needsRewrite = false;
+ self.status = '';
+}
+
+function xbcl_showList()
+{
+ var item;
+ var styleObj;
+ var i;
+
+ for (i = 0; i < this.types.length; i++)
+ {
+ item = this.items[i];
+ styleObj = new xbStyle(item);
+ styleObj.setClipLeft(0);
+ styleObj.setClipRight(this.width);
+ styleObj.setClipTop(0);
+ if (item.height)
+ {
+ styleObj.setClipBottom(item.height);
+ styleObj.setHeight(item.height);
+ }
+ else
+ {
+ styleObj.setClipBottom(this.height);
+ styleObj.setHeight(this.height);
+ }
+
+ if ( this.visible )
+ styleObj.setVisibility( 'visible' );
+
+ var bg = item.oBgColor || this.bgColor;
+ if ((bg == null) || (bg == 'null'))
+ bg = '';
+
+ styleObj.setBackgroundColor(bg);
+
+ if (this.types[i] == 'list' && this.lists[i].visible)
+ this.lists[i]._showList();
+ }
+ this.shown = true;
+ this.needsUpdate = false;
+}
+
+function xbcl_setImage(list, item, file)
+{
+ var id = '_img' + list.id;
+ var img = null;
+
+ // for DOMHTML or IE4 use cross browser getElementById from xbStyle
+ // can't use it for NN4 since it only works for layers in NN4
+ if (document.layers)
+ img = item.document.images[0];
+ else
+ img = xbGetElementById(id);
+
+ if (img)
+ img.src = file;
+}
+
+function xbcl_getHeight()
+{
+ var totalHeight = 0;
+ var i;
+
+ if (!this.visible)
+ return 0;
+
+ for (i = 0; i < this.types.length; i++)
+ {
+ if (this.items[i].height)
+ totalHeight += this.items[i].height;
+ else
+ totalHeight += this.height;
+
+ if ((this.types[i] == 'list') && this.lists[i].visible)
+ {
+ totalHeight += this.lists[i].getHeight();
+ }
+ }
+
+ return totalHeight;
+}
+
+function xbcl_updateList(pVis, x, y)
+{
+ var currTop = y;
+ var item;
+ var styleObj;
+ var i;
+
+ for (i = 0; i < this.types.length; i++)
+ {
+ item = this.items[i];
+ styleObj = new xbStyle(item);
+
+ if (this.visible && pVis)
+ {
+ styleObj.moveTo(x, currTop);
+ if (item.height) // allow custom heights for each item
+ currTop += item.height;
+ else
+ currTop += this.height;
+
+ styleObj.setVisibility('visible');
+ }
+ else
+ {
+ styleObj.setVisibility('hidden');
+ }
+
+ if (this.types[i] == 'list')
+ {
+ if (this.lists[i].visible)
+ {
+ if (!this.lists[i].built || this.lists[i].needsRewrite)
+ this.lists[i]._writeList();
+
+ if (!this.lists[i].shown || this.lists[i].needsUpdate)
+ this.lists[i]._showList();
+
+ xbcl_setImage(this.lists[i], item, this.expandedImageURL );
+ }
+ else
+ xbcl_setImage(this.lists[i], item, this.collapsedImageURL );
+
+ if (this.lists[i].built)
+ currTop = this.lists[i]._updateList(this.visible && pVis, x, currTop);
+ }
+ }
+ return currTop;
+}
+
+function xbcl_updateParent( pid, l )
+{
+ var i;
+
+ if ( !l )
+ l = 0;
+
+ this.pid = pid;
+ this.l = l;
+
+ for ( i = 0; i < this.types.length; i++ )
+ {
+ if ( this.types[ i ] == 'list' )
+ {
+ this.lists[ i ]._updateParent( pid, l + 1 );
+ }
+ }
+}
+
+function xbcl_expand(i)
+{
+ xbcl_mLists[i].visible = !xbcl_mLists[i].visible;
+
+ if (xbcl_mLists[i].onexpand != null)
+ xbcl_mLists[i].onexpand(xbcl_mLists[i].id);
+
+ xbcl_mLists[xbcl_mLists[i].pid].rebuild();
+
+ if (xbcl_mLists[i].postexpand != null)
+ xbcl_mLists[i].postexpand(xbcl_mLists[i].id);
+}
+
+function xbcl_build(x, y)
+{
+ this._updateParent(this.id);
+ this._writeList();
+ this._showList();
+ this._updateList(true, x, y);
+ this.x = x;
+ this.y = y;
+}
+
+function xbcl_rebuild()
+{
+ this._updateList(true, this.x, this.y);
+}
+
+function xbcl_getNewItem()
+{
+ var newItem = null;
+
+ newItem = xbGetElementById('lItem' + xbcl_item_id);
+
+ if (!newItem)
+ {
+ if (document.all && !document.getElementById)
+ {
+ var parentElement = this.parentElement;
+ if (!parentElement)
+ parentElement = document.body;
+
+ parentElement.insertAdjacentHTML('beforeEnd', '<div id="lItem' + xbcl_item_id + '" style="position:absolute;"></div>');
+ newItem = xbGetElementById('lItem' + xbcl_item_id);
+ }
+ else if (document.layers)
+ {
+ if (this.parentElement)
+ newItem = new Layer(this.width, this.parentElement);
+ else
+ newItem = new Layer(this.width);
+ }
+ else if (document.createElement)
+ {
+ newItem = document.createElement('div');
+ newItem.id= 'lItem' + xbcl_item_id;
+ newItem.style.position = 'absolute';
+
+ if (this.parentElement)
+ this.parentElement.appendChild(newItem);
+ else
+ document.body.appendChild(newItem);
+ }
+ }
+
+ return newItem;
+}
+
+function xbcl_addItem(str, bgColor, item)
+{
+ if (!item)
+ item = this._getNewItem();
+
+ if (!item)
+ return;
+
+ if (bgColor)
+ item.oBgColor = bgColor;
+
+ this.items[this.items.length] = item;
+ this.types[this.types.length] = 'item';
+ this.strs[this.strs.length] = str;
+ ++xbcl_item_id;
+
+ if ( this.built )
+ {
+ this._writeItem( item, str, false );
+ xbcl_mLists[this.pid].rebuild();
+ if ( this.visible )
+ this._showList();
+ else
+ this.needsUpdate = true;
+ }
+
+ return item;
+}
+
+function xbcl_addList(list, str, bgColor, item)
+{
+ if (!item)
+ item = this._getNewItem();
+
+ if (!item)
+ return;
+
+ if (bgColor)
+ item.oBgColor = bgColor;
+
+ this.lists[this.items.length] = list;
+ this.items[this.items.length] = item;
+ this.types[this.types.length] = 'list';
+ this.strs[this.strs.length] = str;
+ ++xbcl_item_id;
+
+ list.parentList = this;
+
+ list.pid = this.pid;
+ list.l = this.l + 1;
+
+ if ( this.built )
+ {
+ this._writeItem( item, str, true, list );
+ xbcl_mLists[ this.pid ].rebuild();
+ if ( this.visible )
+ this._showList();
+ else
+ this.needsUpdate = true;
+ }
+
+ return item;
+}
+
+List.prototype.setIndent = xbcl_setIndent;
+List.prototype.getIndent = xbcl_getIndent;
+List.prototype.addItem = xbcl_addItem;
+List.prototype.addList = xbcl_addList;
+List.prototype.build = xbcl_build;
+List.prototype.rebuild = xbcl_rebuild;
+List.prototype.setFont = xbcl_SetFont;
+List.prototype.getFont = xbcl_GetFont;
+List.prototype.getHeight = xbcl_getHeight;
+
+List.prototype._writeList = xbcl_writeList;
+List.prototype._getNewItem = xbcl_getNewItem;
+
+if ( document.getElementById && document.createElement )
+ List.prototype._writeItem = xbcl_writeItemDOMHTML;
+else
+ List.prototype._writeItem = xbcl_writeItem;
+
+List.prototype._showList = xbcl_showList;
+List.prototype._updateList = xbcl_updateList;
+List.prototype._updateParent = xbcl_updateParent;
+
+List.prototype.onexpand = null;
+List.prototype.postexpand = null;
+List.prototype.lists = null; // sublists
+List.prototype.items = null; // layers
+List.prototype.types = null; // type
+List.prototype.strs = null; // content
+List.prototype.x = 0;
+List.prototype.y = 0;
+List.prototype.visible = false;
+List.prototype.id = -1;
+List.prototype.i = 18;
+List.prototype.space = true;
+List.prototype.pid = 0;
+List.prototype.fontIntro = '';
+List.prototype.fontOutro = '';
+List.prototype.width = 350;
+List.prototype.height = 22;
+List.prototype.built = false;
+List.prototype.shown = false;
+List.prototype.needsUpdate = false;
+List.prototype.needsRewrite = false;
+List.prototype.l = 0;
+List.prototype.bgColor = null;
+List.prototype.parentList = null;
+List.prototype.parentElement = null;
--- /dev/null
+/*
+xbDOM.js v 0.004 2002-03-09
+
+Contributor(s): Bob Clary, Netscape Communications, Copyright 2001, 2002
+
+Netscape grants you a royalty free license to use, modify and
+distribute this software provided that this copyright notice
+appears on all copies. This software is provided "AS IS,"
+without a warranty of any kind.
+
+Change Log:
+
+2002-03-15: v 0.004
+ bclary -
+ fix bug in bugfix for 0.003 in xbGetElementsByName
+ to not confuse elements with length properties with arrays
+
+2002-03-09: v 0.003
+ bclary -
+ fix bug in xbGetElementsByName in Internet Explorer when there is
+ only one instance of an element with name value.
+
+2002-01-19: v 0.002
+ bclary -
+ nav4FindElementsByName
+ removed erroneous obj and return
+ added search of form elements
+ xbFindElementsByNameAndType
+ renamed from FindElementsByNameAndType
+ removed erroneouse obj and return
+ xbSetInnerHTML
+ ported over from xbStyle since it is more
+ appropriate here.
+
+2001-11-27: v 0.01
+ bclary -
+ removed from xbStyle
+*/
+
+function xbToInt(s)
+{
+ var i = parseInt(s, 10);
+ if (isNaN(i))
+ i = 0;
+
+ return i;
+}
+
+function xbGetWindowWidth(windowRef)
+{
+ var width = 0;
+
+ if (!windowRef)
+ windowRef = window;
+
+ if (typeof(windowRef.innerWidth) == 'number')
+ width = windowRef.innerWidth;
+ else if (windowRef.document.body && typeof(windowRef.document.body.clientWidth) == 'number')
+ width = windowRef.document.body.clientWidth;
+
+ return width;
+}
+
+function xbGetWindowHeight(windowRef)
+{
+ var height = 0;
+
+ if (!windowRef)
+ windowRef = window;
+
+ if (typeof(windowRef.innerWidth) == 'number')
+ height = windowRef.innerHeight;
+ else if (windowRef.document.body && typeof(windowRef.document.body.clientWidth) == 'number')
+ height = windowRef.document.body.clientHeight;
+
+ return height;
+}
+
+function nav4FindLayer(doc, id)
+{
+ var i;
+ var subdoc;
+ var obj;
+
+ for (i = 0; i < doc.layers.length; ++i)
+ {
+ if (doc.layers[i].id && id == doc.layers[i].id)
+ return doc.layers[i];
+
+ subdoc = doc.layers[i].document;
+ obj = nav4FindLayer(subdoc, id);
+ if (obj != null)
+ return obj;
+ }
+ return null;
+}
+
+function nav4FindElementsByName(doc, name, elmlist)
+{
+ var i;
+ var j;
+ var subdoc;
+
+ for (i = 0; i < doc.images.length; ++i)
+ {
+ if (doc.images[i].name && name == doc.images[i].name)
+ elmlist[elmlist.length] = doc.images[i];
+ }
+
+ for (i = 0; i < doc.forms.length; ++i)
+ {
+ for (j = 0; j < doc.forms[i].elements.length; j++)
+ if (doc.forms[i].elements[j].name && name == doc.forms[i].elements[j].name)
+ elmlist[elmlist.length] = doc.forms[i].elements[j];
+
+ if (doc.forms[i].name && name == doc.forms[i].name)
+ elmlist[elmlist.length] = doc.forms[i];
+ }
+
+ for (i = 0; i < doc.anchors.length; ++i)
+ {
+ if (doc.anchors[i].name && name == doc.anchors[i].name)
+ elmlist[elmlist.length] = doc.anchors[i];
+ }
+
+ for (i = 0; i < doc.links.length; ++i)
+ {
+ if (doc.links[i].name && name == doc.links[i].name)
+ elmlist[elmlist.length] = doc.links[i];
+ }
+
+ for (i = 0; i < doc.applets.length; ++i)
+ {
+ if (doc.applets[i].name && name == doc.applets[i].name)
+ elmlist[elmlist.length] = doc.applets[i];
+ }
+
+ for (i = 0; i < doc.embeds.length; ++i)
+ {
+ if (doc.embeds[i].name && name == doc.embeds[i].name)
+ elmlist[elmlist.length] = doc.embeds[i];
+ }
+
+ for (i = 0; i < doc.layers.length; ++i)
+ {
+ if (doc.layers[i].name && name == doc.layers[i].name)
+ elmlist[elmlist.length] = doc.layers[i];
+
+ subdoc = doc.layers[i].document;
+ nav4FindElementsByName(subdoc, name, elmlist);
+ }
+}
+
+function xbGetElementsByNameAndType(name, type, windowRef)
+{
+ if (!windowRef)
+ windowRef = window;
+
+ var elmlist = new Array();
+
+ xbFindElementsByNameAndType(windowRef.document, name, type, elmlist);
+
+ return elmlist;
+}
+
+function xbFindElementsByNameAndType(doc, name, type, elmlist)
+{
+ var i;
+ var subdoc;
+
+ for (i = 0; i < doc[type].length; ++i)
+ {
+ if (doc[type][i].name && name == doc[type][i].name)
+ elmlist[elmlist.length] = doc[type][i];
+ }
+
+ if (doc.layers)
+ {
+ for (i = 0; i < doc.layers.length; ++i)
+ {
+ subdoc = doc.layers[i].document;
+ xbFindElementsByNameAndType(subdoc, name, type, elmlist);
+ }
+ }
+}
+
+//alert("layers: " + document.layers + " all: " + document.all);
+
+if (document.layers)
+{
+ xbGetElementById = function (id, windowRef)
+ {
+ if (!windowRef)
+ windowRef = window;
+
+ return nav4FindLayer(windowRef.document, id);
+ };
+
+ xbGetElementsByName = function (name, windowRef)
+ {
+ if (!windowRef)
+ windowRef = window;
+
+ var elmlist = new Array();
+
+ nav4FindElementsByName(windowRef.document, name, elmlist);
+
+ return elmlist;
+ };
+
+}
+else if (document.all)
+{
+ xbGetElementById = function (id, windowRef)
+ {
+ if (!windowRef) windowRef = window;
+ var elm = windowRef.document.all[id];
+ if (!elm) elm = null;
+ return elm;
+ };
+
+ xbGetElementsByName = function (name, windowRef)
+ {
+ if (!windowRef) windowRef = window;
+
+ var i;
+ var idnamelist = windowRef.document.all.tags(name);
+ var elmlist = new Array();
+
+ if (!idnamelist) {
+ return null;
+ }
+
+ if (!idnamelist.length || idnamelist.name == name)
+ {
+ if (idnamelist)
+ elmlist[elmlist.length] = idnamelist;
+ }
+ else
+ {
+ for (i = 0; i < idnamelist.length; i++)
+ {
+ if (idnamelist.item(i).tagName == name)
+ elmlist[elmlist.length] = idnamelist[i];
+ }
+ }
+
+ return elmlist;
+ }
+
+}
+else if (document.getElementById)
+{
+ xbGetElementById = function (id, windowRef) { if (!windowRef) windowRef = window; return windowRef.document.getElementById(id); };
+ xbGetElementsByName = function (name, windowRef) { if (!windowRef) windowRef = window; return windowRef.document.getElementsByTagName(name); };
+}
+else
+{
+ xbGetElementById = function (id, windowRef) { return null; }
+ xbGetElementsByName = function (name, windowRef) { return new Array(); }
+}
+
+if (typeof(window.pageXOffset) == 'number')
+{
+ xbGetPageScrollX = function (windowRef) { if (!windowRef) windowRef = window; return windowRef.pageXOffset; };
+ xbGetPageScrollY = function (windowRef) { if (!windowRef) windowRef = window; return windowRef.pageYOffset; };
+}
+else if (document.all)
+{
+ xbGetPageScrollX = function (windowRef) { if (!windowRef) windowRef = window; return windowRef.document.body.scrollLeft; };
+ xbGetPageScrollY = function (windowRef) { if (!windowRef) windowRef = window; return windowRef.document.body.scrollTop; };
+}
+else
+{
+ xbGetPageScrollX = function (windowRef) { return 0; };
+ xbGetPageScrollY = function (windowRef) { return 0; };
+}
+
+if (document.layers)
+{
+ xbSetInnerHTML = function (element, str) { element.document.write(str); element.document.close(); };
+}
+else if (document.all || document.getElementById)
+{
+ xbSetInnerHTML = function (element, str) { if (typeof(element.innerHTML) != 'undefined') element.innerHTML = str; };
+}
+else
+{
+ xbSetInnerHTML = function (element, str) {};
+}
+
+
+// eof: xbDOM.js
--- /dev/null
+/*
+xbDebug.js revision: 0.003 2002-02-26
+
+Contributor(s): Bob Clary, Netscape Communications, Copyright 2001
+
+Netscape grants you a royalty free license to use, modify and
+distribute this software provided that this copyright notice
+appears on all copies. This software is provided "AS IS,"
+without a warranty of any kind.
+
+ChangeLog:
+
+2002-02-25: bclary - modified xbDebugTraceOject to make sure
+ that original versions of wrapped functions were not
+ rewrapped. This had caused an infinite loop in IE.
+
+2002-02-07: bclary - modified xbDebug.prototype.close to not null
+ the debug window reference. This can cause problems with
+ Internet Explorer if the page is refreshed. These issues will
+ be addressed at a later date.
+*/
+
+function xbDebug()
+{
+ this.on = false;
+ this.stack = new Array();
+ this.debugwindow = null;
+ this.execprofile = new Object();
+}
+
+xbDebug.prototype.push = function ()
+{
+ this.stack[this.stack.length] = this.on;
+ this.on = true;
+}
+
+xbDebug.prototype.pop = function ()
+{
+ this.on = this.stack[this.stack.length - 1];
+ --this.stack.length;
+}
+
+xbDebug.prototype.open = function ()
+{
+ if (this.debugwindow && !this.debugwindow.closed)
+ this.close();
+
+ this.debugwindow = window.open('about:blank', 'DEBUGWINDOW', 'height=400,width=600,resizable=yes,scrollbars=yes');
+
+ this.debugwindow.title = 'xbDebug Window';
+ this.debugwindow.document.write('<html><head><title>xbDebug Window</title></head><body><h3>Javascript Debug Window</h3></body></html>');
+ this.debugwindow.focus();
+}
+
+xbDebug.prototype.close = function ()
+{
+ if (!this.debugwindow)
+ return;
+
+ if (!this.debugwindow.closed)
+ this.debugwindow.close();
+
+ // bc 2002-02-07, other windows may still hold a reference to this: this.debugwindow = null;
+}
+
+xbDebug.prototype.dump = function (msg)
+{
+ if (!this.on)
+ return;
+
+ if (!this.debugwindow || this.debugwindow.closed)
+ this.open();
+
+ this.debugwindow.document.write(msg + '<br>');
+
+ return;
+}
+
+var xbDEBUG = new xbDebug();
+
+window.onunload = function () { xbDEBUG.close(); }
+
+function xbDebugGetFunctionName(funcref)
+{
+
+ if (funcref.name)
+ return funcref.name;
+
+ var name = funcref + '';
+ name = name.substring(name.indexOf(' ') + 1, name.indexOf('('));
+ funcref.name = name;
+
+ return name;
+}
+
+function xbDebugCreateFunctionWrapper(scopename, funcname, precall, postcall)
+{
+ var wrappedfunc;
+ var scopeobject = eval(scopename);
+ var funcref = scopeobject[funcname];
+
+ scopeobject['xbDebug_orig_' + funcname] = funcref;
+
+ wrappedfunc = function ()
+ {
+ precall(scopename, funcname, arguments);
+ var rv = funcref.apply(this, arguments);
+ postcall(scopename, funcname, arguments, rv);
+ return rv;
+ };
+
+ if (typeof(funcref.constructor) != 'undefined')
+ wrappedfunc.constructor = funcref.constuctor;
+
+ if (typeof(funcref.prototype) != 'undefined')
+ wrappedfunc.prototype = funcref.prototype;
+
+ scopeobject[funcname] = wrappedfunc;
+}
+
+function xbDebugPersistToString(obj)
+{
+ var s = '';
+ var p;
+
+ if (obj == null)
+ return 'null';
+
+ switch(typeof(obj))
+ {
+ case 'number':
+ return obj;
+ case 'string':
+ return '"' + obj + '"';
+ case 'undefined':
+ return 'undefined';
+ case 'boolean':
+ return obj + '';
+ }
+
+ return '[' + xbDebugGetFunctionName(obj.constructor) + ']';
+}
+
+function xbDebugTraceBefore(scopename, funcname, funcarguments)
+{
+ var i;
+ var s = '';
+ var execprofile = xbDEBUG.execprofile[scopename + '.' + funcname];
+ if (!execprofile)
+ execprofile = xbDEBUG.execprofile[scopename + '.' + funcname] = { started: 0, time: 0, count: 0 };
+
+ for (i = 0; i < funcarguments.length; i++)
+ {
+ s += xbDebugPersistToString(funcarguments[i]);
+ if (i < funcarguments.length - 1)
+ s += ', ';
+ }
+
+ xbDEBUG.dump('enter ' + scopename + '.' + funcname + '(' + s + ')');
+ execprofile.started = (new Date()).getTime();
+}
+
+function xbDebugTraceAfter(scopename, funcname, funcarguments, rv)
+{
+ var i;
+ var s = '';
+ var execprofile = xbDEBUG.execprofile[scopename + '.' + funcname];
+ if (!execprofile)
+ xbDEBUG.dump('xbDebugTraceAfter: execprofile not created for ' + scopename + '.' + funcname);
+ else if (execprofile.started == 0)
+ xbDEBUG.dump('xbDebugTraceAfter: execprofile.started == 0 for ' + scopename + '.' + funcname);
+ else
+ {
+ execprofile.time += (new Date()).getTime() - execprofile.started;
+ execprofile.count++;
+ execprofile.started = 0;
+ }
+
+ for (i = 0; i < funcarguments.length; i++)
+ {
+ s += xbDebugPersistToString(funcarguments[i]);
+ if (i < funcarguments.length - 1)
+ s += ', ';
+ }
+
+ xbDEBUG.dump('exit ' + scopename + '.' + funcname + '(' + s + ')==' + xbDebugPersistToString(rv));
+}
+
+function xbDebugTraceFunction(scopename, funcname)
+{
+ xbDebugCreateFunctionWrapper(scopename, funcname, xbDebugTraceBefore, xbDebugTraceAfter);
+}
+
+function xbDebugTraceObject(scopename, objname)
+{
+ var objref = eval(scopename + '.' + objname);
+ var p;
+
+ if (!objref || !objref.prototype)
+ return;
+
+ for (p in objref.prototype)
+ {
+ if (typeof(objref.prototype[p]) == 'function' && (p+'').indexOf('xbDebug_orig') == -1)
+ {
+ xbDebugCreateFunctionWrapper(scopename + '.' + objname + '.prototype', p + '', xbDebugTraceBefore, xbDebugTraceAfter);
+ }
+ }
+}
+
+function xbDebugDumpProfile()
+{
+ var p;
+ var execprofile;
+ var avg;
+
+ for (p in xbDEBUG.execprofile)
+ {
+ execprofile = xbDEBUG.execprofile[p];
+ avg = Math.round ( 100 * execprofile.time/execprofile.count) /100;
+ xbDEBUG.dump('Execution profile ' + p + ' called ' + execprofile.count + ' times. Total time=' + execprofile.time + 'ms. Avg Time=' + avg + 'ms.');
+ }
+}
--- /dev/null
+/*
+xbStyle.js Revision: 0.202 2002-02-11
+
+Contributor(s): Bob Clary, Original Work, Copyright 2000
+ Bob Clary, Netscape Communications, Copyright 2001
+
+Netscape grants you a royalty free license to use, modify and
+distribute this software provided that this copyright notice
+appears on all copies. This software is provided "AS IS,"
+without a warranty of any kind.
+
+Change Log:
+
+2001-07-19: bclary - fixed function cssStyleGetLeft() and cssStyleGetTop() to
+ correctly handle the case where the initial style.left/style.top
+ are not initialized. This fixes positioning for relatively positioned
+ DIVS and as a result fixes behavior for ILAYERs exposed as relatively
+ positioned divs.
+2001-10-02: bclary - added missing xbClipRect.getHeight/setHeight methods.
+
+2001-11-20: bclary - removed use of practical browser sniffer,
+ added object sniffing, and limited support for opera
+ note opera returns ints for HTMLElement.style.[left|top|height|width] etc.
+
+2002-02-11: v 0.201 bclary - with the help of Rob Johnston <rob_johnston@hotmail.com>
+ found that the "if (document.getElementsByName)" test excluded
+ IE4. Added a test for document.all to enable IE4 to fully use
+ xbStyle.
+
+2002-03-12: v 0.202 Daniel Resare contributed a patch to cssStyleSetPage[X|Y]() which
+ handles the case where the element has no parentNode.
+*/
+
+function xbStyleNotSupported() {}
+
+function xbStyleNotSupportStringValue(propname) { xbDEBUG.dump(propname + ' is not supported in this browser'); return '';};
+
+/////////////////////////////////////////////////////////////
+// xbClipRect
+
+function xbClipRect(a1, a2, a3, a4)
+{
+ this.top = 0;
+ this.right = 0;
+ this.bottom = 0;
+ this.left = 0;
+
+ if (typeof(a1) == 'string')
+ {
+ var val;
+ var ca;
+ var i;
+
+ if (a1.indexOf('rect(') == 0)
+ {
+ // I would have preferred [0-9]+[a-zA-Z]+ for a regexp
+ // but NN4 returns null for that.
+ ca = a1.substring(5, a1.length-1).match(/-?[0-9a-zA-Z]+/g);
+ for (i = 0; i < 4; ++i)
+ {
+ val = xbToInt(ca[i]);
+ if (val != 0 && ca[i].indexOf('px') == -1)
+ {
+ xbDEBUG.dump('xbClipRect: A clipping region ' + a1 + ' was detected that did not use pixels as units. Click Ok to continue, Cancel to Abort');
+ return;
+ }
+ ca[i] = val;
+ }
+ this.top = ca[0];
+ this.right = ca[1];
+ this.bottom = ca[2];
+ this.left = ca[3];
+ }
+ }
+ else if (typeof(a1) == 'number' && typeof(a2) == 'number' && typeof(a3) == 'number' && typeof(a4) == 'number')
+ {
+ this.top = a1;
+ this.right = a2;
+ this.bottom = a3;
+ this.left = a4;
+ }
+}
+
+xbClipRect.prototype.top = 0;
+xbClipRect.prototype.right = 0;
+xbClipRect.prototype.bottom = 0;
+xbClipRect.prototype.left = 0;
+
+
+function xbClipRectGetWidth()
+{
+ return this.right - this.left;
+}
+xbClipRect.prototype.getWidth = xbClipRectGetWidth;
+
+function xbClipRectSetWidth(width)
+{
+ this.right = this.left + width;
+}
+xbClipRect.prototype.setWidth = xbClipRectSetWidth;
+
+function xbClipRectGetHeight()
+{
+ return this.bottom - this.top;
+}
+xbClipRect.prototype.getHeight = xbClipRectGetHeight;
+
+function xbClipRectSetHeight(height)
+{
+ this.bottom = this.top + height;
+}
+xbClipRect.prototype.setHeight = xbClipRectSetHeight;
+
+function xbClipRectToString()
+{
+ return 'rect(' + this.top + 'px ' + this.right + 'px ' + this.bottom + 'px ' + this.left + 'px )' ;
+}
+xbClipRect.prototype.toString = xbClipRectToString;
+
+/////////////////////////////////////////////////////////////
+// xbStyle
+//
+// Note Opera violates the standard by cascading the effective values
+// into the HTMLElement.style object. We can use IE's HTMLElement.currentStyle
+// to get the effective values. In Gecko we will use the W3 DOM Style Standard getComputedStyle
+
+function xbStyle(obj, position)
+{
+ if (typeof(obj) == 'object' && typeof(obj.style) != 'undefined')
+ this.styleObj = obj.style;
+ else if (document.layers) // NN4
+ {
+ if (typeof(position) == 'undefined')
+ position = '';
+
+ this.styleObj = obj;
+ this.styleObj.position = position;
+ }
+ this.object = obj;
+}
+
+xbStyle.prototype.styleObj = null;
+xbStyle.prototype.object = null;
+
+/////////////////////////////////////////////////////////////
+// xbStyle.getEffectiveValue()
+// note that xbStyle's constructor uses the currentStyle object
+// for IE5+ and that Opera's style object contains computed values
+// already. Netscape Navigator's layer object also contains the
+// computed values as well. Note that IE4 will not return the
+// computed values.
+
+function xbStyleGetEffectiveValue(propname)
+{
+ var value = null;
+
+ // W3/Gecko
+ if (document.defaultView && document.defaultView.getComputedStyle)
+ {
+ if (navigator.family == 'gecko')
+ {
+ // xxxHack: work around Gecko getComputedStyle bugs...
+ switch(propname)
+ {
+ case 'clip':
+ return this.styleObj[propname];
+ case 'top':
+ if (navigator.family == 'gecko' && navigator.version < 0.96 && this.styleObj.position == 'relative')
+ return this.object.offsetTop;
+ case 'left':
+ if (navigator.family == 'gecko' && navigator.version < 0.96 && this.styleObj.position == 'relative')
+ return this.object.offsetLeft;
+ }
+ }
+ // Note that propname is the name of the property in the CSS Style
+ // Object. However the W3 method getPropertyValue takes the actual
+ // property name from the CSS Style rule, i.e., propname is
+ // 'backgroundColor' but getPropertyValue expects 'background-color'.
+
+ var capIndex;
+ var cappropname = propname;
+ while ( (capIndex = cappropname.search(/[A-Z]/)) != -1)
+ {
+ if (capIndex != -1)
+ cappropname = cappropname.substring(0, capIndex) + '-' + cappropname.substring(capIndex, capIndex).toLowerCase() + cappropname.substr(capIndex+1);
+ }
+
+ value = document.defaultView.getComputedStyle(this.object, '').getPropertyValue(cappropname);
+
+ // xxxHack for Gecko:
+ if (!value && this.styleObj[propname])
+ value = this.styleObj[propname];
+ }
+ else if (typeof(this.styleObj[propname]) == 'undefined')
+ value = xbStyleNotSupportStringValue(propname);
+ else
+ {
+ if (navigator.family != 'ie4' || navigator.version < 5)
+ {
+ // IE4+, Opera, NN4
+ value = this.styleObj[propname];
+ }
+ else
+ {
+ // IE5+
+ value = this.object.currentStyle[propname];
+ if (!value)
+ value = this.styleObj[propname];
+ }
+ }
+
+ return value;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.getClip()
+
+function cssStyleGetClip()
+{
+ var clip = this.getEffectiveValue('clip');
+
+ // hack opera
+ if (clip == 'rect()')
+ clip = '';
+
+ if (clip == '')
+ clip = 'rect(0px ' + this.getWidth() + 'px ' + this.getHeight() + 'px 0px)';
+
+ return clip;
+}
+
+function nsxbStyleGetClip()
+{
+ var clip = this.styleObj.clip;
+ var rect = new xbClipRect(clip.top, clip.right, clip.bottom, clip.left);
+ return rect.toString();
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.setClip()
+
+function cssStyleSetClip(sClipString)
+{
+ this.styleObj.clip = sClipString;
+}
+
+function nsxbStyleSetClip(sClipString)
+{
+ var rect = new xbClipRect(sClipString);
+ this.styleObj.clip.top = rect.top;
+ this.styleObj.clip.right = rect.right;
+ this.styleObj.clip.bottom = rect.bottom;
+ this.styleObj.clip.left = rect.left;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.getClipTop()
+
+function cssStyleGetClipTop()
+{
+ var clip = this.getClip()
+ var rect = new xbClipRect(clip);
+ return rect.top;
+}
+
+function nsxbStyleGetClipTop()
+{
+ return this.styleObj.clip.top;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.setClipTop()
+
+function cssStyleSetClipTop(top)
+{
+ var clip = this.getClip();
+ var rect = new xbClipRect(clip);
+ rect.top = top;
+ this.styleObj.clip = rect.toString();
+}
+
+function nsxbStyleSetClipTop(top)
+{
+ return this.styleObj.clip.top = top;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.getClipRight()
+
+function cssStyleGetClipRight()
+{
+ var clip = this.getClip();
+ var rect = new xbClipRect(clip);
+ return rect.right;
+}
+
+function nsxbStyleGetClipRight()
+{
+ return this.styleObj.clip.right;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.setClipRight()
+
+function cssStyleSetClipRight(right)
+{
+ var clip = this.getClip();
+ var rect = new xbClipRect(clip);
+ rect.right = right;
+ this.styleObj.clip = rect.toString();
+}
+
+function nsxbStyleSetClipRight(right)
+{
+ return this.styleObj.clip.right = right;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.getClipBottom()
+
+function cssStyleGetClipBottom()
+{
+ var clip = this.getClip();
+ var rect = new xbClipRect(clip);
+ return rect.bottom;
+}
+
+function nsxbStyleGetClipBottom()
+{
+ return this.styleObj.clip.bottom;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.setClipBottom()
+
+function cssStyleSetClipBottom(bottom)
+{
+ var clip = this.getClip();
+ var rect = new xbClipRect(clip);
+ rect.bottom = bottom;
+ this.styleObj.clip = rect.toString();
+}
+
+function nsxbStyleSetClipBottom(bottom)
+{
+ return this.styleObj.clip.bottom = bottom;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.getClipLeft()
+
+function cssStyleGetClipLeft()
+{
+ var clip = this.getClip();
+ var rect = new xbClipRect(clip);
+ return rect.left;
+}
+
+function nsxbStyleGetClipLeft()
+{
+ return this.styleObj.clip.left;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.setClipLeft()
+
+function cssStyleSetClipLeft(left)
+{
+ var clip = this.getClip();
+ var rect = new xbClipRect(clip);
+ rect.left = left;
+ this.styleObj.clip = rect.toString();
+}
+
+function nsxbStyleSetClipLeft(left)
+{
+ return this.styleObj.clip.left = left;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.getClipWidth()
+
+function cssStyleGetClipWidth()
+{
+ var clip = this.getClip();
+ var rect = new xbClipRect(clip);
+ return rect.getWidth();
+}
+
+function nsxbStyleGetClipWidth()
+{
+ return this.styleObj.clip.width;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.setClipWidth()
+
+function cssStyleSetClipWidth(width)
+{
+ var clip = this.getClip();
+ var rect = new xbClipRect(clip);
+ rect.setWidth(width);
+ this.styleObj.clip = rect.toString();
+}
+
+function nsxbStyleSetClipWidth(width)
+{
+ return this.styleObj.clip.width = width;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.getClipHeight()
+
+function cssStyleGetClipHeight()
+{
+ var clip = this.getClip();
+ var rect = new xbClipRect(clip);
+ return rect.getHeight();
+}
+
+function nsxbStyleGetClipHeight()
+{
+ return this.styleObj.clip.height;
+}
+
+/////////////////////////////////////////////////////////////
+// xbStyle.setClipHeight()
+
+function cssStyleSetClipHeight(height)
+{
+ var clip = this.getClip();
+ var rect = new xbClipRect(clip);
+ rect.setHeight(height);
+ this.styleObj.clip = rect.toString();
+}
+
+function nsxbStyleSetClipHeight(height)
+{
+ return this.styleObj.clip.height = height;
+}
+
+// the CSS attributes left,top are for absolutely positioned elements
+// measured relative to the containing element. for relatively positioned
+// elements, left,top are measured from the element's normal inline position.
+// getLeft(), setLeft() operate on this type of coordinate.
+//
+// to allow dynamic positioning the getOffsetXXX and setOffsetXXX methods are
+// defined to return and set the position of either an absolutely or relatively
+// positioned element relative to the containing element.
+//
+//
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getLeft()
+
+function cssStyleGetLeft()
+{
+ var left = this.getEffectiveValue('left');
+ if (typeof(left) == 'number')
+ return left;
+
+ if (left != '' && left.indexOf('px') == -1)
+ {
+ xbDEBUG.dump('xbStyle.getLeft: Element ID=' + this.object.id + ' does not use pixels as units. left=' + left + ' Click Ok to continue, Cancel to Abort');
+ return 0;
+ }
+
+ if (left == '')
+ left = this.styleObj.left = '0px';
+
+ return xbToInt(left);
+}
+
+function nsxbStyleGetLeft()
+{
+ return this.styleObj.left;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.setLeft()
+
+function cssStyleSetLeft(left)
+{
+ if (typeof(this.styleObj.left) == 'number')
+ this.styleObj.left = left;
+ else
+ this.styleObj.left = left + 'px';
+}
+
+function nsxbStyleSetLeft(left)
+{
+ this.styleObj.left = left;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getTop()
+
+function cssStyleGetTop()
+{
+ var top = this.getEffectiveValue('top');
+ if (typeof(top) == 'number')
+ return top;
+
+ if (top != '' && top.indexOf('px') == -1)
+ {
+ xbDEBUG.dump('xbStyle.getTop: Element ID=' + this.object.id + ' does not use pixels as units. top=' + top + ' Click Ok to continue, Cancel to Abort');
+ return 0;
+ }
+
+ if (top == '')
+ top = this.styleObj.top = '0px';
+
+ return xbToInt(top);
+}
+
+function nsxbStyleGetTop()
+{
+ return this.styleObj.top;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.setTop()
+
+function cssStyleSetTop(top)
+{
+ if (typeof(this.styleObj.top) == 'number')
+ this.styleObj.top = top;
+ else
+ this.styleObj.top = top + 'px';
+}
+
+function nsxbStyleSetTop(top)
+{
+ this.styleObj.top = top;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getPageX()
+
+function cssStyleGetPageX()
+{
+ var x = 0;
+ var elm = this.object;
+ var elmstyle;
+ var position;
+
+ //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the
+ // effective position attribute , attempt to use offsetXXX
+
+ if (typeof(elm.offsetLeft) == 'number')
+ {
+ while (elm)
+ {
+ x += elm.offsetLeft;
+ elm = elm.offsetParent;
+ }
+ }
+ else
+ {
+ while (elm)
+ {
+ if (elm.style)
+ {
+ elmstyle = new xbStyle(elm);
+ position = elmstyle.getEffectiveValue('position');
+ if (position != '' && position != 'static')
+ x += elmstyle.getLeft();
+ }
+ elm = elm.parentNode;
+ }
+ }
+
+ return x;
+}
+
+function nsxbStyleGetPageX()
+{
+ return this.styleObj.pageX;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.setPageX()
+
+function cssStyleSetPageX(x)
+{
+ var xParent = 0;
+ var elm = this.object.parentNode;
+ var elmstyle;
+ var position;
+
+ //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the
+ // effective position attribute , attempt to use offsetXXX
+
+ if (elm && typeof(elm.offsetLeft) == 'number')
+ {
+ while (elm)
+ {
+ xParent += elm.offsetLeft;
+ elm = elm.offsetParent;
+ }
+ }
+ else
+ {
+ while (elm)
+ {
+ if (elm.style)
+ {
+ elmstyle = new xbStyle(elm);
+ position = elmstyle.getEffectiveValue('position');
+ if (position != '' && position != 'static')
+ xParent += elmstyle.getLeft();
+ }
+ elm = elm.parentNode;
+ }
+ }
+
+ x -= xParent;
+
+ this.setLeft(x);
+}
+
+function nsxbStyleSetPageX(x)
+{
+ this.styleObj.x = this.styleObj.x + x - this.styleObj.pageX;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getPageY()
+
+function cssStyleGetPageY()
+{
+ var y = 0;
+ var elm = this.object;
+ var elmstyle;
+ var position;
+
+ //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the
+ // effective position attribute , attempt to use offsetXXX
+
+ if (typeof(elm.offsetTop) == 'number')
+ {
+ while (elm)
+ {
+ y += elm.offsetTop;
+ elm = elm.offsetParent;
+ }
+ }
+ else
+ {
+ while (elm)
+ {
+ if (elm.style)
+ {
+ elmstyle = new xbStyle(elm);
+ position = elmstyle.getEffectiveValue('position');
+ if (position != '' && position != 'static')
+ y += elmstyle.getTop();
+ }
+ elm = elm.parentNode;
+ }
+ }
+
+ return y;
+}
+
+function nsxbStyleGetPageY()
+{
+ return this.styleObj.pageY;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.setPageY()
+
+function cssStyleSetPageY(y)
+{
+ var yParent = 0;
+ var elm = this.object.parentNode;
+ var elmstyle;
+ var position;
+
+ //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the
+ // effective position attribute , attempt to use offsetXXX
+
+ if (elm && typeof(elm.offsetTop) == 'number')
+ {
+ while (elm)
+ {
+ yParent += elm.offsetTop;
+ elm = elm.offsetParent;
+ }
+ }
+ else
+ {
+ while (elm)
+ {
+ if (elm.style)
+ {
+ elmstyle = new xbStyle(elm);
+ position = elmstyle.getEffectiveValue('position');
+ if (position != '' && position != 'static')
+ yParent += elmstyle.getTop();
+ }
+ elm = elm.parentNode;
+ }
+ }
+
+ y -= yParent;
+
+ this.setTop(y);
+}
+
+function nsxbStyleSetPageY(y)
+{
+ this.styleObj.y = this.styleObj.y + y - this.styleObj.pageY;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getHeight()
+
+function cssStyleGetHeight()
+{
+ var height = this.getEffectiveValue('height');
+ if (typeof(height) == 'number')
+ return height;
+
+ if ((height == 'auto' || height.indexOf('%') != -1) && typeof(this.object.offsetHeight) == 'number')
+ height = this.object.offsetHeight + 'px';
+
+ if (height != '' && height != 'auto' && height.indexOf('px') == -1)
+ {
+ xbDEBUG.dump('xbStyle.getHeight: Element ID=' + this.object.id + ' does not use pixels as units. height=' + height + ' Click Ok to continue, Cancel to Abort');
+ return 0;
+ }
+
+ height = xbToInt(height);
+
+ return height;
+}
+
+function nsxbStyleGetHeight()
+{
+ //if (this.styleObj.document && this.styleObj.document.height)
+ // return this.styleObj.document.height;
+
+ return this.styleObj.clip.height;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.setHeight()
+
+function cssStyleSetHeight(height)
+{
+ if (typeof(this.styleObj.height) == 'number')
+ this.styleObj.height = height;
+ else
+ this.styleObj.height = height + 'px';
+}
+
+function nsxbStyleSetHeight(height)
+{
+ this.styleObj.clip.height = height;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getWidth()
+
+function cssStyleGetWidth()
+{
+ var width = this.getEffectiveValue('width');
+ if (typeof(width) == 'number')
+ return width;
+
+ if ((width == 'auto' || width.indexOf('%') != -1) && typeof(this.object.offsetWidth) == 'number')
+ width = this.object.offsetWidth + 'px';
+
+ if (width != '' && width != 'auto' && width.indexOf('px') == -1)
+ {
+ xbDEBUG.dump('xbStyle.getWidth: Element ID=' + this.object.id + ' does not use pixels as units. width=' + width + ' Click Ok to continue, Cancel to Abort');
+ return 0;
+ }
+
+ width = xbToInt(width);
+
+ return width;
+}
+
+function nsxbStyleGetWidth()
+{
+ //if (this.styleObj.document && this.styleObj.document.width)
+ // return this.styleObj.document.width;
+
+ return this.styleObj.clip.width;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.setWidth()
+
+function cssStyleSetWidth(width)
+{
+ if (typeof(this.styleObj.width) == 'number')
+ this.styleObj.width = width;
+ else
+ this.styleObj.width = width + 'px';
+}
+
+// netscape will not dynamically change the width of a
+// layer. It will only happen upon a refresh.
+function nsxbStyleSetWidth(width)
+{
+ this.styleObj.clip.width = width;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getVisibility()
+
+function cssStyleGetVisibility()
+{
+ return this.getEffectiveValue('visibility');
+}
+
+function nsxbStyleGetVisibility()
+{
+ switch(this.styleObj.visibility)
+ {
+ case 'hide':
+ return 'hidden';
+ case 'show':
+ return 'visible';
+ }
+ return '';
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.setVisibility()
+
+function cssStyleSetVisibility(visibility)
+{
+ this.styleObj.visibility = visibility;
+}
+
+function nsxbStyleSetVisibility(visibility)
+{
+ switch(visibility)
+ {
+ case 'hidden':
+ visibility = 'hide';
+ break;
+ case 'visible':
+ visibility = 'show';
+ break;
+ case 'inherit':
+ break;
+ default:
+ visibility = 'show';
+ break;
+ }
+ this.styleObj.visibility = visibility;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getzIndex()
+
+function cssStyleGetzIndex()
+{
+ return xbToInt(this.getEffectiveValue('zIndex'));
+}
+
+function nsxbStyleGetzIndex()
+{
+ return this.styleObj.zIndex;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.setzIndex()
+
+function cssStyleSetzIndex(zIndex)
+{
+ this.styleObj.zIndex = zIndex;
+}
+
+function nsxbStyleSetzIndex(zIndex)
+{
+ this.styleObj.zIndex = zIndex;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getBackgroundColor()
+
+function cssStyleGetBackgroundColor()
+{
+ return this.getEffectiveValue('backgroundColor');
+}
+
+function nsxbStyleGetBackgroundColor()
+{
+ return this.styleObj.bgColor;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.setBackgroundColor()
+
+function cssStyleSetBackgroundColor(color)
+{
+ this.styleObj.backgroundColor = color;
+}
+
+function nsxbStyleSetBackgroundColor(color)
+{
+ if (color)
+ {
+ this.styleObj.bgColor = color;
+ this.object.document.bgColor = color;
+ this.resizeTo(this.getWidth(), this.getHeight());
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getColor()
+
+function cssStyleGetColor()
+{
+ return this.getEffectiveValue('color');
+}
+
+function nsxbStyleGetColor()
+{
+ return '#ffffff';
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.setColor()
+
+function cssStyleSetColor(color)
+{
+ this.styleObj.color = color;
+}
+
+function nsxbStyleSetColor(color)
+{
+ this.object.document.fgColor = color;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.moveAbove()
+
+function xbStyleMoveAbove(cont)
+{
+ this.setzIndex(cont.getzIndex()+1);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.moveBelow()
+
+function xbStyleMoveBelow(cont)
+{
+ var zindex = cont.getzIndex() - 1;
+
+ this.setzIndex(zindex);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.moveBy()
+
+function xbStyleMoveBy(deltaX, deltaY)
+{
+ this.moveTo(this.getLeft() + deltaX, this.getTop() + deltaY);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.moveTo()
+
+function xbStyleMoveTo(x, y)
+{
+ this.setLeft(x);
+ this.setTop(y);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.moveToAbsolute()
+
+function xbStyleMoveToAbsolute(x, y)
+{
+ this.setPageX(x);
+ this.setPageY(y);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.resizeBy()
+
+function xbStyleResizeBy(deltaX, deltaY)
+{
+ this.setWidth( this.getWidth() + deltaX );
+ this.setHeight( this.getHeight() + deltaY );
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.resizeTo()
+
+function xbStyleResizeTo(x, y)
+{
+ this.setWidth(x);
+ this.setHeight(y);
+}
+
+////////////////////////////////////////////////////////////////////////
+// Navigator 4.x resizing...
+
+function nsxbStyleOnresize()
+{
+ if (saveInnerWidth != xbGetWindowWidth() || saveInnerHeight != xbGetWindowHeight())
+ location.reload();
+
+ return false;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.setInnerHTML()
+
+function xbSetInnerHTML(str)
+{
+ if (typeof(this.object.innerHTML) != 'undefined')
+ this.object.innerHTML = str;
+}
+
+function nsxbSetInnerHTML(str)
+{
+ this.object.document.open('text/html');
+ this.object.document.write(str);
+ this.object.document.close();
+}
+
+////////////////////////////////////////////////////////////////////////
+// Extensions to xbStyle that are not supported by Netscape Navigator 4
+// but that provide cross browser implementations of properties for
+// Mozilla, Gecko, Netscape 6.x and Opera
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getBorderTopWidth()
+
+function cssStyleGetBorderTopWidth()
+{
+ return xbToInt(this.getEffectiveValue('borderTopWidth'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getBorderRightWidth()
+
+function cssStyleGetBorderRightWidth()
+{
+ return xbToInt(this.getEffectiveValue('borderRightWidth'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getBorderBottomWidth()
+
+function cssStyleGetBorderBottomWidth()
+{
+ return xbToInt(this.getEffectiveValue('borderLeftWidth'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getBorderLeftWidth()
+
+function cssStyleGetBorderLeftWidth()
+{
+ return xbToInt(this.getEffectiveValue('borderLeftWidth'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getMarginTop()
+
+function cssStyleGetMarginTop()
+{
+ return xbToInt(this.getEffectiveValue('marginTop'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getMarginRight()
+
+function cssStyleGetMarginRight()
+{
+ return xbToInt(this.getEffectiveValue('marginRight'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getMarginBottom()
+
+function cssStyleGetMarginBottom()
+{
+ return xbToInt(this.getEffectiveValue('marginBottom'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getMarginLeft()
+
+function cssStyleGetMarginLeft()
+{
+ return xbToInt(this.getEffectiveValue('marginLeft'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getPaddingTop()
+
+function cssStyleGetPaddingTop()
+{
+ return xbToInt(this.getEffectiveValue('paddingTop'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getPaddingRight()
+
+function cssStyleGetPaddingRight()
+{
+ return xbToInt(this.getEffectiveValue('paddingRight'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getPaddingBottom()
+
+function cssStyleGetPaddingBottom()
+{
+ return xbToInt(this.getEffectiveValue('paddingBottom'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getPaddingLeft()
+
+function cssStyleGetPaddingLeft()
+{
+ return xbToInt(this.getEffectiveValue('paddingLeft'));
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getClientTop()
+
+function cssStyleGetClientTop()
+{
+ return this.getTop() - this.getMarginTop() - this.getBorderTopWidth() - this.getPaddingTop();
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getClientLeft()
+
+function cssStyleGetClientLeft()
+{
+ return this.getLeft() - this.getMarginLeft() - this.getBorderLeftWidth() - this.getPaddingLeft();
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getClientWidth()
+
+function cssStyleGetClientWidth()
+{
+ return this.getMarginLeft() + this.getBorderLeftWidth() + this.getPaddingLeft() + this.getWidth() + this.getPaddingRight() + this.getBorderRightWidth() + this.getMarginRight();
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// xbStyle.getClientHeight()
+
+function cssStyleGetClientHeight()
+{
+ return this.getMarginTop() + this.getBorderTopWidth() + this.getPaddingTop() + this.getHeight() + this.getPaddingBottom() + this.getBorderBottomWidth() + this.getMarginBottom();
+}
+
+////////////////////////////////////////////////////////////////////////
+
+xbStyle.prototype.getEffectiveValue = xbStyleGetEffectiveValue;
+xbStyle.prototype.moveAbove = xbStyleMoveAbove;
+xbStyle.prototype.moveBelow = xbStyleMoveBelow;
+xbStyle.prototype.moveBy = xbStyleMoveBy;
+xbStyle.prototype.moveTo = xbStyleMoveTo;
+xbStyle.prototype.moveToAbsolute = xbStyleMoveToAbsolute;
+xbStyle.prototype.resizeBy = xbStyleResizeBy;
+xbStyle.prototype.resizeTo = xbStyleResizeTo;
+
+if (document.all || document.getElementsByName)
+{
+ xbStyle.prototype.getClip = cssStyleGetClip;
+ xbStyle.prototype.setClip = cssStyleSetClip;
+ xbStyle.prototype.getClipTop = cssStyleGetClipTop;
+ xbStyle.prototype.setClipTop = cssStyleSetClipTop;
+ xbStyle.prototype.getClipRight = cssStyleGetClipRight;
+ xbStyle.prototype.setClipRight = cssStyleSetClipRight;
+ xbStyle.prototype.getClipBottom = cssStyleGetClipBottom;
+ xbStyle.prototype.setClipBottom = cssStyleSetClipBottom;
+ xbStyle.prototype.getClipLeft = cssStyleGetClipLeft;
+ xbStyle.prototype.setClipLeft = cssStyleSetClipLeft;
+ xbStyle.prototype.getClipWidth = cssStyleGetClipWidth;
+ xbStyle.prototype.setClipWidth = cssStyleSetClipWidth;
+ xbStyle.prototype.getClipHeight = cssStyleGetClipHeight;
+ xbStyle.prototype.setClipHeight = cssStyleSetClipHeight;
+ xbStyle.prototype.getLeft = cssStyleGetLeft;
+ xbStyle.prototype.setLeft = cssStyleSetLeft;
+ xbStyle.prototype.getTop = cssStyleGetTop;
+ xbStyle.prototype.setTop = cssStyleSetTop;
+ xbStyle.prototype.getPageX = cssStyleGetPageX;
+ xbStyle.prototype.setPageX = cssStyleSetPageX;
+ xbStyle.prototype.getPageY = cssStyleGetPageY;
+ xbStyle.prototype.setPageY = cssStyleSetPageY;
+ xbStyle.prototype.getVisibility = cssStyleGetVisibility;
+ xbStyle.prototype.setVisibility = cssStyleSetVisibility;
+ xbStyle.prototype.getzIndex = cssStyleGetzIndex;
+ xbStyle.prototype.setzIndex = cssStyleSetzIndex;
+ xbStyle.prototype.getHeight = cssStyleGetHeight;
+ xbStyle.prototype.setHeight = cssStyleSetHeight;
+ xbStyle.prototype.getWidth = cssStyleGetWidth;
+ xbStyle.prototype.setWidth = cssStyleSetWidth;
+ xbStyle.prototype.getBackgroundColor = cssStyleGetBackgroundColor;
+ xbStyle.prototype.setBackgroundColor = cssStyleSetBackgroundColor;
+ xbStyle.prototype.getColor = cssStyleGetColor;
+ xbStyle.prototype.setColor = cssStyleSetColor;
+ xbStyle.prototype.setInnerHTML = xbSetInnerHTML;
+ xbStyle.prototype.getBorderTopWidth = cssStyleGetBorderTopWidth;
+ xbStyle.prototype.getBorderRightWidth = cssStyleGetBorderRightWidth;
+ xbStyle.prototype.getBorderBottomWidth = cssStyleGetBorderBottomWidth;
+ xbStyle.prototype.getBorderLeftWidth = cssStyleGetBorderLeftWidth;
+ xbStyle.prototype.getMarginLeft = cssStyleGetMarginLeft;
+ xbStyle.prototype.getMarginTop = cssStyleGetMarginTop;
+ xbStyle.prototype.getMarginRight = cssStyleGetMarginRight;
+ xbStyle.prototype.getMarginBottom = cssStyleGetMarginBottom;
+ xbStyle.prototype.getMarginLeft = cssStyleGetMarginLeft;
+ xbStyle.prototype.getPaddingTop = cssStyleGetPaddingTop;
+ xbStyle.prototype.getPaddingRight = cssStyleGetPaddingRight;
+ xbStyle.prototype.getPaddingBottom = cssStyleGetPaddingBottom;
+ xbStyle.prototype.getPaddingLeft = cssStyleGetPaddingLeft;
+ xbStyle.prototype.getClientTop = cssStyleGetClientTop;
+ xbStyle.prototype.getClientLeft = cssStyleGetClientLeft;
+ xbStyle.prototype.getClientWidth = cssStyleGetClientWidth;
+ xbStyle.prototype.getClientHeight = cssStyleGetClientHeight;
+}
+else if (document.layers)
+{
+ xbStyle.prototype.getClip = nsxbStyleGetClip;
+ xbStyle.prototype.setClip = nsxbStyleSetClip;
+ xbStyle.prototype.getClipTop = nsxbStyleGetClipTop;
+ xbStyle.prototype.setClipTop = nsxbStyleSetClipTop;
+ xbStyle.prototype.getClipRight = nsxbStyleGetClipRight;
+ xbStyle.prototype.setClipRight = nsxbStyleSetClipRight;
+ xbStyle.prototype.getClipBottom = nsxbStyleGetClipBottom;
+ xbStyle.prototype.setClipBottom = nsxbStyleSetClipBottom;
+ xbStyle.prototype.getClipLeft = nsxbStyleGetClipLeft;
+ xbStyle.prototype.setClipLeft = nsxbStyleSetClipLeft;
+ xbStyle.prototype.getClipWidth = nsxbStyleGetClipWidth;
+ xbStyle.prototype.setClipWidth = nsxbStyleSetClipWidth;
+ xbStyle.prototype.getClipHeight = nsxbStyleGetClipHeight;
+ xbStyle.prototype.setClipHeight = nsxbStyleSetClipHeight;
+ xbStyle.prototype.getLeft = nsxbStyleGetLeft;
+ xbStyle.prototype.setLeft = nsxbStyleSetLeft;
+ xbStyle.prototype.getTop = nsxbStyleGetTop;
+ xbStyle.prototype.setTop = nsxbStyleSetTop;
+ xbStyle.prototype.getPageX = nsxbStyleGetPageX;
+ xbStyle.prototype.setPageX = nsxbStyleSetPageX;
+ xbStyle.prototype.getPageY = nsxbStyleGetPageY;
+ xbStyle.prototype.setPageY = nsxbStyleSetPageY;
+ xbStyle.prototype.getVisibility = nsxbStyleGetVisibility;
+ xbStyle.prototype.setVisibility = nsxbStyleSetVisibility;
+ xbStyle.prototype.getzIndex = nsxbStyleGetzIndex;
+ xbStyle.prototype.setzIndex = nsxbStyleSetzIndex;
+ xbStyle.prototype.getHeight = nsxbStyleGetHeight;
+ xbStyle.prototype.setHeight = nsxbStyleSetHeight;
+ xbStyle.prototype.getWidth = nsxbStyleGetWidth;
+ xbStyle.prototype.setWidth = nsxbStyleSetWidth;
+ xbStyle.prototype.getBackgroundColor = nsxbStyleGetBackgroundColor;
+ xbStyle.prototype.setBackgroundColor = nsxbStyleSetBackgroundColor;
+ xbStyle.prototype.getColor = nsxbStyleGetColor;
+ xbStyle.prototype.setColor = nsxbStyleSetColor;
+ xbStyle.prototype.setInnerHTML = nsxbSetInnerHTML;
+ xbStyle.prototype.getBorderTopWidth = xbStyleNotSupported;
+ xbStyle.prototype.getBorderRightWidth = xbStyleNotSupported;
+ xbStyle.prototype.getBorderBottomWidth = xbStyleNotSupported;
+ xbStyle.prototype.getBorderLeftWidth = xbStyleNotSupported;
+ xbStyle.prototype.getMarginLeft = xbStyleNotSupported;
+ xbStyle.prototype.getMarginTop = xbStyleNotSupported;
+ xbStyle.prototype.getMarginRight = xbStyleNotSupported;
+ xbStyle.prototype.getMarginBottom = xbStyleNotSupported;
+ xbStyle.prototype.getMarginLeft = xbStyleNotSupported;
+ xbStyle.prototype.getPaddingTop = xbStyleNotSupported;
+ xbStyle.prototype.getPaddingRight = xbStyleNotSupported;
+ xbStyle.prototype.getPaddingBottom = xbStyleNotSupported;
+ xbStyle.prototype.getPaddingLeft = xbStyleNotSupported;
+ xbStyle.prototype.getClientTop = xbStyleNotSupported;
+ xbStyle.prototype.getClientLeft = xbStyleNotSupported;
+ xbStyle.prototype.getClientWidth = xbStyleNotSupported;
+ xbStyle.prototype.getClientHeight = xbStyleNotSupported;
+
+ window.saveInnerWidth = window.innerWidth;
+ window.saveInnerHeight = window.innerHeight;
+
+ window.onresize = nsxbStyleOnresize;
+
+}
+else
+{
+ xbStyle.prototype.toString = xbStyleNotSupported;
+ xbStyle.prototype.getClip = xbStyleNotSupported;
+ xbStyle.prototype.setClip = xbStyleNotSupported;
+ xbStyle.prototype.getClipTop = xbStyleNotSupported;
+ xbStyle.prototype.setClipTop = xbStyleNotSupported;
+ xbStyle.prototype.getClipRight = xbStyleNotSupported;
+ xbStyle.prototype.setClipRight = xbStyleNotSupported;
+ xbStyle.prototype.getClipBottom = xbStyleNotSupported;
+ xbStyle.prototype.setClipBottom = xbStyleNotSupported;
+ xbStyle.prototype.getClipLeft = xbStyleNotSupported;
+ xbStyle.prototype.setClipLeft = xbStyleNotSupported;
+ xbStyle.prototype.getClipWidth = xbStyleNotSupported;
+ xbStyle.prototype.setClipWidth = xbStyleNotSupported;
+ xbStyle.prototype.getClipHeight = xbStyleNotSupported;
+ xbStyle.prototype.setClipHeight = xbStyleNotSupported;
+ xbStyle.prototype.getLeft = xbStyleNotSupported;
+ xbStyle.prototype.setLeft = xbStyleNotSupported;
+ xbStyle.prototype.getTop = xbStyleNotSupported;
+ xbStyle.prototype.setTop = xbStyleNotSupported;
+ xbStyle.prototype.getVisibility = xbStyleNotSupported;
+ xbStyle.prototype.setVisibility = xbStyleNotSupported;
+ xbStyle.prototype.getzIndex = xbStyleNotSupported;
+ xbStyle.prototype.setzIndex = xbStyleNotSupported;
+ xbStyle.prototype.getHeight = xbStyleNotSupported;
+ xbStyle.prototype.setHeight = xbStyleNotSupported;
+ xbStyle.prototype.getWidth = xbStyleNotSupported;
+ xbStyle.prototype.setWidth = xbStyleNotSupported;
+ xbStyle.prototype.getBackgroundColor = xbStyleNotSupported;
+ xbStyle.prototype.setBackgroundColor = xbStyleNotSupported;
+ xbStyle.prototype.getColor = xbStyleNotSupported;
+ xbStyle.prototype.setColor = xbStyleNotSupported;
+ xbStyle.prototype.setInnerHTML = xbStyleNotSupported;
+ xbStyle.prototype.getBorderTopWidth = xbStyleNotSupported;
+ xbStyle.prototype.getBorderRightWidth = xbStyleNotSupported;
+ xbStyle.prototype.getBorderBottomWidth = xbStyleNotSupported;
+ xbStyle.prototype.getBorderLeftWidth = xbStyleNotSupported;
+ xbStyle.prototype.getMarginLeft = xbStyleNotSupported;
+ xbStyle.prototype.getMarginTop = xbStyleNotSupported;
+ xbStyle.prototype.getMarginRight = xbStyleNotSupported;
+ xbStyle.prototype.getMarginBottom = xbStyleNotSupported;
+ xbStyle.prototype.getMarginLeft = xbStyleNotSupported;
+ xbStyle.prototype.getPaddingTop = xbStyleNotSupported;
+ xbStyle.prototype.getPaddingRight = xbStyleNotSupported;
+ xbStyle.prototype.getPaddingBottom = xbStyleNotSupported;
+ xbStyle.prototype.getPaddingLeft = xbStyleNotSupported;
+ xbStyle.prototype.getClientTop = xbStyleNotSupported;
+ xbStyle.prototype.getClientLeft = xbStyleNotSupported;
+ xbStyle.prototype.getClientWidth = xbStyleNotSupported;
+ xbStyle.prototype.getClientHeight = xbStyleNotSupported;
+}
+
+