var sys = navigator.appName;
var vers = parseInt(navigator.appVersion);
var n4 = document.layers
var ie4Mac = (vers>=4) && (navigator.appVersion.indexOf("Mac")>-1) && (!n4)

// Track property changes in Netscape

function testScroll() {
 // For onscroll event
 // Initialize scrollbar cache if necessary
 if (window._pageXOffset==null) {
  window._pageXOffset = window.pageXOffset
  window._pageYOffset = window.pageYOffset
 }
 // Expose Internet Explorer compatible object model
 document.body.unwatch("scrollTop")
 document.body.unwatch("scrollLeft")
 document.body.scrollTop = window.pageYOffset
 document.body.scrollLeft = window.pageXOffset
 window.document.body.scrollHeight = document.height
 window.document.body.scrollWidth = document.width
 document.body.watch("scrollTop",CheckScrollTop)
 document.body.watch("scrollLeft",CheckScrollLeft)
 document.body.clientWidth = window.innerWidth-20;
 document.body.clientHeight = window.innerHeight-20;

 // If cache!=current values, call the onscroll event
 if (((window.pageXOffset!=window._pageXOffset) || (window.pageYOffset!=window._pageYOffset)) && (window.onscroll))
  window.onscroll()
 // Cache new values
 window._pageXOffset = window.pageXOffset
 window._pageYOffset = window.pageYOffset
}

function CheckScrollTop(prop,temp,newValue) {
 //window.pageYOffset = newValue
 return newValue
}

function CheckScrollLeft(prop,temp,newValue) {
 //window.pageXOffset= newValue
 return newValue
}

function CheckTopChange(prop,temp,newValue) {
 this.NSLayer.owningElement.offsetTop = this.NSLayer.top = newValue
 return newValue
}

function CheckLeftChange(prop,temp,newValue) {
 this.NSLayer.owningElement.offsetLeft= this.NSLayer.left = newValue
 return newValue
}

function CheckWidthChange(prop,temp,newValue) {
 this.NSLayer.owningElement.offsetWidth = this.NSLayer.clip.width = newValue
 return newValue
}

function CheckHeightChange(prop,temp,newValue) {
 this.NSLayer.owningElement.offsetHeight = this.NSLayer.clip.height = newValue
 return newValue
}

function CheckColorChange(prop,temp,newValue) {
 this.NSLayer.bgColor = newValue
 return newValue
}

function CheckClipChange(prop,temp,newValue) {
 var sText = newValue.substring(5)
 sText = sText.substring(0,sText.length-1)
 var aVal = sText.split(" ")
 this.NSLayer.clip.top = aVal[0]
 this.NSLayer.clip.width = aVal[1]
 this.NSLayer.clip.height = aVal[2]
 this.NSLayer.clip.left = aVal[3]
 return newValue
}

function CheckZIndexChange(prop,temp,newValue) {
 this.NSLayer.zIndex = newValue
 return newValue
}

function CheckContentChange(prop,temp,newValue) {
 this.NSLayer.document.open()
 this.NSLayer.document.write(newValue)
 this.NSLayer.document.close()
 this.NSLayer.document.owningElement = this.NSLayer.owningElement = this
 _extract(this.NSLayer, true)
 return newValue
}

function CheckVisibilityChange(prop,temp,newValue) {
 if (newValue=="hidden")
  this.NSLayer.visibility = "hide";
 else if (newValue=="visible")
  this.NSLayer.visibility = "show";
 else if (newValue=="inherit")
  this.NSLayer.visibility = "inherit";
 else
  this.NSLayer.visibility = "";
 return newValue
}

/* BEGIN CORE CODE TO BUILD OBJECT MODEL */
function CheckContains(el) {
 return (el==this)
}

function _getInputTagName(type) {
 var sName
 if (type=="textarea")
  sName = "TEXTAREA"
 else if (type=="select-one")
  sName = "SELECT"
 else if (type=="select-multiple")
  sName = "SELECT"
 else
  sName = "INPUT"
 return sName
}

