// (C) Shelley Powers, YASD, 1998 - 2000                                                     
//                                                                                          
// These are the newest version of the cross-browser scripting objects,                     
// incorporated into one Javascript file.                                                   
//                                                                                          
// Each DOM gets its own object, with similar interfaces but differing implementations      
                                                                                            
// The W3C DOM Object                                                                       
//                                                                                         
//*************************************************************************************    
function dom_object(obj) {                                                                 
 this.css2 = obj;                                                                          
 this.name = obj.id;                                                                       
 this.objResizeBy = domResizeBy;                                                           
 this.objHide = domHide;                                                                   
 this.objShow = domShow;                                                                   
 this.objDisplay = domDisplay;                                                             
 this.objGetLeft = domGetLeft;                                                             
 this.objGetTop = domGetTop;                                                               
 this.objSetTop = domSetTop;                                                               
 this.objSetLeft = domSetLeft;                                                             
 this.objMoveAbsolute = domMoveAbsolute;                                                   
 this.objMoveRelative = domMoveRelative;                                                   
 this.objGetWidth = domGetWidth;                                                           
 this.objGetHeight = domGetHeight;                                                         
 this.objSetHeight = domSetHeight;                                                         
 this.objSetWidth = domSetWidth;                                                           
 this.objSetZIndex = domSetZIndex;                                                         
 this.objGetZIndex = domGetZIndex;                                                         
 this.objSetClipRect = domSetClipRect;                                                     
 this.objGetClipRect = domGetClipRect;                                                     
 this.objGetClipLeft = domGetClipLeft;                                                     
 this.objGetClipRight = domGetClipRight;                                                   
 this.objGetClipTop = domGetClipTop;                                                       
 this.objGetClipBottom = domGetClipBottom;                                                 
 this.replace_html = domReplaceHTML;                                                       
 this.objReplaceHTML = domParamReplaceHTML;                                                
 this.objReplaceText = domReplaceText;                                                     
 this.objGetVisibility = domGetVisibility;                                                 
}                                                                                          
                                                                                           
                                                                                           
// The IE 4.x, 5.x, and 6.x DOM Object                                                     
//                                                                                         
//*************************************************************************************    
function ie_object(obj) {                                                                  
 this.css2 = obj;                                                                          
 this.name = obj.id;                                                                       
 this.objResizeBy = domResizeBy;                                                           
 this.objHide = domHide;                                                                   
 this.objShow = domShow;                                                                   
 this.objDisplay = domDisplay;                                                             
 this.objGetLeft = domGetLeft;                                                             
 this.objGetTop = domGetTop;                                                               
 this.objSetTop = domSetTop;                                                               
 this.objSetLeft = domSetLeft;                                                             
 this.objMoveAbsolute = domMoveAbsolute;                                                   
 this.objMoveRelative = domMoveRelative;                                                   
 this.objGetWidth = domGetWidth;                                                           
 this.objGetHeight = domGetHeight;                                                         
 this.objSetHeight = domSetHeight;                                                         
 this.objSetWidth = domSetWidth;                                                           
 this.objSetZIndex = domSetZIndex;                                                         
 this.objGetZIndex = domGetZIndex;                                                         
 this.objSetClipRect = domSetClipRect;                                                     
 this.objGetClipRect = domGetClipRect;                                                     
 this.objGetClipLeft = domGetClipLeft;                                                     
 this.objGetClipRight = domGetClipRight;                                                   
 this.objGetClipTop = domGetClipTop;                                                       
 this.objGetClipBottom = domGetClipBottom;                                                 
 this.replace_html = domReplaceHTML;                                                       
 this.objReplaceHTML = domParamReplaceHTML;                                                
 this.objReplaceText = domReplaceText;                                                     
 this.objGetVisibility = domGetVisibility;                                                 
}                                                                                          
                                                                                           
                                                                                           
                                                                                           
