if (document.getElementById && document.getElementsByTagName) {
	if (window.addEventListener) window.addEventListener('load', initAnims, false);
	else if (window.attachEvent) window.attachEvent('onload', initAnims);
}

function initAnims() {
//	Init fade animation with memory, both directions
	// div objects to be faded
	var animElements = document.getElementById("usamap").getElementsByTagName("div");
	// area objects to do the fading
	var trigElements1 = document.getElementById("regions").getElementsByTagName("area");
	var trigElements2 = document.getElementById("regionmaps").getElementsByTagName("area");
	for(var i=0; i<trigElements2.length; i++) {
		trigElements1[i].onmouseover = displayBlock;
		trigElements2[i].onmouseover = fadeMem;
		trigElements2[i].onmouseout = fadeRestore;
	}

	function fadeMem() {
		previousObject = function(obj) {
			do obj = obj.previousSibling;
			while (obj && obj.nodeType != 1);
			return obj;
		} 
	
		var idPos = 0;
		p = this.parentNode;
		while (previousObject(p)) {
			do {
				p = p.previousSibling;
			} while (p && p.nodeType != 1);
			idPos++;
		}

		var animElements = document.getElementById("usamap").getElementsByTagName("div");

		for (i=1; i<=animElements.length; i++) {
			var obj = animElements[i-1];
			doFadeMem(obj,obj.currentOpacity,0,5,20,1);
		}

		var obj = animElements[idPos];
		if (!obj.currentOpacity) obj.currentOpacity = 0; //if no mem is set, set it first;
		doFadeMem(obj,obj.currentOpacity,100,5,20,1);
	}

	function fadeRestore() {
		previousObject = function(obj) {
			do obj = obj.previousSibling;
			while (obj && obj.nodeType != 1);
			return obj;
		} 
	
		var idPos = 0;
		p = this.parentNode;
		while (previousObject(p)) {
			do {
				p = p.previousSibling;
			} while (p && p.nodeType != 1);
			idPos++;
		}

		var animElements = document.getElementById("usamap").getElementsByTagName("div");
		obj = animElements[idPos];

		if (!obj.currentOpacity) return;	//avoid error if mouseout an element occurs before the mouseover
											//(e.g. the pointer already in the object when onload)
		doFadeMem(obj,obj.currentOpacity,0,5,20,1);
	}
}

//*******************

function doFadeMem(elem,startOpacity,endOpacity,steps,intervals,powr) {
//Opacity Fader with Memory
	if (elem.bgFadeMemInt) window.clearInterval(elem.bgFadeMemInt);
	var actStep = 0;
	elem.bgFadeMemInt = window.setInterval(
		function() {
			if (endOpacity==100) elem.style.display="block";
			elem.currentOpacity = easeInOut(startOpacity,endOpacity,steps,actStep,powr);
			elem.style.opacity = elem.currentOpacity/100;
			elem.style.filter = 'alpha(opacity=' + elem.currentOpacity + ')';
			actStep++;
			if (actStep > steps) {
				if (endOpacity==0) elem.style.display="none";
				window.clearInterval(elem.bgFadeMemInt);
			}
		}
		,intervals)
}

//*******************

function easeInOut(minValue,maxValue,totalSteps,actualStep,powr) {
//Generic Animation Step Value Generator
	var delta = maxValue - minValue;
	var stepp = minValue+(Math.pow(((1 / totalSteps)*actualStep),powr)*delta);
	return Math.ceil(stepp)
}

//*******************

function displayBlock() {
	previousObject = function(obj) {
		do obj = obj.previousSibling;
		while (obj && obj.nodeType != 1);
		return obj;
	} 

	var idPos = 0;
	p = this;
	while (previousObject(p)) {
		do {
			p = p.previousSibling;
		} while (p && p.nodeType != 1);
		idPos++;
	}

	// div objects to be faded
	var animElements = document.getElementById("usamap").getElementsByTagName("div");

	animElements[idPos].style.display = "block";
}