var WK = WK || {};
WK.Lightbox = function(content)
{
	this._content = content;
}
WK.Lightbox.prototype = {
	_content: null,
	_contentElt: null,
	_flashObjs: null,
	_overlay: null,

	// customization
	_onHide: null,
	_onShow: null,
	_width: null,
	_height: null,
	_absolute: false,
	_modal: false,
	_customClass: null,
	_destroyOnHide: null,

	onHide: function(funcName)
	{
		this._onHide = funcName;
		return this;
	},
	
	onShow: function(funcName)
	{
		this._onShow = funcName;
		return this;
	},
	
	setDimensions: function(width, height)
	{
		this._width = width;
		this._height = height;
	},
	
	center: function()
	{
		// get dimensions
		var windowWidth = document.documentElement.clientWidth;
		var windowHeight = document.documentElement.clientHeight;
		var width = (this._height > 0) ? this._height : this._popupElt.width();

		// centering
		var left = windowWidth/2 - width/2;
		
		// fix ie6 positioning
		if ($.browser.msie && parseInt($.browser.version) == 6)
		{
			this._overlay.css({'height': $('body').height()});
			this._popupElt.css({
				'top': $('body, html').scrollTop() + 'px',
				"left": (left > 0) ? left : 0
			});
		}
		else
		{
			this._popupElt.css(
			{
				"top": '5%',
				"left": (left > 0) ? left : 0
			});
		}
	},
	
	show: function()
	{
		this._disableFlash();
		
		if (this._overlay && this._popupElt)
		{
			this._overlay.show();
			this._popupElt.show();
		}
		else {
			var self = this;
			var overlay = $(document.createElement('div'))
			overlay.addClass('wk_lightbox_overlay');
			
			if (this._modal == false) {
				overlay.click(function()
				{
					self.hide();
				});
			}
	
			$('body').append(overlay);
	
			this._overlay = overlay;
	
			// create inside div
			this._createContentElt();
			
			// bind 'hide' to esc
			if (this._modal == false) {
				$(document).keypress(function(e)
				{
					if(e.keyCode == 27){
						return self.hide();
					}
				});
			}
			
			// call onShow function
			if (typeof(this._onShow) == 'function')
			{
				this._onShow();
			}
		}

		return false;
	},
	
	hide: function(destroy)
	{
		if (this._overlay && this._popupElt) {
			this._enableFlash();
			
			// remove elements
			if (destroy || this._destroyOnHide)
			{
				this._overlay.remove();
				this._popupElt.remove();			
			}
			else
			{
				this._overlay.hide();
				this._popupElt.hide();
			}
			
			// unbind keypress
			$(document).unbind('keypress');
			
			// call onHide function
			if (typeof(this._onHide) == 'function')
			{
				this._onHide();
			}
		}

		return false;
	},
	
	destroy: function()
	{
		this.hide(true);
	},

	_disableFlash: function()
	{
		var self = this;
		self._flashObjs = [];
		self._flashReplacements = [];

		// iterate through all flash objects
		$('object, embed').each(function()
		{
			var flash = $(this);
			if ($.browser.msie)
			{
				var replacement = $(document.createElement('div')).height(flash.height()).width(flash.width()).addClass('wk_lightbox_replacement');
				self._flashReplacements[self._flashReplacements.length] = replacement;
				replacement.insertAfter(flash);
				flash.css({
					'position': 'absolute',
					'top': '-2000px',
					'left' : '-2000px'
				});
			}
			else
			{
				flash.css('visibility', 'hidden');
			}

			// store for enablement
			self._flashObjs[self._flashObjs.length] = flash;
		});
	},
	
	_enableFlash: function()
	{
		if (this._flashObjs)
		{
			// re-enable all flash objects
			for (var i = 0; i < this._flashObjs.length; i++)
			{
				var flash = this._flashObjs[i];
				if ($.browser.msie)
				{
					flash.css('position', 'static');
					this._flashReplacements[i].remove();
				}
				else
				{
					flash.css('visibility', 'visible');
				}
			}
			
			// reset flash objects
			this._flashObjs = [];
			this._flashReplacements = [];
		}
	},

	_createContentElt: function()
	{
		var popup = $(document.createElement('div'));
		popup.addClass('wk_lightbox_popup');
		if (this._customClass != null) {
			popup.addClass(this._customClass);
		}
		
		var contentElt = $(document.createElement('div'));
		contentElt.html(this._content);
		contentElt.addClass('wk_lightbox_content');
		contentElt.appendTo(popup);

		// render outside the visible pane to get dimensions
		popup.css({'top': '-2000px'});
		popup.appendTo('body');
		
		if (this._absolute == true) {
			popup.css({'position': 'absolute'});	
		}

		this._popupElt = popup;
		
		this.center();
		if (this._content && this._modal == false)
		{
			this._createCloseButton();
		}
	},
	
	_createCloseButton: function()
	{
		var self = this;
		var button = $(document.createElement('a'));
		button.html('close');
		button.attr('alt', 'close');
		button.attr('href', '#');
		button.addClass('wk_lightbox_close');
		button.click(function()
		{
			self.hide();
			return false;
		});
		
		button.appendTo(this._popupElt);
	}
};