function _appendAll(obj, el, sName) {
 obj.all[sName] = el
 while (obj.offsetParent) {
  obj = obj.offsetParent
  obj.all[sName] = el
 }
}

function _extractRoot(obj, par) {
 for (var intLoop = 0; intLoop< obj.images.length; intLoop++) {
  var i = obj.images[intLoop]
  i.offsetParent = par
  i.offsetLeft = i.x
  i.offsetTop = i.y
  i.offsetWidth = i.width
  i.offsetHeight = i.height
  i.tagName = "IMG"
  i.contains = CheckContains
  if (""!=i.name) {
   window.document.all[i.name] = i
// window.document.images[i.name] =
   if (obj.owningElement) _appendAll(obj.owningElement, i, i.name)
  }
 }

 for (var intLoop = 0; intLoop< obj.anchors.length; intLoop++) {
  var i = obj.anchors[intLoop]
  i.contains = CheckContains
  i.offsetWidth=i.offsetHeight=0
  if (""!=i.name) {
   window.document.all[i.name] = i
   if (obj.owningElement) _appendAll(obj.owningElement, i, i.name)
  }
//   window.document.anchors[obj.anchors[intLoop].name] = obj.anchors[intLoop]
  obj.anchors[intLoop].offsetParent = par
 }

 for (var intLoop = 0; intLoop< obj.links.length; intLoop++) {
  var i=obj.links[intLoop]
  i.offsetWidth=0;i.offsetHeight=20
  i.contains = CheckContains
  i.innerText = obj.links[intLoop].text
  i.offsetParent = par
  i.offsetLeft = obj.links[intLoop].x
  i.offsetTop = obj.links[intLoop].y
 }

 for (var intLoop = 0; intLoop< obj.forms.length; intLoop++) {
  obj.forms[intLoop].offsetParent = par
  var sName = obj.forms[intLoop].name
  obj.forms[intLoop].tagName = "FORM"
  if (""!=sName) {
   window.document.all[sName] = obj.forms[intLoop]
   if (obj.owningElement) _appendAll(obj.owningElement, obj.forms[intLoop], sName)
  }
  for (var intElements = 0; intElements < obj.forms[intLoop].length; intElements++) {
   var i = obj.forms[intLoop][intElements]
   var sName = i.name
   i.offsetParent = par
   i.tagName = _getInputTagName(i.type)
   if (""!=sName) {
    window.document.all[sName] = i
    if (obj.owningElement) _appendAll(obj.owningElement, i, sName)
//     obj.owningElement.all[sName] = window.document.all[sName]
   }
  }
 }
 if (obj.owningElement) {
  var sName = obj.owningElement.id
  window.document.all[sName] = obj.owningElement
  _appendAll(obj.owningElement.offsetParent, obj.owningElement, sName)
 }
}

