var Purr=new Class({options:{mode:"top",position:"left",elementAlertClass:"purr-element-alert",elements:{wrapper:"div",alert:"div",buttonWrapper:"div",button:"button"},elementOptions:{wrapper:{styles:{position:"fixed","z-index":"9999"},"class":"purr-wrapper"},alert:{"class":"purr-alert",styles:{opacity:".85"}},buttonWrapper:{"class":"purr-button-wrapper"},button:{"class":"purr-button"}},alert:{buttons:[],clickDismiss:true,hoverWait:true,hideAfter:5000,fx:{duration:500},highlight:false,highlightRepeat:false,highlight:{start:"#FF0",end:false}}},Implements:[Options,Events,Chain],initialize:function(a){this.setOptions(a);this.createWrapper();return this},bindAlert:function(){return this.alert.bind(this)},createWrapper:function(){this.wrapper=new Element(this.options.elements.wrapper,this.options.elementOptions.wrapper);if(this.options.mode=="top"){this.wrapper.setStyle("top","200px")}else{this.wrapper.setStyle("bottom",0)}document.id(document.body).grab(this.wrapper);this.positionWrapper(this.options.position)},positionWrapper:function(a){if($type(a)=="object"){var b=this.getWrapperCoords();this.wrapper.setStyles({bottom:"",left:a.x,top:a.y-b.height,position:"absolute"})}else{if(a=="left"){this.wrapper.setStyle("left",0)}else{if(a=="right"){this.wrapper.setStyle("right",0)}else{this.wrapper.setStyle("left",(window.innerWidth/2)-(this.getWrapperCoords().width/2))}}}return this},getWrapperCoords:function(){this.wrapper.setStyle("visibility","hidden");var b=this.alert("need something in here to measure");var a=this.wrapper.getCoordinates();b.destroy();this.wrapper.setStyle("visibility","");return a},alert:function(g,a){a=$merge({},this.options.alert,a||{});var f=new Element(this.options.elements.alert,this.options.elementOptions.alert);if($type(g)=="string"){f.set("html",g)}else{if($type(g)=="element"){f.grab(g)}else{if($type(g)=="array"){var e=[];g.each(function(h){e.push(this.alert(h,a))},this);return e}}}f.store("options",a);if(a.buttons.length>0){a.clickDismiss=false;a.hideAfter=false;a.hoverWait=false;var c=new Element(this.options.elements.buttonWrapper,this.options.elementOptions.buttonWrapper);f.grab(c);a.buttons.each(function(h){if(h.text!=undefined){var i=new Element(this.options.elements.button,this.options.elementOptions.button);i.set("html",h.text);if(h.callback!=undefined){i.addEvent("click",h.callback.pass(f))}if(h.dismiss!=undefined&&h.dismiss){i.addEvent("click",this.dismiss.pass(f,this))}c.grab(i)}},this)}if(a.className!=undefined){f.addClass(a.className)}this.wrapper.grab(f,(this.options.mode=="top")?"bottom":"top");var b=$merge(this.options.alert.fx,a.fx);var d=new Fx.Morph(f,b);f.store("fx",d);this.fadeIn(f);if(a.highlight){d.addEvent("complete",function(){f.highlight(a.highlight.start,a.highlight.end);if(a.highlightRepeat){f.highlight.periodical(a.highlightRepeat,f,[a.highlight.start,a.highlight.end])}})}if(a.hideAfter){this.dismiss(f)}if(a.clickDismiss){f.addEvent("click",function(){this.holdUp=false;this.dismiss(f,true)}.bind(this))}if(a.hoverWait){f.addEvents({mouseenter:function(){this.holdUp=true}.bind(this),mouseleave:function(){this.holdUp=false}.bind(this)})}return f},fadeIn:function(b){var a=b.retrieve("fx");a.set({opacity:0});a.start({opacity:$pick([this.options.elementOptions.alert.styles.opacity,0.9])})},dismiss:function(c,b){b=b||false;var a=c.retrieve("options");if(b){this.fadeOut(c)}else{this.fadeOut.delay(a.hideAfter,this,c)}},fadeOut:function(b){if(this.holdUp){this.dismiss.delay(100,this,[b,true]);return null}var a=b.retrieve("fx");if(!a){return null}var c={opacity:0};if(this.options.mode=="top"){c["margin-top"]="-"+b.offsetHeight+"px"}else{c["margin-bottom"]="-"+b.offsetHeight+"px"}a.start(c);a.addEvent("complete",function(){b.destroy()})}});Element.implement({alert:function(d,a){var c=this.retrieve("alert");if(!c){a=a||{mode:"top"};c=new Purr(a);this.store("alert",c)}var b=this.getCoordinates();c.alert(d,a);c.wrapper.setStyles({bottom:"",left:(b.left-(c.wrapper.getWidth()/2))+(this.getWidth()/2),top:b.top-(c.wrapper.getHeight()),position:"absolute"})}});
