var Dialog=Class.create({class_name:'dialog-window',title:'',width:100,height:100,content:'',id:'',is_draggable:true,close_link_id:'',content_container_id:'',html_source:'<div style="position: absolute; left: #{left_position}px; top: #{top_position}px; width: #{width}px; height: #{height}px; display: none;" class="#{class_name}"><h4><a>close</a>#{title}</h4><div class="-content-container"><div style="display: none;">#{content}</div></div></div>',initialize:function(content,options){this.content=content;this.title=options.title;if(!isNaN(options.height))this.height=options.height;if(!isNaN(options.width))this.width=options.width},selectElements:function(css_selector){return $(this.content_container_id).select(css_selector)},show:function(){if(!$(this.id)){this.build()}else{this.revertPosition()}Effect.Appear($(this.id),{duration:.25,afterFinish:this.displayContent.bind(this)})},build:function(){var template=new Template(this.html_source);var html=template.evaluate(this.getBuildObject());Element.insert($$('body').first(),{bottom:html});this.id=Element.childElements($$('body').first()).last().identify();var dialog=$(this.id);var close_link=$$('#'+this.id+' h4 a').first();if(close_link){this.close_link_id=close_link.identify()}var content_container=$$('#'+this.id+' div div').first();if(content_container){this.content_container_id=content_container.identify()}this.setupObservers();if(this.is_draggable){new Draggable(this.id,{handle:$(this.id).select('h4').first()})}},hide:function(){Effect.Fade($(this.id),{duration:.25})},remove:function(){Element.remove(this.id)},getBuildObject:function(){var positions=this.getDialogOffsets();return{class_name:this.class_name,title:this.title,height:this.height,width:this.width,left_position:positions.left,top_position:positions.top,content:this.content}},getDialogOffsets:function(){var offsets={left:0,top:0};offsets.left=((document.viewport.getWidth()-this.width)/2)+document.viewport.getScrollOffsets().left;offsets.top=((document.viewport.getHeight()-this.height)/2)+document.viewport.getScrollOffsets().top;return offsets},setupObservers:function(){if($(this.close_link_id)){Event.observe(this.close_link_id,'click',this.hide.bindAsEventListener(this));Event.observe(this.close_link_id,'mouseover',function(e){$(this.close_link_id).setStyle({cursor:'pointer'})}.bindAsEventListener(this))}},appendContent:function(content){if(Object.isElement($(content))){$(this.content_container_id).appendChild(node);$(this.content_container_id).childElements().last().relativize()}else if(Object.isString(content)){Element.insert(this.content_container_id,{bottom:content})}},appendContentElement:function(node){$(this.content_container_id).appendChild(node);$(this.content_container_id).childElements().last().relativize()},setContent:function(content){if(Object.isElement($(content))){$(this.content_container_id).childElements.each(function(child){child.remove()}.bind(this));this.appendContent(content)}else if(Object.isString(content)){Element.update(this.content_container_id,content)}},revertPosition:function(){var offsets=this.getDialogOffsets();$(this.id).setStyle({left:offsets.left+'px',top:offsets.top+'px'})},displayContent:function(){if(!$(this.content_container_id).visible()){var content_height=this.height-$(this.id).select('h4').first().getHeight();$(this.content_container_id).ancestors().first().setStyle({height:content_height+'px'});$(this.content_container_id).show()}},overlay:function(object){object=$(object);var offsets=object.cumulativeOffset();var dimensions=object.getDimensions();$(this.id).setStyle({left:offsets.left+'px',top:offsets.top+'px',height:dimensions.height+'px',width:dimensions.width+'px'})},moveTo:function(location){if(!isNaN(location.left)){$(this.id).setStyle({left:location.left+'px'})}if(!isNaN(location.top)){$(this.id).setStyle({top:location.top+'px'})}},resize:function(size){if(!isNaN(size.height)){}if(!isNaN(size.width)){$(this.id).setStyle({width:size.width+'px'})}}});