var InfoBoxMargin = 10;
var aoInfoBoxElements = new Array();
function AddInfoBoxElement(oElement, sContent, sStyle, bHorizontal){
	oElement.onmouseover = function(){
		if(!this.oInfoBox){
			this.oInfoBox = OpenInfoBox(sContent, sStyle, this, bHorizontal);
		}
	}	
	
	oElement.onmouseout = function(){
		if(this.oInfoBox){
			CloseInfoBox(this.oInfoBox);
			this.oInfoBox = null;
		}
	}
}

function CloseAllInfoBoxes(){
	for(var sKey in aoInfoBoxElements){
		CloseInfoBox(aoInfoBoxElements[sKey]);
	}
}
function CloseInfoBox(oInfoBox){
	removeElement(oInfoBox);
	delete(aoInfoBoxElements[oInfoBox.id]);
}

function OpenInfoBox(sContent, sStyle, oElement, bHorizontal){
	var oInfoBox = document.createElement( 'div' );
	oInfoBox.id = oElement.id+'InfoBox';
	oInfoBox.className = "infobox "+sStyle;
	
	oInfoBox.innerHTML = sContent;
	
	aoInfoBoxElements[oInfoBox.id] = oInfoBox;
	
	appendElement( oInfoBox, $('body') );
	return PositionInfoBox(oInfoBox, oElement, bHorizontal);
}

function PositionInfoBox(oBox, oElement, bHorizontal){
	var aiPageSize = getPageSize();

	var aiPageScroll = getPageScroll();
	var iPageOffsetX = aiPageScroll[0];
	var iPageOffsetY = aiPageScroll[1];
	
	var iElementWidth = oElement.offsetWidth;
	var iElementHeight = oElement.offsetHeight;
	var oElementPos = getPosition(oElement);
	var iElementLeft = oElementPos.x;
	var iElementTop = oElementPos.y;
	
	var iLeft;
	var iTop;
	
	var iWidth = oBox.offsetWidth;
	var iHeight = oBox.offsetHeight;

	if(aiPageSize[3] < iHeight + 50 || aiPageSize[2] < iWidth + 50  ){
		return false;
	}
	
	if(bHorizontal){
		if(iElementLeft - iWidth - InfoBoxMargin - iPageOffsetX < 0) {
			iLeft = iElementLeft + iElementWidth + InfoBoxMargin; 
		} else {
			iLeft = iElementLeft - iWidth-InfoBoxMargin; 
		}
		iTop = iElementTop;
	} else {
		if(iElementTop - iHeight - InfoBoxMargin - iPageOffsetY < 0) {
			iTop = iElementTop + iElementHeight + InfoBoxMargin; 
		} else {
			iTop = iElementTop - iHeight - InfoBoxMargin; 
		}
		if(iElementLeft + iWidth > aiPageSize[2]){
			iLeft = aiPageSize[2]-iWidth-30;
		} else{
			iLeft = iElementLeft;
		}
	}
	
	oBox.style.top = iTop+"px";
	oBox.style.left = iLeft+"px";
	return oBox;
}