(function(){
	SevenBox = new Class({
		Implements: [Options, Events],
		options: {
			container: 'body',
			boxClass: 'sevenbox'
		},
		initialize: function(opt){
			this.setOptions(opt);
			this.container = (document.id(this.options.container) || document.getElement(this.options.container));
			this.setup();
		},

		setup: function(){
			this.mask = new Mask(this.container, {
				useIframeShim: true,
				onClick: this.hide.bind(this)
			});

			this.element = new Element('div', {
				'class': this.options.boxClass
			}).fade('hide').inject(this.container);

			this.contentEl = new Element('div').inject(this.element).set('tween', {
				'link': 'cancel'
			});

			this.closeBox = new Element('div', {
				'class': 'close-box'
			}).inject(this.element).addEvent('click', (function(e){
				e.stop();
				this.hide();
			}).bind(this));

			this.req = new Request.HTML({
				evalScripts: true,
				evalResponse: true,
				noCache: true,
				update: this.contentEl
			});
			return this;
		},

		show: function(){
			this.mask.show();
			this.element.fade('in').position({
				'relativeTo': this.container,
				'position': 'center',
				'edge': 'center'
			}).pin();
			return this;
		},

		hide: function(){
			this.mask.hide();
			this.element.fade('out').unpin();
			return this;
		},

		load: function(url, callback){
			callback = $lambda(callback);
			this.req.addEvent('success', function(responseTree){
				callback(responseTree);
				this.removeEvent('success', arguments.callee);
			}).post(url);
			return this;
		},

		fadeContent: function(mode, callback){
			callback = $lambda(callback);
			this.contentEl.get('tween').addEvent('complete', function(){
				callback();
				this.removeEvent('complete', arguments.callee);
			});
			this.contentEl.fade(mode);
			return this;
		}
	});
})();