// The Navigator DOM Object                                                                
//                                                                                         
//*************************************************************************************    
function ns_object(obj) {                                                                  
 this.css2 = obj;                                                                          
 this.name = obj.name;                                                                     
 this.objResizeBy = domResizeBy;                                                           
 this.objHide = nsobjHide;                                                                 
 this.objShow = nsobjShow;                                                                 
 this.objDisplay = nsobjDisplay;                                                           
 this.objGetLeft = nsobjGetLeft;                                                           
 this.objGetTop = nsobjGetTop;                                                             
 this.objSetTop = nsobjSetTop;                                                             
 this.objSetLeft = nsobjSetLeft;                                                           
 this.objMoveAbsolute = domMoveAbsolute;                                                   
 this.objMoveRelative = domMoveRelative;                                                   
 this.objGetWidth = nsobjGetWidth;                                                         
 this.objGetHeight = nsobjGetHeight;                                                       
 this.objSetHeight = nsobjSetHeight;                                                       
 this.objSetWidth = nsobjSetWidth;                                                         
 this.objSetZIndex = nsobjSetZIndex;                                                      
 this.objGetZIndex = nsobjGetZIndex;                                                      
 this.objSetClipRect = nsobjSetClipRect;                                                  
 this.objGetClipRect = nsobjGetClipRect;                                                  
 this.objGetClipLeft = nsobjGetClipLeft;                                                  
 this.objGetClipRight = nsobjGetClipRight;                                                
 this.objGetClipTop = nsobjGetClipTop;                                                    
 this.objGetClipBottom = nsobjGetClipBottom;                                              
 this.replace_html = nsreplace_html;                                                      
 this.objReplaceHTML = nsParamReplaceHTML;                                                
 this.objReplaceText = nsReplaceText;                                                     
 this.objGetVisibility = nsVisibility;                                                    
}                                                                                         
                                                                                          
//*************************************************************************************   
//                                                                                        
// The implementations                                                                    
//                                                                                        
//*************************************************************************************   
                                                                                          
                                                                                          
// The DOM Object Implementations                                                         
//                                                                                        
//*************************************************************************************   
                                                                                          
                                                                                          
function domResizeBy(wincr,hincr) {                                                       
 var wdth = this.objGetWidth();                                                           
 wdth += wincr;                                                                           
 this.objSetWidth(wdth);                                                                  
                                                                                          
 var ht = this.objGetHeight();                                                            
 ht += hincr;                                                                             
 this.objSetHeight(ht);                                                                   
}                                                                                         
                                                                                          
                                                                                          
// element's left position                                                                
function domGetLeft() {                                                                   
 var lt = parseInt(this.css2.style.left);                                                 
 return lt;                                                                               
}                                                                                         
                                                                                          
// element's top position                                                                 
function domGetTop () {                                                                   
 var tp = parseInt(this.css2.style.top);                                                  
 return tp;                                                                               
}                                                                                         
                                                                                          
// set element's top position                                                             
function domSetTop (top) {                                                                
 this.css2.style.top = top + "px";                                                        
}                                                                                         
                                                                                          
// set element's left position                                                            
function domSetLeft(left) {                                                               
 this.css2.style.left = left + "px";                                                      
}                                                                                         
                                                                                          
                                                                                          
// get element's width                                                                    
function domGetWidth() {                                                                  
 var wd = parseInt(this.css2.style.width);                                                
 return wd;                                                                               
}                                                                                         
                                                                                          
// get element's height                                                                   
function domGetHeight() {                                                                 
 var ht = parseInt(this.css2.style.height);                                               
 return ht;                                                                               
}                                                                                         
                                                                                          
// set element's height                                                                   
function domSetHeight(height) {                                                           
 this.css2.style.height = height + "px";                                                  
}                                                                                         
                                                                                          
// set element's width                                                                    
function domSetWidth(width) {                                                             
 this.css2.style.width = width + "px";                                                    
}                                                                                         
                                                                                          
                                                                                          
// hide element                                                                           
function domHide() {                                                                      
 this.css2.style.visibility = "hidden";                                                   
}                                                                                         
                                                                                          
// show element                                                                           
function domShow() {                                                                      
 this.css2.style.visibility = "visible";                                                  
}                                                                                         
                                                                                          
                                                                                          
// display element                                                                        
function domDisplay(type) {                                                               
 this.css2.style.display = type;                                                          
}                                                                                         
                                                                                          
