if(!window.Modalbox){
var Modalbox=new Object();
}
Modalbox.Methods={focusableElements:new Array,options:{title:"ModalBox Window",overlayClose:true,width:500,height:90,overlayOpacity:0.75,overlayDuration:0.5,slideDownDuration:0.75,slideUpDuration:0.35,resizeDuration:0.35,inactiveFade:true,loadingString:"Please wait. Loading...",closeString:"Close window",params:{},method:"get"},_options:new Object,setOptions:function(_1){
Object.extend(this.options,_1||{});
},_init:function(_2){
Object.extend(this._options,this.options);
this.setOptions(_2);
this.MBoverlay=Builder.node("div",{id:"MB_overlay",opacity:"0"});
this.MBwindow=Builder.node("div",{id:"MB_window",style:"display: none"},[this.MBframe=Builder.node("div",{id:"MB_frame"},[this.MBheader=Builder.node("div",{id:"MB_header"},[this.MBcaption=Builder.node("div",{id:"MB_caption"}),this.MBclose=Builder.node("a",{id:"MB_close",title:this.options.closeString,href:"#"},[Builder.build("<span>&times;</span>"),]),]),this.MBcontent=Builder.node("div",{id:"MB_content"},[this.MBloading=Builder.node("div",{id:"MB_loading"},this.options.loadingString),]),]),]);
document.body.insertBefore(this.MBwindow,document.body.childNodes[0]);
document.body.insertBefore(this.MBoverlay,document.body.childNodes[0]);
this.initScrollX=window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft;
this.initScrollY=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop;
this.hide=this.hide.bindAsEventListener(this);
this.close=this._hide.bindAsEventListener(this);
this.kbdHandler=this.kbdHandler.bindAsEventListener(this);
this._initObservers();
this.initialized=true;
this.active=true;
},show:function(_3,_4){
if(!this.initialized){
this._init(_4);
}
this.content=_3;
this.setOptions(_4);
Element.update(this.MBcaption,this.options.title);
if(this.MBwindow.style.display=="none"){
this._appear();
this.event("onShow");
}else{
this._update();
this.event("onUpdate");
}
},hide:function(_5){
if(this.initialized){
if(_5){
Object.extend(this.options,_5);
}
Effect.SlideUp(this.MBwindow,{duration:this.options.slideUpDuration,afterFinish:this._deinit.bind(this)});
}else{
throw ("Modalbox isn't initialized");
}
},_hide:function(_6){
if(_6){
Event.stop(_6);
}
this.hide();
},_appear:function(){
this._toggleSelects();
this._setOverlay();
this._setWidth();
this._setPosition();
new Effect.Fade(this.MBoverlay,{from:0,to:this.options.overlayOpacity,duration:this.options.overlayDuration,afterFinish:function(){
new Effect.SlideDown(this.MBwindow,{duration:this.options.slideDownDuration,afterFinish:function(){
this._setPosition();
this.loadContent();
}.bind(this)});
}.bind(this)});
this._setWidthAndPosition=this._setWidthAndPosition.bindAsEventListener(this);
Event.observe(window,"resize",this._setWidthAndPosition);
},resize:function(_7,_8,_9){
var _a=Element.getHeight(this.MBwindow);
var _b=Element.getHeight(this.MBheader);
var _c=Element.getHeight(this.MBcontent);
var _d=((_a-_b+_8)<_c)?(_c+_b-_a):_8;
this.setOptions(_9);
new Effect.ScaleBy(this.MBwindow,_7,_d,{duration:this.options.resizeDuration,afterFinish:function(){
this.event("afterResize");
}.bind(this)});
},_update:function(){
this.currentDims=[this.MBwindow.offsetWidth,this.MBwindow.offsetHeight];
if((this.options.width+10!=this.currentDims[0])||(this.options.height+5!=this.currentDims[1])){
new Effect.ScaleBy(this.MBwindow,(this.options.width-this.currentDims[0]),(this.options.height-this.currentDims[1]),{duration:this.options.resizeDuration,afterFinish:this._loadAfterResize.bind(this),beforeStart:function(_e){
Element.update(this.MBcontent,"");
this.MBcontent.appendChild(this.MBloading);
Element.update(this.MBloading,this.options.loadingString);
}.bind(this)});
}else{
Element.update(this.MBcontent,"");
this.MBcontent.appendChild(this.MBloading);
Element.update(this.MBloading,this.options.loadingString);
this._loadAfterResize();
}
},loadContent:function(){
if(this.event("beforeLoad")!=false){
if(typeof this.content=="string"){
var _f=new RegExp(/<\/?[^>]+>/gi);
if(_f.test(this.content)){
this._insertContent(this.content);
}else{
new Ajax.Request(this.content,{method:this.options.method.toLowerCase(),parameters:this.options.params,onComplete:function(_10){
var _11=new String(_10.responseText);
_11.extractScripts().map(function(_12){
return eval(_12.replace("<!--","").replace("// -->",""));
}.bind(window));
this._insertContent(_10.responseText.stripScripts());
}.bind(this)});
}
}else{
if(typeof this.content=="object"){
this._insertContent(this.content);
}else{
Modalbox.hide();
throw ("Please specify correct URL or HTML element (plain HTML or object)");
}
}
}
},_insertContent:function(_13){
Element.extend(this.MBcontent);
this.MBcontent.update("");
if(typeof _13=="string"){
this.MBcontent.hide().update(_13);
}else{
if(typeof this.content=="object"){
var _14=_13.cloneNode(true);
if(this.content.id){
_14.id="MB_"+_14.id;
}
this.MBcontent.hide().appendChild(_14);
this.MBcontent.down().show();
}
}
if(this.options.height==this._options.height){
Modalbox.resize(0,this.MBcontent.getHeight()-Element.getHeight(this.MBwindow)+Element.getHeight(this.MBheader),{afterResize:function(){
this.MBcontent.show();
this.focusableElements=this._findFocusableElements();
this._moveFocus();
this.event("afterLoad");
}.bind(this)});
}else{
this._setWidth();
this.MBcontent.setStyle({overflow:"auto",height:Element.getHeight(this.MBwindow)-Element.getHeight(this.MBheader)-13+"px"});
this.MBcontent.show();
this.focusableElements=this._findFocusableElements();
this._moveFocus();
this.event("afterLoad");
}
},activate:function(_15){
this.setOptions(_15);
this.active=true;
Event.observe(this.MBclose,"click",this.close);
if(this.options.overlayClose){
Event.observe(this.MBoverlay,"click",this.hide);
}
Element.show(this.MBclose);
if(this.options.inactiveFade){
new Effect.Appear(this.MBwindow,{duration:this.options.slideUpDuration});
}
},deactivate:function(_16){
this.setOptions(_16);
this.active=false;
Event.stopObserving(this.MBclose,"click",this.close);
if(this.options.overlayClose){
Event.stopObserving(this.MBoverlay,"click",this.hide);
}
Element.hide(this.MBclose);
if(this.options.inactiveFade){
new Effect.Fade(this.MBwindow,{duration:this.options.slideUpDuration,to:0.75});
}
},_initObservers:function(){
Event.observe(this.MBclose,"click",this.close);
if(this.options.overlayClose){
Event.observe(this.MBoverlay,"click",this.hide);
}
Event.observe(document,"keypress",Modalbox.kbdHandler);
},_removeObservers:function(){
Event.stopObserving(this.MBclose,"click",this.close);
if(this.options.overlayClose){
Event.stopObserving(this.MBoverlay,"click",this.hide);
}
Event.stopObserving(document,"keypress",Modalbox.kbdHandler);
},_loadAfterResize:function(){
this._setWidth();
this._setPosition();
this.loadContent();
},_moveFocus:function(){
if(this.focusableElements.length>0){
this.focusableElements.first().focus();
}else{
$("MB_close").focus();
}
},_findFocusableElements:function(){
return $A($("MB_content").descendants()).findAll(function(_17){
return (["INPUT","TEXTAREA","SELECT","A","BUTTON"].include(_17.tagName));
});
},kbdHandler:function(e){
var _19=Event.element(e);
switch(e.keyCode){
case Event.KEY_TAB:
if(Event.element(e)==this.focusableElements.last()){
Event.stop(e);
this._moveFocus();
}
break;
case Event.KEY_ESC:
if(this.active){
this._hide(e);
}
break;
case 32:
this._preventScroll(e);
break;
case 0:
if(e.which==32){
this._preventScroll(e);
}
break;
case Event.KEY_UP:
case Event.KEY_DOWN:
case Event.KEY_PAGEDOWN:
case Event.KEY_PAGEUP:
case Event.KEY_HOME:
case Event.KEY_END:
if(/Safari|KHTML/.test(navigator.userAgent)&&!["textarea","select"].include(_19.tagName.toLowerCase())){
Event.stop(e);
}else{
if((_19.tagName.toLowerCase()=="input"&&["submit","button"].include(_19.type))||(_19.tagName.toLowerCase()=="a")){
Event.stop(e);
}
}
break;
}
},_preventScroll:function(_1a){
if(!["input","textarea","select","button"].include(Event.element(_1a).tagName.toLowerCase())){
Event.stop(_1a);
}
},_deinit:function(){
this._toggleSelects();
this._removeObservers();
Event.stopObserving(window,"resize",this._setWidthAndPosition);
Effect.toggle(this.MBoverlay,"appear",{duration:this.options.overlayDuration,afterFinish:this._removeElements.bind(this)});
Element.setStyle(this.MBcontent,{overflow:"",height:""});
},_removeElements:function(){
if(navigator.appVersion.match(/\bMSIE\b/)){
this._prepareIE("","");
window.scrollTo(this.initScrollX,this.initScrollY);
}
Element.remove(this.MBoverlay);
Element.remove(this.MBwindow);
this.initialized=false;
this.event("afterHide");
this.setOptions(this._options);
},_setOverlay:function(){
if(navigator.appVersion.match(/\bMSIE\b/)){
this._prepareIE("100%","hidden");
if(!navigator.appVersion.match(/\b7.0\b/)){
window.scrollTo(0,0);
}
}
},_setWidth:function(){
Element.setStyle(this.MBwindow,{width:this.options.width+"px",height:this.options.height+"px"});
},_setPosition:function(){
this.MBwindow.style.left=Math.round((Element.getWidth(document.body)-Element.getWidth(this.MBwindow))/2)+"px";
},_setWidthAndPosition:function(){
this._setWidth();
this._setPosition();
},_getScrollTop:function(){
var _1b;
if(document.documentElement&&document.documentElement.scrollTop){
_1b=document.documentElement.scrollTop;
}else{
if(document.body){
_1b=document.body.scrollTop;
}
}
return _1b;
},_prepareIE:function(_1c,_1d){
var _1e=document.getElementsByTagName("body")[0];
_1e.style.height=_1c;
_1e.style.overflow=_1d;
var _1f=document.getElementsByTagName("html")[0];
_1f.style.height=_1c;
_1f.style.overflow=_1d;
},_toggleSelects:function(){
if(navigator.appVersion.match(/\bMSIE\b/)){
$$("select").each(function(_20){
_20.style.visibility=(_20.style.visibility=="")?"hidden":"";
});
}
},event:function(_21){
if(this.options[_21]){
var _22=this.options[_21]();
this.options[_21]=null;
if(_22!=undefined){
return _22;
}else{
return true;
}
}
return true;
}};
Object.extend(Modalbox,Modalbox.Methods);
Effect.ScaleBy=Class.create();
Object.extend(Object.extend(Effect.ScaleBy.prototype,Effect.Base.prototype),{initialize:function(_23,_24,_25,_26){
this.element=$(_23);
var _26=Object.extend({scaleFromTop:true,scaleMode:"box",scaleByWidth:_24,scaleByHeight:_25},arguments[3]||{});
this.start(_26);
},setup:function(){
this.elementPositioning=this.element.getStyle("position");
this.originalTop=this.element.offsetTop;
this.originalLeft=this.element.offsetLeft;
this.dims=null;
if(this.options.scaleMode=="box"){
this.dims=[this.element.offsetHeight,this.element.offsetWidth];
}
if(/^content/.test(this.options.scaleMode)){
this.dims=[this.element.scrollHeight,this.element.scrollWidth];
}
if(!this.dims){
this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];
}
this.deltaY=this.options.scaleByHeight;
this.deltaX=this.options.scaleByWidth;
},update:function(_27){
var _28=this.dims[0]+(this.deltaY*_27);
var _29=this.dims[1]+(this.deltaX*_27);
this.setDimensions(_28,_29);
},setDimensions:function(_2a,_2b){
var d={};
d.width=_2b+"px";
d.height=_2a+"px";
var _2d=Math.round((_2a-this.dims[0])/2);
var _2e=Math.round((_2b-this.dims[1])/2);
if(this.elementPositioning=="absolute"||this.elementPositioning=="fixed"){
if(!this.options.scaleFromTop){
d.top=this.originalTop-_2d+"px";
}
d.left=this.originalLeft-_2e+"px";
}else{
if(!this.options.scaleFromTop){
d.top=-_2d+"px";
}
d.left=-_2e+"px";
}
this.element.setStyle(d);
}});

