var Message=new Class({Implements:[Options,Events],msgChain:null,end:false,isDisplayed:false,windowSize:null,pageSize:null,page:$(document),box:null,boxSize:null,scrollPos:null,windowSize:null,hasVerticalBar:false,hasHorizontalBar:false,boxPos:$empty,tipCheck:true,cancel:false,fx:null,fxOut:null,options:{callingElement:null,top:false,left:false,centered:false,offset:30,width:"auto",icon:null,iconPath:"images/icons/",iconSize:40,fontSize:14,title:null,message:null,delay:0,autoDismiss:true,dismissOnEvent:false,isUrgent:false,callback:null,passEvent:null,stack:true,fxTransition:null,fxDuration:"normal",fxUrgentTransition:Fx.Transitions.Bounce.easeOut,fxOutTransition:null,fxOutDuration:"normal",yesLink:"Yes",noLink:"No"},initialize:function(a){this.setOptions(a);this.box=this;if(this.options.width=="auto"){this.options.width="250px"}if($chk(this.options.passEvent)&&$defined(this.options.callingElement)){this.options.dismissOnEvent=true;this.options.callingElement.addEvent("mouseout",function(){if(this.isDisplayed){this.dismiss()}else{this.cancel=true}}.bind(this))}},say:function(d,c,b,a,e){this.setVars(d,c,b,a,e);this.box=this.createBox();this.msgChain=new Chain();this.setMsgChain()},ask:function(d,c,e,b,a){this.options.autoDismiss=false;if($chk(e)){this.options.callback=e}a=$defined(a)?a:true;this.say(d,c,b,a,e)},tell:function(d,c,b,a){a=$defined(a)?a:true;this.options.dismissOnEvent=true;this.say(d,c,b,a)},waiter:function(d,c,b,a){if($chk(a)){this.options.centered=a}this.options.autoDismiss=false;this.options.dismissOnEvent=true;this.options.centered=true;this.say(d,c,b)},tip:function(c,b,a){this.options.autoDismiss=true;this.options.dismissOnEvent=true;this.say(c,b,a)},setVars:function(d,c,b,a,e){if($defined(d)){this.options.title=d}if($defined(c)){this.options.message=c}if($defined(b)){this.options.icon=b}if($defined(a)){this.options.isUrgent=a}if($defined(e)){this.options.callback=e}},setMsgChain:function(){if(!$chk(this.fx)){this.fx=new Fx.Tween(this.box,{link:"chain",onComplete:function(){if((this.options.autoDismiss&&!this.options.dismissOnEvent)||(!this.isDisplayed&&!$chk(this.options.callback))){this.msgChain.callChain()}}.bind(this),transition:this.options.fxTransition,duration:this.options.fxDuration})}var a;if($chk(this.options.callback)||this.options.autoDismiss==false||this.options.dismissOnEvent){a=0}else{a=2000}this.msgChain.wait(this.options.delay).chain(function(){if(!this.cancel){this.showMsg()}else{this.complete()}this.fireEvent("onShow")}.bind(this)).wait(a).chain(function(){this.hideMsg()}.bind(this)).callChain()},showMsg:function(){this.setSizes();this.setBoxPosition();if(this.hasVerticalBar){$(document.body).setStyle("overflow","hidden")}this.box.setStyles({opacity:0,top:this.boxPos.startTop,left:this.boxPos.startLeft,"z-index":"1000"}).fade("in");if(!this.options.isUrgent){this.fx.start("top",this.boxPos.endTop)}else{var a=new Fx.Tween(this.box,{duration:"long",transition:this.options.fxUrgentTransition});a.start("top",this.boxPos.endTop)}this.isDisplayed=true},dismiss:function(){this.msgChain.callChain()},setBoxPosition:function(){this.boxPos=new Hash();var e=(this.options.top&&this.options.left),k,f,b,l,h=0,j=0,m=3.5,d,a=1,i,g=null,n;if(this.options.isUrgent){g="[class*=mcUrgent]"}else{if(this.options.top){g="[class*=mcTop]"}else{if($defined(this.options.callingElement)){g="[class*=mcElement]"}else{g="[class*=mcDefault]"}}}if(this.options.stack){d=$$("[class*=messageClass]"+g+"");messagesInfo=d.getCoordinates();var i=new Array();var n=new Array();messagesInfo.each(function(o){i.push(o.height);if(o.top>0){n.push(o.top)}});h=this.scrollPos.y+this.windowSize.y-(i.sum()+m*d.length);if(h>=n.min()){h=n.min()-this.boxSize.y-m}j=i.sum()-this.boxSize.y+(m*d.length);if(n.length>0){if(j<=n[n.length-1]+i[i.length-2]+m){j=n[n.length-1]+i[i.length-2]+m}}}else{h=this.scrollPos.y+this.windowSize.y-this.boxSize.y-this.options.offset;j=this.options.offset}this.options.top?k=(this.boxSize.y*-1):k=this.scrollPos.y+this.windowSize.y;this.options.left?f=this.options.offset:f=this.windowSize.x-this.boxSize.x-this.options.offset;this.options.top?l=j:l=(h);if(($chk(this.options.passEvent)&&!this.options.isUrgent)&&!e){var c;(this.options.passEvent.page.x+this.boxSize.x>this.windowSize.x)?c=(this.boxSize.x*-1)-5:c=5;this.boxPos.extend({startTop:this.options.passEvent.page.y-this.options.offset,startLeft:this.options.passEvent.page.x+c,endTop:this.options.passEvent.page.y+j-(m*3)})}else{if((this.options.isUrgent&&!e)||this.options.centered){this.box.position();this.boxPosition=this.box.getCoordinates();if(this.options.stack&&d.length>1){j=n[n.length-1]+i[i.length-2]+m}else{j=this.boxPosition.top}this.boxPos.extend({startTop:this.boxPosition.top-100,startLeft:this.boxPosition.left,endTop:j})}else{this.boxPos.extend({startTop:k,startLeft:f,endTop:l})}}},setSizes:function(){this.boxSize=this.box.getSize();this.boxPosition=this.box.getCoordinates();this.windowSize=this.page.getSize();this.scrollPos=this.page.getScroll();this.pageSize=this.page.getScrollSize();if(this.windowSize.y>=this.pageSize.y){this.hasVerticalBar=true||false}if(this.windowSize.x>=this.pageSize.x){this.hasHorizontalBar=true||false}},createBox:function(){var l="",c="",u="",t="",j="",v,g,o,q,s,h,m,a,k;if(this.options.top){l=" mcTop"}else{if(this.options.isUrgent){t=" mcUrgent"}else{if($defined(this.options.callingElement)){j=" mcElement"}else{u=" mcDefault"}}}newBox=new Element("div",{"class":"msgBox messageClass"+l+u+t+j,styles:{"max-width":this.options.width,width:this.options.width}});g=0;if($chk(this.options.icon)){var e=new Element("div",{"class":"msgBoxIcon"});var f=new Element("img",{"class":"msgBoxImage",src:this.options.iconPath+this.options.icon,styles:{width:this.options.iconSize,height:this.options.iconSize}})}if(!$chk(this.options.title)||!$chk(this.options.message)){this.getContent()}o=new Element("div",{"class":"msgBoxContent"}).setStyle("font-size",this.options.fontSize);q=new Element("div",{"class":"msgBoxTitle",html:this.options.title}).setStyle("font-size",this.options.fontSize+4);imageWidth=this.getCSSTotalWidth("msgBoxIcon");h=new Element("div",{"class":"clear"});m=new Element("div",{html:this.options.message+"<br />",styles:{margin:"0px",width:this.options.width.toInt()-imageWidth}});a=this.options.message.indexOf("textarea")>-1;if($chk(this.options.callback)&&!a){var r=this.createLink(this.options.yesLink,true);var b=this.createLink(this.options.noLink,false);r.inject(m);m.appendText(" | ");b.inject(m)}else{if(a){var n=this.createLink("Send",true);var d=this.createLink("Cancel",false);n.inject(m);m.appendText(" | ");d.inject(m)}else{if(this.options.isUrgent||(!this.options.autoDismiss&&!this.options.dismissOnEvent)){var i=this.createLink("Ok",false);i.inject(m)}}}k=new Element("div",{"class":"msgBoxMessage"});m.inject(k);if($chk(this.options.icon)){e.inject(newBox);f.inject(e)}o.inject(newBox);q.inject(o);h.inject(o);k.inject(o);newBox.inject(this.page.body);this.box=newBox;return newBox},createLink:function(b,a){var c=new Element("a",{href:"javascript:","class":"msgBoxLink",html:b,id:b.replace(" ","_")+"Link",events:{click:function(){this.msgChain.callChain();if(a){this.executeCallback()}}.bind(this)}});return c},getCSSTotalWidth:function(b){var c=new Element("div",{id:"dummy","class":b});c.inject($(document.body));var a=c.getComputedSize();c.destroy();return a.totalWidth},executeCallback:function(){if($type(this.options.callback)=="element"){this.options.callback.fireEvent("click")}else{if($type(this.options.callback)=="function"){this.options.callback.run()}else{eval(this.options.callback)}}},getContent:function(){var d;var c;if($defined(this.options.callingElement)){var b=this.options.callingElement.getProperty("rel");var a;if(!$chk(b)){a=this.setError("Expected data in the 'rel' property of this calling element was not defined.");d=a[0];c=a[1];this.options.autoDismiss=false}else{a=b.split("::");d=a[0];c=a[1]}}this.options.title=d;this.options.message=c},setError:function(b){var a=new Array();a.push("<span style='color:#FF0000'>Error!</span>");a.push(b);return a},complete:function(){this.box.destroy();this.end=true;this.isDisplayed=false;this.fireEvent("onComplete");$(document.body).setStyle("overflow","auto")},hideMsg:function(){if(this.hasVerticalBar){$(document.body).setStyle("overflow","hidden")}var a=this.box.getCoordinates();this.box.fade("out");this.fxOut=new Fx.Tween(this.box,{transition:this.options.fxOutTransition,duration:this.options.fxOutDuration});this.fxOut.addEvent("complete",function(){this.complete()}.bind(this));var b;this.options.top?b=this.boxSize.y*-1:b=a.top+this.boxSize.y;this.fxOut.start("top",b)}});