// make absolute move                                                                     
function domMoveAbsolute(newleft, newtop) {                                               
 this.objSetLeft(newleft);                                                                
 this.objSetTop(newtop);                                                                  
}                                                                                         
                                                                                          
// move relative to current location                                                      
function domMoveRelative(left, top) {                                                     
 this.objSetLeft(left + this.objGetLeft());                                               
 this.objSetTop(top + this.objGetTop());                                                  
}                                                                                         
                                                                                          
// return clipping rectangle                                                              
function domGetClipRect() {                                                               
 return this.css2.style.clip;                                                             
}                                                                                         
                                                                                          
// clip object                                                                            
function domSetClipRect(top, left, bottom, right) {                                       
 if (top == null) top = this.objGetClipTop();                                             
 if (left == null) left = this.objGetClipLeft();                                          
 if (bottom == null) bottom = this.objGetClipBottom();                                    
 if (right == null) right = this.objGetClipRight();                                       
 strng = "rect(" + top + "px, " + right + "px, " + bottom + "px, " + left + "px)";        
 this.css2.style.clip = strng;                                                            
}                                                                                         
                                                                                          
// convert string to value                                                                
function convert(strng) {                                                                 
 var i = parseInt(strng);                                                                 
 return i;                                                                                
}                                                                                         
                                                                                          
// get clipping value for specific dimension                                              
function get_entry(obj,indx) {                                                            
 strng = obj.css2.style.clip;                                                             
 if (strng.length > 0) {                                                                  
 strng = strng.slice(5,strng.length-1);                                                   
 var entries = strng.split(" ");                                                          
 }                                                                                        
 else {                                                                                   
 var entries = new Array(5);                                                              
 for (i = 0; i < entries.length; i++)                                                     
 entries[i] = "auto";                                                                     
 }                                                                                        
 if (indx == "top") {                                                                     
 if (entries[0] == "auto")                                                                
 return 0;                                                                                
 else                                                                                     
 return convert(entries[0]);                                                              
 }                                                                                        
 else if (indx == "left") {                                                               
 if (entries[3] == "auto")                                                                
 return 0;                                                                                
 else                                                                                     
 return convert(entries[3]);                                                              
 }                                                                                        
 else if (indx == "bottom"){                                                              
 if (entries[2] == "auto") {                                                              
 return obj.objGetHeight();                                                               
 }                                                                                        
 else                                                                                     
 return convert(entries[2]);                                                              
 }                                                                                        
 else if (indx == "right") {                                                              
 if (entries[1] == "auto")                                                                
 return obj.objGetWidth();                                                                
 else                                                                                     
 return convert(entries[1]);                                                              
 }                                                                                        
                                                                                          
}                                                                                         
                                                                                          
// clip object on left                                                                    
function domGetClipLeft() {                                                               
 return get_entry(this,"left");                                                           
}                                                                                         
                                                                                          
// clip object on right                                                                   
function domGetClipRight() {                                                              
 return get_entry(this, "right");                                                         
}                                                                                         
                                                                                          
// clip object at top                                                                     
function domGetClipTop() {                                                                
 return get_entry(this,"top");                                                            
}                                                                                         
                                                                                          
// clip object at bottom                                                                  
function domGetClipBottom() {                                                             
 return get_entry(this,"bottom");                                                         
}                                                                                         
                                                                                          
// set element's zindex order                                                             
function domSetZIndex(zindex) {                                                           
 this.css2.style.zIndex = zindex;                                                         
}                                                                                         
                                                                                          
// get element's current zindex order                                                     
function domGetZIndex(zindex) {                                                           
 return this.css2.style.zIndex;                                                           
}                                                                                         
                                                                                          
                                                                                          
// replace text (equivalent to innerText)                                                 
function domReplaceText(txt_string) {                                                     
                                                                                          
 var nodes = this.css2.childNodes;                                                        
 var node = nodes.item(0);                                                                
 node.replaceData(0,node.length,txt_string);                                              
}                                                                                         
                                                                                          
