var scrollInt;
var scrTime, scrSt, scrDist, scrDur, scrInt;




function replaceAnchorLinks()
{
	var anchors, i, targ, targarr;

	if (!document.getElementById)
		return;
	
	// get all anchors
	anchors = document.getElementsByTagName("a");
	
	for (i=0;i<anchors.length;i++)
	{
	
		// check if href links to an anchor on this page
		if ( anchors[i].href.indexOf("#") != -1 && anchors[i].href.indexOf( document.URL ) != -1 )
		{
			// get name of target anchor
			targ = anchors[i].href.substring( anchors[i].href.indexOf("#")+1 );
			
			// find target anchor
			targarr = document.getElementsByName( targ );
			
			if (targarr.length)
			{
				anchors[i].className = (targarr[0].offsetTop < anchors[i].offsetTop) ? "anchor-up" : "anchor-down";
				anchors[i].id = "__" + targ;	// save target as id with prefix (used in onclick function below)
				anchors[i].onmousedown = function () { scrollToAnchor( this.id.substring( 2 ) ); return false; };
				anchors[i].href = "#";			// rewrite href
			}
		}
		
	}
}


/*
SCROLL FUNCTIONS
*/




function scrollPage()
{
	scrTime += scrInt;
	if (scrTime < scrDur) {
		window.scrollTo( 0, easeInOut(scrTime,scrSt,scrDist,scrDur) );
	}else{
		window.scrollTo( 0, scrSt+scrDist );
		clearInterval(scrollInt);
	}
}

function scrollToAnchor(aname)
{
	var anchors, i, ele;
	var browser_offset = 0;

	if (!document.getElementById)
		return;
	
	// get anchor
	anchors = document.getElementsByTagName("a");
	for (i=0;i<anchors.length;i++) {
		if (anchors[i].name == aname) {
			ele = anchors[i];
			i = anchors.length;
		}
	}
	
	// set scroll target
	if (window.scrollY){
		scrSt = window.scrollY;
	}
	else if (document.documentElement.scrollTop){
		scrSt = document.documentElement.scrollTop;
	}
	else{
		scrSt = document.body.scrollTop;
	}

	// Because IE renders the y offset
	// of elements differently, we want to add
	// an offset amount of pixels that will compensate.
	// If we are going to the top of the page (anchor must be
	// be named "top") then we will ignore the offset and leave
	// it at 0. Note that the offset will vary by site, so test
	// different offsets until you get desired results.

	if (document.all && aname != "top")
		browser_offset = 62;
	
	scrDist = (browser_offset + ele.offsetTop) - scrSt;

	// Added distance to the duration to keep
	// speed uniform. If we are moving up however
	// we default duration to 800.

	scrDur = 400 + scrDist;
	if(scrDur < 0)
		scrDur = 400;

	scrTime = 0;
	scrInt = 10;
	
	// set interval
	clearInterval(scrollInt);
	scrollInt = setInterval( scrollPage, scrInt );
}




/*
EASING FUNCTIONS
*/

function easeInOut(t,b,c,d)
{
	return c/2 * (1 - Math.cos(Math.PI*t/d)) + b;
}


window.onload = replaceAnchorLinks;
