var Lightbox = Class.create();
Lightbox.prototype = {
	initialize: function() {
		this.animate = false;
		this.opacity = 0.5;
		this.speed = 0.4;
		this.createOverlay = false;
		
		Element.extend(document.body);
		Element.extend(document.viewport);
	},
	create: function() {
		var thisObj = this;
		
		Element.extend(document.body);
		Element.extend(document.viewport);
		
		document.body.style.overflow = "hidden";
		document.getElementsByTagName("html")[0].style.overflow = "hidden";
		
		var viewportSize = document.viewport.getDimensions();
		var scrollOffset = document.body.cumulativeScrollOffset(); 
		
		if(this.createOverlay) {
			var overlay = new Element('div', { 
				'id': 'lightboxOverlay',
				'style': 'display:none;width:100%;height:'+viewportSize.height+'px;left:'
				+scrollOffset.left+'px;top:'+scrollOffset.top+'px;'
			});
			document.body.insert({ bottom: overlay });
			
			Event.observe(overlay, 'click', function() { this.hide(); }.bind(this));
			
			Event.observe(window, 'resize', function() {
				if($('lightboxOverlay')) {
					var viewportSize = document.viewport.getDimensions();
					$('lightboxOverlay').style.height = viewportSize.height+'px';
				}
			});
		}
		
		var loading = new Element('div', { 'id':'lightboxLoading', 'style':'display:none;' });
		loading.update('<p>Loading ......</p>');
		document.body.insert({ bottom: loading });
		this._centerize($('lightboxLoading'));
		
		var wrapper = new Element('div', { 'id': 'lightbox', 'style': 'display:none;' });
		document.body.insert({ bottom: wrapper });
		var closeButton = new Element('a', { 'id': 'lightboxClose' });
		closeButton.onclick = function() {
			thisObj.hide();
		}
		$('lightbox').insert({ top: new Element('div', { 'id': 'lightboxHeader' }).update(closeButton) });
		$('lightbox').insert({ bottom: new Element('div', { 'id': 'lightboxContent' }) });
	},
	show: function(url, type, params) {	
		var thisObj = this;
		
		this.create();
		
		if(this.createOverlay) {
			//new Effect.Appear('lightboxOverlay', { duration:thisObj.speed, from:0, to:thisObj.opacity, queue:'front' });
			$('lightboxOverlay').show();
		}
		
		$('lightboxLoading').show();
		
		if(type == "image") {
			var imgPreloader = new Image();
			imgPreloader.onload = function(){
				var imgWrapper = new Element('div', { 'style': 'padding: 20px;' });
				var img = new Element('img', { 'src': this.src, style: 'display:block' });
				imgWrapper.update(img);
				$('lightboxContent').update(imgWrapper);
				thisObj.resize();
				imgPreloader.onload = function(){}; 
			}
			imgPreloader.src = url;
		}
		
		if(params != undefined) {
			if(params.width < 1) {
				var viewPortSize = document.viewport.getDimensions();
				params.width = viewPortSize.width*params.width;
			}
			
			if(params.height < 1) {
				var viewPortSize = document.viewport.getDimensions();
				params.height = viewPortSize.height*params.height;
			}
		}
		
		if(type == "iframe") {
			var iframe = new Element('iframe', { 
				'frameborder':0, 'src':url, 'width':params.width, 'height':params.height,
				'style':'border:0;'
			});
			$('lightboxContent').update(iframe);
			thisObj.resize();
		}
		
		if(type == "ajax") {
			if(params.padding == undefined) params.padding = 15;
			var ajaxWrapper = new Element('div', { 
				'id': 'lightboxAjaxWrapper',
				'style': 'width:'+params.width+'px;height:'+params.height+'px;padding:'+params.padding+'px;'
			});
			$('lightboxContent').insert(ajaxWrapper, 'bottom');
			new Ajax.Updater('lightboxAjaxWrapper', url, {
				method: 'get',
				evalScripts: true,
				onComplete: function(transport) {
					thisObj.resize();
				}
			});
		}
	},
	hide: function() {
		document.body.style.overflow = "auto";
		document.getElementsByTagName("html")[0].style.overflow = "auto";
		
		if(this.createOverlay) $('lightboxOverlay').remove();
		$('lightbox').remove();
	},
	resize: function() {
		$('lightboxLoading').hide();
		this._centerize($('lightbox'));		
		new Effect.Appear('lightbox', { duration:this.speed, queue:'end' });
	},
	_centerize: function(object)
	{
		var viewportSize = document.viewport.getDimensions();
		var scrollOffset = document.body.cumulativeScrollOffset();
		var objectSize = object.getDimensions();
		
		object.style.top = ((viewportSize.height-(objectSize.height))/2)+scrollOffset.top+'px';
		object.style.left = ((viewportSize.width-(objectSize.width))/2)+scrollOffset.left+'px';
	}
}
/*
function initLightbox() { myLightbox = new Lightbox(); }
Event.observe(window, 'load', initLightbox, false);
*/
myLightbox = new Lightbox();