function _extract(obj, bRefresh) {
 /* This creates the all collection when run in Netscape and
    promotes the nested name spaces in Netscape to the top-level collection.
    The length property is not updated for the built-in collections */
 // This function is called recursively for nested layers

// Add walk up tree to add to collections code... ugh
 obj.document.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.MOUSEMOVE | Event.KEYDOWN | Event.KEYPRESS | Event.KEYUP)
 obj.document.onmousedown = _NSLayerBubbling;
 obj.document.onmouseup = _NSLayerBubbling;
 obj.document.onmousemove = _NSLayerBubbling;
 obj.document.onkeydown = _NSLayerBubbling;
 obj.document.onkeypress = _NSLayerBubbling;
 obj.document.onkeyup = _NSLayerBubbling;
 obj.document._type = "document" // internal variable to track state
 // Hookup event handlers to establish event bubbling.
 if (bRefresh==null) {
  if (""!=obj.id)
   document.all[obj.id] =  new Object
  var newEl = document.all[obj.id]
  newEl.all = new Object
  obj.document.owningElement= obj.owningElement = newEl
  newEl.id = obj.id
  newEl.style = new Object
  newEl.NSLayer = newEl.style.NSLayer = obj
  newEl.offsetTop = parseInt(obj.top)
  newEl.offsetLeft = parseInt(obj.left)
  obj._type = "layer" // internal variable
  if (obj.parentLayer.owningElement!=null)
   newEl.offsetParent = obj.parentLayer.owningElement
  else
   newEl.offsetParent = document.body
  newEl.style.pixelTop = parseInt(obj.top)
  newEl.style.pixelLeft = parseInt(obj.left)
  if (null!=obj.clip) {
   newEl.style.pixelWidth = obj.clip.width   // estimation
   newEl.style.pixelHeight = obj.clip.height
  }
  newEl.style.clip = "rect(" + obj.clip.top + " " + obj.clip.width + " " + obj.clip.height + " " + obj.clip.left + ")"
  newEl.offsetWidth = newEl.style.pixelWidth  // estimation
  newEl.offsetHeight = newEl.style.pixelHeight
  newEl.contains = CheckContains;
  if (obj.visibility=="hide")
   newEl.style.visibility = "hidden";
  else if (obj.visibility=="show")
   newEl.style.visibility = "visible";
  else if (obj.visibility=="inherit")
   newEl.style.visibility = "inherit";
  else
   newEl.style.visibility = "";
  newEl.style.zIndex = obj.zIndex
  newEl.style.backgroundColor = obj.bgColor;
  newEl.style.backgroundImage = "url("+obj.background+")";

  newEl.innerHTML = ""

  newEl.style.watch("visibility",CheckVisibilityChange)
  newEl.style.watch("pixelTop",CheckTopChange)
  newEl.style.watch("pixelLeft",CheckLeftChange)
  newEl.style.watch("pixelWidth",CheckWidthChange)
  newEl.style.watch("pixelHeight",CheckHeightChange)
  newEl.style.watch("backgroundColor",CheckColorChange)
  newEl.style.watch("zIndex",CheckZIndexChange)
  newEl.style.watch("clip",CheckClipChange)
  newEl.watch("innerHTML",CheckContentChange)
 }
 _extractRoot(obj.document,newEl)

 for (var intLayer = 0; intLayer< obj.document.layers.length; intLayer++)
  _extract(obj.document.layers[intLayer])  // Nested layers, go get them.

}

function _NSLayerBubbling(ev) {
 // Bubble through any positioned elements.
 this.routeEvent(ev);
 // Fire on positioned element
 if (!window.event.cancelBubble)
  if (null!=this.owningElement["on"+ev.type]) this.owningElement["on"+ev.type]()
}

function _NSBubbling(ev) {
 // This simulates very simple event bubbling in Netscape
 // Create the event object on the window.
 window.event = ev;
 // Initialize properties on the event object
 window.event.cancelBubble = false;
 window.event.button = ev.which
 window.event.keyCode = ev.which
 window.event.type = ev.type
 if ((ev.type=="focus") || (ev.type=="blur")) return false
 // Get the "synthesized" element if it fired the event.
 var el = null;
 if ("document"==ev.target._type)
  el = ev.target.owningElement.id
 else
  el = ev.target.id
 if ((el!=null) && (el!="")) {
  el = document.all[el]
  window.event.srcElement = el
 } else {
  if (ev.target!=null) {
   window.event.srcElement=ev.target
  }
  else
   ev.target=null
 }
 window.event.returnValue = true
 window.event.clientX = ev.pageX - window.pageXOffset
 window.event.clientY = ev.pageY - window.pageYOffset
 window.event.offsetX = ev.layerX
 window.event.offsetY = ev.layerY
 window.event.screenX = ev.screenX
 window.event.screenY = ev.screenY
 window.event.altKey = (ev.modifiers & Event.ALT_MASK) ? true : false
 window.event.ctrlKey = (ev.modifiers & Event.CONTROL_MASK) ? true : false
 window.event.shiftKey = (ev.modifiers & Event.SHIFT_MASK) ? true : false
 window.event.NSEvent = ev;
 if ((ev.target._type=="layer") && ((ev.type=="mouseover") || (ev.type=="mouseout")))  {
  // Special handling to bubble over and out events on layers
  var elLoop = ev.target.document.owningElement
  while (elLoop!=null) {
   if (!window.event.cancelBubble)
    if (elLoop["on"+ev.type]!=null) elLoop["on"+ev.type]()
     elLoop = elLoop.offsetParent;
  }
 }
 // Send this event onward...
 // Make sure to wire event return values
 var bCancel = window.routeEvent(ev);
 if (typeof bCancel=="boolean")
  window.event.returnValue = bCancel
 else
  bCancel = window.event.returnValue

 // Bubble but do not fire document events twice
 if ((ev.target!=window.document) && (!window.event.cancelBubble))
  if (typeof document["on"+ev.type]=="function") bCancel = document["on"+ev.type]()
 if (typeof bCancel=="boolean")
  window.event.returnValue = bCancel
 return (window.event.returnValue)
}

