var Box = function () {
 document.onmousemove = this.setActiveCoordinates;
 document.onscroll = Balloon.prototype.hideTooltip;
 window.onbeforeunload = function(){
 Balloon.prototype.nukeTooltip;
 balloonIsSuppressed = true;
 };
 if (this.isIE()) {
 this.suppress = true;
 }
 return this;
}
Box.prototype = new Balloon();
Box.prototype.makeBalloon = function() {
 var self = currentBalloonClass;
 var box = document.getElementById('visibleBalloonElement');
 if (box) self.parent.removeChild(box);
 box = document.createElement('div');
 box.setAttribute('id','visibleBalloonElement');
 self.parent.appendChild(box);
 self.activeBalloon = box;
 var contents = document.createElement('div');
 contents.setAttribute('id','contents');
 box.appendChild(contents);
 self.contents = contents;
 self.parts = new Array(box);
 self.setStyle(contents,'z-index',2);
 self.setStyle(contents,'color',self.fontColor);
 self.setStyle(contents,'font-family',self.fontFamily);
 self.setStyle(contents,'font-size',self.fontSize);
 if (balloonIsSticky) {
 self.setStyle(contents,'margin-right',10);
 }
 else if (self.displayTime) {
 self.timeoutAutoClose = window.setTimeout(this.hideTooltip,self.displayTime);
 }
 return box;
}
Box.prototype.setBalloonStyle = function(vOrient,hOrient) {
 var self = currentBalloonClass;
 var box = self.activeBalloon;
 self.shadow = 0;
 self.stem = false;
 self.stemHeight = 0;
 self.setStyle(box,'background',self.bgColor);
 self.setStyle(box,'border',self.borderStyle);
 self.setStyle(box,'position','absolute');
 self.setStyle(box,'padding',self.padding);
 self.setStyle(box,'top',-9999);
 self.setStyle(box,'z-index',1000000);
 if (self.width) {
 var widthUsed = self.getLoc('contents','width') + 20;
 var newWidth = widthUsed > self.width ? self.width : widthUsed;
 self.setStyle('contents','width',newWidth);
 }
 if (self.height) {
 var heightUsed = self.getLoc('contents','height') + 20;
 var newHeight = heightUsed > self.height ? self.height : heightUsed;
 self.setStyle('contents','height',newHeight+(2*self.padding));
 }
 if (hOrient == 'left') {
 var pageWidth = self.pageRight - self.pageLeft;
 var activeRight = pageWidth - self.activeLeft;
 self.setStyle(box,'right',activeRight);
 }
 else {
 self.setStyle(box,'left',self.activeRight - self.xOffset);
 }
 if (!self.width) {
 var width = self.getLoc('contents','width');
 if (self.isIE()) width += self.padding;
 if (width > self.maxWidth) width = self.maxWidth + self.padding;
 if (width < self.minWidth) width = self.minWidth;
 self.setStyle(box,'width',width);
 }
 var overflow = balloonIsSticky ? 'auto' : 'hidden';
 self.setStyle('contents','overflow',overflow);
 var boxLeft = self.getLoc(box,'x1');
 var boxRight = self.getLoc(box,'x2');
 var scrollBar = 20;
 if (hOrient == 'right' && boxRight > (self.pageRight - self.padding)) {
 self.setStyle('contents','width',(self.pageRight - boxLeft) - self.padding - scrollBar);
 }
 else if (hOrient == 'left' && boxLeft < (self.pageLeft + self.padding)) {
 self.setStyle('contents','width',(boxRight - self.pageLeft) - self.padding);
 }
 var boxWidth = self.getLoc(box,'width');
 var boxHeight = self.getLoc(box,'height');
 if (self.allowFade) {
 self.setOpacity(0.01);
 }
 else {
 self.setOpacity(self.opacity);
 }
 if (!(self.activeTop && self.activeBottom)) {
 self.setActiveCoordinates();
 }
 if (vOrient == 'up') {
 var activeTop = self.activeTop - boxHeight;
 self.setStyle(box,'top',activeTop);
 }
 else if (vOrient == 'down') {
 var activeTop = self.activeBottom;
 self.setStyle(box,'top',activeTop);
 }
 self.setStyle(box,'display','inline');
 var boxTop = self.getLoc(box,'y1');
 var boxBottom = self.getLoc(box,'y2');
 var deltaTop = boxTop < self.pageTop ? self.pageTop - boxTop : 0;
 var deltaBottom = boxBottom > self.pageBottom ? boxBottom - self.pageBottom : 0;
 if (vOrient == 'up' && deltaTop) {
 var newHeight = boxHeight - deltaTop;
 if (newHeight > (self.padding*2)) {
 self.setStyle('contents','height',newHeight);
 self.setStyle(box,'top',self.pageTop+self.padding);
 self.setStyle(box,'height',newHeight);
 }
 }
 if (vOrient == 'down' && deltaBottom) {
 var newHeight = boxHeight - deltaBottom - scrollBar;
 if (newHeight > (self.padding*2) + scrollBar) {
 self.setStyle('contents','height',newHeight);
 self.setStyle(box,'height',newHeight);
 }
 }
 self.hOrient = hOrient;
 self.vOrient = vOrient;
}
Box.prototype.addCloseButton = function () {
 var self = currentBalloonClass;
 var margin = Math.round(self.padding/2);
 var closeWidth = self.closeButtonWidth || 16;
 var balloonTop = self.getLoc('visibleBalloonElement','y1') + margin;
 var balloonRight = self.getLoc('visibleBalloonElement','x2') - margin - self.closeButtonWidth;
 var closeButton = document.getElementById('closeButton');
 if (!closeButton) {
 closeButton = new Image;
 closeButton.setAttribute('id','closeButton');
 closeButton.setAttribute('src',self.closeButton);
 closeButton.onclick = function() {
 Balloon.prototype.nukeTooltip();
 };
 self.setStyle(closeButton,'position','absolute');
 document.body.appendChild(closeButton);
 }
 if (self.isIE()) {
 balloonRight -= self.padding;
 }
 self.setStyle(closeButton,'top',balloonTop);
 self.setStyle(closeButton,'left',balloonRight);
 self.setStyle(closeButton,'display','inline');
 self.setStyle(closeButton,'cursor','pointer');
 self.setStyle(closeButton,'z-index',999999999);
}