var continents = { 
	north_central_america: {small:[68,250,325,159],large:[100,250,573,280],shown:false},
	south_america: {small:[250,390,97,150],large:[230,380,161,250],shown:false},
	africa: {small:[378,347,142,151],large:[348,347,237,251],shown:false},
	europe: {small:[366,256,136,97],large:[220,250,356,237],shown:false},
	asia: {small:[471,254,299,160],large:[270,250,499,267],shown:false},
	australia_south_pacific: {small:[608,385,157,137],large:[498,374,261,229],shown:false}
	};
var animator, state, maptiptimer, maptipshown = false;
var steps = 4, interval = 25;
var dotbag = 0, dripped = 0;
function animate() {
	if (!state) return window.clearInterval(animator);
	if (state.cur > steps) {
		if (state.dir > 0) {
			window.clearInterval(animator);
			return contdots(state.cont);
		} else state.cur = steps;
	} else if (state.cur < 0) {
		if (state.dir < 0) {
			window.clearInterval(animator);
			return finishsink();
		} else state.cur = 0;
	}
	hidemaptip();
	if (state.dir < 0) document.getElementById(state.cont + '_dots').style.display = 'none';
	contel = document.getElementById('contimg');
	contel.style.left = continents[state.cont].small[0] + (continents[state.cont].large[0] - continents[state.cont].small[0])*(state.cur/steps) + 'px';
	contel.style.top = continents[state.cont].small[1] + (continents[state.cont].large[1] - continents[state.cont].small[1])*(state.cur/steps) + 'px';
	contel.style.width = continents[state.cont].small[2] + (continents[state.cont].large[2] - continents[state.cont].small[2])*(state.cur/steps) + 'px';
	contel.style.height = continents[state.cont].small[3] + (continents[state.cont].large[3] - continents[state.cont].small[3])*(state.cur/steps) + 'px';
	var op = Math.round(69 * (state.cur/steps));
	if (pngfix) document.getElementById('bg_texture_shade').style.filter = 'alpha(opacity='+op+')';
	document.getElementById('bg_texture_shade').style.opacity = op/100;
	state.cur += state.dir;
}
function finishsink() {
	document.getElementById(state.cont + '_small').style.display = 'block';
	document.getElementById('worldots').style.display = 'block';
	document.getElementById('contimg').style.display = 'none';
	if (pngfix) document.getElementById('bg_texture_shade').style.filter = 'alpha(opacity=0)';
	else document.getElementById('bg_texture_shade').style.opacity = 0;
	state = 0;
	document.getElementById('worldareas').style.visibility = 'visible';
}
function nosinkcont() {
	if (state) state.dir = 1;
	window.clearInterval(animator);
}
function sinkcont() {
	if (state && state.dir > 0) {
		state.dir = -1;
		if (state.cur >= steps) {
			window.clearInterval(animator);
			animator = window.setInterval('animate()', interval);
		}
	}
}
function popcont(cont) {
	if (state && state.cont == cont) return;
	if (state && state.cont) document.getElementById(state.cont + '_dots').style.display = 'none';
	window.clearInterval(animator);
	document.getElementById('worldareas').style.visibility = 'hidden';
	if (state) finishsink();
	contel = document.getElementById('contimg');
	contel.src = urlroot + 'images/map_' + cont + '.png';
	contel.useMap = '#' + cont;
	contel.style.left = continents[cont].small[0] + 'px';
	contel.style.top = continents[cont].small[1] + 'px';
	contel.style.width = continents[cont].small[2] + 'px';
	contel.style.height = continents[cont].small[3] + 'px';
	document.getElementById(cont + '_small').style.display = 'none';
	document.getElementById('worldots').style.display = 'none';
	contel.style.display = 'block';
	state = { cont: cont, cur: 0, dir: 1 };
	animator = window.setInterval('animate()', interval);
}
function initmap() {
	worldots();
	showgroups();
}
function worldots() {
	if (mapdata) {
		var rpos = continents.north_central_america.small;
		var dots = '';
		if (dotbag) for (var i in dotbag) {
			id = dotbag[i];
			if (!mapdata.coordinates.world[id]) continue;
			dots += '<div id="wdot'+id+'" class="map_dot" style="left:'+(mapdata.coordinates.world[id][0]+rpos[0]-3)+'px;top:'+(mapdata.coordinates.world[id][1]+rpos[1]-3)+'px"><a></a></div>';
		} else for (var id in mapdata.coordinates.world) {
			dots += '<div id="wdot'+id+'" class="map_dot" style="left:'+(mapdata.coordinates.world[id][0]+rpos[0]-3)+'px;top:'+(mapdata.coordinates.world[id][1]+rpos[1]-3)+'px"><a></a></div>';
		}
		document.getElementById('worldots').innerHTML = dots;
	}
}
function undrip() {
	dripped = 0;
	dotbag = 0;
	worldots();
	for (var cont in continents) continents[cont].shown = false;
}
function drip(type, slug, id) {
	sinkcont();
	dripped = { type:type, id:id };
	dotbag = groupdata[type][slug].ids;
	worldots();
	for (var cont in continents) continents[cont].shown = false;
}
function showgroups() {
	if (groupdata) {
		var dot1 = new Image(4,4);
		dot1.src = '/images/dot_blue_med_dark.gif';
		var dot2 = new Image(4,4);
		dot2.src = '/images/dot_green_med_dark.gif';
		
	
		var cats = '', catcount=0;
		for (var slug in groupdata.cat) {
			cats += '<li id="licat'+catcount+'" onmouseover="licatover('+catcount+')" onmouseout="licatout('+catcount+')"><a href="javascript:drip(\'cat\',\'' + slug + '\', '+catcount+')"><nobr>' + groupdata.cat[slug].name + '</nobr></a></li>\n';
			catcount++;
		}
		licat = new Array(catcount);
		var el = document.getElementById('catlist');
		if (el) el.innerHTML = cats;
		var servs = '', servcount=0;
		for (var slug in groupdata.serv) {
			servs += '<li id="liserv'+servcount+'" onmouseover="liservover('+servcount+')" onmouseout="liservout('+servcount+')"><a href="javascript:drip(\'serv\',\'' + slug + '\', '+servcount+')">' + groupdata.serv[slug].name + '</a></li>\n';
			servcount++;
		}
		liserv = new Array(servcount);
		var el = document.getElementById('servlist');
		if (el) el.innerHTML = servs;
		
		for(var i=0; i<licat.length; i++) licat[i] = 0;
		for(var i=0; i<liserv.length; i++) liserv[i] = 0;
	}
}
var licat, liserv, catover = -1, servover = -1;
var litimer;
function lislide() {
	var lilac;
	var moved = false;
	for(var i=0; i<licat.length; i++) {
		if (dripped && dripped.type=='cat' && dripped.id==i) {
			lilac = document.getElementById('licat'+i);
			lilac.className = 'current';
			lilac.style.padding = '0px 12px 0px 0px';
		} else {
			if (i == catover) {
				if (licat[i]<12) licat[i]+=4;
				else continue;
			} else if (licat[i] > 0) licat[i]-=4;
			else continue;
			
			lilac = document.getElementById('licat'+i);
			if (licat[i] > 6) lilac.className = 'over';
			else lilac.className = 'dummy';
			lilac.style.padding = '0px ' + licat[i] + 'px 0px 0px';
		}
		moved = true;
	}
	for(var i=0; i<liserv.length; i++) {
		if (dripped && dripped.type=='serv' && dripped.id==i) {
			lilac = document.getElementById('liserv'+i);
			lilac.className = 'current';
			lilac.style.padding = '0px 0px 0px 12px';
		} else {
			if (i == servover) {
				if (liserv[i]<12) liserv[i]+=4;
				else continue;
			} else if (liserv[i] > 0) liserv[i]-=4;
			else continue;
			
			lilac = document.getElementById('liserv'+i);
			if (liserv[i] > 6) lilac.className = 'over';
			else lilac.className = 'dummy';
			lilac.style.padding = '0px 0px 0px ' + liserv[i] + 'px';
		}
		moved = true;
	}
	if (!moved) {
		window.clearInterval(litimer);
		litimer = 0;
	}
}
function licatover(id) {
	catover = id; 
	if (!litimer) litimer = window.setInterval('lislide()', 100);
}
function licatout(id) {
	catover = -1;
	if (!litimer) litimer = window.setInterval('lislide()', 100);
}
function liservover(id) {
	servover = id; 
	if (!litimer) litimer = window.setInterval('lislide()', 100);
}
function liservout(id) {
	servover = -1;
	if (!litimer) litimer = window.setInterval('lislide()', 100);
}
function contdots(cont) {
	if (!continents[cont].shown && mapdata.coordinates[cont]) {
		var rpos = continents[cont].large;
		var dots = '';
		if (dotbag) for (var i in dotbag) {
			id = dotbag[i];
			if (!mapdata.coordinates[cont][id]) continue;
			dots += '<div onclick="window.location.href=\''+encodeURI(mapdata.ministries[id][0])+'\'" id="cdot'+id+'" onmouseover="showmaptip(\''+cont+'\','+id+', 1)" class="map_dot" style="left:'+(mapdata.coordinates[cont][id][0]+rpos[0]-3)+'px;top:'+(mapdata.coordinates[cont][id][1]+rpos[1]-3)+'px"><a></a></div>';
		} else for (var id in mapdata.coordinates[cont]) {
			dots += '<div onclick="window.location.href=\''+encodeURI(mapdata.ministries[id][0])+'\'" id="cdot'+id+'" onmouseover="showmaptip(\''+cont+'\','+id+', 1)" class="map_dot" style="left:'+(mapdata.coordinates[cont][id][0]+rpos[0]-3)+'px;top:'+(mapdata.coordinates[cont][id][1]+rpos[1]-3)+'px"><a></a></div>';
		}
		document.getElementById(cont + '_dots').innerHTML = dots;
		continents[cont].shown = true;
	}
	document.getElementById(state.cont + '_dots').style.display = 'block';
}
	function showmaptip(map, id, front) {
		if (state) state.dir = 1;
		window.clearInterval(animator);

		if (mapdata.ministries[id]) {
			var wdim = viewport();
			document.getElementById('maptiptext').innerHTML = ('<strong>'+mapdata.ministries[id][1]+'</strong>, '+mapdata.ministries[id][2]).replace(/\s/g,'&nbsp;');
			tipel = document.getElementById('maptip');
			tipel.style.left = '0px';
			tipel.style.display = 'block';
			tipel.style.visibility = 'hidden';
			if (!front) var rpos = findpos(document.getElementById("map_"+(map=='world'? map:'cont')));
			else rpos = continents[map].large; 
			var tipwidth = tipel.offsetWidth;
			var dot = mapdata.coordinates[map][id];
			
			if (front) wpos = findpos(document.getElementById("wrapper"));
			else wpos = [0, 0];
			var x = dot[0] + rpos[0] - 12;
			if (x + tipwidth + 20 > wdim[0]-wpos[0]) tipel.style.left = (wdim[0]-wpos[0]-tipwidth-20)+'px';
			else tipel.style.left = x + 'px';
			tipel.style.top = (mapdata.coordinates[map][id][1]+rpos[1] - 27)  + 'px';
			tipel.style.visibility = 'visible';
			window.clearTimeout(maptiptimer);
			maptiptimer = window.setTimeout('hidemaptip()', 2000);
		}
	}
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 [curleft,curtop];
}
function getmousepos(e) {
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	} else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
				+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
				+ document.documentElement.scrollTop;
	}
	// posx and posy contain the mouse position relative to the document
	return [posx,posy];
}
	function hidemaptip() {
		document.getElementById('maptip').style.display = 'none';
		maptipshown = false;
	}
	function viewport() {
		if (self.innerHeight) { // all except Explorer
			return [self.innerWidth, self.innerHeight];
		} else if (document.documentElement && document.documentElement.clientHeight) {
			// Explorer 6 Strict Mode
			return [document.documentElement.clientWidth, document.documentElement.clientHeight];
		} else if (document.body) { // other Explorers
			return [document.body.clientWidth, document.body.clientHeight];
		}
	}

