var Lightbox = new Class({
	
	initialize: function() {
		var links = $(document.body).getElements('a[target=lightbox]');
		$each(links, function(item){
			item.addEvent('click', function(e){
				e.stop();
				var url = item.get('href');
				lightbox.get(url);
			});
		});
	},
	
	get: function(url) {
		this.request = new Request({url: url, link: 'cancel', evalScripts: false, onSuccess: function (responseText) {
			if (!$chk($(document.body).getElement('div.lightbox-shadow')))
				lightbox.show(responseText);
		}}).send();
	},
	
	show: function(responseText) {
		var obj = this;
		// Window size
		var winx = window.getSize().x;
		var winy = window.getScrollSize().y;
		// Background Shadow
		this.shadow = new Element('div', {'class': 'lightbox-shadow', 'styles': {
			'width': winx, 
			'height': winy, 
			'background-color': '#000', 
			'z-index': 5000, 
			'position': 'absolute', 
			'top': 0,
			'left': 0,
			'opacity': 0
		}}).inject($(document.body));
		new Fx.Tween(this.shadow, {'property': 'opacity'}).start(0.8);
		// Box
		this.box = new Element('div', {'class': 'lightbox', 'style': 'z-index: 5005;'}).inject(this.shadow, 'after');
		this.result = new Element('div').inject(this.box);
		// Inject content
		if (responseText.test('json')) {
			responseJSON = JSON.decode(responseText);
			this.result.addClass('slideshow').set('html', responseJSON.html);
			this.slideshow(JSON.decode(responseText).json);
		} else {
			this.result.set('html', responseText);
			box.setStyles({'left':((winx-box.getSize().x)/2)});
		}
		// Close
		if ($chk(this.result.getElement('a[target=close]')))
			this.result.getElement('a[target=close]').addEvent('click', function(e) {
			   e.stop();
			   obj.close();
			});
	},

	close: function (button) {
		var obj = this;
		new Fx.Tween(this.shadow, {'property': 'opacity', onComplete: function() {
			obj.shadow.destroy();
		}}).start(0);
		this.box.destroy();
	},
	
	slideshow: function(responseJSON) {
		var obj = this;
		var pos = 0;
		var imgs = new Array();
		$each(responseJSON, function(item, index) {
			imgs[index-1] = item;
		});
		this.images = new Asset.images(imgs, {onComplete: function() {
			// Insert first image
			obj.images[0].replaces(obj.result.getElement('div'));
			// Next
			obj.result.getElement('a[target=next]').addEvent('click', function(e) {
				e.stop();
				pos++;
				if (pos==obj.images.length) pos=0;
				obj.images[pos].replaces(obj.result.getElement('img'));
			});
			// Previous
			obj.result.getElement('a[target=previous]').addEvent('click', function(e) {
				e.stop();
				pos--;
				if (pos<0) pos=obj.images.length-1;
				obj.images[pos].replaces(obj.result.getElement('img'));
			});
		}});
	}

});

var lightbox;
window.addEvent('domready', function() {
	lightbox = new Lightbox;
});
