
var pageScrollTimer;
var Mac = navigator.appVersion.indexOf('Mac',0) != -1;
var Win = navigator.appVersion.indexOf('Win',0) != -1;
var IE  = navigator.appName.indexOf("Microsoft Internet Explorer",0) != -1;
var NN  = navigator.appName.indexOf("Netscape",0) != -1;
var Moz = navigator.userAgent.indexOf("Gecko",0) != -1;
var Opera = window.opera;
var Vmajor = parseInt(navigator.appVersion);
var Vminor = parseFloat(navigator.appVersion);
var MacIE4 = ((Mac && navigator.appVersion.indexOf('MSIE 4.',0) != -1));
var MacIE3 = ((Mac && navigator.appVersion.indexOf('MSIE 3.',0) != -1));

function getScrollLeft() {
	if ((navigator.appName.indexOf("Microsoft Internet Explorer",0) != -1)) {
		return (document.documentElement.scrollLeft || document.body.scrollLeft);
	} else if (window.pageXOffset) {
		return window.pageXOffset;
	} else {
		return 0;
	}
}
function getScrollTop() {
	if ((navigator.appName.indexOf("Microsoft Internet Explorer",0) != -1)) {
		return (document.documentElement.scrollTop || document.body.scrollTop);
	} else if (window.pageYOffset) {
		return window.pageYOffset;
	} else {
		return 0;
	}
}
function getScrollWidth() {
	if ((navigator.appName.indexOf("Microsoft Internet Explorer",0) != -1)) {
		return (document.documentElement.scrollWidth || document.body.scrollWidth);
	} else if (window.innerWidth) {
		return window.innerWidth;
	}
	return 0;
}
function getScrollHeight() {
	if ((navigator.appName.indexOf("Microsoft Internet Explorer",0) != -1)) {
		return (document.documentElement.scrollHeight || document.body.scrollHeight);
	} else if (window.innerHeight) {
		return window.innerHeight;
	}
	return 0;
}
function pageScroll(toX,toY,frms,cuX,cuY) {
	//Debug.write(toX + ", " + toY + ", " + frms + ", " + cuX + ", " + cuY)
	if (pageScrollTimer) clearTimeout(pageScrollTimer);
	if (!toX || toX < 0) toX = 0;
	if (!toY || toY < 0) toY = 0;
	if (!cuX) cuX = 0 + getScrollLeft();
	if (!cuY) cuY = 0 + getScrollTop();
	if (!frms) frms = 6;
	cuX += (toX - getScrollLeft()) / frms; if (cuX < 0) cuX = 0;
	cuY += (toY - getScrollTop()) / frms;  if (cuY < 0) cuY = 0;
	var posX = Math.floor(cuX);
	var posY = Math.floor(cuY);
	//Debug.write(posX + " : " + posY);
	window.scrollTo(posX, posY);
	if (posX != toX || posY != toY) {
		pageScrollTimer = setTimeout("pageScroll("+toX+","+toY+","+frms+","+cuX+","+cuY+")",16);
	}
}

/**
*	Added to optional params: onBeforeScroll and onAfterScroll handlers.
*	Type of handlers have to be "function".
*/
function pageScrollEx(toX,toY,frms,cuX,cuY,onBeforeScroll,onAfterScroll) {
	
	/* runing onBeforeScroll handler */
	if (typeof(onBeforeScroll) == "function") onBeforeScroll();
	
	if (pageScrollTimer) clearTimeout(pageScrollTimer);
	if (!toX || toX < 0) toX = 0;
	if (!toY || toY < 0) toY = 0;
	if (!cuX) cuX = 0 + getScrollLeft();
	if (!cuY) cuY = 0 + getScrollTop();
	if (!frms) frms = 6;
	
	cuX += (toX - getScrollLeft()) / frms;
	if (cuX < 0) cuX = 0;
	cuY += (toY - getScrollTop()) / frms;
	if (cuY < 0) cuY = 0;
	var posX = Math.floor(cuX);
	var posY = Math.floor(cuY);
	window.scrollTo(posX, posY);

	if (posX != toX || posY != toY) {
		pageScrollTimer = setTimeout("pageScrollEx("+toX+","+toY+","+frms+","+cuX+","+cuY+",null,"+onAfterScroll+")",16);
	}
	else
	{
		/* runing onAfterScroll handler */
		if (typeof(onAfterScroll) == "function") onAfterScroll();	
	}
}	

function jumpToPageTop() {

	if (!MacIE3 && !MacIE4 && !NN && window.scrollTo || NN && (Vminor >= 4.75) && window.scrollTo) {
			pageScroll(0,0,5);
	} else {
		location.hash = "container";
	}
}

//***************************************************

function go(id)
{
	var e = document.getElementById(id);
	if (e)
	{
		//Debug.write("target: " + getAbsLeft(e) + " : " + getAbsTop(e));
		pageScroll(getAbsLeft(e), getAbsTop(e), 5);
	}
}

function getAbsTop(elem)
{
	if (!elem.offsetParent || elem.offsetParent.nodeName == "BODY")
		return (elem.offsetTop - elem.scrollTop);
	else
		return (elem.offsetTop - elem.scrollTop + getAbsTop(elem.offsetParent));
}
function getAbsLeft(elem)
{
	if (!elem.offsetParent || elem.offsetParent.nodeName == "BODY")
		return elem.offsetLeft;
	else
		return (elem.offsetLeft - elem.scrollLeft + getAbsLeft(elem.offsetParent));
}