function _setupBubbling() {
 // Setup event bubbling from the source ot the document.
 window.captureEvents(Event.CLICK | Event.MOUSEMOVE | Event.CLICK | Event.DBLCLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.MOUSEOUT | Event.MOUSEOVER | Event.KEYDOWN | Event.KEYUP | Event.KEYPRESS | Event.FOCUS | Event.BLUR)
 window.onclick = _NSBubbling;
 window.ondblclick = _NSBubbling;
 window.onmousemove = _NSBubbling;
 window.onmouseover = _NSBubbling;
 window.onmouseout = _NSBubbling;
 window.onmousedown = _NSBubbling;
 window.onmouseup = _NSBubbling;
 window.onkeydown = _NSBubbling;
 window.onkeypress = _NSBubbling;
 window.onkeyup = _NSBubbling;
 window.onfocus = _NSBubbling;
 window.onblur = _NSBubbling;
}

function MacScroll() {
 // Add IE Mac onscroll Support
 if ((document.body.oldScrollTop!=document.body.scrollTop) || (document.body.oldScrollLeft!=document.body.scrollLeft))
  if (window.onscroll)
   window.onscroll()
 document.body.oldScrollTop = document.body.scrollTop
 document.body.oldScrollLeft = document.body.scrollLeft
}

/* The setup() function - This must be called in the onload event of the document */
function setup() {
 if (4>vers) return;  // Can't help old browsers
 if (ie4Mac)
  setInterval("MacScroll()",50)
 if ("Netscape"==sys) {
  document.all = null;
  document.all = new Array;
  document.body = new Object;
  document.body.clientWidth = window.innerWidth-20; document.body.clientHeight = window.innerHeight-20
  document.body.scrollTop = window.pageXOffset; document.body.scrollLeft = window.pageYOffset
  document.body.watch("scrollTop",CheckScrollTop)
  document.body.watch("scrollLeft",CheckScrollLeft)
  document.body.offsetParent = null
  document.body.offsetLeft = document.body.offsetTop = 0
  document.body.all = new Object
  document.parentWindow = window
  _extractRoot(document,document.body)

  for (var intLayer = 0; intLayer< document.layers.length; intLayer++) {
   _extract(document.layers[intLayer])  // Nested layers, go get them.
  }

  _setupBubbling();
  testScroll()
  setInterval("testScroll()",50)
  document.readyState = "complete"
 }
 return
}
window.onload = setup; // Initialize when loaded
if ("Netscape"==sys)
 document.readyState = "loading"

// DHTMLLib2.js Copyright 1997-2000 by InsideDHTML.com, LLC.
// http://www.SiteExperts.com
// -->


<!--
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}
//-->
<!--

 function shake_xy(n) {
 if (self.moveBy) {
  for (i = n; i > 0; i--) {
   self.moveBy(0,i);
   self.moveBy(i,0);
   self.moveBy(0,-i);
   self.moveBy(-i,0);
       }
    }
 }
-->
