<!--


/* 


	DHTML Library Version 2.10


	Last Updated: December 5, 1999


	Copyright 1997-1999 by InsideDHTML.com, LLC





	This file cannot be redistributed or sold as part of any package without 


	explicit consent from Scott Isaacs - scott@siteExperts.com


 


 	For more information on this library, see http://www.siteExperts.com





	This library is provided AS IS WITHOUT WARRANTY OF ANY KIND AND ARE PROVIDED 


	WITHOUT ANY IMPLIED WARRANTY OF FITNESS FOR PURPOSE, MERCHANTABILITY, 


	OR NON-INFRINGEMENT. 





	Due to the variable nature of the different Internet Client Object Models there are


	no guarantees this library will work AS IS in future releases of any browser.





	Unless prior arrangements are made with scotti@siteExperts.com, this file must be


	referenced as an external script by your web-pages. See the instructions for more 


	details.


         


	Registering 





	This library can be used on your web-site as long as you comply with the following requirements:


		1) The copyright notice and disclaimer must be maintained in the library file.


		2) You register your URL (or company with email address if non-public URL such as an intranet) 


		to DHTMLLibrary@siteExperts.com. Please state if you DO NOT want your web-site or company


		listed as using this library (Your e-mail addresses will never be given out).


		3) You include a link back to www.SiteExperts.com              





	Questions should be send to scotti@siteExperts.com.


	See http://www.siteExperts.com for more information.


  


	This comment must be maintained in the document unless prior arrangements are made 


	with scotti@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


// -->
