var LightFace=new Class({Implements:[Options,Events],options:{width:"auto",height:"auto",draggable:!1,title:"",buttons:[],fadeDelay:400,fadeDuration:400,keys:{esc:function(){this.close()}},content:"<p>Message not specified.</p>",zIndex:9001,pad:100,overlayAll:!1,constrain:!1,resetOnScroll:!0,baseClass:"lightface",errorMessage:"<p>The requested file could not be found.</p>"},initialize:function(a){this.setOptions(a);this.state=!1;this.buttons={};this.resizeOnOpen=!0;this.ie6=typeof document.body.style.maxHeight== "undefined";this.draw()},draw:function(){this.box=(new Element("table",{"class":this.options.baseClass,styles:{"z-index":this.options.zIndex,opacity:0},tween:{duration:this.options.fadeDuration,onComplete:function(){this.box.getStyle("opacity")==0&&this.box.setStyles({top:-9E3,left:-9E3})}.bind(this)}})).inject(document.body,"bottom");for(var a=["top","center","bottom"],b=["Left","Center","Right"],c=a.length,d=0;d<c;d++)for(var e=this.box.insertRow(d),f=0;f<c;f++){var h=a[d]+b[f],g=e.insertCell(f); g.className=h;h=="centerCenter"?(this.contentBox=new Element("div",{"class":"lightfaceContent",styles:{width:this.options.width}}),g.appendChild(this.contentBox)):document.id(g).setStyle("opacity",0.4)}if(this.options.title&&(this.title=(new Element("h4",{"class":"lightfaceTitle",html:this.options.title})).inject(this.contentBox),this.options.draggable&&window.Drag!=null))this.draggable=!0,new Drag(this.box,{handle:this.title}),this.title.addClass("lightfaceDraggable");this.messageBox=(new Element("div", {"class":"lightfaceMessageBox",html:this.options.content||"",styles:{height:this.options.height}})).inject(this.contentBox);this.footer=(new Element("div",{"class":"lightfaceFooter",styles:{display:"none"}})).inject(this.contentBox);this.overlay=(new Element("div",{html:"&nbsp;",styles:{opacity:0},"class":"lightfaceOverlay",tween:{link:"chain",duration:this.options.fadeDuration,onComplete:function(){this.overlay.getStyle("opacity")==0&&this.box.focus()}.bind(this)}})).inject(this.contentBox);this.options.overlayAll|| this.overlay.setStyle("top",this.title?this.title.getSize().y-1:0);this.buttons=[];this.options.buttons.length&&this.options.buttons.each(function(a){this.addButton(a.title,a.event,a.color)},this);this.focusNode=this.box;return this},addButton:function(a,b,c){this.footer.setStyle("display","block");var d="lightfacefocus"+c,e=new Element("label",{"class":c?"lightface"+c:"",events:{mousedown:function(){if(c){e.addClass(d);var a=function(){e.removeClass(d);document.id(document.body).removeEvent("mouseup", a)};document.id(document.body).addEvent("mouseup",a)}}}});this.buttons[a]=(new Element("input",{type:"button",value:a,events:{click:(b||this.close).bind(this)}})).inject(e);e.inject(this.footer);return this},showButton:function(a){this.buttons[a]&&this.buttons[a].removeClass("hiddenButton");return this.buttons[a]},hideButton:function(a){this.buttons[a]&&this.buttons[a].addClass("hiddenButton");return this.buttons[a]},close:function(a){if(this.isOpen)this.box[a?"setStyles":"tween"]("opacity",0),this.fireEvent("close"), this._detachEvents(),this.isOpen=!1;return this},open:function(a){if(!this.isOpen)this.box[a?"setStyles":"tween"]("opacity",1),this.resizeOnOpen&&this._resize(),this.fireEvent("open"),this._attachEvents(),function(){this._setFocus()}.bind(this).delay(this.options.fadeDuration+10),this.isOpen=!0;return this},_setFocus:function(){this.focusNode.setAttribute("tabIndex",0);this.focusNode.focus()},fade:function(a,b){this._ie6Size();(function(){this.overlay.setStyle("opacity",a||1)}).bind(this).delay(b|| 0);this.fireEvent("fade");return this},unfade:function(a){(function(){this.overlay.fade(0)}).bind(this).delay(a||this.options.fadeDelay);this.fireEvent("unfade");return this},_ie6Size:function(){if(this.ie6){var a=this.contentBox.getSize(),b=this.options.overlayAll||!this.title?0:this.title.getSize().y;this.overlay.setStyles({height:a.y-b,width:a.x})}},load:function(a,b){a&&this.messageBox.set("html",a);b&&this.title&&this.title.set("html",b);this.fireEvent("complete");return this},_attachEvents:function(){this.keyEvent= function(a){this.options.keys[a.key]&&this.options.keys[a.key].call(this)}.bind(this);this.focusNode.addEvent("keyup",this.keyEvent);this.resizeEvent=this.options.constrain?function(){this._resize()}.bind(this):function(){this._position()}.bind(this);window.addEvent("resize",this.resizeEvent);if(this.options.resetOnScroll)this.scrollEvent=function(){this._position()}.bind(this),window.addEvent("scroll",this.scrollEvent);return this},_detachEvents:function(){this.focusNode.removeEvent("keyup",this.keyEvent); window.removeEvent("resize",this.resizeEvent);this.scrollEvent&&window.removeEvent("scroll",this.scrollEvent);return this},_position:function(){var a=window.getSize(),b=window.getScroll(),c=this.box.getSize();this.box.setStyles({left:b.x+(a.x-c.x)/2,top:b.y+(a.y-c.y)/2});this._ie6Size();return this},_resize:function(){var a=this.options.height;if(a=="auto"){var b=window.getSize().y-this.options.pad;this.contentBox.getSize().y>b&&(a=b)}this.messageBox.setStyle("height",a);this._position()},toElement:function(){return this.messageBox}, getBox:function(){return this.box},destroy:function(){this._detachEvents();this.buttons.each(function(a){a.removeEvents("click")});this.box.dispose();delete this.box}}); LightFace.IFrame=new Class({Extends:LightFace,options:{url:""},initialize:function(a){this.parent(a);this.options.url&&this.load()},load:function(a,b){this.fade();if(!this.iframe)this.messageBox.set("html",""),this.iframe=(new IFrame({styles:{width:"100%",height:"100%"},events:{load:function(){this.unfade();this.fireEvent("complete")}.bind(this)},border:0})).inject(this.messageBox),this.messageBox.setStyles({padding:0,overflow:"hidden"});b&&this.title.set("html",b);this.iframe.src=a||this.options.url; this.fireEvent("request");return this}}); LightFace.Image=new Class({Extends:LightFace,options:{constrain:!0,url:""},initialize:function(a){this.parent(a);this.url="";this.resizeOnOpen=!1;this.options.url&&this.load()},_resize:function(){var a=window.getSize().y-this.options.pad,b=document.id(this.image).retrieve("dimensions");if(b.y>a)this.image.height=a,this.image.width=b.x*(a/b.y),this.image.setStyles({height:a,width:(b.x*(a/b.y)).toInt()});this.messageBox.setStyles({height:"",width:""});this._position()},load:function(a,b){var c={x:"", y:""};this.image&&(c=this.image.getSize());this.messageBox.set("html","").addClass("lightFaceMessageBoxImage").setStyles({width:c.x,height:c.y});this._position();this.fade();this.image=new Element("img",{events:{load:function(){(function(){var a=function(){this.image.inject(this.messageBox).store("dimensions",this.image.getSize())}.bind(this);a();this._resize();a();this.unfade();this.fireEvent("complete")}).bind(this).delay(10)}.bind(this),error:function(){this.fireEvent("error");this.image.destroy(); delete this.image;this.messageBox.set("html",this.options.errorMessage).removeClass("lightFaceMessageBoxImage")}.bind(this),click:function(){this.close()}.bind(this)},styles:{width:"auto",height:"auto"}});this.image.src=a||this.options.url;b&&this.title&&this.title.set("html",b);return this}}); LightFace.Request=new Class({Extends:LightFace,options:{url:"",request:{url:!1}},initialize:function(a){this.parent(a);this.options.url&&this.load()},load:function(a,b){var c=(Object.append||$extend)({onRequest:function(){this.fade();this.fireEvent("request")}.bind(this),onSuccess:function(a){this.messageBox.set("html",a);this.fireEvent("success")}.bind(this),onFailure:function(){this.messageBox.set("html",this.options.errorMessage);this.fireEvent("failure")}.bind(this),onComplete:function(){this._resize(); this._ie6Size();this.messageBox.setStyle("opacity",1);this.unfade();this.fireEvent("complete")}.bind(this)},this.options.request);b&&this.title&&this.title.set("html",b);if(!c.url)c.url=a||this.options.url;(new Request(c)).send();return this}});LightFace.Static=new Class({Extends:LightFace,options:{offsets:{x:20,y:20}},open:function(a,b,c){this.parent(a);this._position(b,c)},_position:function(a,b){a!=null&&this.box.setStyles({top:b-this.options.offsets.y,left:a-this.options.offsets.x})}});
