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(a){$A(document.getElementsByClassName(HelpBalloon.ELEMENT_CLASS_NAME)).each(function(a){if(a&&a.tagName&&a.href&&a.href!=""){new HelpBalloon({icon:a,method:"get"})}});Event.observe(document,"mousemove",HelpBalloon._trackMousePosition)},_mouseX:0,_mouseY:0,_trackMousePosition:function(a){if(!a)a=window.event;HelpBalloon._mouseX=a.clientX;HelpBalloon._mouseY=a.clientY}});Event.observe(window,"load",HelpBalloon.registerClassLinks);HelpBalloon.prototype={options:null,container:null,inner:null,icon:null,content:null,button:null,closer:null,titleContainer:null,bgContainer:null,balloons:null,_titleString:null,visible:false,drawn:false,balloonCoords:null,balloonDimensions:null,id:null,_lastBalloon:null,initialize:function(a){_balloons=[];this.options=new HelpBalloon.Options;Object.extend(this.options,a||{});this._titleString=this.options.title;this.balloonDimensions=[0,0];this.balloons=[];for(var b=0;b<4;b++){var c=new Element("img",{src:"/"+this.options.balloonPrefix+b+this.options.balloonSuffix});this.balloons.push(c.src)}this._lastBalloon=c;this.button=new Element("img",{src:this.options.button});if(typeof this.options.icon=="string"){this.icon=new Element("img",{src:this.options.icon,id:this.id+"_icon"});Element.setStyle(this.icon,this.options.iconStyle)}else{this.icon=this.options.icon;this.options.returnElement=true}this.icon._HelpBalloon=this;for(b=0;b<this.options.useEvent.length;b++)Event.observe(this.icon,this.options.useEvent[b],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 d=$(this.id);var e=d.parentNode;e.insertBefore(this.icon,d);e.removeChild(d)}},toggle:function(a){if(!a)a=window.event||{type:this.options.useEvent,target:this.icon};var b=Event.element(a);Event.stop(a);if(a.type==this.options.useEvent&&!this.visible&&b==this.icon){this.show(a)}else this.hide()},show:function(a){if(!this.visible){if(!a)a=window.event;if(!this.drawn||!this.options.cacheRemoteContent)this._draw();this._reposition(a);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,HelpBalloon._mouseY))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(a){if(this.icon.tagName.toLowerCase()=="area"||!!this.icon.isMap){this.balloonCoords=Event.pointer(a)}else{this.balloonCoords=this._getXY(this.icon);var b=this.icon.offsetWidth/2;var c=this.icon.offsetHeight/2;var d=this.options.anchorPosition.split(/\s+/gi);if(d.length>2)d.length=2;for(var e=0;e<d.length;e++){switch(d[e].toLowerCase()){case"left":b=0;break;case"right":b=this.icon.offsetWidth;break;case"center":b=this.icon.offsetWidth/2;break;case"top":c=0;break;case"middle":c=this.icon.offsetHeight/2;break;case"bottom":c=this.icon.offsetHeight;break;default:var f=parseInt(d[e]);if(!isNaN(f)){if(e==0){if(f<0){b=0}else{if(f>this.icon.offsetWidth)b=this.icon.offsetWidth;else b=f}}else{if(f<0){c=0}else{if(f>this.icon.offsetHeight)c=this.icon.offsetHeight;else c=f}}}break}}this.balloonCoords.x+=b;this.balloonCoords.y+=c}var g=1;if(this.options.fixedPosition==HelpBalloon.POS_DYNAMIC){var h=this.balloonCoords.y-this.balloonDimensions[1];if(h<0)g+=2;var i=this.balloonCoords.x+this.balloonDimensions[0];var j=Prototype.Browser.IE?document.body.clientWidth:window.outerWidth;if(i>j)g--}else g=this.options.fixedPosition;var k=0;var l=0;switch(g){case 0:k=this.balloonCoords.x-this.balloonDimensions[0];l=this.balloonCoords.y-this.balloonDimensions[1];break;case 1:k=this.balloonCoords.x;l=this.balloonCoords.y-this.balloonDimensions[1];break;case 2:k=this.balloonCoords.x-this.balloonDimensions[0];l=this.balloonCoords.y;break;case 3:k=this.balloonCoords.x;l=this.balloonCoords.y;break}var m={left:k+"px",top:l+"px",width:this.balloonDimensions[0]+"px",height:this.balloonDimensions[1]+"px"};if(Prototype.Browser.IE){if(this.balloons[g].toLowerCase().indexOf(".png")>-1){Element.setStyle(this.bgContainer,{left:"0px",top:"0px",filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.balloons[g]+"', sizingMethod='scale')",width:this.balloonDimensions[0]+"px",height:this.balloonDimensions[1]+"px",position:"absolute"})}else m["background"]="transparent url("+this.balloons[g]+") top left no-repeat"}else{m["background"]="transparent url("+this.balloons[g]+") top left no-repeat"}Element.setStyle(this.container,m)},_draw:function(){Element.setStyle(this.container,Object.extend(this.options.balloonStyle,{position:"absolute",display:"none"}));var a=this.options.dataURL;if(this.icon.className=="a"){if(!this.options.dataURL&&this.icon.href!=""){a=this.icon.href;this.options.cacheRemoteContent=false}}if(a&&(!this.drawn||!this.options.cacheRemoteContent)){var b=new Ajax.Request(this.options.dataURL,{asynchronous:false,method:this.options.method});var c=false;if(b.transport.responseXML){var d=b.transport.responseXML.getElementsByTagName("HelpBalloon")[0];if(d){if(!this.options.title){xmlTitle=d.getElementsByTagName("title")[0];if(xmlTitle)this._titleString=xmlTitle.firstChild.nodeValue}xmlContent=d.getElementsByTagName("content")[0];if(xmlContent)this.options.content=xmlContent.firstChild.nodeValue}else c=true}else c=true;if(c){if(!this.options.title){var e=b.transport.responseText.match(/\<title\>([^\<]+)\<\/title\>/gi);if(e){e=e.toString().replace(/\<title\>|\<\/title\>/gi,"");this._titleString=e}}this.options.content=b.transport.responseText}}this.balloonDimensions[0]=this._lastBalloon.width;this.balloonDimensions[1]=this._lastBalloon.height;var f=[this.balloonDimensions[0]-2*this.options.contentMargin,this.balloonDimensions[1]-2*this.options.contentMargin];var g=[this.button.width,this.button.height];if(!this.drawn){this.inner=new Element("div");this.titleContainer=new Element("div");this.inner.appendChild(this.titleContainer);if(Prototype.Browser.IE&&this.options.button.toLowerCase().indexOf(".png")>-1){this.bgContainer=new Element("div");this.container.appendChild(this.bgContainer);this.closer=new Element("div");Element.setStyle(this.closer,{filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.options.button+"', sizingMethod='scale')"})}else{this.closer=this.button}Event.observe(this.closer,"click",this.toggle.bindAsEventListener(this));this.inner.appendChild(this.closer);this.content=new Element("div");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:f[0]+"px",height:f[1]+"px"});Element.setStyle(this.titleContainer,{width:f[0]-g[0]+"px",height:g[1]+"px",position:"absolute",overflow:"hidden",top:"0px",left:"0px"});Element.setStyle(this.titleContainer,this.options.titleStyle);Element.setStyle(this.closer,{width:g[0]+"px",height:g[1]+"px",cursor:"pointer",position:"absolute",top:"0px",right:"0px"});Element.setStyle(this.content,{width:f[0]+"px",height:f[1]-this.button.height+"px",overflow:"auto",position:"absolute",top:g[1]+"px",left:"0px",fontFamily:"verdana",fontSize:"11px",fontWeight:"normal",color:"black"})},_getXY:function(a){var b=Position.cumulativeOffset(a);var c=b[1];var d=b[0];var e=d+parseInt(a.offsetWidth);var f=c+parseInt(a.offsetHeight);return{x:d,y:c,x2:e,y2:f}},_isChild:function(a){var b=15;do{if(a==this.container)return true;a=a.parentNode}while(a&&b--);return false},_isOver:function(a){if(!this.visible)return false;if(a==this.container||this._isChild(a))return false;var b=this._getXY(a);var c=this._getXY(this.container);if((b.x>=c.x&&b.x<=c.x2||b.x2>=c.x&&b.x2<=c.x2)&&(b.y>=c.y&&b.y<=c.y2||b.y2>=c.y&&b.y2<=c.y2)){return true}else return false},_showLowerElements:function(){if(this.options.hideUnderElementsInIE){var a=this._getWeirdAPIElements();for(var b=0;b<a.length;b++){if(this._isOver(a[b])){if(a[b].style.visibility!="visible"&&a[b].hiddenBy==this){a[b].style.visibility="visible";a[b].hiddenBy=null}}}}},_hideLowerElements:function(){if(this.options.hideUnderElementsInIE){var a=this._getWeirdAPIElements();for(var b=0;b<a.length;b++){if(this._isOver(a[b])){if(a[b].style.visibility!="hidden"){a[b].style.visibility="hidden";a[b].hiddenBy=this}}}}},_getWeirdAPIElements:function(){if(!Prototype.Browser.IE)return[];var a=["select","input","object"];var b=[];for(var c=0;c<a.length;c++){var d=document.getElementsByTagName(a[c]);for(var e=0;e<d.length;e++){b.push(d[e])}}return b},_hideOtherHelps:function(a){if(this.options.hideOtherBalloonsOnDisplay){$A(HelpBalloon._balloons).each(function(a){if(a!=this){a.hide()}}.bind(this))}}};HelpBalloon.Options=Class.create();HelpBalloon.Options.prototype={initialize:function(a){Object.extend(this,a||{})},showEffect:window.Scriptaculous?Effect.Appear:null,showEffectOptions:{duration:.2},hideEffect:window.Scriptaculous?Effect.Fade:null,hideEffectOptions:{duration:.2},returnElement:false,icon:"images/icon.gif",altText:"Click here for help with this topic.",dataURL:null,title:null,content:null,useEvent:["click"],method:"get",cacheRemoteContent:true,contentMargin:35,buttonX:246,buttonY:35,button:"/images/button.png",balloonPrefix:"images/balloon-",balloonSuffix:".png",anchorPosition:"center middle",hideUnderElementsInIE:true,balloonStyle:{},titleStyle:{color:"black",fontSize:"16px",fontWeight:"bold",fontFamily:"Verdana"},iconStyle:{cursor:"pointer"},hideOtherBalloonsOnDisplay:true,fixedPosition:HelpBalloon.POS_DYNAMIC,autoHideTimeout:0}