// replace html (innerHTML)                                                               
function domReplaceHTML(html_string) {                                                    
 this.css2.innerHTML = html_string;                                                       
}                                                                                         
                                                                                          
                                                                                          
// replace HTML -- replace contents with specific object                                  
function domParamReplaceHTML(tag,clss,id,contents) {                                      
                                                                                          
 this.objHide();                                                                          
 var r = this.css2.ownerDocument.createRange();                                           
 r.selectNodeContents(this.css2);                                                         
 r.deleteContents();                                                                      
                                                                                          
 var elem = document.createElement(tag);                                                  
 elem.setAttribute("id",id);                                                              
 elem.setAttribute("className",clss);                                                     
 var txt = document.createTextNode(contents);                                             
 elem.appendChild(txt);                                                                   
 this.css2.appendChild(elem);                                                             
 this.objShow();                                                                          
 }                                                                                        
                                                                                          
                                                                                          
// return visibility                                                                      
function domGetVisibility() {                                                             
 return this.css2.style.visibility;                                                       
}                                                                                         
                                                                                          
                                                                                          
                                                                                          
                                                                                          
// The IE Object Implementations                                                          
//                                                                                        
//*************************************************************************************   
                                                                                          
                                                                                          
                                                                                          
// replace html (with specific element)                                                   
function ieParamReplaceHTML(tag, clss, id, contents) {                                    
 var strng = "<" + tag + " class='" + clss + "' id='" + id + "'>";                        
 strng = strng + contents;                                                                
 strng = strng + "</" + tag + ">";                                                        
 this.css2.innerHTML = strng;                                                             
 }                                                                                        
                                                                                          
                                                                                          
                                                                                          
                                                                                          
                                                                                          
// The Navigator 4.x Object Implementations                                               
//                                                                                        
//*************************************************************************************   
                                                                                          
// hide element                                                                           
function nsobjHide() {                                                                    
 this.css2.visibility = "hidden";                                                         
}                                                                                         
                                                                                          
// show element                                                                           
function nsobjShow() {                                                                    
 this.css2.visibility = "inherit";                                                        
}                                                                                         
                                                                                          
                                                                                          
// element display                                                                        
function nsobjDisplay(type) {                                                             
 if (type == "none")                                                                      
 this.objHide();                                                                          
 else                                                                                     
 this.objShow();                                                                          
}                                                                                         
                                                                                          
// element's left position                                                                
function nsobjGetLeft() {                                                                 
 return this.css2.left;                                                                   
}                                                                                         
                                                                                          
// element's top position                                                                 
function nsobjGetTop () {                                                                 
 return this.css2.top;                                                                    
}                                                                                         
                                                                                          
// set element's top position                                                             
function nsobjSetTop(top) {                                                               
 this.css2.top = top;                                                                     
}                                                                                         
                                                                                          
// set element's left position                                                            
function nsobjSetLeft(left) {                                                             
 this.css2.left = left;                                                                   
}                                                                                         
                                                                                          
                                                                                          
// get element's width                                                                    
function nsobjGetWidth() {                                                                
 return this.css2.clip.width;                                                             
}                                                                                         
                                                                                          
// get element's height                                                                   
function nsobjGetHeight() {                                                               
 return this.css2.clip.height;                                                            
}                                                                                         
                                                                                          
// set element's width                                                                    
function nsobjSetWidth(width) {                                                           
 this.css2.clip.width = width;                                                            
}                                                                                         
                                                                                          
// set element's height                                                                   
function nsobjSetHeight(height) {                                                         
 this.css2.clip.height = height;                                                          
}                                                                                         
                                                                                          
// set element's zindex order                                                             
function nsobjSetZIndex(zindex) {                                                         
 this.css2.zIndex = zindex;                                                               
}                                                                                         
                                                                                          
// get element's current zindex order                                                     
function nsobjGetZIndex() {                                                               
 return this.css2.zIndex;                                                                 
}                                                                                         
                                                                                          
// clip object                                                                            
function nsobjSetClipRect (top,left,bottom,right) {                                       
 if (top == null) top = this.objGetClipTop();                                             
 if (left == null) left = this.objGetClipLeft();                                          
 if (bottom == null) bottom = this.objGetClipBottom();                                    
 if (right == null) right = this.objGetClipRight();                                       
 this.css2.clip.left = left;                                                              
 this.css2.clip.right = right;                                                            
 this.css2.clip.top = top;                                                                
 this.css2.clip.bottom = bottom;                                                          
}                                                                                         
                                                                                          
