<!--
/* 
	DHTML Library Version 2.10
	Last Updated: December 5, 1999
	Copyright 1997-1999 by InsideDHTML.com, LLC
 	For more information on this library, see http://www.siteExperts.com
*/
      
// Begin Library
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
// -->
