function INFO_Box(thisRef) {
	INFO_Box.prototype.setEvent(INFO_Box.prototype.createContainer, "load", window);
}
INFO_Box.prototype.createContainer = function() {
	if(typeof(AjaxResParam) == 'undefined') {
		alert("AJAX functions not loaded");
		return;
	}
	if (infoBox.divObjRef) return;
	var newDiv = document.createElement("div");
	newDiv.className = "DHTML_INFO_Box";
	document.body.appendChild(newDiv);
	INFO_Box.divObjRef = newDiv;
	INFO_Box.divObjRef.style.display = "none";
	INFO_Box.prototype.removeEvent(INFO_Box.prototype.createContainer, "load", window);
}
INFO_Box.prototype.init = function() {
	INFO_Box.vAlign = INFO_Box.prototype.init.arguments[0] ? INFO_Box.prototype.init.arguments[0] : "top";
	INFO_Box.hAlign = INFO_Box.prototype.init.arguments[1] ? INFO_Box.prototype.init.arguments[1] : "left";
	INFO_Box.offsetTop = INFO_Box.prototype.init.arguments[2] ? INFO_Box.prototype.init.arguments[2] : 10;
	INFO_Box.offsetLeft = INFO_Box.prototype.init.arguments[3] ? INFO_Box.prototype.init.arguments[3] : 10;
	INFO_Box.targetObject = null;
}
INFO_Box.prototype.positionBox = function(tObj) {
	var boxWidth = INFO_Box.divObjRef.offsetWidth;
	var boxHeight = INFO_Box.divObjRef.offsetHeight;
	var tObjWidth = tObj.offsetWidth;
	var tObjX = INFO_Box.prototype.getXPos(tObj);
	var tObjY = INFO_Box.prototype.getYPos(tObj);
	if (INFO_Box.vAlign == "bottom")
		INFO_Box.divObjRef.style.top = (tObjY-boxHeight-INFO_Box.offsetTop)+"px";
	else
		INFO_Box.divObjRef.style.top = (tObjY+INFO_Box.offsetTop)+"px";
	if ((INFO_Box.hAlign == "right" && (tObjX+tObjWidth-boxWidth-INFO_Box.offsetLeft) > 0) || (INFO_Box.hAlign == "left" && (tObjX+INFO_Box.offsetLeft+boxWidth) >= document.body.clientWidth))
		INFO_Box.divObjRef.style.left = (tObjX+tObjWidth-boxWidth-INFO_Box.offsetLeft)+"px";
	else if (INFO_Box.hAlign == "left" || (tObjX+INFO_Box.offsetLeft+boxWidth) < document.body.clientWidth)
		INFO_Box.divObjRef.style.left = (tObjX+INFO_Box.offsetLeft)+"px";
	return;
}
INFO_Box.prototype.getAjaxInfo = function(evt, ajaxScript, ajaxAction, ajaxParam, ajaxValue) {
	evt = evt ? evt : window.event;
	var tObj = (evt.target || evt.srcElement);
	infoBox.targetObject = tObj;
	infoBox.setEvent(INFO_Box.prototype.hideWindow, "mousedown", document);
	AjaxRequest(ajaxScript, infoBox.showInfo, ajaxAction, ajaxParam, ajaxValue);
}
INFO_Box.prototype.showInlineInfo = function(evt, htmlText) {
	evt = evt ? evt : window.event;
	var tObj = (evt.target || evt.srcElement);
	infoBox.targetObject = tObj;
	infoBox.setEvent(INFO_Box.prototype.hideWindow, "mousedown", document);
	INFO_Box.prototype.showInfo(htmlText);
}
INFO_Box.prototype.showInfo = function(resObj) {
	INFO_Box.divObjRef.innerHTML = '';
	if (resObj.getElementsByTagName) {
		INFO_Box.divObjRef.innerHTML = AjaxResParam(resObj, "html_content");
	} else {
		INFO_Box.divObjRef.innerHTML = resObj;
	}
	var aTags = INFO_Box.divObjRef.getElementsByTagName("A");
	for (var i=0; aTags[i]; i++)
		infoBox.setEvent(INFO_Box.prototype.cancelParentEvents, "mousedown", aTags[i]);
	INFO_Box.divObjRef.style.display = "";
	INFO_Box.prototype.positionBox(infoBox.targetObject);
}

INFO_Box.prototype.hideWindow = function(evt) {
	evt = evt ? evt : window.event;
	var tObj = (evt.target || evt.srcElement);
	if (!tObj || (INFO_Box.divObjRef != tObj)) {
		INFO_Box.divObjRef.style.display = "none";
		infoBox.removeEvent(INFO_Box.prototype.hideWindow, "mousedown", document);
	}
}

/* get the left pixel position for a given element */
INFO_Box.prototype.getXPos = function(thisObj) {
	var x=0;
	do {
		x += thisObj.offsetLeft;
		thisObj = thisObj.offsetParent;
	} while (thisObj != null)
	return x;
}

/* get the top pixel position for a given element */
INFO_Box.prototype.getYPos = function (thisObj) {
	var y=0;
	do {
		y += thisObj.offsetTop;
		thisObj = thisObj.offsetParent;
	} while (thisObj != null)
	return y;
}

INFO_Box.prototype.setEvent = function() {
	var functionCall = INFO_Box.prototype.setEvent.arguments[0];
	var eventRoot = INFO_Box.prototype.setEvent.arguments[1] ? INFO_Box.prototype.setEvent.arguments[1] : "load";
	var eventScope = INFO_Box.prototype.setEvent.arguments[2] ? INFO_Box.prototype.setEvent.arguments[2] : window;
	if (window.attachEvent)
		eventScope.attachEvent("on"+eventRoot, functionCall);
	else if (window.addEventListener)
		eventScope.addEventListener(eventRoot, functionCall, false);
}
INFO_Box.prototype.removeEvent = function() {
	var functionCall = INFO_Box.prototype.removeEvent.arguments[0];
	var eventRoot = INFO_Box.prototype.removeEvent.arguments[1] ? INFO_Box.prototype.removeEvent.arguments[1] : "load";
	var eventScope = INFO_Box.prototype.removeEvent.arguments[2] ? INFO_Box.prototype.removeEvent.arguments[2] : window;
	if (window.detachEvent)
		eventScope.detachEvent("on"+eventRoot, functionCall);
	else if (window.removeEventListener)
		eventScope.removeEventListener(eventRoot, functionCall, false);
}
INFO_Box.prototype.cancelParentEvents = function(evt) {
	evt = (evt ? evt : window.event);
	if (window.event)
		window.event.cancelBubble = true;
	else
		evt.stopPropagation();
}

var infoBox = new INFO_Box();

