var HelpBalloon=Object.extend(Class.create(),{POS_DYNAMIC:-1,POS_TOP_LEFT:0,POS_TOP_RIGHT:1,POS_BOTTOM_LEFT:2,POS_BOTTOM_RIGHT:3,ELEMENT_CLASS_NAME:'HelpBalloon',_balloons:[],registerClassLinks:function(e){$A(document.getElementsByClassName(HelpBalloon.ELEMENT_CLASS_NAME)).each(function(obj){if(obj&&obj.tagName&&obj.href&&obj.href!==''){var tmpReq=new HelpBalloon({icon:obj,method:'get'})}});Event.observe(document,'mousemove',HelpBalloon._trackMousePosition)},_mouseX:0,_mouseY:0,_trackMousePosition:function(e){if(!e){e=window.event}HelpBalloon._mouseX=e.clientX;HelpBalloon._mouseY=e.clientY}});Event.observe(window,'load',HelpBalloon.registerClassLinks);HelpBalloon.prototype={options:null,container:null,inner:null,icon:null,content:null,titleContainer:null,bgContainer:null,_titleString:null,visible:false,drawn:false,balloonCoords:null,balloonDimensions:null,id:null,_lastBalloon:null,initialize:function(options){this.options=new HelpBalloon.Options();Object.extend(this.options,options||{});this._titleString=this.options.title;this.balloonDimensions=[250,150];this.parent=$(this.options.parent);this.balloons=[];for(var i=0;i<4;i++){var balloon=new Element('img',{src:this.options.balloonPrefix+i+this.options.balloonSuffix});this.balloons.push(balloon.src)}this._lastBalloon=balloon;this.icon=this.options.icon;this.options.returnElement=true;this.icon._HelpBalloon=this;for(i=0;i<this.options.useEvent.length;i++){Event.observe(this.icon,this.options.useEvent[i],this.toggle.bindAsEventListener(this))}this.container=new Element('div');this.container._HelpBalloon=this;this.id='HelpBalloon_'+Element.identify(this.container);HelpBalloon._balloons.push(this);if(!this.options.returnElement){document.write('<span id="'+this.id+'"></span>');var te=$(this.id);var p=te.parentNode;p.insertBefore(this.icon,te);p.removeChild(te)}},toggle:function(event){if(!event){event=window.event||{type:this.options.useEvent,target:this.icon}}var icon=Event.element(event);Event.stop(event);if(event.type==this.options.useEvent&&!this.visible&&icon==this.icon){this.show(event)}else{this.hide()}},show:function(event){Event.observe(document,'mousemove',HelpBalloon._trackMousePosition);if(!this.visible){if(!event)event=window.event;if(!this.drawn||!this.options.cacheRemoteContent){this._draw()}this._reposition(event);this._hideOtherHelps();if(this.options.showEffect){this.options.showEffect(this.container,Object.extend(this.options.showEffectOptions,{afterFinish:this._afterShow.bindAsEventListener(this)}))}else{this._afterShow()}Event.observe(window,'resize',this._reposition.bindAsEventListener(this))}},_afterShow:function(){Element.setStyle(this.container,{'display':'block'});this._hideLowerElements();this.visible=true;if(this.options.autoHideTimeout){setTimeout(this._hideQueue.bind(this),this.options.autoHideTimeout)}},_hideQueue:function(){if(Position.within(this.container,HelpBalloon._mouseX+(Element.cumulativeScrollOffset(this.parent).left),HelpBalloon._mouseY+(Element.cumulativeScrollOffset(this.parent).top))||Position.within(this.parent,HelpBalloon._mouseX+(Element.cumulativeScrollOffset(this.parent).left),(HelpBalloon._mouseY)+(Element.cumulativeScrollOffset(this.parent).top))){setTimeout(this._hideQueue.bind(this),this.options.autoHideTimeout)}else{this.hide()}},hide:function(){if(this.visible){this._showLowerElements();if(this.options.hideEffect){this.options.hideEffect(this.container,Object.extend(this.options.hideEffectOptions,{afterFinish:this._afterHide.bindAsEventListener(this)}))}else{this._afterHide()}Event.stopObserving(window,'resize',this._reposition.bindAsEventListener(this))}},_afterHide:function(){Element.setStyle(this.container,{'display':'none'});this.visible=false},_reposition:function(event){if(this.icon.tagName.toLowerCase()=='area'||!!this.icon.isMap){this.balloonCoords=Event.pointer(event)}else{this.balloonCoords=this._getXY(this.icon);var ho=this.icon.offsetWidth/2;var vo=this.icon.offsetHeight/2;var offsets=this.options.anchorPosition.split(/\s+/gi);if(offsets.length>2){offsets.length=2}for(var i=0;i<offsets.length;i++){switch(offsets[i].toLowerCase()){case'left':ho=0;break;case'right':ho=this.icon.offsetWidth;break;case'center':ho=this.icon.offsetWidth/2;break;case'top':vo=0;break;case'middle':vo=this.icon.offsetHeight/2;break;case'bottom':vo=this.icon.offsetHeight;break;default:var numVal=parseInt(offsets[i],10);if(!isNaN(numVal)){if(i==0){if(numVal<0){ho=0}else{if(numVal>this.icon.offsetWidth){ho=this.icon.offsetWidth}else{ho=numVal}}}else{if(numVal<0){vo=0}else{if(numVal>this.icon.offsetHeight){vo=this.icon.offsetHeight}else{vo=numVal}}}}break}}this.balloonCoords.x+=ho;this.balloonCoords.y+=vo}var pos=1;if(this.options.fixedPosition==HelpBalloon.POS_DYNAMIC){var offsetHeight=this.balloonCoords.y-this.balloonDimensions[1];if(offsetHeight<0)pos+=2;var offsetWidth=this.balloonCoords.x+this.balloonDimensions[0];var ww=Prototype.Browser.IE?document.body.clientWidth:window.outerWidth;if(offsetWidth>ww)pos--}else pos=this.options.fixedPosition;var zx=0;var zy=0;switch(pos){case 0:zx=this.balloonCoords.x-this.balloonDimensions[0];zy=this.balloonCoords.y-this.balloonDimensions[1];break;case 1:zx=this.balloonCoords.x;zy=this.balloonCoords.y-this.balloonDimensions[1];break;case 2:zx=this.balloonCoords.x-this.balloonDimensions[0];zy=this.balloonCoords.y;break;case 3:zx=this.balloonCoords.x;zy=this.balloonCoords.y;break}var containerStyle={'left':zx+"px",'top':zy+"px",'width':this.balloonDimensions[0]+'px','height':this.balloonDimensions[1]+'px'};Element.setStyle(this.container,containerStyle)},_draw:function(){Element.setStyle(this.container,Object.extend(this.options.balloonStyle,{'position':'absolute','display':'none'}));var url=this.options.dataURL;if(this.icon.className=='a'){if(!this.options.dataURL&&this.icon.href!=''){url=this.icon.href;this.options.cacheRemoteContent=false}}if(url&&(!this.drawn||!this.options.cacheRemoteContent)){var cont=new Ajax.Request(this.options.dataURL,{asynchronous:false,method:this.options.method});var doHTML=false;if(cont.transport.responseXML){var xml=cont.transport.responseXML.getElementsByTagName('HelpBalloon')[0];if(xml){if(!this.options.title){xmlTitle=xml.getElementsByTagName('title')[0];if(xmlTitle)this._titleString=xmlTitle.firstChild.nodeValue}xmlContent=xml.getElementsByTagName('content')[0];if(xmlContent)this.options.content=xmlContent.firstChild.nodeValue}else doHTML=true}else doHTML=true;if(doHTML){if(!this.options.title){var htmlTitle=cont.transport.responseText.match(/\<title\>([^\<]+)\<\/title\>/gi);if(htmlTitle){htmlTitle=htmlTitle.toString().replace(/\<title\>|\<\/title\>/gi,'');this._titleString=htmlTitle}}this.options.content=cont.transport.responseText}}this._lastBalloon.width;this._lastBalloon.height;var contentDimensions=[this.balloonDimensions[0]-(2*this.options.contentMargin),this.balloonDimensions[1]-(2*this.options.contentMargin)];if(!this.drawn){this.inner=new Element('div');Element.addClassName(this.inner,'tooltip-inner');this.titleContainer=new Element('h3');this.inner.appendChild(this.titleContainer);this.content=new Element('div');Element.addClassName(this.content,'tooltip-content');this.inner.appendChild(this.content);this.container.appendChild(this.inner);document.getElementsByTagName('body')[0].appendChild(this.container);this.drawn=true}this.titleContainer.innerHTML='';this.titleContainer.appendChild(document.createTextNode(this._titleString));this.content.innerHTML=this.options.content;Element.setStyle(this.inner,{'position':'absolute','top':this.options.contentMargin+'px','left':this.options.contentMargin+'px','width':contentDimensions[0]+'px','height':contentDimensions[1]+'px'});Element.setStyle(this.titleContainer,{'width':contentDimensions[0]+'px','height':this.options.headingHeight+'px','overflow':'hidden'});Element.setStyle(this.titleContainer,this.options.titleStyle);Element.setStyle(this.content,{'width':contentDimensions[0]+'px','height':(contentDimensions[1]-this.options.headingHeight)+'px','overflow':'auto'})},_getXY:function(obj){var pos=Position.cumulativeOffset(obj);var y=pos[1];var x=pos[0];var x2=x+parseInt(obj.offsetWidth);var y2=y+parseInt(obj.offsetHeight);return{'x':x,'y':y,'x2':x2,'y2':y2}},_isChild:function(obj){var i=15;do{if(obj==this.container)return true;obj=obj.parentNode}while(obj&&i--);return false},_isOver:function(this_obj){if(!this.visible)return false;if(this_obj==this.container||this._isChild(this_obj))return false;var this_coords=this._getXY(this_obj);var that_coords=this._getXY(this.container);if((((this_coords.x>=that_coords.x&&this_coords.x<=that_coords.x2)||(this_coords.x2>=that_coords.x&&this_coords.x2<=that_coords.x2))&&((this_coords.y>=that_coords.y&&this_coords.y<=that_coords.y2)||(this_coords.y2>=that_coords.y&&this_coords.y2<=that_coords.y2)))){return true}else return false},_showLowerElements:function(){if(this.options.hideUnderElementsInIE){var elements=this._getWeirdAPIElements();for(var i=0;i<elements.length;i++){if(this._isOver(elements[i])){if(elements[i].style.visibility!='visible'&&elements[i].hiddenBy==this){elements[i].style.visibility='visible';elements[i].hiddenBy=null}}}}},_hideLowerElements:function(){if(this.options.hideUnderElementsInIE){var elements=this._getWeirdAPIElements();for(var i=0;i<elements.length;i++){if(this._isOver(elements[i])){if(elements[i].style.visibility!='hidden'){elements[i].style.visibility='hidden';elements[i].hiddenBy=this}}}}},_getWeirdAPIElements:function(){if(!Prototype.Browser.IE)return[];var objs=['select','input','object'];var elements=[];for(var i=0;i<objs.length;i++){var e=document.getElementsByTagName(objs[i]);for(var j=0;j<e.length;j++){elements.push(e[j])}}return elements},_hideOtherHelps:function(e){if(this.options.hideOtherBalloonsOnDisplay){$A(HelpBalloon._balloons).each(function(obj){if(obj!=this){obj.hide()}}.bind(this))}}};HelpBalloon.Options=Class.create();HelpBalloon.Options.prototype={initialize:function(values){Object.extend(this,values||{})},showEffect:window.Scriptaculous?Effect.Appear:null,showEffectOptions:{duration:0.2},hideEffect:window.Scriptaculous?Effect.Fade:null,hideEffectOptions:{duration:0.2},returnElement:false,icon:null,dataURL:null,title:null,content:null,useEvent:[],method:'get',cacheRemoteContent:true,contentMargin:15,headingHeight:20,balloonPrefix:'images/balloon-',balloonSuffix:'.png',anchorPosition:'center top',hideUnderElementsInIE:true,balloonStyle:{},titleStyle:{},iconStyle:{'cursor':'pointer'},hideOtherBalloonsOnDisplay:true,fixedPosition:HelpBalloon.POS_TOP_LEFT,autoHideTimeout:0};
