if (document.getElementById && document.getElementsByTagName) {
if (window.addEventListener) window.addEventListener('load', initAnims, false);
else if (window.attachEvent) window.attachEvent('onload', initAnims);
};

function initAnims() {
	classChange(document.getElementById('nav'),'scriptactive','noscript');
	var contElements=getElemsByClassName(document,'div','imagedisplay'),bodyElem=document.getElementsByTagName('body')[0];
	var animElements = getElemsByClassName('nav','li','navpar');

	for(var i=0; i<animElements.length; i++) {
		animElements[i].bgFade= {
		cCol:[255,255,255],
		tCol:[2,91,0],
		rCol:[255,255,255]
		};

		animElements[i].bgAnim= {
		iPos:[50,100],
		pUnit:['%','%'], 
		cFrame:0,
		mFrame:10,
		dPos:[0,-10], 
		mSec:20 
		}
		
		animElements[i].opFade= {
		cOp:0,
		tOp:100,
		rOp:0
		};


/*  The active element gets a different treat, this depends on the body class, like the page navigation CSS uses */
		if(animElements[i].id&&bodyElem.className&&animElements[i].id.substr(1,4)==bodyElem.className.substr(1,4)) {
		animElements[i].bgFade= {
		cCol:[2,91,0],
		tCol:[2,32,0],
		rCol:[2,91,0]
		};
		animElements[i].opFade= {
		cOp:100,
		tOp:100,
		rOp:100
		};
		};



		animElements[i].onmouseover = doMouseInAnim;
		animElements[i].onmouseout = doMouseOutAnim;
	};


	function doMouseInAnim() {
		doColFade(this.getElementsByTagName('a')[0],this.bgFade,this.bgFade.tCol,false,8,15,1);
		doBackPosAnim(this.getElementsByTagName('a')[0],this.bgAnim,this.bgAnim.cFrame,this.bgAnim.mFrame);
		doOpFade(this.getElementsByTagName('ul')[0],this.opFade,this.opFade.tOp, 12,15,1);
	};

	function doMouseOutAnim() {
		doColFade(this.getElementsByTagName('a')[0],this.bgFade,this.bgFade.rCol,'transparent',25,15,1);
		doBackPosAnim(this.getElementsByTagName('a')[0],this.bgAnim,this.bgAnim.cFrame,0);
		doOpFade(this.getElementsByTagName('ul')[0],this.opFade,this.opFade.rOp, 1,15,1);
	};

};

function doColFade(elem,vrH,endRGB,finalStyle,steps,intervals,powr) {
//Animcode by www.hesido.com
	if (vrH.intID) window.clearInterval(vrH.intID);
	var actStep = 0, startRGB=vrH.cCol;
	vrH.intID = window.setInterval(
		function() {
			vrH.cCol = [
				easeInOut(startRGB[0],endRGB[0],steps,actStep,powr),
				easeInOut(startRGB[1],endRGB[1],steps,actStep,powr),
				easeInOut(startRGB[2],endRGB[2],steps,actStep,powr)
				];
			elem.style.color = "rgb("+
				vrH.cCol[0]+","+
				vrH.cCol[1]+","+
				vrH.cCol[2]+")";
			actStep++;
			if (actStep > steps) window.clearInterval(vrH.intID);
		}
		,intervals);
};

function doOpFade(elem,vrH,endPos,steps,intervals,powr) {
//Animcode by www.hesido.com
	if (vrH.intID) window.clearInterval(vrH.intID);
	var actStep = 0, startPos = vrH.cOp;
	vrH.intID = window.setInterval(
		function() {
			vrH.cOp = easeInOut(startPos,endPos,steps,actStep,powr);
			elem.style.opacity = vrH.cOp/100;
			elem.style.filter = 'alpha(opacity='+vrH.cOp+')';
			actStep++;
			if (actStep > steps) window.clearInterval(vrH.intID);
		}
		,intervals);
};


function doBackPosAnim(elem,vrH,startFrm,endFrm) {
//Animcode by www.hesido.com
	if (vrH.intID) window.clearInterval(vrH.intID);
	var actStep = 0, steps = Math.abs(endFrm - startFrm)+1;
	vrH.intID = window.setInterval(
		function() {
			vrH.cFrame = easeInOut(startFrm,endFrm,steps,actStep,1);
			vrH.cPos = [
				vrH.iPos[0]+vrH.cFrame*vrH.dPos[0], 
				vrH.iPos[1]+vrH.cFrame*vrH.dPos[1] 
 				];
			elem.style.backgroundPosition = vrH.cPos[0]+vrH.pUnit[0]+' '+vrH.cPos[1]+vrH.pUnit[1];
			actStep++;
			if (actStep > steps) window.clearInterval(vrH.intID);
		}
		,vrH.mSec);
};


function easeInOut(minValue,maxValue,totalSteps,actualStep,powr) {
//Generic Animation Step Value Generator By www.hesido.com
	totalSteps = Math.max(totalSteps,1)
	var delta = maxValue - minValue;
	var stepp = minValue+(Math.pow(((1 / totalSteps)*actualStep),powr)*delta);
	return Math.ceil(stepp)
}

function classChange(elem,addClass,remClass) {
//v1.1 Add + remove classnames function by www.hesido.com
	if (!elem.className) elem.className = '';
	var clsnm = elem.className;
	if (addClass && !clsnm.match(RegExp("(^|\\s)"+addClass+"($|\\s)"))) clsnm = clsnm.replace(/(\S$)/,'$1 ')+addClass;
	if (remClass) clsnm = clsnm.replace(RegExp("((^|\\s)+"+remClass+")+($|\\s)","g"),'$2').replace(/\s$/,'');
	elem.className=clsnm;
	}

function getElemsByClassName(elem,elType,classString) {
//v1.1 Retrieve all specified children of elements by given class, www.hesido.com
	if (typeof(elem) == 'string') elem = document.getElementById(elem);
	if (elem == null) return false;
	var regExer = new RegExp("(^|\\s)"+classString+"($|\\s)"), clsnm, retArray = [], key = 0;
	var elems=elem.getElementsByTagName(elType);
	for (var i=0, pusher; pusher=elems[i];i++) {
	if (pusher.className && pusher.className.match(regExer)) {
		retArray[key] = pusher; key++;
		}
	}
return retArray;
}