function nsobjGetClipRect () {                                                            
 var strng;                                                                               
 var left = this.css2.clip.left;                                                          
 var right = this.css2.clip.right;                                                        
 var bottom = this.css2.clip.bottom;                                                      
 var top = this.css2.clip.top;                                                            
                                                                                          
 strng = "rect(" + top + "px, " + right + "px, " + bottom + "px, " + left + "px)";        
 return strng;                                                                            
}                                                                                         
                                                                                          
// get current clip right                                                                 
function nsobjGetClipRight() {                                                            
 return this.css2.clip.right;                                                             
}                                                                                         
                                                                                          
// get current clip left                                                                  
function nsobjGetClipLeft() {                                                             
 return this.css2.clip.left;                                                              
}                                                                                         
                                                                                          
// get current clip top                                                                   
function nsobjGetClipTop() {                                                              
 return this.css2.clip.top;                                                               
}                                                                                         
                                                                                          
// get current clip bottom                                                                
function nsobjGetClipBottom() {                                                           
 return this.css2.clip.bottom;                                                            
}                                                                                         
                                                                                          
// replace html (navigator)                                                               
function nsreplace_html(html_string) {                                                    
 this.css2.document.write(html_string);                                                   
 this.css2.document.close();                                                              
}                                                                                         
                                                                                          
                                                                                          
function nsParamReplaceHTML(tag, clss, id, contents) {                                    
 var strng = "<" + tag + " class='" + clss + "' id='" + id + "'>";                        
 strng = strng + contents;                                                                
 strng = strng + "</" + tag + ">";                                                        
 this.css2.document.write(strng);                                                         
 this.css2.document.close();                                                              
 }                                                                                        
                                                                                          
function nsReplaceText(text_string) {                                                     
 // this function not implemented                                                         
}                                                                                         
                                                                                          
function nsVisibility() {                                                                 
 return this.css2.visibility;                                                             
}                                                                                         
                                                                                          
                                                                                          
                                                                                          
                                                                                          
                                                                                          
//****************************************************************************************
//                                                                                        
// Create the objects                                                                     
//                                                                                        
//****************************************************************************************
                                                                                          
                                                                                          
// For IE 4.x, pull all DIV blocks into object array                                      
function create_ie_objects() {                                                            
 theelements = document.all.tags("DIV");                                                  
 theobjs = new Array();                                                                   
 for (i = 0; i < theelements.length; i++){                                                
 if (theelements[i].id != "") {                                                           
 theobjs[theelements[i].id] = new ie_object(theelements[i]);                              
 }                                                                                        
 }                                                                                        
}                                                                                         
                                                                                          
// For Navigator 4.x, pull all DIV blocks into object array                               
function create_ns_objects(newarray) {                                                    
 theobjs = new Array();                                                                   
 for (i = 0; i < document.layers.length; i++){                                            
 if (document.layers[i].name != "")                                                       
 theobjs[document.layers[i].name] = new ns_object(document.layers[i]);                    
 }                                                                                        
}                                                                                         
                                                                                          
// For W3C DOM (Navigator 6.x, Mozilla, IE 6.x),                                          
// pull all named DIV blocks into an array                                                
function create_dom_objects() {                                                           
 theelements = document.getElementsByTagName("DIV");                                      
 theobjs = new Array();                                                                   
 for (i = 0; i < theelements.length; i++) {                                               
 var obj = theelements[i];                                                                
 if (obj.id != "")                                                                        
 theobjs[obj.id] = new dom_object(obj);                                                   
 }                                                                                        
}                                                                                         
                                                                                          
                                                                                          
function create_objects() {                                                               
                                                                                          
 // Internet Explorer 4.x, 5.x, 6.x                                                       
 if (navigator.appName == "Microsoft Internet Explorer")                                  
 create_ie_objects();                                                                     
 else // Navigator or Mozilla                                                             
 if (navigator.appName == "Mozilla" || navigator.appName == "Netscape")                   
 if (navigator.appVersion.indexOf("4.") == -1)                                            
 create_dom_objects();                                                                    
 else                                                                                     
 create_ns_objects();                                                                     
}                                                                                         