var Modal = new Class({
	Implements: [Events,Options],
	options: {
		target: $(document.body),
		dimmer: true,
		dimmerId: 'modalDimmer',
		dimmerOpacity: .5,
		center: true,
		modalId: 'modalWindow',
		autoClose: false,
		windowDelay: 5000,
		onShow: $empty
	},
	initialize: function(content,options){
		this.setOptions(options);
		this.options.target = ($(this.options.target)) ? $(this.options.target) : $(document.body);
		
		if(this.options.dimmer) this.createDimmer();
		this.createWindow(content);
		
		return this;
	},
	createWindow: function(content){
		this.modalWindow = new Element('div',{
			'id':this.options.modalId
		}).inject(this.options.target);
		
		this.modalWindow.fade('hide');		
		if(this.options.center) {
			this.centerWindow();
			window.addEvent('scroll',this.centerWindow.bindWithEvent(this));
		}
		this.modalWindow.fade('in');		
		$(content).inject(this.modalWindow);
		
		if(this.options.autoClose){
			this.close.delay(this.options.windowDelay,this);
		}		
		
		this.fireEvent('onShow',this);
		
	},
	centerWindow: function(){
		var windowSize = window.getSize();
		var windowWidth = windowSize.x;
		var windowHeight = windowSize.y;
		
		var modalWindowCoords = this.modalWindow.getCoordinates();
		var scrollOffset = window.getScroll().y;
		var left = (windowWidth - modalWindowCoords.width) / 2;
		var top = (windowHeight - modalWindowCoords.height) / 2;
		this.modalWindow.setStyles({
			'top':top + scrollOffset,
			'left':left
		});
	},
	createDimmer: function(){
		var inputs = $(document.body).getElements('form select')
		inputs.each(function(el){
			el.fade('out')
		})
		var scrollSize = window.getScrollSize();
		this.dimmer = new Element('div',{
			'id':this.options.dimmerId,
			'styles':{
				'width':scrollSize.x,
				'height':scrollSize.y,
				'opacity': 0
			},
			'events':{
				'click':this.close.bind(this)
			}
		}).inject(this.options.target);
		this.dimmer.fade(this.options.dimmerOpacity);
		
	},
	close: function(){
		if(this.modalWindow){
			new Fx.Morph(this.modalWindow,{
				onComplete: function(){
					this.closeModalWindow();
				}.bind(this)
			}).start({
				'opacity':0
			});
		}
		
		if(this.dimmer){
			var fadeOutDimmer = new Fx.Morph(this.dimmer,{
				onComplete: function(){
					this.closeDimmer();
				}.bind(this)
			}).start({
				'opacity':0
			});
		}
		var inputs = $(document.body).getElements('form select')
		inputs.each(function(el){
			el.fade('in')
		})
	},
	closeDimmer: function(){
		if(this.dimmer) this.dimmer.destroy();
	},
	closeModalWindow: function(){
		if(this.modalWindow) this.modalWindow.destroy();
	}
});