var gv_fading = new Array();
var gv_timer = null;
var gv_frames = 20;
var gv_startShade = [255,255,255];
var gv_endShade = [56,83,15];
var scrolling = null;

function initFades (containerId) {
	var container = document.getElementById(containerId);
	var listItems = container.getElementsByTagName('a');
	for (var i = listItems.length - 1; i >= 0; i--) {
		listItems[i]._fadeId = listItems[i].href.substr(listItems[i].href.indexOf('#') + 1);
		listItems[i].onclick = fade;
	}
}

function initYk (yk1Id) {
	for (var i = initYk.arguments.length - 1; i > 0; i--) {
		var thingy = document.getElementById(initYk.arguments[i]);
		thingy._fadeId = yk1Id;
		thingy.onmouseover = fade;
	}
}

function fade (e, element) {
	var thingy;
	if (this._fadeId) thingy = document.getElementById(this._fadeId);
	if (this._fadeElement) thingy = this._fadeElement;
	if (element) thingy = element;
	thingy._shades = gv_frames;
	thingy._currentShade = 0;
	if (!thingy._currentlyFading) { gv_fading[gv_fading.length] = thingy; }
	thingy._currentlyFading = true;
	startFading();
}

function startFading () {
	if (!gv_timer) {
		gv_timer = window.setInterval(fadeStuff, 20);
	}
}

function fadeStuff () {
	if (gv_fading.length == 0) { stopFading(); }
	
	for (var i = gv_fading.length - 1; i >= 0; i--) {
		var thingy = gv_fading[i];
		thingy.style.backgroundColor = getShade(thingy._shades, thingy._currentShade);
		thingy._currentShade++;
		if (thingy._currentShade > thingy._shades)	{
			thingy.style.backgroundColor = "transparent";
			thingy._currentlyFading = false;
			gv_fading.splice(i,1);
		}
	}
}

function stopFading () {
	if(!gv_timer)	return false;
	window.clearInterval(gv_timer);
	gv_timer = null;
	return true;
}

function getShade (shades, currentShade) {
	var newShade	=	"rgb(";
	for( var i = 0; i < 3; i++ )
	{
		var diff	=	gv_endShade[i] - gv_startShade[i];
		newShade	+=	Math.ceil( gv_startShade[i] + ( (diff*currentShade) / shades ) );
		newShade	+=	",";
	}
	newShade	=	newShade.substr(0, newShade.length-1);
	newShade	+=	")";
	return newShade;
}

function initSmoothScrolls (containerId) {
	var container = document.getElementById(containerId);
	var listItems = container.getElementsByTagName('a');
	for (var i = listItems.length - 1; i >= 0; i--) {
		listItems[i]._scrollTo = document.getElementById(listItems[i].href.substr(listItems[i].href.indexOf('#') + 1));
		listItems[i].onclick = scrollDown;
	}
}

function scrollDown () {
	if (scrolling) { window.clearInterval(scrolling); }

	var target = this._scrollTo;
	var o = this;
	var yPosition = findPos(target) - 85; // shifting by 100 because we don't want it right at the top
	
	var frames = 25;
	var frameRate = 1;
	var currentFrame = 0;
	var start = 0;
	
	// Y Offset code from Quirksmode.org
	if (window.innerHeight) { start = window.pageYOffset; }
	else if (document.documentElement && document.documentElement.scrollTop) { start = document.documentElement.scrollTop; }
	else if (document.body) { start = document.body.scrollTop; }
	
	var amount = yPosition - start;
	
	scrolling = window.setInterval(
		function () {
			var angle = (Math.PI / 2) * ((2 * currentFrame - frames) / frames);
			var slope = Math.floor(Math.sin(angle) * 100) / 100;
			var newPosition = (amount / 2) + Math.floor(amount * slope / 2 );
			currentFrame += frameRate;	// moving the counter
			window.scrollTo(0, start + newPosition);
			
			if (currentFrame > frames || currentFrame < 0) {
				window.clearInterval(scrolling);
				scrolling = null;
				if (o._fadeElement) fade('', o._fadeElement);
			}
		}, 20);
		
	return false;
}

// findPos from Quirksmode.org 
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return curtop;
}
