var _XH_ACTIVE_X_IDENTS = [ "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP", "MICROSOFT.XMLHTTP.1.0", "MICROSOFT.XMLHTTP.1", "MICROSOFT.XMLHTTP" ];
var _xh_ieProgId = undefined;
var XML_READY_STATE_COMPLETED = 4;
function _XH_XmlHttpInit() {
if (typeof XMLHttpRequest == 'undefined' && typeof ActiveXObject != 'undefined') {
for (var i = 0; i < _XH_ACTIVE_X_IDENTS.length; i++) {
var candidate = _XH_ACTIVE_X_IDENTS[i];
try {
new ActiveXObject(candidate);
_xh_ieProgId = candidate;
break;
} catch (e) {
// do nothing; try next choice
}
}
if (undefined === _xh_ieProgId) {
throw ("Could not create ActiveXObject. ActiveX might be disabled, or msxml might not be installed");
}
}
}
_XH_XmlHttpInit();
function XH_XmlHttpCreate() {
if (_xh_ieProgId !== undefined) {
return new ActiveXObject(_xh_ieProgId);
} else {
return new XMLHttpRequest();
}
}
function XH_XmlHttpGET(xmlhttp, url, handler) {
xmlhttp.onreadystatechange = handler;
xmlhttp.open("GET", url, true);
xmlhttp.send(null);
}
// Position the div to put it in the relevant viewing area.
function repositionTooltip(element, leftTop, imgIcon) {
var leftPos = leftTop[0] + imgIcon.offsetWidth;
var topPos = leftTop[1] + imgIcon.offsetHeight;
if (self.innerHeight) { // all except Explorer
screenWidth = self.innerWidth;
screenHeight = self.innerHeight;
} else if (document.documentElement // Explorer 6 Strict Mode
&& document.documentElement.clientHeight) {
screenWidth = document.documentElement.clientWidth;
screenHeight = document.documentElement.clientHeight;
} else if (document.body) { // other Explorers
screenWidth = document.body.clientWidth;
screenHeight = document.body.clientHeight;
}
if (document.documentElement.scrollTop) {
scrollTop = document.documentElement.scrollTop;
} else {
scrollTop = document.body.scrollTop;
}
if (document.documentElement.scrollLeft) {
scrollLeft = document.documentElement.scrollLeft;
} else {
scrollLeft = document.body.scrollLeft;
}
if (element.offsetWidth) {
tipWidth = element.offsetWidth;
} else {
tipWidth = element.clientWidth;
}
if (((document.documentElement.dir &&
document.documentElement.dir.toLowerCase()=="rtl") ||
(document.body.dir &&
document.body.dir.toLowerCase()=="rtl")) &&
leftTop[0] - (tipWidth + 30) - scrollLeft > 0) {
element.style.left=leftPos-(tipWidth+30);
} else if (screenWidth > (leftTop[0] + tipWidth + 30 - scrollLeft)) {
element.style.left=leftPos;
} else {
element.style.left=leftPos-(tipWidth+30);
}
if (element.offsetHeight) {
tipHeight = element.offsetHeight;
} else {
tipHeight = element.clientHeight;
}
if (screenHeight > (leftTop[1] + tipHeight + 30 - scrollTop)) {
element.style.top=topPos;
} else {
element.style.top=topPos-tipHeight;
}
}
function placeIframeBehindDiv(iframeElement, divElement) {
iframeElement.style.left=divElement.style.left;
iframeElement.style.top=divElement.style.top;
iframeElement.style.width=divElement.offsetWidth ?
divElement.offsetWidth :
divElement.clientWidth;
iframeElement.style.height=divElement.offsetHeight ?
divElement.offsetHeight :
divElement.clientHeight ;
iframeElement.style.display="block";
}
function TooltipLoader(baseUrl, loaderName) {
this.baseUrl = baseUrl;
this.loaderName = loaderName;
var waitingForResponse = {};
var contentLoaded = {};
var currentElement = {};
var timer = null;
this.resetContentCache = function() {
contentLoaded = {};
}
this.getLeftTopAbsPos = function(elem) {
var left = 0;
var top = 0;
do {
left += elem.offsetLeft;
top += elem.offsetTop;
} while(elem = elem.offsetParent);
return [left, top];
}
this.loadContent = function(urlParams, elementId, iconElementName)  {
currentElement[elementId] = true;
timer = setTimeout(loaderName + ".loadContentDelayed(\'"+urlParams+"\',\'"+elementId+"\',\'"+iconElementName+"\')", 1000);
}
this.loadContentDelayed = function(urlParams, elementId, iconElementName)  {
if (!currentElement[elementId]) {
return;
}
var imgIcon = document.getElementById(iconElementName);
var leftTop = this.getLeftTopAbsPos(imgIcon);
var destDiv = (contentLoaded[elementId] ? document.getElementById(elementId) : document.getElementById('loadingDiv'));
repositionTooltip(destDiv, leftTop, imgIcon);
destDiv.style.visibility='visible';
var ifr = document.getElementById('tooltipIframe');
placeIframeBehindDiv(ifr,destDiv);
// don't reload the content if it's already loaded and if we're already
// waiting for a response, then don't re-request it
if (contentLoaded[elementId] || waitingForResponse[elementId] ) {
return;
}
contentLoaded[elementId] = false;
waitingForResponse[elementId] = true;
var xmlHttpRequest = XH_XmlHttpCreate();
var loaderHandler = function() {
if (xmlHttpRequest.readyState == XML_READY_STATE_COMPLETED) {
if (xmlHttpRequest.status == 200) { // request is OK
var content = xmlHttpRequest.responseText;
var element = document.getElementById(elementId);
if (element) {
element.innerHTML = content;
contentLoaded[elementId] = true;
repositionTooltip(element, leftTop, imgIcon);
document.getElementById('loadingDiv').style.visibility='hidden';
element.style.visibility='visible';
placeIframeBehindDiv(ifr, element);
}
waitingForResponse[elementId] = false;
} else {
throw("Unexpected XHR.state: " + xmlHttpRequest.status);
}
}
}
var url = baseUrl + urlParams;
try {
XH_XmlHttpGET(xmlHttpRequest, url, loaderHandler);
} catch (ex) {
if (document.getElementById(elementId)) {
contentLoaded[elementId] = true;
}
waitingForResponse[elementId] = false;
}
}
this.hideContent = function(elementId) {
currentElement[elementId] = false;
timer = setTimeout(loaderName + ".hideContentDelayed(\'"+elementId+"\')", 300);
}
this.hideContentDelayed = function(elementId) {
if (currentElement[elementId]) {
return;
}
document.getElementById('tooltipIframe').style.display='none';
document.getElementById(elementId).style.visibility='hidden';
document.getElementById('loadingDiv').style.visibility='hidden';
}
}

