
	var ns = (document.layers != null) ? true : false;
	var ie = (document.all) ? true : false;
	var dom = (document.getElementById) ? true : false;
	
	var doDebug = false;

	function getDivReference(theDivID)
	{
		if(ns) {
			var obj = document.layers[theDivID];
		}
		if (ie || dom) {
			var obj =  (dom) ? document.getElementById(theDivID) : document.all[theDivID];
		}
		return obj;

	}
	
	function hideCommandDiv(theDivID) { 
		if(ns) {
			var obj = document.layers[theDivID];
			var hiddenObj = document.layers["hidden_" + theDivID];
			if (obj.innerHTML != "") {
				hiddenObj.innerHTML = obj.innerHTML;
				obj.innerHTML = "";
			}
		}
		if (ie || dom) {
			var obj =  (dom) ? document.getElementById(theDivID) : document.all[theDivID];
			if (obj) {
			//var hiddenObj = (dom) ? document.getElementById("hidden_" + theDivID) : document.all["hidden_" + theDivID];
			//if (obj.innerHTML != "") {
			//	hiddenObj.innerHTML = obj.innerHTML;
				//obj.innerHTML = "";
				//obj.style.height = '0px';
				obj.style.display = 'none';
			//}
			}
		}
	}

	function showCommandDiv(theDivID) { 
		if(ns) {
			var obj = document.layers[theDivID];
			var hiddenObj = document.layers["hidden_" + theDivID];
			if (hiddenObj.innerHTML != "") {
				obj.innerHTML = hiddenObj.innerHTML;
				hiddenObj.innerHTML = "";
			}
		}
		if (ie || dom) {
			var obj =  (dom) ? document.getElementById(theDivID) : document.all[theDivID];
			if (obj) {
			//var hiddenObj = (dom) ? document.getElementById("hidden_" + theDivID) : document.all["hidden_" + theDivID];
			//if (hiddenObj.innerHTML != "") {
				obj.style.display = 'block';
				//obj.innerHTML = hiddenObj.innerHTML;
				//hiddenObj.innerHTML = "";
			//}
			}
		}
	}
	function hideDiv(theDivID) { 
		if(ns) {
			var obj = document.layers[theDivID];
			obj.visibility = 'hide'; 
		}
		if (ie || dom) {
			var obj =  (dom) ? document.getElementById(theDivID) : document.all[theDivID];

			obj.style.visibility = 'hidden';
			//obj.style.height = '0px';
			DivSetVisible(theDivID, false);
		}
	}

  function DivSetVisible(divID, state)
  {
   var DivRef = document.getElementById(divID);
   var parentDivRef = DivRef.parentElement;
   var IfrRef = document.getElementById('divpopupiframe');
   if (IfrRef != null) {
	if(state)
	{
		if (parentDivRef != null && parentDivRef.nodeName.toLowerCase() != "form") {
			// ZINDEX IS MESSED UP
//			IfrRef.style.top = parseInt(DivRef.style.top) + parseInt(parentDivRef.style.top) + "px";
//			IfrRef.style.left = parseInt(DivRef.style.left) + parseInt(parentDivRef.style.left) + "px";
		}
		else {
			IfrRef.style.top = DivRef.style.top;
			IfrRef.style.left = DivRef.style.left;
			IfrRef.style.width = DivRef.offsetWidth + 4;
			IfrRef.style.height = DivRef.offsetHeight + 4;
			IfrRef.style.zIndex = DivRef.style.zIndex - 1;
			IfrRef.style.display = "block";
		}
	}
	else
	{
		IfrRef.style.display = "none";
	}
   }
  }

	function showDiv(theDivID) { 
		if(ns) {
			var obj = document.layers[theDivID];
			obj.visibility = 'show';
		}
		if (ie || dom) {
			var obj =  (dom) ? document.getElementById(theDivID) : document.all[theDivID];
			obj.style.visibility = 'visible';
			DivSetVisible(theDivID, true);
		}
	}
	
	function printDiv(theDivID) {
	
		var html = document.getElementById(theDivID).innerHTML;
		var printWin = window.open("","printSpecial");
		printWin.document.open();
		printWin.document.write('<head><link href="include/style.css" rel="stylesheet" type="text/css"></head>');
		printWin.document.write(html); 
		printWin.document.close();
		printWin.print();
		printWin.close();

	}

	var moveElement = null;
	var lastX = 0;
	var lastY = 0;
	function moveElement_start(theElement) {
		moveElement = theElement.parentNode.parentNode;
		lastX = event.clientX;
		lastY = event.clientY;
	}
	function moveElement_release(theElement) {
	    moveElement = null;
	}
	function moveElement_move(theElement) {
	    if (moveElement != null) {
			// alert(parseInt(moveElement.style.left) + (event.clientX - lastX));
			//alert(moveElement.offsetLeft + 1);
			moveElement.style.left = parseInt(moveElement.style.left) + (event.clientX - lastX);
			moveElement.style.top = parseInt(moveElement.style.top) + (event.clientY - lastY);
			//moveElement.offsetTop += (event.clientY - lastY);
			lastX = event.clientX;
			lastY = event.clientY;
			return cancelEvent();
		}
	}

	var defaultHighlightColor = '#D0E0FF';
	
	function highlightRow(theTR) 
	{
		theTR.style.backgroundColor = defaultHighlightColor;
		return;
	}
	
	function unhighlightRow(theTR) 
	{
		theTR.style.backgroundColor = '';
		return;
	}
	
	function cancelEvent(evt) 
	{
		var theEvent = (window.event || evt);	
		if (theEvent) {
			theEvent.cancelBubble = true;
		}
		
		return false;
	}
	
	function showPleaseWait(blockInput) {
		if(blockInput && (ie || dom)) {
			showDiv("overlaywhiteout");
		}
		showDiv("popupPleaseWait");
	}
	
	function submitD3iForm() {
		showPleaseWait(true);
		document.d3i.submit();
	}
	
	function setFieldAndPostback(theField, theValue) 
	{
		document.d3i.elements[theField].value = theValue;
		document.d3i.submit();
	}

	function fancyCheckboxClicked(formObj, imgObj, postUpdateFunction) 
	{
		if (formObj.value == '') {
			formObj.value = '1';
			imgObj.src = imgObj.src.replace('.gif','_checked.gif'); // \"images/checkbox_16x16_checked.gif\";
		}
		else {
			formObj.value = '';
			imgObj.src = imgObj.src.replace('_checked.gif', '.gif'); // \"images/checkbox_16x16.gif\";
		}
		if (postUpdateFunction != '') {
			eval(postUpdateFunction);
		}
	}

	// function y2k(int number) 
	// Returns the y2k-compatible year. If number has 2 digits, 19xx is returned, otherwise number is returned.
	function y2k(number) { 
		return (number < 1000) ? number + 1900 : number; 
	}

	function myParseDateYYYYMMDD(strDate) {
		if (!verifyYYYYMMDD(strDate)) {
			return null;
		}
		else {
			var year  = strDate.substr(0,4) - 0;
			var month = strDate.substr(5,2) - 1;
			var day   = strDate.substr(8,2) - 0;

			return new Date(year,month,day);
			
		}
	}

	function formatYYYYMMDD(theDate) {
		var year  = theDate.getFullYear();
		var month = theDate.getMonth() + 1;
		var day   = theDate.getDate();
			
		return year + "-" + (month < 10 ? "0" : "") + month + "-" + (day < 10 ? "0" : "") + day;
	}

	// function verifyYYYYMMDD(string strDate)
	// Checks if theString is an invalid YYYY-MM-DD date. If the boolFutureDate flag is set, the date must be a future date.
	// Returns: false if invalid date, true otherwise.
	function verifyYYYYMMDD(strDate, boolFutureDate) 
	{
		if (strDate.length != 10) return false;
		if (strDate.substr(4,1) != "-") return false;
		if (strDate.substr(7,1) != "-") return false;

		var year  = strDate.substr(0,4) - 0;
		var month = strDate.substr(5,2) - 1;
		var day   = strDate.substr(8,2) - 0;

		var test = new Date(year,month,day);
	
		if ((y2k(test.getYear()) == year) &&
			(month == test.getMonth()) &&
			(day == test.getDate()) ) {
			// Check if date is before today
			if (boolFutureDate && test < (new Date((new Date()).valueOf() - 86400000))) {
				return false;
			}
			return true;
		}
		else {
			return false;
		}
	}

	// function verifyYYYYMMDD(string strDate)
	// Checks if theString is an invalid YYYY-MM-DD HH:MM date/time. If the boolFutureDate flag is set, the date must be a future date.
	// Returns: false if invalid date, true otherwise.
	function verifyYYYYMMDDHHMM(strDate, boolFutureDate) 
	{
		if (verifyYYYYMMDD(strDate, boolFutureDate)) {
			return true;
		}
		if (strDate.length != 16) return false;
		if (strDate.substr(4,1) != "-") return false;
		if (strDate.substr(7,1) != "-") return false;
		if (strDate.substr(10,1) != " ") return false;
		if (strDate.substr(13,1) != ":") return false;

		var year  = strDate.substr(0,4) - 0;
		var month = strDate.substr(5,2) - 1;
		var day   = strDate.substr(8,2) - 0;
		var hour  = strDate.substr(11,2) - 0;
		var minute  = strDate.substr(14,2) - 0;

		var test = new Date(year,month,day);
		test.setHours(hour);
		test.setMinutes(minute);
	
		if ((y2k(test.getYear()) == year) &&
			(month == test.getMonth()) &&
			(day == test.getDate())  &&
			(hour == test.getHours())  &&
			(minute == test.getMinutes()) ) {
			// Check if date is before today
			if (boolFutureDate && test < (new Date((new Date()).valueOf() - 86400000))) {
				return false;
			}
			return true;
		}
		else {
			return false;
		}
	}


	// function verifyInputNonEmptyString(input theInput, string errorMsg)
	// Checks if the form field theInput is empty and, if so, alerts errorMsg and puts theInput in focus.
	// Returns: false if empty, true otherwise.
	function verifyInputNonEmptyString(theInput, errorMsg) 
	{
		if (theInput.value == '') {
			theInput.focus();
			if (errorMsg != '') alert(errorMsg);
			return false;
		}
		return true;
	}
	
	// function verifyInputYYYYMMDD(input theInput, string errorMsg)
	// Checks if the form field theInput is an invalid YYYY-MM-DD date, if so, alerts errorMsg and puts theInput in focus.
	// Returns: false if invalid date, true otherwise.
	function verifyInputYYYYMMDD(theInput, errorMsg) 
	{
		if (!verifyYYYYMMDD(theInput.value, false)) {
			theInput.focus();
			if (errorMsg != '') alert(errorMsg);
			return false;
		}
		return true;
	}
	
	function verifyInputFutureDate(theInput, errorMsg) 
	{
		if (!verifyYYYYMMDD(theInput.value, true)) {
			theInput.focus();
			if (errorMsg != '') alert(errorMsg);
			return false;
		}
		return true;
	} 
	
	function verifyNumeric(strNumber) 
	{
		return verifyNumericInternal(strNumber, false);
	}
	
	function verifyNumericInternal(strNumber, boolInteger) 
	{
		// only allow 0-9 be entered, plus any values passed
		// (can be in any order, and don't have to be comma, period, or hyphen)
		// if all numbers allow commas, periods, hyphens or whatever,
		// just hard code it here and take out the passed parameters
		var comma = ",.";

		if (boolInteger) comma = "";

		var checkOK = "0123456789" + comma;
		//var checkStr = objName;
		var allValid = true;
		var decPoints = 0;
		var allNum = "";

		for (i = 0;  i < strNumber.length;  i++)
		{
			ch = strNumber.charAt(i);
			for (j = 0;  j < checkOK.length;  j++)
				if (ch == checkOK.charAt(j))
					break;
			if (j == checkOK.length)
			{
				allValid = false;
				break;
			}
			if (ch != " ")
				allNum += ch;
		}
		if (!allValid)
		{	
			return (false);
		}

		return true;	
	}
	
	function verifyInputNumericValue(theInput, errorMsg) 
	{
		if (!verifyNumber(theInput.value)) {
			theInput.focus();
			if (errorMsg != '') alert(errorMsg);
			return false;
		}
		return true;
	}	
	
    function verifyEmail(emailStr) 
    {
		var emailPat=/^(.+)@(.+)$/;
		var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
		var validChars="\[^\\s" + specialChars + "\]";
		var quotedUser="(\"[^\"]*\")";
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
		var atom=validChars + '+';
		var word="(" + atom + "|" + quotedUser + ")";
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

		var matchArray=emailStr.match(emailPat);
		if (matchArray==null) {
			return false;
		}
		var user=matchArray[1];
		var domain=matchArray[2];

		if (user.match(userPat)==null) {
			return false;
		}

		var IPArray=domain.match(ipDomainPat);
		if (IPArray!=null) {
			for (var i=1;i<=4;i++) {
				if (IPArray[i]>255) {
					return false;
				}
			}
			return true;
		}

		var domainArray=domain.match(domainPat)
		if (domainArray==null) {
			return false;
		}

		var atomPat=new RegExp(atom,"g");
		var domArr=domain.match(atomPat);
		var len=domArr.length;
		if (domArr[domArr.length-1].length<2 || 
			domArr[domArr.length-1].length>3) {
			return false;
		}

		if (len<2) {
			return false;
		}
			return true;
		}
	

	
	//Default browsercheck, added to all scripts!
	function checkBrowser(){
		this.ver=navigator.appVersion;
		this.browser=navigator.appName;
		this.dom=document.getElementById?1:0
		this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
		this.ie4=(document.all && !this.dom)?1:0;
		this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
		this.ns4=(document.layers && !this.dom)?1:0;
		this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5);
		this.ns6=(this.browser.indexOf("Netscape")>-1 && this.dom)?1:0;
		return this;
	}
	bw=new checkBrowser();
	
	// SCROLL
	
	/*********************************************************************************
	These are the variables you have to set:
	*********************************************************************************/
	
	var nrOfScrollObjs = 0;
	var oScroll=new Array();
	var scrollContainers=new Array();
	var scrollNames = new Array();
	var scrollBars = new Array();
	var scrollBarMaxs = new Array();
	var activeScrollObj = null;	
	var activeScrollContainer = null;	
	var activeScrollBar = null;
	var activeBarMax = 0;

	
	//The speed of the timeout between each scroll.
	timSpeed=50;
	timPageSpeed=100;
	
	//The height of the container (change this when it scrolls to much or to little)
	contHeight=400;
	
	/*********************************************************************************
	This is the object constructor function, which applies 
	methods and properties to the Cross-browser layer object
	*********************************************************************************/
	function makeScrollObj(obj,nest){
		var i;
	
		this.el=bw.dom?document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?((!nest)?document.layers[obj]:document.layers[nest].document.layers[obj]):0;
		this.css=bw.dom?document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?((!nest)?document.layers[obj]:document.layers[nest].document.layers[obj]):0;		
		this.height=bw.ns4?this.css.document.height:this.el.offsetHeight;
		this.width=bw.ns4?this.css.document.width:this.el.offsetWidth;
		this.top=b_gettop;							
		this.left=b_getleft;										
		return this;
	}
	//Getting the top for the top method
	function b_gettop(){
		var gleft;
		if (bw.ns4 || bw.ns5) {
//			alert(this.el.id);
//  		alert(this.css.top);
			gleft = this.css.top;
		}
		else {
			if (bw.ns6) {
				gleft = eval(this.css.top);
			}
			else {
				gleft = eval(this.css.pixelTop);
			}
		}
//		var gleft=((bw.ns4 || bw.ns5) ? eval(this.css.top) : ((bw.ns6) ? eval(this.css.top) : eval(this.css.pixelTop)));
//		var gleft=((bw.ns4 || bw.ns5) ? eval(this.css.top) : ((bw.ns6) ? eval(this.css.top) : eval(this.css.pixelTop)));
		return gleft;
	}
	//Getting the left for the left method
	function b_getleft(){
		var gleft=((bw.ns4 || bw.ns5) ? eval(this.css.left) : ((bw.ns6) ? eval(this.css.left) : eval(this.css.pixelLeft)));
		return gleft;
	}
	//Variables
	var scrollTim;
	var scrollPageTim;
	var active=0;
	var scrollNum = 0;
	
	function moveScrollBar(scrollArea, scrollContainer, theScrollBar) 
	{
		if (theScrollBar == null) return;
		var totHeight = scrollArea.height;
		var visibleHeight = scrollContainer.height;
		var barOffset = (visibleHeight - activeBarMax) / 2;
		var barPos;
		
		barPos = (((-activeScrollObj.top()*activeBarMax))/(totHeight))+barOffset;
//		barPos = ((-oScroll[active].top()*barMax))/(totHeight+visibleHeight-contHeight)+barOffset;
		
		if (!isNaN(barPos)) {
			theScrollBar.css.top = barPos;
		}
		//alert(barPos);
		return;			
	}
	
	function resizeScrollBar(scrollArea, scrollContainer, theScrollBar) {

		if (theScrollBar == null) return;
		// if (doDebug) alert('resizing scrollbar');
 		var totHeight = scrollArea.height;
		var visibleHeight = scrollContainer.height
		var barMax = activeBarMax;
		var barHeight;
		barHeight = ((visibleHeight)*barMax)/(totHeight);
//		barHeight = ((visibleHeight)*barMax)/(totHeight+visibleHeight-contHeight);
		if (barHeight > barMax) {
			barHeight = barMax;
		}
		theScrollBar.height = barHeight;
		var scrollbarimg;
		if (bw.ns4) {
			scrollbarimg = document.layers["divScrollBar"].document.images["scrollbar"];
		}
		else {
			scrollbarimg = document.images["scrollbar"]; // FIX THIS TO ALLOW MORE SCROLLBARS THAN ONE!
		}

		scrollbarimg.height = barHeight;
		moveScrollBar(scrollArea, scrollContainer, theScrollBar);
		return;			
	}

	var mouseDragging = false;
	var mouseY = 0;
	
	function startMouseDrag(evt) {
		var theEvent = (window.event || evt);
		mouseY = theEvent.clientY;
		mouseDragging = true;
	}
	
	function endMouseDrag() {
		mouseDragging = false;
	}
	
	function mouseDrag(evt) {
		if (mouseDragging) {
			var totHeight = activeScrollObj.height;
			var visibleHeight = activeScrollContainer.height
			var barMax = activeBarMax;
			var barOffset = (visibleHeight - activeBarMax) / 2;
			var barPos = activeScrollBar.top();
			var pageScroll;
			var theEvent = (window.event || evt);
			newY = theEvent.clientY;			
//			alert(barPos + " " + newY + " " + mouseY );
			barPos = parseInt(barPos) + (newY-mouseY);
			if (barPos < barOffset) {
				barPos = barOffset;
			}
	
			if (barPos > barOffset + barMax - activeScrollBar.height) {
				barPos = barOffset + barMax - activeScrollBar.height;
			}
			
			pageScroll = -((barPos-barOffset) * totHeight) / barMax;
//			alert(barPos + ' ' + barOffset + ' ' + totHeight + ' ' + barMax);
//			alert('5' + activeScrollObj.el.id + ' ' + activeScrollObj.css.top + ' ' + pageScroll);
			
			activeScrollObj.css.top = '' + pageScroll + 'px';
//			alert('6');
			activeScrollBar.css.top = barPos;			
//			alert('7');
			//alert(barPos);
			mouseY = newY;
			theEvent.cancelBubble = true;
			theEvent.preventDefault();
			return false;	
		}
	}
	
	
	/*********************************************************************************
	Shows the scrollControl if scrollArea is bigger than the scrollContainer
	*********************************************************************************/
	function showScrollIfNeeded(scrollArea, scrollContainer, scrollControl, scrollBar) {
		showScrollIfNeeded(scrollArea, scrollContainer, scrollControl, scrollBar, false)
	}
	// NOTE: If forceVisible is set, be sure to hide the scrollControl and scrollBar 
	// manually if the scrollbar is in a popup when the popup is closed.
	function showScrollIfNeeded(scrollArea, scrollContainer, scrollControl, scrollBar, forceVisible) {
		// alert(scrollArea.height + " " + scrollContainer.height);
		// alert(scrollArea.width + " " + scrollContainer.width);
		if (scrollArea.height > scrollContainer.height || scrollArea.width > scrollContainer.width) {
			if (forceVisible) {
				scrollControl.css.visibility = "visible";
				if (scrollBar != null) {
					scrollBar.css.visibility = "visible";
				}
			}
		}
		else if (scrollContainer.height != 0 || scrollContainer.width != 0) {
			scrollControl.css.visibility = "hidden";
			if (scrollBar != null) {
				scrollBar.css.visibility = "hidden";
			}
		}
		
	}
	
	function scrolluphilight() {
		if (bw.ns4) {
			scrollimg = document.layers["divScroll"].document.images["imgscrollup"];
		}
		else {
			scrollimg = document.images["imgscrollup"];
		}
		scrollimg.src = "../images/scrollup_hilight.gif"
	}
	
	function scrollupunhilight() {
		if (bw.ns4) {
			scrollimg = document.layers["divScroll"].document.images["imgscrollup"];
		}
		else {
			scrollimg = document.images["imgscrollup"];
		}
		scrollimg.src = "../images/scrollup.gif"
	}
	function scrolldownhilight() {
		if (bw.ns4) {
			scrollimg = document.layers["divScroll"].document.images["imgscrolldn"];
		}
		else {
			scrollimg = document.images["imgscrolldn"];
		}
		scrollimg.src = "../images/scrolldown_hilight.gif"
	}
	
	function scrolldownunhilight() {
		if (bw.ns4) {
			scrollimg = document.layers["divScroll"].document.images["imgscrolldn"];
		}
		else {
			scrollimg = document.images["imgscrolldn"];
		}
		scrollimg.src = "../images/scrolldown.gif"
	}
	
	/*********************************************************************************
	The scroll function. Checks what way to scroll and checks if the
	layer is not already on top or bottom.
	*********************************************************************************/
	function scroll(divToScroll, divContainer, speed, maxheight, theImage){
		setActiveScrollObj(divToScroll);
		var currentTop;
		if (bw.ns6) {
			if (activeScrollObj.css.top == "") {
				currentTop = 0;
			}
			else {
				currentTop = parseInt(activeScrollObj.css.top);
			}	
		}
		else {
			currentTop = activeScrollObj.top();
		}
		if (!scrollTim) {
			scrollNum=0;
			var scrollimg;
			if (speed > 0) {
				scrollimg = theImage;
/*				if (bw.ns4) {
					scrollimg = document.layers["divScroll"].document.images["imgscrollup"];
				}
				else {
					scrollimg = document.images["imgscrollup"];
				}
*/
				scrollimg.src = "images/scrollup_hilight.gif" // up
			}
			else {
				scrollimg = theImage;
/*				if (bw.ns4) {
					scrollimg = document.layers["divScroll"].document.images["imgscrolldn"];
				}
				else {
					scrollimg = document.images["imgscrolldn"];
				}
*/
				scrollimg.src = "images/scrolldown_hilight.gif"; // down
			}
		}
		scrollNum++;
		clearTimeout(scrollTim)
		way=speed>0?1:0
		if((!way && currentTop>-activeScrollObj.height+maxheight) || (currentTop<0 && way)){
			activeScrollObj.css.top=(currentTop+speed*12);
			scrollTim=setTimeout("scroll('" + divToScroll + "', '" + divContainer + "', " + speed + ", " + maxheight + ", null)",timSpeed)
		}
		
		moveScrollBar(activeScrollObj, activeScrollContainer, activeScrollBar);
	}
	/*********************************************************************************
	The hscroll function. Checks what way to scroll and checks if the
	layer is not already on top or bottom. SCROLLS HORIZONTALLY
	*********************************************************************************/
	function hscroll(divToScroll, divContainer, speed, maxwidth, theImage){
		setActiveScrollObj(divToScroll);
		var currentLeft;
		if (bw.ns6) {
			if (activeScrollObj.css.left == "") {
				currentLeft = 0;
			}
			else {
				currentLeft = parseInt(activeScrollObj.css.left);
			}	
		}
		else {
			currentLeft = activeScrollObj.left();
		}
		if (!scrollTim) {
			scrollNum=0;
			var scrollimg;
			if (speed > 0) {
				scrollimg = theImage;
/*				if (bw.ns4) {
					scrollimg = document.layers["divScroll"].document.images["imgscrollup"];
				}
				else {
					scrollimg = document.images["imgscrollup"];
				}
*/
				scrollimg.src = "images/scrollleft_hilight.gif" // up
			}
			else {
				scrollimg = theImage;
/*				if (bw.ns4) {
					scrollimg = document.layers["divScroll"].document.images["imgscrolldn"];
				}
				else {
					scrollimg = document.images["imgscrolldn"];
				}
*/
				scrollimg.src = "images/scrollright_hilight.gif" // down
			}
		}
		scrollNum++;
		clearTimeout(scrollTim)
		way=speed>0?1:0
		if((!way && currentLeft>-activeScrollObj.width+maxwidth) || (currentLeft<0 && way)){
			activeScrollObj.css.left=(currentLeft+speed*12);
			scrollTim=setTimeout("hscroll('" + divToScroll + "', '" + divContainer + "', " + speed + ", " + maxwidth + ", null)",timSpeed)
		}
	}
	
	//Clears the timeout so the scroll stops, this is called onmouseout.
	function noScroll(divToScroll, divContainer, speed, theImage){
		clearTimeout(scrollTim);
		clearTimeout(scrollPageTim);
		scrollTim = null;
		var scrollimg = theImage;
/*		if (bw.ns4) {
			scrollimg = document.layers["divScroll"].document.images["imgscrollup"];
		}
		else {
			scrollimg = document.images["imgscrollup"];
		}
*/
		if (speed > 0) {
			scrollimg.src = "images/scrollUp.gif"
		}
		else {
/*		if (bw.ns4) {
			scrollimg = document.layers["divScroll"].document.images["imgscrolldn"];
		}
		else {
			scrollimg = document.images["imgscrolldn"];
		}
*/
			scrollimg.src = "images/scrollDown.gif"
		}
		
	}
	
	//Clears the timeout so the scroll stops, this is called onmouseout.
	function noHScroll(divToScroll, divContainer, speed, theImage){
		clearTimeout(scrollTim);
		clearTimeout(scrollPageTim);
		scrollTim = null;
		var scrollimg = theImage;
/*		if (bw.ns4) {
			scrollimg = document.layers["divScroll"].document.images["imgscrollup"];
		}
		else {
			scrollimg = document.images["imgscrollup"];
		}
*/
		if (speed > 0) {
			scrollimg.src = "images/scrollLeft.gif"
		}
		else {
/*		if (bw.ns4) {
			scrollimg = document.layers["divScroll"].document.images["imgscrolldn"];
		}
		else {
			scrollimg = document.images["imgscrolldn"];
		}
*/
			scrollimg.src = "images/scrollRight.gif"
		}
		
	}
	
	function setActiveScrollObj(divToScroll) {
		for (var i=0; i<nrOfScrollObjs; i++) {
			if (scrollNames[i] == divToScroll) {
				activeScrollObj = oScroll[i];
				activeScrollContainer = scrollContainers[i];
				activeScrollBar = scrollBars[i];
				activeBarMax = scrollBarMaxs[i];
			}
		}
	}

	function resizeSpecifiedScrollBar(divToScroll) {
	//	doDebug = true;
		for (var i=0; i<nrOfScrollObjs; i++) {
			if (scrollNames[i] == divToScroll) {
				// alert('scrollbar found: ' + divToScroll);
				activeBarMax = scrollBarMaxs[i];
				oScroll[i].height=bw.ns4?oScroll[i].css.document.height:oScroll[i].el.offsetHeight;
				resizeScrollBar(oScroll[i], scrollContainers[i], scrollBars[i]);
			}
		}
	}

	function getActiveScrollPos() {
		if (activeScrollObj == null) {
			return 0;
		}
		else {
			return activeScrollObj.top();
		}
	}
	
	function getScrollPos(divToScroll) {
		setActiveScrollObj(divToScroll);
		if (activeScrollObj == null) {
			return 0;
		}
		else {
			return (parseInt(activeScrollObj.top()));
		}
	}
	
	
	// Used to scroll to an exact position. Note that maxheight is ignored, so be sure to use a position that is allowed.
	function scrollTo(divToScroll, divContainer, amount) {
		setActiveScrollObj(divToScroll);
	
		var currentTop;
		if (bw.ns6) {
			if (activeScrollObj.css.top == "") {
				currentTop = 0;
			}
			else {
				currentTop = parseInt(activeScrollObj.css.top);
			}	
		}
		else {
			currentTop = activeScrollObj.top();	
		}
		activeScrollObj.css.top=amount;
		moveScrollBar(activeScrollObj, activeScrollContainer, activeScrollBar);
	}
	
	function scrollPage(divToScroll, divContainer, amount, maxheight, theImage) {
		setActiveScrollObj(divToScroll);
		var scrollAmount = amount * 8;
		var currentTop;
		if (bw.ns6) {
			if (activeScrollObj.css.top == "") {
				currentTop = 0;
			}
			else {
				currentTop = parseInt(activeScrollObj.css.top);
			}	
		}
		else {
			currentTop = activeScrollObj.top();	
		}
		if (scrollNum < 3) {
			way=amount>0?1:0
			if((!way && currentTop>-activeScrollObj.height+maxheight) || (currentTop<0 && way)){ // are we already out of bounds?
				
				if (!way && currentTop<-activeScrollObj.height+maxheight-scrollAmount) { // adjust so that we do not scroll out of bounds
					scrollAmount = -(currentTop + activeScrollObj.height-maxheight);
				}
				if (way & currentTop > -scrollAmount) { // adjust so that we do not scroll out of bounds
					scrollAmount = -currentTop;
				}
				
				activeScrollObj.css.top=currentTop+scrollAmount;
			}
		}
		moveScrollBar(activeScrollObj, activeScrollContainer, activeScrollBar);
	}
	
	function scrollHPage(divToScroll, divContainer, amount, maxwidth, theImage) {
		setActiveScrollObj(divToScroll);
	
		var currentLeft;
		if (bw.ns6) {
			if (activeScrollObj.css.left == "") {
				currentLeft = 0;
			}
			else {
				currentLeft = parseInt(activeScrollObj.css.left);
			}	
		}
		else {
			currentLeft = activeScrollObj.left();	
		}
		if (scrollNum < 3) {
			way=amount>0?1:0
			if((!way && currentLeft>-activeScrollObj.width+maxwidth) || (currentLeft<0 && way)){
				activeScrollObj.css.left=currentLeft+amount*8;
			}
		}
	}
	
	/*********************************************************************************
	Changes the active layer. Hides the one that's visible and
	shows the "new" one. Also set's the new layers top to
	0 so it starts at top.
	*********************************************************************************/
	function changeActive(num){
		oScroll[active].css.visibility='hidden'
		active=num
		oScroll[active].css.top=0
		oScroll[active].css.visibility='visible'
	}

	document.onmousewheel=dothescroll;
	function dothescroll(evt) {
		if (scrollNames.length > 0) {
			if (activeScrollObj == null) setActiveScrollObj(scrollNames[0]);
			var theEvent = (window.event || evt);			
			if (theEvent.wheelDelta >= 120) {
	//		scroll(1);
	//		noScroll();
	//		scrollPage(5);
				scrollPage(activeScrollObj.el.name, null, 5,  activeScrollContainer.height, null)
			}
			else {
	//		scroll(-1);
	//		noScroll();
	//		scrollPage(-5);
				scrollPage(activeScrollObj.el.name, null, -5,  activeScrollContainer.height, null)
			}
		}
	
	}


	document.onkeydown=handlekeydown;
	function handlekeydown(e) {
		isNetscape=(document.layers);
		eventChooser = (isNetscape) ? keyStroke.which : ((!bw.ns6) ? event.keyCode : e.keyCode);
		which = String.fromCharCode(eventChooser);
		xCode=which.charCodeAt(0);
		if (xCode == '33') {
			if (scrollNames.length > 0) {
				if (activeScrollObj == null ) setActiveScrollObj(scrollNames[0]);
				scrollPage(activeScrollObj.el.name, null, Math.round(activeScrollContainer.height/16), activeScrollContainer.height, null)
			}
		}
		if (xCode == '34') {
			if (scrollNames.length > 0) {
				if (activeScrollObj == null) setActiveScrollObj(scrollNames[0]);
				scrollPage(activeScrollObj.el.name, null, -Math.round(activeScrollContainer.height/16),  activeScrollContainer.height, null)
			}
		}
	
	}


	function updateScrollObj(divToScroll, divContainer, divControl, divScrollBar, scrollBarHeight, forceVisibleScrollbar) {
		for (var i=0; i<nrOfScrollObjs; i++) {
			if (scrollNames[i] == divToScroll) {
				setScrollObj(i, divToScroll, divContainer, divControl, divScrollBar, scrollBarHeight, forceVisibleScrollbar);			
			}
		}
	}


	
	function addScrollObj(divToScroll, divContainer, divControl, divScrollBar, scrollBarHeight) {
		setScrollObj(nrOfScrollObjs, divToScroll, divContainer, divControl, divScrollBar, scrollBarHeight, false);
		nrOfScrollObjs += 1;
	}
	function setScrollObj(index, divToScroll, divContainer, divControl, divScrollBar, scrollBarHeight, forceVisibleScrollbar) {
			oScroll[index]=new	makeScrollObj(divToScroll, divContainer)
//			oScroll[nrOfScrollObjs].css.visibility='visible'
			scrollContainers[index]=new makeScrollObj(divContainer, false)
//			scrollContainers[nrOfScrollObjs].css.visibility='visible'
			scrollNames[index] = divToScroll;
			if (divScrollBar != "") {
				scrollBars[index] = new makeScrollObj(divScrollBar);
//				scrollBars[nrOfScrollObjs].css.visibility='visible';
				scrollBarMaxs[index] = scrollBarHeight;
				scrollBars[index].el.onmousedown=startMouseDrag;
				scrollBars[index].el.onmouseup=endMouseDrag;
				scrollBars[index].el.onmousemove=mouseDrag;
			}
			else {
				scrollBars[index] = null;
			}
			activeScrollObj = oScroll[index];
			activeScrollContainer = scrollContainers[index];
			activeScrollBar = scrollBars[index];
			activeBarMax = scrollBarMaxs[index];
			resizeScrollBar(activeScrollObj, activeScrollContainer, activeScrollBar);
			showScrollIfNeeded(oScroll[index], scrollContainers[index], new makeScrollObj(divControl, divContainer), scrollBars[index], forceVisibleScrollbar);

	}
	
//	function getTextLineOfPosition(theText, thePos) {
//		var rowStart = theText.lastIndexOf('\n', thePos);
//		var rowEnd = theText.indexOf('\n', thePos);
//		window.status = theText + " start: " + rowStart + "\n" + "end: " + rowEnd;
//	}
	
//	function getFieldCursorPosition(theField) {
//		var CaretPos = 0;	
//		// IE Support	
//		if (document.selection) {	
//			theField.focus ();		
//			var Sel = document.selection.createRange ();
//			Sel.moveStart ('character', -theField.value.length);		
//			CaretPos = Sel.text.length;	
//		}	
//		// Firefox support	
//		else if (theField.selectionStart || theField.selectionStart == '0')		
//			CaretPos = theField.selectionStart;	
//		return (CaretPos);
//	}
