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!='')
{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,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(options)
{this.options=new HelpBalloon.Options();Object.extend(this.options,options||{});this._titleString=this.options.title;this.balloonDimensions=[0,0];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.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(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)
{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,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(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]);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=2;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'}
if(Prototype.Browser.IE)
{if(this.balloons[pos].toLowerCase().indexOf('.png')>-1)
{Element.setStyle(this.bgContainer,{'left':'0px','top':'0px','filter':"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.balloons[pos]+"', sizingMethod='scale')",'width':this.balloonDimensions[0]+'px','height':this.balloonDimensions[1]+'px','position':'absolute'});}
else
containerStyle['background']='transparent url('+this.balloons[pos]+') top left no-repeat';}
else
{containerStyle['background']='transparent url('+this.balloons[pos]+') top left no-repeat';}
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.balloonDimensions[0]=560;this.balloonDimensions[1]=900;var contentDimensions=[this.balloonDimensions[0]-(2*this.options.contentMargin)-65,this.balloonDimensions[1]-(2*this.options.contentMargin)];var buttonDimensions=[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+30)+'px','left':this.options.contentMargin+'px','width':contentDimensions[0]+'px','height':contentDimensions[1]+'px'});Element.setStyle(this.titleContainer,{'width':0+'px','height':0+'px','position':'absolute','overflow':'hidden','top':'0px','left':'0px'});Element.setStyle(this.titleContainer,this.options.titleStyle);Element.setStyle(this.closer,{'width':72+'px','height':11+'px','cursor':'pointer','position':'absolute','top':'0px','right':'0px'});Element.setStyle(this.content,{'width':contentDimensions[0]+'px','height':(contentDimensions[1]-this.button.height)+'px','overflow':'auto','position':'absolute','top':buttonDimensions[1]+'px','left':'0px','fontFamily':'verdana','fontSize':'14px','fontWeight':'normal','color':'black'});},_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:'/assets/HelpBalloon/images/icon.gif',altText:'Click here for help with this topic.',dataURL:null,title:null,content:null,useEvent:['click'],method:'get',cacheRemoteContent:true,contentMargin:20,buttonX:246,buttonY:35,button:'/assets/HelpBalloon/images/button.png',balloonPrefix:'/assets/HelpBalloon/images/balloon-',balloonSuffix:'.png',anchorPosition:'center middle',hideUnderElementsInIE:true,balloonStyle:{},titleStyle:{'color':'black','fontSize':'16px','fontWeight':'bold','fontFamily':'Verdana'},iconStyle:{'cursor':'pointer','width':'30px','height':'22px'},hideOtherBalloonsOnDisplay:true,fixedPosition:HelpBalloon.POS_DYNAMIC,autoHideTimeout:0};
