
var rpgGameTimeouts = new Array();
addEvent(window, 'onload', initRpgInfoLayer, false);

function initRpgInfoLayer() {
	var objA = document.getElementsByTagName('A');
	for (var i=0; i<objA.length; i++) {
		if (objA[i].getAttribute('rpgGame')) {
			objA[i].onmouseover	= showRpgInfo;
			objA[i].onmouseout	= hideRpgInfo;
		}
	}
	var objDIV = document.getElementsByTagName('DIV');
	for (var i=0; i<objDIV.length; i++) {
		if (objDIV[i].getAttribute('rpgGame')) {
			var objChild = objDIV[i].childNodes;
			for (var j=0; j<objChild.length; j++) {
				if (objChild[j].nodeName != '#text') objChild[j].onmouseover = showRpgInfo;
			}
			objDIV[i].onmouseover	= showRpgInfo;
			objDIV[i].onmouseout	= hideRpgInfo;
			objDIV[i].style.display	= 'none';
		}
	}
}

function showRpgInfo(e) {
	var obj = ( (window.event) ? window.event.srcElement : e.target );
	var gameName = getRpgInfoGameNameAttribute(obj);
	removeRpgTimeoutHandle(gameName);
	var layerObj = getRpgInfoLayer(gameName);
	if (layerObj) {
		if (layerObj.style.display!='block') {
			if ((obj.nodeName == 'A') && (obj.getAttribute('rpgGame'))) {
				var pos = getAbsolutePosition(obj);
				var width = obj.offsetWidth;
				var height = obj.offsetHeight;
				layerObj.style.left = (pos.x+105).toString() + 'px';
				layerObj.style.top	= (pos.y+height-20).toString() + 'px';
			}
			layerObj.style.display = 'block';
		}
	}
}

function hideRpgInfo(e) {
	var obj = ( (window.event) ? window.event.srcElement : e.target );
	var gameName = getRpgInfoGameNameAttribute(obj);
	var layerObj = getRpgInfoLayer(gameName);
	if (layerObj) {
		if (layerObj.style.display!='none') {
			var timeoutHandle = window.setTimeout('removeRpgTimeoutHandle("'+gameName+'"); getRpgInfoLayer("'+gameName+'").style.display="none";',50);
			if (!existsRpgTimeoutHandle(gameName)) rpgGameTimeouts.push({ gameName:gameName, handle:timeoutHandle });
		}
	}
}

function removeRpgTimeoutHandle(gameName) {
	var newArray = new Array();
	for (var i=0; i<rpgGameTimeouts.length; i++) {
		if (rpgGameTimeouts[i].gameName == gameName) {
			window.clearTimeout(rpgGameTimeouts[i].handle);
		}else{
			newArray.push(rpgGameTimeouts[i]);
		}
	}
	rpgGameTimeouts = newArray;
}

function existsRpgTimeoutHandle(gameName) {
	for (var i=0; i<rpgGameTimeouts.length; i++) {
		if (rpgGameTimeouts[i].gameName == gameName) return true;
	}
	return false;
}

function getRpgInfoLayer(gameName) {
	var objDIV = document.getElementsByTagName('DIV');
	for (var i=0; i<objDIV.length; i++) {
		if (objDIV[i].getAttribute('rpgGame')) {
			if (objDIV[i].getAttribute('rpgGame')==gameName) return objDIV[i];
		}
	}
	return null;
}

function getRpgInfoGameNameAttribute(obj) {
	while (obj) {
	 	if (obj.getAttribute('rpgGame')) return obj.getAttribute('rpgGame');
		obj = obj.offsetParent;
	}
	return null;
}

function getAbsolutePosition(obj) {
	for (var lx=0,ly=0; obj!=null; lx+=obj.offsetLeft, ly+=obj.offsetTop, obj=obj.offsetParent);
	return { x:lx, y:ly }
}

function addEvent (obj, evt, func, capture) {
	if (!obj) return;
	if (obj.attachEvent) { obj.attachEvent(evt, func); }
	else if (obj.addEventListener) {
		if (!capture) capture=false;
		evt = evt.replace(/^on/i,'');
		obj.addEventListener(evt, func, capture);
	}else{ obj[evt] = fnc; }
	return;
}
