/*
dw_core.js
version date: July 2002
				
This code is from Dynamic Web Coding 
at http://www.dyn-web.com/
Copyright 2002 by Sharon Paine 
See Terms of Use at http://www.dyn-web.com/bus/terms.html
Permission granted to use this code 
as long as this entire notice is included.
*/

/////////////////////////////////////////////////////////////////////
//  dynObj constructor
//		arguments: id (required): id of positioned div.
//		left,top,width,height optional arguments.
/////////////////////////////////////////////////////////////////////
function dynObj(id,x,y,w,h) {
   this.el = (document.getElementById)? document.getElementById(id): (document.all)? document.all[id]: (document.layers)? getLyrRef(id,document): null;
   if (!this.el) return null;
   this.doc = (document.layers)? this.el.document: this.el;
   this.css = (this.el.style)? this.el.style: this.el;
   var px = (document.layers||window.opera)? "": "px";
   this.x = x || 0;	if (x) this.css.left = this.x+px;
   this.y = y || 0;	if (y) this.css.top = this.y+px;
   // compare with dw_scroll.js this.width/height
   // precedence here to style.width/height
   // use getWidth/Height to get rendered width/height of content
   this.width = w? w: (this.el.offsetWidth)? this.el.offsetWidth: (this.css.clip.width)? this.css.clip.width: 0;
   this.height = h? h: (this.el.offsetHeight)? this.el.offsetHeight: (this.css.clip.height)? this.css.clip.height: 0;
   // if w/h passed, set style width/height
   if (w){ (document.layers)? this.css.clip.width=w+px: this.css.width=w+px;}
   if (h){ (document.layers)? this.css.clip.height=h+px: this.css.height=h+px;}
   this.obj = id + "dynObj"; 	eval(this.obj + "=this");
}

function dw_show() { this.css.visibility = "visible"; }
function dw_hide() { this.css.visibility = "hidden"; }

function dw_shiftTo(x,y) {
   if (x!=null) this.x=x; if (y!=null) this.y=y;	
   // rounded below (this.x/y can hold decimals)
   if (this.css.moveTo) { 
      this.css.moveTo(Math.round(this.x),Math.round(this.y)); 
   } else { 
      this.css.left=Math.round(this.x)+"px"; 
      this.css.top=Math.round(this.y)+"px"; 
   }
}

function dw_shiftBy(x,y) {
   this.shiftTo(this.x+x,this.y+y);
}

function dw_writeLyr(cntnt) {
   if (typeof this.doc.innerHTML!="undefined") {
      this.doc.innerHTML = cntnt;
   } else if (document.layers) {
      this.doc.write(cntnt);
      this.doc.close();
   }
}

function dw_setBgClr(bg) {
   if (document.layers) this.doc.bgColor=bg;
   else this.css.backgroundColor=bg;
}

// assign methods 
dynObj.prototype.show = dw_show;
dynObj.prototype.hide = dw_hide;
dynObj.prototype.shiftTo = dw_shiftTo;
dynObj.prototype.shiftBy = dw_shiftBy;
dynObj.prototype.writeLyr = dw_writeLyr;
dynObj.prototype.setBgClr=dw_setBgClr;


// get reference to nested layer for ns4
// from dhtmllib.js by Mike Hall of www.brainjar.com
function getLyrRef(lyr,doc) {
   if (document.layers) {
      var theLyr;
      for (var i=0; i<doc.layers.length; i++) {
         theLyr = doc.layers[i];
         if (theLyr.name == lyr) return theLyr;
         else if (theLyr.document.layers.length > 0) 
            if ((theLyr = getLyrRef(lyr,theLyr.document)) != null) return theLyr;
      }
      return null;
   }
}
